Discussion:
[libhid-discuss] moving from hiddev/ioctl to libhid
Andreas Holzhammer - GMX
2010-12-21 12:30:17 UTC
Permalink
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
shiva vadla
2010-12-21 15:40:31 UTC
Permalink
Hey Andreas,
Did you try using the path {0xffa00001,0xffa00002,0xffa10006}?
Thanks!

On Tue, Dec 21, 2010 at 7:30 AM, Andreas Holzhammer - GMX <
Post by Andreas Holzhammer - GMX
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
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]...
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
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);
}
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
//******************************************************
// 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
libhid-discuss at lists.alioth.debian.org
http://lists.alioth.debian.org/mailman/listinfo/libhid-discuss
http://libhid.alioth.debian.org/
--
Shiva
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/libhid-discuss/attachments/20101221/895ce8ab/attachment.htm>
Loading...