[BRLTTY] bc640: Some debug info

Peter op 't Hof opthofp at xs4all.nl
Wed Feb 6 13:35:35 EST 2008


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" <andor at nl.linux.org>
To: "Informal discussion between users and developers of BRLTTY." 
<brltty at 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 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 ;)
> -----------


--------------------------------------------------------------------------------


> _______________________________________________
> 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 



More information about the BRLTTY mailing list