diff options
author | Antoine Brodin <antoine@FreeBSD.org> | 2013-06-09 07:07:17 +0000 |
---|---|---|
committer | Antoine Brodin <antoine@FreeBSD.org> | 2013-06-09 07:07:17 +0000 |
commit | ab72a971263d5362699dde68f981643baee1f922 (patch) | |
tree | 31e355101015e17faab79d9c236d052d3bd6fdc4 /multimedia/libcec/files | |
parent | 3c03d43fee1b765e097513d8687f464d41ba858a (diff) | |
download | ports-ab72a971263d5362699dde68f981643baee1f922.tar.gz ports-ab72a971263d5362699dde68f981643baee1f922.zip |
Notes
Diffstat (limited to 'multimedia/libcec/files')
-rw-r--r-- | multimedia/libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp | 98 |
1 files changed, 89 insertions, 9 deletions
diff --git a/multimedia/libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp b/multimedia/libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp index 7e8f6893908f..dd8829f8f7a3 100644 --- a/multimedia/libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp +++ b/multimedia/libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp @@ -1,11 +1,91 @@ ---- ./src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp.orig 2012-10-17 11:35:39.000000000 +0200 -+++ ./src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp 2012-10-17 11:35:52.000000000 +0200 -@@ -427,8 +427,6 @@ - for (i = 0; i < 8; ++i) +--- ./src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp.orig 2013-05-13 13:09:14.000000000 +0000 ++++ ./src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp 2013-06-08 12:30:51.000000000 +0000 +@@ -61,6 +61,8 @@ + #include <libudev.h> + } + #elif defined(__FreeBSD__) ++#include <sys/param.h> ++#include <sys/sysctl.h> + #include <stdio.h> + #include <unistd.h> + #endif +@@ -434,22 +436,68 @@ + } + #elif defined(__FreeBSD__) + char devicePath[PATH_MAX + 1]; ++ char infos[512]; ++ char sysctlname[32]; ++ char ttyname[8]; ++ char *pos; ++ size_t infos_size = sizeof(infos); + int i; + +- for (i = 0; i < 8; ++i) ++ for (i = 0; ; ++i) { - (void)snprintf(devicePath, sizeof(devicePath), "/dev/ttyU%d", i); +- (void)snprintf(devicePath, sizeof(devicePath), "/dev/ttyU%d", i); - if (strDevicePath && strcmp(devicePath, strDevicePath) != 0) -- continue; - if (!access(devicePath, 0)) - { - snprintf(deviceList[iFound].path, sizeof(deviceList[iFound].path), "%s", devicePath); ++ memset(infos, 0, sizeof(infos)); ++ (void)snprintf(sysctlname, sizeof(sysctlname), ++ "dev.umodem.%d.%%pnpinfo", i); ++ if (sysctlbyname(sysctlname, infos, &infos_size, ++ NULL, 0) != 0) ++ break; ++ if (strstr(infos, "vendor=0x2548") == NULL) + continue; +- if (!access(devicePath, 0)) +- { +- snprintf(deviceList[iFound].strComPath, sizeof(deviceList[iFound].strComPath), "%s", devicePath); +- snprintf(deviceList[iFound].strComName, sizeof(deviceList[iFound].strComName), "%s", devicePath); +- deviceList[iFound].iVendorId = CEC_VID; +- deviceList[iFound].iProductId = CEC_VID; +- deviceList[iFound].adapterType = ADAPTERTYPE_P8_EXTERNAL; // will be overridden when not doing a "quick scan" by the actual type +- iFound++; ++ if (strstr(infos, "product=0x1001") == NULL ++ && strstr(infos, "product=0x1002") == NULL) ++ continue; ++ pos = strstr(infos, "ttyname="); ++ if (pos == NULL) ++ continue; ++ sscanf(pos, "ttyname=%s ", ttyname); ++ ++ (void)snprintf(devicePath, sizeof(devicePath), ++ "/dev/tty%s", ttyname); ++ ++ if (strDevicePath) { ++ char currStrDevicePath[512]; ++ int port = 0; ++ int devaddr = 0; ++ memset(currStrDevicePath, 0, sizeof(currStrDevicePath)); ++ memset(infos, 0, sizeof(infos)); ++ (void)snprintf(sysctlname, sizeof(sysctlname), ++ "dev.umodem.%d.%%location", i); ++ if (sysctlbyname(sysctlname, infos, &infos_size, ++ NULL, 0) != 0) ++ break; ++ ++ pos = strstr(infos, "port="); ++ if (pos == NULL) ++ continue; ++ sscanf(pos, "port=%d ", &port); ++ ++ pos = strstr(infos, "devaddr="); ++ if (pos == NULL) ++ continue; ++ sscanf(pos, "devaddr=%d ", &devaddr); ++ ++ (void)snprintf(currStrDevicePath, sizeof(currStrDevicePath), ++ "/dev/ugen%d.%d", port, devaddr); ++ ++ if (strcmp(currStrDevicePath, strDevicePath) != 0) ++ continue; + } ++ snprintf(deviceList[iFound].strComPath, sizeof(deviceList[iFound].strComPath), "%s", devicePath); ++ snprintf(deviceList[iFound].strComName, sizeof(deviceList[iFound].strComName), "%s", devicePath); ++ deviceList[iFound].iVendorId = CEC_VID; ++ deviceList[iFound].iProductId = CEC_VID; ++ deviceList[iFound].adapterType = ADAPTERTYPE_P8_EXTERNAL; // will be overridden when not doing a "quick scan" by the actual type ++ iFound++; + } + #else + //silence "unused" warnings |