[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