Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 06 May 2010 15:49:46 -0400
From:      Mike Tancsa <mike@sentex.net>
To:        freebsd-usb@freebsd.org
Subject:   apcupsd port regression from 7x. to 8.x
Message-ID:  <201005061949.o46Jngdt028521@lava.sentex.ca>

next in thread | raw e-mail | index | archive | help
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: <UHCI root HUB VIA> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen1.1: <UHCI root HUB VIA> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen2.1: <UHCI root HUB VIA> at usbus2, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen3.1: <UHCI root HUB VIA> at usbus3, cfg=0 md=HOST spd=FULL (12Mbps) pwr=ON
ugen4.1: <EHCI root HUB VIA> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON
ugen0.2: <Back-UPS ES 725 FW:802.n2.D USB FW:n2 APC> at usbus0, cfg=0 
md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen4.2: <USB2.0 Hub vendor 0x05e3> at usbus4, cfg=0 md=HOST spd=HIGH 
(480Mbps) pwr=SAVE
ugen4.3: <Back-UPS ES 500 FW:801.e5.D USB FW:e5 APC> at usbus4, cfg=0 
md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen0.3: <Back-UPS RS 1500 FW:8.g7 .D USB FW:g7 American Power 
Conversion> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen4.4: <Back-UPS ES 650 FW:825.B1.D USB FW:B1 APC> at usbus4, cfg=0 
md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen4.5: <Back-UPS RS 1500 FW:8.g8 .D USB FW:g8 American Power 
Conversion> at usbus4, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen4.6: <Back-UPS ES 500 FW:824.B1.D USB FW:B1 APC> at usbus4, cfg=0 
md=HOST spd=LOW (1.5Mbps) pwr=ON
ugen1.2: <Back-UPS ES 500 FW:824.B1.D USB FW:B1 APC> 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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005061949.o46Jngdt028521>