Date: Tue, 26 Mar 2013 09:38:58 GMT From: Mickael Maillot <mickael.maillot@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: ports/177391: multimedia/libcec update to 2.1.1 Message-ID: <201303260938.r2Q9cwKk078238@red.freebsd.org> Resent-Message-ID: <201303260940.r2Q9e0si071136@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>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@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:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201303260938.r2Q9cwKk078238>