From 1ae8d833d66af8d3917b55714d628914abb3412c Mon Sep 17 00:00:00 2001 From: Diane Bruce Date: Mon, 6 Jun 2022 16:00:38 -0400 Subject: [PATCH] comms/nanovna-saver: Fixed incorrect /dev/cua* to umodem number mapping Linux has an ioctl that directly retrieves information about the usb serial port on (FreeBSD) I have to find the umodem dev that the usb serial port is reference then use a sysctl to find the needed for nanovna-saver to work correctly. Originally I assumed a 1-1 mapping of devices. I was wrong. PR: ports/264272 Reported by: jeffpc@josefsipek.net --- comms/nanovna-saver/Makefile | 2 +- comms/nanovna-saver/files/Sysctl.py | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/comms/nanovna-saver/Makefile b/comms/nanovna-saver/Makefile index faedd3e34948..f4873bfe58d8 100644 --- a/comms/nanovna-saver/Makefile +++ b/comms/nanovna-saver/Makefile @@ -1,7 +1,7 @@ PORTNAME= nanovna-saver DISTVERSIONPREFIX= v DISTVERSION= 0.3.10 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= comms hamradio MAINTAINER= hamradio@FreeBSD.org diff --git a/comms/nanovna-saver/files/Sysctl.py b/comms/nanovna-saver/files/Sysctl.py index c05dd8036b9b..db94a418a1c4 100644 --- a/comms/nanovna-saver/files/Sysctl.py +++ b/comms/nanovna-saver/files/Sysctl.py @@ -1,4 +1,5 @@ import re +import os from ctypes import * from ctypes.util import find_library @@ -15,9 +16,16 @@ def posix_sysctlbyname(name): return _mem.value def usb_vid_pid(name): - digit = (re.search(r'\d',name)).group() - result = (posix_sysctlbyname(b'dev.umodem.'+bytes(digit,'ascii')+b'.%pnpinfo')).decode('ascii') - items=result.split(' ') - vendor=int(items[0].split('=')[1],0) - product=int(items[1].split('=')[1],0) - return([vendor,product]) + dev = bytes(name[8:],'ascii') + for i in range(len(os.listdir('/dev/usb'))): + try: + found_dev = posix_sysctlbyname(b'dev.umodem.'+bytes(str(i),'ascii')+b'.ttyname') + if dev == found_dev: + result = (posix_sysctlbyname(b'dev.umodem.'+bytes(str(i),'ascii')+b'.%pnpinfo')).decode('ascii') + items=result.split(' ') + vendor=int(items[0].split('=')[1],0) + product=int(items[1].split('=')[1],0) + return([vendor,product]) + except: + pass + return [-1,-1]