Andor, Ivar has told me that he is willing to give specs. I push it too, because i need it for several departmentprojects.
Mail me off list. Greetings, Peter op 't Hof. ----- Original Message ----- From: "Andor Demarteau" <[EMAIL PROTECTED]> To: "Informal discussion between users and developers of BRLTTY." <brltty@mielke.cc> Sent: Wednesday, February 06, 2008 7:16 PM Subject: Re: [BRLTTY] bc640: Some debug info > you will probably not get any specs, I've been bugging optelec here in .nl > for them for some time. > They even try to sell me this display instead of me going to the baum > varioconnect models. > O blundly told them, if you don't support linux no deal. > > seams even that didn't help much. > Lucky me they were a b it more helpfull about 6 years ago for the voyager > drivers. > > On Wed, 6 Feb 2008, Mario Lang wrote: > > > Hi. > > > > This is as far as I could get without any specs. > > > > Below is a C file that dumps the keypresses to stdout. > > Keypresses are delivers pretty strangely, first the "keycode" > > arrives, and then the key type. A key type indicator has > > the left nibble set to 1110 or 1111 to indicate press and release, > > and the rightmost nibble indicates the keygroup. 1 seems to be the thumb > > keys, 2 are the keys on the left and right side of the display line, > > 3 are the keys on top of the display, and 4 are the cursor routing keys. > > > > Also attached is a "lsusb -vvv" dump with the device connected. > > > > > > I still have absolutely no idea how to actually write to the display. > > > > #include <fcntl.h> > > #include <stdio.h> > > #include <stdlib.h> > > #include <sys/types.h> > > #include <sys/stat.h> > > #include <unistd.h> > > > > #include <linux/types.h> > > #include <linux/hiddev.h> > > > > int > > main(int argc, char *argv[]) > > { > > int fd; > > > > if ((fd = open("/dev/usb/hiddev0", O_RDONLY)) > 0 ) { > > struct hiddev_event e; > > while (read(fd, &e, sizeof(e)) == sizeof(e)) { > > if (e.value > 0X70) { /* key type indicator */ > > if ((e.value & 0XF0) == 0X70) { > > printf("pressed (type %d)\n", e.value&0X0F); > > } else if ((e.value & 0XF0) == 0XF0) { > > printf("released (type %d)\n", e.value&0X0F); > > } > > } else { /* Value indicating which key was pressed */ > > printf("key %d ", e.value); > > } > > fflush(stdout); > > } > > return 0; > > } else { > > perror("open"); > > } > > exit(EXIT_FAILURE); > > } > > > > # lsusb -vvv: > > > > Bus 001 Device 045: ID 0798:0640 Optelec > > Device Descriptor: > > bLength 18 > > bDescriptorType 1 > > bcdUSB 2.00 > > bDeviceClass 0 (Defined at Interface level) > > bDeviceSubClass 0 > > bDeviceProtocol 0 > > bMaxPacketSize0 8 > > idVendor 0x0798 Optelec > > idProduct 0x0640 > > bcdDevice 0.01 > > iManufacturer 1 Optelec > > iProduct 2 Alva BC640 > > iSerial 6 00A09608574A > > bNumConfigurations 1 > > Configuration Descriptor: > > bLength 9 > > bDescriptorType 2 > > wTotalLength 57 > > bNumInterfaces 2 > > bConfigurationValue 1 > > iConfiguration 0 > > bmAttributes 0x80 > > (Bus Powered) > > MaxPower 100mA > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 0 > > bAlternateSetting 0 > > bNumEndpoints 1 > > bInterfaceClass 3 Human Interface Device > > bInterfaceSubClass 0 No Subclass > > bInterfaceProtocol 0 None > > iInterface 3 Alva6 Braille > > HID Device Descriptor: > > bLength 9 > > bDescriptorType 33 > > bcdHID 1.00 > > bCountryCode 0 Not supported > > bNumDescriptors 1 > > bDescriptorType 34 Report > > wDescriptorLength 299 > > Report Descriptor: (length is 299) > > Item(Global): Usage Page, data= [ 0x01 0xff ] 65281 > > (null) > > Item(Local ): Usage, data= [ 0x01 ] 1 > > (null) > > Item(Main ): Collection, data= [ 0x01 ] 1 > > Application > > Item(Global): Report ID, data= [ 0x05 ] 5 > > Item(Local ): Usage, data= [ 0x07 ] 7 > > (null) > > Item(Global): Logical Maximum, data= [ 0x50 ] 80 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x08 ] 8 > > (null) > > Item(Global): Logical Maximum, data= [ 0x01 ] 1 > > Item(Global): Report Size, data= [ 0x01 ] 1 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report Count, data= [ 0x07 ] 7 > > Item(Main ): Feature, data= [ 0x01 ] 1 > > Constant Array Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x09 ] 9 > > (null) > > Item(Global): Logical Maximum, data= [ 0x50 ] 80 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x0a ] 10 > > (null) > > Item(Global): Logical Maximum, data= [ 0x05 ] 5 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x0b ] 11 > > (null) > > Item(Global): Logical Maximum, data= [ 0x10 ] 16 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x0c ] 12 > > (null) > > Item(Global): Logical Maximum, data= [ 0x50 ] 80 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x06 ] 6 > > Item(Local ): Usage, data= [ 0x0d ] 13 > > (null) > > Item(Global): Logical Maximum, data= [ 0x01 ] 1 > > Item(Global): Report Size, data= [ 0x01 ] 1 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x0e ] 14 > > (null) > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x0f ] 15 > > (null) > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x10 ] 16 > > (null) > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report Count, data= [ 0x04 ] 4 > > Item(Main ): Feature, data= [ 0x01 ] 1 > > Constant Array Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x07 ] 7 > > Item(Local ): Usage, data= [ 0x11 ] 17 > > (null) > > Item(Global): Logical Maximum, data= [ 0x01 ] 1 > > Item(Global): Report Size, data= [ 0x01 ] 1 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x12 ] 18 > > (null) > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report Count, data= [ 0x06 ] 6 > > Item(Main ): Feature, data= [ 0x01 ] 1 > > Constant Array Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x13 ] 19 > > (null) > > Item(Global): Logical Maximum, data= [ 0xf4 0x01 ] 500 > > Item(Global): Report Size, data= [ 0x10 ] 16 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x08 ] 8 > > Item(Local ): Usage, data= [ 0x0b ] 11 > > (null) > > Item(Global): Logical Maximum, data= [ 0x10 ] 16 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x09 ] 9 > > Item(Local ): Usage, data= [ 0x14 ] 20 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x15 ] 21 > > (null) > > Item(Global): Logical Maximum, data= [ 0x01 ] 1 > > Item(Global): Report Size, data= [ 0x01 ] 1 > > Item(Global): Report Count, data= [ 0x02 ] 2 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report Count, data= [ 0x06 ] 6 > > Item(Main ): Feature, data= [ 0x01 ] 1 > > Constant Array Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x16 ] 22 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x05 ] 5 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x04 ] 4 > > Item(Local ): Usage, data= [ 0x06 ] 6 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x02 ] 2 > > Item(Main ): Input, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x02 ] 2 > > Item(Local ): Usage, data= [ 0x02 ] 2 > > (null) > > Item(Global): Logical Maximum, data= [ 0x50 ] 80 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x03 ] 3 > > (null) > > Item(Global): Logical Maximum, data= [ 0x28 ] 40 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x04 ] 4 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x28 ] 40 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x03 ] 3 > > Item(Local ): Usage, data= [ 0x02 ] 2 > > (null) > > Item(Global): Logical Maximum, data= [ 0x50 ] 80 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x03 ] 3 > > (null) > > Item(Global): Logical Maximum, data= [ 0x28 ] 40 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x01 ] 1 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Local ): Usage, data= [ 0x05 ] 5 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x28 ] 40 > > Item(Main ): Output, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x0a ] 10 > > Item(Local ): Usage, data= [ 0x18 ] 24 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x07 ] 7 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x0b ] 11 > > Item(Local ): Usage, data= [ 0x17 ] 23 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Count, data= [ 0x0f ] 15 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Global): Report ID, data= [ 0x0c ] 12 > > Item(Local ): Usage, data= [ 0x19 ] 25 > > (null) > > Item(Global): Logical Maximum, data= [ 0xff 0x00 ] 255 > > Item(Global): Report Size, data= [ 0x08 ] 8 > > Item(Global): Report Count, data= [ 0x02 ] 2 > > Item(Main ): Feature, data= [ 0x02 ] 2 > > Data Variable Absolute No_Wrap Linear > > Preferred_State No_Null_Position Non_Volatile > > Bitfield > > Item(Main ): End Collection, data=none > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x81 EP 1 IN > > bmAttributes 3 > > Transfer Type Interrupt > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0040 1x 64 bytes > > bInterval 10 > > Interface Descriptor: > > bLength 9 > > bDescriptorType 4 > > bInterfaceNumber 1 > > bAlternateSetting 0 > > bNumEndpoints 2 > > bInterfaceClass 8 Mass Storage > > bInterfaceSubClass 6 SCSI > > bInterfaceProtocol 80 Bulk (Zip) > > iInterface 5 Alva6 memory > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x82 EP 2 IN > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0040 1x 64 bytes > > bInterval 0 > > Endpoint Descriptor: > > bLength 7 > > bDescriptorType 5 > > bEndpointAddress 0x03 EP 3 OUT > > bmAttributes 2 > > Transfer Type Bulk > > Synch Type None > > Usage Type Data > > wMaxPacketSize 0x0040 1x 64 bytes > > bInterval 0 > > Device Status: 0x0000 > > (Bus Powered) > > > > > > -- > > CYa, > > ⡍⠁⠗⠊⠕ | Debian Developer <URL:http://debian.org/> > > .''`. | Get my public key via finger [EMAIL PROTECTED] > > : :' : | 1024D/7FC1A0854909BCCDBE6C102DDFFC022A6B113E44 > > `. `' > > `- <URL:http://delysid.org/> > > <URL:http://www.staff.tugraz.at/mlang/> > > _______________________________________________ > > This message was sent via the BRLTTY mailing list. > > To post a message, send an e-mail to: BRLTTY@mielke.cc > > For general information, go to: http://mielke.cc/mailman/listinfo/brltty > > -- > Andor Demarteau E-mail: [EMAIL PROTECTED] > student computer science www: http://www.nl.linux.org/~andor > UU based & VU guest-student jabber,icq,msn,voip: do ask ;) > ----------- -------------------------------------------------------------------------------- > _______________________________________________ > This message was sent via the BRLTTY mailing list. > To post a message, send an e-mail to: BRLTTY@mielke.cc > For general information, go to: http://mielke.cc/mailman/listinfo/brltty _______________________________________________ This message was sent via the BRLTTY mailing list. To post a message, send an e-mail to: BRLTTY@mielke.cc For general information, go to: http://mielke.cc/mailman/listinfo/brltty