From owner-freebsd-usb@FreeBSD.ORG Thu May 6 19:49:43 2010 Return-Path: Delivered-To: freebsd-usb@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C1A38106564A for ; Thu, 6 May 2010 19:49:43 +0000 (UTC) (envelope-from mike@sentex.net) Received: from lava.sentex.ca (pyroxene.sentex.ca [199.212.134.18]) by mx1.freebsd.org (Postfix) with ESMTP id 7B8998FC1C for ; Thu, 6 May 2010 19:49:43 +0000 (UTC) Received: from mdt-xp.sentex.net (simeon.sentex.ca [192.168.43.27]) by lava.sentex.ca (8.14.3/8.14.3) with ESMTP id o46Jngdt028521 for ; Thu, 6 May 2010 15:49:42 -0400 (EDT) (envelope-from mike@sentex.net) Message-Id: <201005061949.o46Jngdt028521@lava.sentex.ca> X-Mailer: QUALCOMM Windows Eudora Version 7.1.0.9 Date: Thu, 06 May 2010 15:49:46 -0400 To: freebsd-usb@freebsd.org From: Mike Tancsa Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; format=flowed Subject: apcupsd port regression from 7x. to 8.x X-BeenThere: freebsd-usb@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: FreeBSD support for USB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 May 2010 19:49:43 -0000 While apcupsd works fine with one ups hooked up, apcupsd is not able to find multiple ones like it did on RELENG_7. Looking at the way the code is compiled, it uses the generic libusd driver to talk to and find the UPSes on RELENG_8. Not sure if this is a bug with apcupsd or how it works with RELENG_8. Running the daemon in debug mode, it loops through the following code, but always finds the same UPS and never 'moves on' to the next UPS like it did in RELENG_7. Has anyone got multiple UPSes working with apcupsd on RELENG_8 ? /* Initialize libusb */ Dmsg0(200, "Initializing libusb\n"); usb_init(); /* Enumerate usb busses and devices */ i = usb_find_busses(); Dmsg1(200, "Found %d USB busses\n", i); i = usb_find_devices(); Dmsg1(200, "Found %d USB devices\n", i); /* Iterate over all devices, checking for idVendor=APC */ bus = usb_get_busses(); while (bus) { dev = bus->devices; while (dev) { Dmsg4(200, "MDT bus loop %s:%s - %04x:%04x\n", bus->dirname, dev->filename, dev->descriptor.idVendor, dev->descriptor.idProduct); if (dev->descriptor.idVendor == VENDOR_APC) { Dmsg2(200, "Trying device %s:%s\n", bus->dirname, dev->filename); if (init_device(ups, dev)) { /* Successfully found and initialized an UPS */ astrncpy(ups->device, bus->dirname, sizeof(ups->device)); astrncat(ups->device, ":", sizeof(ups->device)); astrncat(ups->device, dev->filename, sizeof(ups->device)); return 1; } } dev = dev->next; } bus = bus->next; } /* Failed to find an UPS */ ups->device[0] = 0; return 0; } Where as the following are attached. It only is ever able to talk to the ups on ugen1.2 0[upsmon1]# usbconfig ugen0.1: at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON ugen1.1: at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON ugen2.1: at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON ugen3.1: at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON ugen4.1: at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON ugen0.2: at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen4.2: at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE ugen4.3: at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen0.3: at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen4.4: at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen4.5: at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen4.6: at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON ugen1.2: at usbus1, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON 0[upsmon1]# 0.000 apcupsd: apcupsd.c:219 Options parsed. 0.001 apcupsd: apcconfig.c:803 After config scriptdir: "/usr/local/etc/apcupsd.a" 0.001 apcupsd: apcconfig.c:804 After config pwrfailpath: "/var/run/a" 0.001 apcupsd: apcconfig.c:805 After config nologinpath: "/var/run" 0.001 apcupsd: apcupsd.c:242 Config file /usr/local/etc/apcupsd.a/apcupsd.conf processed. 0.001 apcupsd: :newups.c:102 write_lock at drivers.c:181 0.001 apcupsd: drivers.c:183 Looking for driver: usb 0.001 apcupsd: drivers.c:187 Driver dumb is configured. 0.001 apcupsd: drivers.c:187 Driver apcsmart is configured. 0.001 apcupsd: drivers.c:187 Driver net is configured. 0.001 apcupsd: drivers.c:187 Driver usb is configured. 0.001 apcupsd: drivers.c:190 Driver usb found and attached. 0.001 apcupsd: newups.c:108 write_unlock at drivers.c:207 0.001 apcupsd: drivers.c:209 Driver ptr=0x805c8e4 0.001 apcupsd: apcupsd.c:261 Attached to driver: usb 0.003 apcupsd: newups.c:102 write_lock at generic-usb.c:614 0.003 apcupsd: generic-usb.c:398 Initializing libusb 0.003 apcupsd: generic-usb.c:403 Found 0 USB busses 0.007 apcupsd: generic-usb.c:405 Found 0 USB devices 0.007 apcupsd: generic-usb.c:416 /dev/usb:/dev/ugen1.2 - 051d:0002 0.007 apcupsd: generic-usb.c:419 Trying device /dev/usb:/dev/ugen1.2 0.153 apcupsd: hidutils.c:62 Report descriptor: 0.153 apcupsd: apclog.c:158 Dumping 840 bytes @ 0x2823e000 -------------------------------------------------------------------- Mike Tancsa, tel +1 519 651 3400 Sentex Communications, mike@sentex.net Providing Internet since 1994 www.sentex.net Cambridge, Ontario Canada www.sentex.net/mike