ports/177391: multimedia/libcec update to 2.1.1
Mickael Maillot
mickael.maillot at gmail.com
Tue Mar 26 09:40:01 UTC 2013
>Number: 177391
>Category: ports
>Synopsis: multimedia/libcec update to 2.1.1
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: update
>Submitter-Id: current-users
>Arrival-Date: Tue Mar 26 09:40:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Mickael Maillot
>Release:
>Organization:
>Environment:
>Description:
update to the last version 2.1.1 needed by xbmc 12.1
i update my patch for device detection successfully tested on my htpc with a pulse eight device.
warning: libcec and xbmc must be commited together because:
xbmc 12.0 need libcec < 2.1.0
and xbmc12.1 need libcec >= 2.1.0
see PR: ports/177207
also i think we need to add a pkg-message file to warn user that he need proper write permissions on the device.
like emulations/virtualbox-ose port for the USB Support, user need to add in /etc/devfs.rules something like:
[system=10]
add path 'ttyU*' mode 0660 group operator
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
diff -Naur libcec.orig/Makefile libcec/Makefile
--- libcec.orig/Makefile 2013-03-26 10:26:31.000000000 +0100
+++ libcec/Makefile 2013-03-26 10:25:57.000000000 +0100
@@ -2,7 +2,7 @@
# $FreeBSD: ports/multimedia/libcec/Makefile,v 1.2 2012/12/04 18:29:03 svnexp Exp $
PORTNAME= libcec
-PORTVERSION= 2.0.4
+PORTVERSION= 2.1.1
CATEGORIES= multimedia
MAINTAINER= manuel.creach at icloud.com
@@ -13,7 +13,7 @@
USE_GITHUB= yes
GH_ACCOUNT= Pulse-Eight
-GH_COMMIT= 178d498
+GH_COMMIT= 605d913
GH_TAGNAME= ${PORTNAME}-${PORTVERSION}
USE_GMAKE= yes
diff -Naur libcec.orig/distinfo libcec/distinfo
--- libcec.orig/distinfo 2013-03-26 10:26:31.000000000 +0100
+++ libcec/distinfo 2013-03-11 22:16:42.000000000 +0100
@@ -1,2 +1,2 @@
-SHA256 (libcec-2.0.4.tar.gz) = 652f8bddf8629eb4d14c93bc97efbeb7406482f69626302c8489df8e1fd8431f
-SIZE (libcec-2.0.4.tar.gz) = 1075334
+SHA256 (libcec-2.1.1.tar.gz) = 085cabf38bbe82c0a1c78fc4a0cc318b3c4f5fadae325b3d648821d2a4bf694d
+SIZE (libcec-2.1.1.tar.gz) = 1081702
diff -Naur libcec.orig/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp
--- libcec.orig/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp 2013-03-26 10:26:31.000000000 +0100
+++ libcec/files/patch-src__lib__adapter__Pulse-Eight__USBCECAdapterDetection.cpp 2013-03-07 15:31:38.000000000 +0100
@@ -1,11 +1,93 @@
---- ./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)
+diff --git src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp
+index 35ba386..dc1c79b 100644
+--- src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp
++++ src/lib/adapter/Pulse-Eight/USBCECAdapterDetection.cpp
+@@ -63,6 +63,8 @@ extern "C" {
+ #elif defined(__FreeBSD__)
+ #include <stdio.h>
+ #include <unistd.h>
++#include <sys/types.h>
++#include <sys/sysctl.h>
+ #endif
+
+ #define CEC_VID 0x2548
+@@ -434,22 +436,68 @@ uint8_t CUSBCECAdapterDetection::FindAdapters(cec_adapter_descriptor *deviceList
+ }
+ #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
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list