MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxFindPortFromVIDPID

Function fxFindPortFromVIDPID

tools/serial2xsbug/serial2xsbug_win.c:329–377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

327}
328
329static int fxFindPortFromVIDPID(int VID, int PID)
330{
331 HDEVINFO info;
332 SP_DEVINFO_DATA data;
333 DEVPROPTYPE propertyType;
334 DWORD index = 0;
335 DWORD size = 0;
336 char buffer[1024] = {0};
337 int portNum = -1;
338
339 char searchName[25];
340 sprintf(searchName, "VID_%04X&PID_%04X&", VID, PID);
341
342 info = SetupDiGetClassDevs(NULL, "USB", NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
343 if (info == INVALID_HANDLE_VALUE)
344 return -1;
345
346 data.cbSize = sizeof(SP_DEVINFO_DATA);
347
348 while (SetupDiEnumDeviceInfo(info, index, &data)) {
349 index++;
350
351 if (SetupDiGetDeviceRegistryProperty(info, &data, SPDRP_HARDWAREID, &propertyType, buffer, sizeof(buffer), &size)) {
352 if ( !strstr(buffer, searchName))
353 continue;
354
355 HKEY key = SetupDiOpenDevRegKey(info, &data, DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ);
356
357 if (key == INVALID_HANDLE_VALUE)
358 continue;
359
360 char portName[20];
361 DWORD type = 0;
362
363 if ( (RegQueryValueEx(key, "PortName", NULL, &type, portName, &size) == ERROR_SUCCESS) && type == REG_SZ) {
364 if ( strncmp( portName, "COM", 3) == 0) {
365 portNum = atoi( portName + 3);
366 }
367 }
368
369 RegCloseKey(key);
370 }
371 }
372
373 if (info)
374 SetupDiDestroyDeviceInfoList(info);
375
376 return portNum;
377}
378
379int main(int argc, char* argv[])
380{

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected