This small set of utils allowing to use this strange device: ID 041e:3100 Creative Technology, Ltd [Philips Electronics - RCS Singapore Creative USB IR Receiver] on Linux. The project is simple, small, crude but it works ;).
You can download it here:
creative_rm1500_usb-0.1.tar.gz
Usage instructions.
How does hid_read read the data from remote. This is in source code ;), but to simplify:
//opening device(file)
s = open( "/dev/usb/rm1500", O_RDONLY );
//we want to get info on each report received from device
flags = HIDDEV_FLAG_UREF | HIDDEV_FLAG_REPORT;
ioctl(hid_s, HIDIOCSFLAG, &flags);
//at this point, each read from opened file/device should return
//hiddev_usage_ref structure
struct hiddev_usage_ref uref;
while ( read(hid_s, &uref, sizeof(uref)) >= 0 )
if ( uref.field_index == HID_FIELD_INDEX_NONE ) {
//we get this when the new report has been send from device
//at this point we have the uref structure prefiled with correct report type and id
//this got guesed by getting the device report descriptor (function devinfo in source)
uref.field_index = 0; //which field of report
//this got guesed by taking all values from device and checking which ones are changing ;)
uref.usage_index = 3; //which usage entry of field
//fetch the usage code for given indexes
ioctl(hid_s, HIDIOCGUCODE, &uref, sizeof(uref));
//fetch the value from report
ioctl(hid_s, HIDIOCGUSAGE, &uref, sizeof(uref));
//now we have the key
cout << "got keycode: " << uref.value << endl;
}
// we are not interested in any other events, as they are only giving info what changed in report
// and this not always works, is complicated, doesn't output anything sensible on repeated key
// and we already have all the info from real report
Documentation used:
Project history/news:
| 19 Nov 2006 | |
| Weekend ;) More info. | |
| 15 Nov 2006 | |
| First release and webpage | |
Author: Ecto