only match one interface, not all three when detecting devices on linux and darwin
authorLars Op den Kamp <lars@opdenkamp.eu>
Wed, 29 Aug 2012 11:36:24 +0000 (13:36 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Wed, 29 Aug 2012 11:49:47 +0000 (13:49 +0200)
src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp

index 9789bf70eb150376bf61ddbd463b5122e3da5ac2..04daf46af2b8a226fd91ee2ddcd863f6629ad460 100644 (file)
@@ -186,12 +186,15 @@ uint8_t CUSBCECAdapterDetection::FindAdapters(cec_adapter *deviceList, uint8_t i
             if (!strDevicePath || !strcmp(bsdPath, strDevicePath))
             {
               // on darwin, the device path is the same as the comm path.
-              snprintf(deviceList[iFound  ].path, sizeof(deviceList[iFound].path), "%s", bsdPath);
-              snprintf(deviceList[iFound++].comm, sizeof(deviceList[iFound].path), "%s", bsdPath);
+              if (iFound == 0 || strcmp(deviceList[iFound].comm, bsdPath))
+              {
+                snprintf(deviceList[iFound  ].path, sizeof(deviceList[iFound].path), "%s", bsdPath);
+                snprintf(deviceList[iFound++].comm, sizeof(deviceList[iFound].path), "%s", bsdPath);
+              }
             }
           }
         }
-             IOObjectRelease(serialService);
+        IOObjectRelease(serialService);
       }
     }
     IOObjectRelease(serialPortIterator);
@@ -232,7 +235,7 @@ uint8_t CUSBCECAdapterDetection::FindAdapters(cec_adapter *deviceList, uint8_t i
       if (!strDevicePath || !strcmp(strPath.c_str(), strDevicePath))
       {
         CStdString strComm(strPath);
-        if (FindComPort(strComm))
+        if (FindComPort(strComm) && (iFound == 0 || strcmp(deviceList[iFound].comm, strComm.c_str())))
         {
           snprintf(deviceList[iFound  ].path, sizeof(deviceList[iFound].path), "%s", strPath.c_str());
           snprintf(deviceList[iFound++].comm, sizeof(deviceList[iFound].path), "%s", strComm.c_str());