USB kamera i Visual Studio
HejEr ved at lave et projekt hvor vi skal indlæse billeder fra et USB kamera. Koden skrives i C og har forsøgt mig med nogle eksempler jeg har fundet på nettet men ikke rigtigt lykkedes at få hul igennem endnu. Kan ikke rigtigt blive klog på om det er muligt at bruge HID klassen til et webkamera. Kunne godt tyde på at jeg ikke kan da jeg aldrig får VID eller PID på kameraet. Har indsat test koden jeg har forsøgt med underneden. Håber der er nogen der ved nogen om problemet.
På forhånd tak
#include "SPEC.h"
#include <stdio.h>
#include <windows.h>
#include <Winbase.h>
#include <Windef.h>
#include CAMERA_CONTROL
//#include HIDSDI
//extern "C"
//{
#include SETUP_API
//#include "hidclass.h"
//}
HDEVINFO hDeviceInfo;
GUID HidGuid;
HANDLE DeviceHandle = 0;
HANDLE hComm = 0;
HINSTANCE hHID = NULL;
BOOLEAN Result;
SP_DEVICE_INTERFACE_DATA MyDeviceInterfaceData;
PSP_DEVICE_INTERFACE_DETAIL_DATA DetailData;
u16 MemberIndex;
u32 Length;
u8 test = 0;
u16 error;
u8 testHID[] = "USB\VID_046D&PID_08A9&MI_01\6&16584B9B&0&0001";
int main(void)
{
//Pointers to a function are used, therefore:
typedef VOID (__stdcall *PHidD_GetProductString)(HANDLE, PVOID, ULONG);
typedef VOID (__stdcall *PHidD_GetHidGuid)(LPGUID);
//typedef BOOLEAN (__stdcall *PHidD_GetAttributes)(HANDLE, PHIDD_ATTRIBUTES);
typedef BOOLEAN (__stdcall *PHidD_SetFeature)(HANDLE, PVOID, ULONG);
typedef BOOLEAN (__stdcall *PHidD_GetFeature)(HANDLE, PVOID, ULONG);
PHidD_GetProductString HidD_GetProductString = NULL;
PHidD_GetHidGuid HidD_GetHidGuid = NULL;
//PHidD_GetAttributes HidD_GetAttributes = NULL;
PHidD_SetFeature HidD_SetFeature = NULL;
PHidD_GetFeature HidD_GetFeature = NULL;
//Load the library:
hHID = LoadLibrary("HID.DLL");
if (!hHID){
printf("Failed to load HID.DLL.");
}
//Update the pointers:
HidD_GetProductString = (PHidD_GetProductString)
GetProcAddress(hHID, "HidD_GetProductString");
HidD_GetHidGuid = (PHidD_GetHidGuid)
GetProcAddress(hHID, "HidD_GetHidGuid");
//HidD_GetAttributes = (PHidD_GetAttributes)
// GetProcAddress(hHID, "HidD_GetAttributes");
HidD_SetFeature = (PHidD_SetFeature)
GetProcAddress(hHID, "HidD_SetFeature");
HidD_GetFeature = (PHidD_GetFeature)
GetProcAddress(hHID, "HidD_GetFeature");
MemberIndex = 0;
MyDeviceInterfaceData.cbSize = sizeof(MyDeviceInterfaceData);
//SetupDiGetClassDevs();
HidD_GetHidGuid(&HidGuid);
//SetupDiClassGuidsFromName("USB", &HidGuid, 1, &Length);
hDeviceInfo = SetupDiGetClassDevs(&HidGuid,
NULL,
NULL,
DIGCF_PRESENT|DIGCF_INTERFACEDEVICE);
if (hDeviceInfo == INVALID_HANDLE_VALUE){
while(test < 10){
test += 1;}
}
Result = SetupDiEnumDeviceInterfaces(hDeviceInfo,
0,
&HidGuid,
MemberIndex,
&MyDeviceInterfaceData);
Result = SetupDiGetDeviceInterfaceDetail(hDeviceInfo,
&MyDeviceInterfaceData,
NULL,
0,
&Length,
NULL);
DetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(Length);
DetailData ->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
Result = SetupDiGetDeviceInterfaceDetail(hDeviceInfo,
&MyDeviceInterfaceData,
DetailData,
Length,
&Length,
NULL);
SetupDiDestroyDeviceInfoList(hDeviceInfo);
DeviceHandle = CreateFile(DetailData->DevicePath,
GENERIC_READ,
FILE_SHARE_READ,/* | FILE_SHARE_WRITE, */
NULL,
OPEN_EXISTING,
NULL,
NULL);
if(DeviceHandle == INVALID_HANDLE_VALUE){
printf("could not open handle");
}
while(1)
{
}
}