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