Hi,

I'm trying to adapt a USB LCD driver (graphlcd, dm140gink) from using direct ioctls to a libhid based solution.

Unfortunately I can't get the dm140gink to accept the data I send. The original driver can be found at http://developer.berlios.de/patch/download.php?id=2627.

I've modified test_libhid.c to access my LCD display, and get the following paths:

device identification of HIDInterface 002/004[0]:
  dev_handle:    0x09a50580
  device:        0x09a4b178
  location:      002/004
  manufacturer:  DM-140GINK Demo
  product:       DM-140GINK Demo
TRACE: hid_reset_parser(): resetting the HID parser for USB device 002/004[0]... TRACE: hid_dump_tree(): iterating the parse tree for USB device 002/004[0]...
parse tree of HIDInterface 002/004[0]:
  path: 0xffa00001.0xffa00002.0xffa10003; type: 0x80
  path: 0xffa00001.0xffa00002.0xffa10004; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x80
  path: 0xffa00001.0xffa00002.0xffa10005; type: 0x90
  path: 0xffa00001.0xffa00002.0xffa10006; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
  path: 0xffa00001.0xffa00002.0x00000000; type: 0x90
TRACE: hid_reset_parser(): resetting the HID parser for USB device 002/004[0]...

Then I added a first output command to test_libhid.c to send the the first initialisation command (taken from the above source, "panelCmd") to the device:

   unsigned char const PATHLEN = 3;
   int const PATH_IN[] = { 0xffa00001, 0xffa00002, 0xffa10003 };
   int const PATH_OUT[] = { 0xffa00001, 0xffa00002, 0xffa10005 };
   unsigned char const SEND_PACKET_LEN = 8;
   char const PACKET[]  = {0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00};
ret = hid_set_output_report(hid, PATH_OUT, PATHLEN, PACKET, SEND_PACKET_LEN);
   if (ret != HID_RET_SUCCESS) {
fprintf(stderr, "hid_set_output_report failed with return code %d\n", ret);
   }

But this command times out:

  TRACE: hid_set_output_report(): looking up report ID...
TRACE: hid_prepare_parse_path(): preparing search path of depth 3 for parse tree of USB device 002/004[0]... TRACE: hid_prepare_parse_path(): search path prepared for parse tree of USB device 002/004[0].
 NOTICE: hid_find_object(): found requested item.
TRACE: hid_set_output_report(): sending report ID 0x00 (length: 8) to USB device 002/004[0]... WARNING: hid_set_output_report(): failed to send report to USB device 002/004[0]:error sending control message: Connection timed out.
hid_set_output_report failed with return code 19
  TRACE: hid_close(): closing USB device 002/004[0]...

I've also tried to only pass 0xffa10005 as PATH, as suggested in the original code (in the SendReport function).

Not sure, but this might be related to the original drivers initialisation code, which I have no idea how to implement in libhid:
    //******************************************************
    // Initialize the internal report structures
    //******************************************************
    if(ioctl(fd, HIDIOCINITREPORT,0)<0)

Unfortunaltey I don't have any documentation on the DM140gink device, so I have to rely on the existing graphlcd source code (which doesn't provide access to some of the features of the LCD).

Any help greatly appreciated.

Thanks,

Andreas

_______________________________________________
libhid-discuss mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss
http://libhid.alioth.debian.org/

Reply via email to