X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FAdapterDetection.cpp;h=5d957a7a0150300bcd582a49616077e79f81e6b2;hb=2b32d0ab4a65fd7ac86072285e87972e1131b98a;hp=e21d3dc20808a9b2d334b60da8588a0cf8507a9b;hpb=3424a2f327e569e92c7282c6e643536984a65c64;p=deb_libcec.git diff --git a/src/lib/AdapterDetection.cpp b/src/lib/AdapterDetection.cpp index e21d3dc..5d957a7 100644 --- a/src/lib/AdapterDetection.cpp +++ b/src/lib/AdapterDetection.cpp @@ -100,9 +100,9 @@ bool FindComPort(CStdString &strLocation) } #endif -int CAdapterDetection::FindAdapters(vector &deviceList, const char *strDevicePath /* = NULL */) +uint8_t CAdapterDetection::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) { - int iFound(0); + uint8_t iFound(0); #if !defined(__WINDOWS__) struct udev *udev; @@ -111,7 +111,7 @@ int CAdapterDetection::FindAdapters(vector &deviceList, const char struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; - struct udev_device *dev; + struct udev_device *dev, *pdev; enumerate = udev_enumerate_new(udev); udev_enumerate_scan_devices(enumerate); devices = udev_enumerate_get_list_entry(enumerate); @@ -124,32 +124,27 @@ int CAdapterDetection::FindAdapters(vector &deviceList, const char if (!dev) continue; - dev = udev_device_get_parent(udev_device_get_parent(dev)); - if (!dev) - continue; - if (!udev_device_get_sysattr_value(dev,"idVendor") || !udev_device_get_sysattr_value(dev, "idProduct")) + pdev = udev_device_get_parent(udev_device_get_parent(dev)); + if (!pdev || !udev_device_get_sysattr_value(pdev,"idVendor") || !udev_device_get_sysattr_value(pdev, "idProduct")) { udev_device_unref(dev); continue; } int iVendor, iProduct; - sscanf(udev_device_get_sysattr_value(dev, "idVendor"), "%x", &iVendor); - sscanf(udev_device_get_sysattr_value(dev, "idProduct"), "%x", &iProduct); + sscanf(udev_device_get_sysattr_value(pdev, "idVendor"), "%x", &iVendor); + sscanf(udev_device_get_sysattr_value(pdev, "idProduct"), "%x", &iProduct); if (iVendor == CEC_VID && iProduct == CEC_PID) { - CStdString strPath(udev_device_get_syspath(dev)); - if (strDevicePath && strcmp(strPath.c_str(), strDevicePath)) - continue; - - CStdString strComm(strPath); - if (FindComPort(strComm)) + CStdString strPath(udev_device_get_syspath(pdev)); + if (!strDevicePath || !strcmp(strPath.c_str(), strDevicePath)) { - cec_adapter foundDev; - foundDev.path = strPath; - foundDev.comm = strComm; - deviceList.push_back(foundDev); - ++iFound; + CStdString strComm(strPath); + if (FindComPort(strComm)) + { + snprintf(deviceList[iFound ].path, sizeof(deviceList[iFound].path), "%s", strPath.c_str()); + snprintf(deviceList[iFound++].comm, sizeof(deviceList[iFound].path), "%s", strComm.c_str()); + } } } udev_device_unref(dev); @@ -174,7 +169,7 @@ int CAdapterDetection::FindAdapters(vector &deviceList, const char BOOL bResult = true; TCHAR *buffer = NULL; PSP_DEVICE_INTERFACE_DETAIL_DATA devicedetailData; - while(bResult) + while(bResult && iFound < iBufSize) { bResult = SetupDiEnumDeviceInfo(hDevHandle, iMemberIndex, &devInfoData); @@ -217,8 +212,8 @@ int CAdapterDetection::FindAdapters(vector &deviceList, const char CStdString strVendorId; CStdString strProductId; CStdString strTmp(devicedetailData->DevicePath); - strVendorId = strTmp.substr(strTmp.Find("vid_") + 4, 4); - strProductId = strTmp.substr(strTmp.Find("pid_") + 4, 4); + strVendorId.assign(strTmp.substr(strTmp.Find("vid_") + 4, 4)); + strProductId.assign(strTmp.substr(strTmp.Find("pid_") + 4, 4)); if (strTmp.Find("&mi_") >= 0 && strTmp.Find("&mi_00") < 0) continue; @@ -243,11 +238,8 @@ int CAdapterDetection::FindAdapters(vector &deviceList, const char if (_tcslen(strPortName) > 3 && _tcsnicmp(strPortName, _T("COM"), 3) == 0 && _ttoi(&(strPortName[3])) > 0) { - cec_adapter foundDev; - foundDev.path = devicedetailData->DevicePath; - foundDev.comm = strPortName; - deviceList.push_back(foundDev); - ++iFound; + snprintf(deviceList[iFound ].path, sizeof(deviceList[iFound].path), "%s", devicedetailData->DevicePath); + snprintf(deviceList[iFound++].comm, sizeof(deviceList[iFound].path), "%s", strPortName); } }