[BRLTTY] bc640: Some debug info

Andor Demarteau andor at nl.linux.org
Wed Feb 6 13:16:55 EST 2008


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 mlang at db.debian.org
 >  : :' : | 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 at mielke.cc
 > For general information, go to: http://mielke.cc/mailman/listinfo/brltty

-- 
Andor Demarteau                 E-mail: andor at nl.linux.org
student computer science        www: http://www.nl.linux.org/~andor
UU based & VU guest-student     jabber,icq,msn,voip: do ask ;)
-----------


More information about the BRLTTY mailing list