libhid to-do list
-----------------

AQU: Arnaud Quette
CFL: Charles Lepple
MKR: Martin Krafft

- [Nobody] HID Parser rewritte
    The current HID Parser used is the one given by MGE UPS SYSTEMS.
    Various problems and limitation have been reached with this one,
    mainly due to the fact that it has been designed and optimised
    for MGE's devices.

    This rewritte should not impact the few programs currently using
    libhid as the parser calls are encapsulated (the current API
    shouldn't change).
    
    For the purpose of the rewritte, MGE's HID Parser and Linux (located
    in hid-core and hiddev) can serve as bases. Moreover, the kernel hackers
    involved in these (Paul Stewart and Vojtech Pavlik) might join us
    in this effort...
    AQU will try to contact theim when he has time.

- [AQU] implement SHUT marshalling (encapsulation)
    libhid currently only support USB encapsulation
    through libusb. SHUT simply encaps HID in SHUT frames
    (MGE serial marshalling). More info about SHUT:
    - SHUT overview:
    http://eu2.networkupstools.org/protocols/mge/51029473zaac.pdf
    - implementation example: nut/mge-shut driver (have a try in verbose
    mode (-DDDDD) with your MGE Evolution...)

    This implies, for libhid:
    - to separate marshalling code (usb_*()) and play with function
    pointers depending on the init param below,
    - to make an init time param (in HID_new_Interface()? ie
    HID_new_Interface(int mode) with mode=MODE_USB or MODE_SHUT)
    that link the device' marshalling to the right one (usb or shut)

    MKR suggested a proper registration architecture (e.g.
    loadable dlls and function pointers).

    Note that this is not a high priority, but more a wish
    that I (AQU) would like to see implemented for the newhidups
    switch to libhid. Moreover, only MGE use SHUT and I've not
    finished my reflexion about that...

- [AQU] implement unit conversions in src/hid_conversion.c
    two functions will be provided:
      hid_convert_logical_to_physical()
      hid_convert_physical_to_logical()
    it will be up to the end user app to use it or not.

- [AQU] investigate unit exponent
    it appears that only UPS need unit exponents at the moment. if this is
    true, then the code will not go into libhid. if false, then libhid will be
    able to do unit exponents.

- [AQU] obtaining the length of reports
    this is already stored in HIDParser.OffsetTab[ReportID][2]
    to retrieve it, we only need to call
      *GetReportOffset(hidif->hid_parser, hidif->hid_data->ReportID,
        hidif->hid_data->Type);
    MKR: should this be a static function used by hid_get_item_value & Co. or
         should the function be exported to the user API and the user expected
         to know the right report size. I think we'll have to go with the
         latter since we can't allocate within the function and pass out
         a pointer (bad style -- error prone).

- [AQU] usage path / code [reverse] lookup, wrapper functions for get/set
    either we interface with usbutils (no reply from Tobias yet), or we
    provide hooks for the user space application to register entries in the
    lookup table. alternatively, we could use config files, although i would
    vote against the latter. i say we should store as little as possible in
    libhid, or else we'll have a support nightmare.

- [AQU] investigate interrupt handling (get_input) (aka "dealing with more
    than the default (control/bulk) endpoints")
    libusb 0.1.8 (only in cvs HEAD for the moment) handles the interrupt
    pipe through generic URB ioctl (for linux). I'm not sure if it works
    for other platforms than Linux, as I've only tested on this last!

    The function are: usb_interrupt_*() with *=read/write
    
    For more information and code samples, check:
    http://ailab.ch/pipermail/libhid-discuss/2004-September/000206.html
    http://ailab.ch/pipermail/libhid-discuss/2004-September/000211.html

- [CFL] documentation (doxygen)

- [CFL] Make Swig work with Fink on OS X

- [MKR] improve debugging code

- [MKR] make autoconf check for libusb-dev

- export of USB_TIMEOUT parameter

- README file improvements

- dealing with multiple configuration descriptors (if necessary)

- dealing with physical descriptors (if necessary)

- enable matching by bus location (e.g. 001/015) instead of vendor IDs

- make code C99 compatible (to support --enable-pedantic -Werror)
  * variable declaration should be first in functions
  * variadic macros are not supported
  * ...

Done items
----------

[done 2004.12.29] [MKR] hotplug scripts
[done 2004.11.09] [MKR] pkg-config
[done 2004.11.09] [MKR] deal with all the compiler warnings
[done 2004.05.26] [MKR] fix lintian warnings about ldconfig
[done 2004.03.26] [MKR] Debian integration
[done 2004.03.25] [MKR] use libusb-config properly
[done 2004.03.25] [MKR] implement libhid-config properly
[done 2004.03.25] [MKR] claim interface before matching device
[done 2004.02.11] [MKR] CVS commit mails
[done 2004.02.11] [MKR] libhid-config
[done 2004.02.11] [MKR] reintegration of hidparser into libhid core.
