PACmate20 Braille Display

From Hackstrich

The Freedom Scientific PACmate 20 is a 20-cell braille display with two pushbuttons over each cell, and two 'whiz wheels' (mousewheel-type wheels) on either side of the braille area. It connects to a PC or other device via USB, and can be attached to the PACmate notetaker to integrate them into one device.

Notable Chips

Chip Chip Function Use in Product
C8051F320 Microcontroller w/ USB Brains of the display, talks to the PC/device natively over USB.
LM358 Op-amp Don't know
TLC555 Timer Near large cap, small caps, and inductors. May be part of the HV charge pump?

USB Descriptors

Configuration descriptor:
Total length:           0020
Number of Interfaces:   01
Configuration value:    01
Configuration string:   00
Attributes:             80   [Device doesn't have own power, can't generate remote wakeups]
Maximum power usage     FA   [500mA]

Interface descriptor:
Interface number:       00
Alternate:              00
Endpoints:              02
Class:                  FF   [Vendor Specific]
Subclass:               00   [Ignored: Class FF]
Protocol:               00   [Ignored: Class FF]
Interface string:       00

Endpoint descriptor:
Endpoint address:       01   [10000000: OUT endpoint 1]
Attributes:             02   [01000000: Bulk]
Maximum packet size:    0040 [64 bytes]
Polling interval:       00   [Ignored: Not isochronous or interrupt type]

Endpoint descriptor:
Endpoint address:       02   [10000010: IN endpoint 1]
Attributes:             02   [01000000: Bulk]
Maximum packet size:    0040 [64 bytes]
Polling interval:       00   [Ignored: Not isochronous or interrupt type]

Protocol

Protocol documentation all taken using BRLTTY's FreedomScientific driver as a reference implementation. Packets sent to the PACmate20 display all follow a standard format, detailed below.

Packet Format

byte type
byte arg1
byte arg2
byte arg3
 byte payload[256]
 OR
 byte manufacturer[24]
 byte model[16]
 byte firmware_version[8]
 OR
 byte extended_keys[4]

C Structure

typedef struct {
  unsigned char type;
  unsigned char arg1;
  unsigned char arg2;
  unsigned char arg3;
} PacketHeader;

typedef struct {
  PacketHeader header;
  union {
    unsigned char bytes[0X100];
    struct {
      char manufacturer[24];
      char model[16];
      char firmware[8];
    } info;
    struct {
      unsigned char bytes[4];
    } extkey;
  } payload;
} Packet;

Images

PACmate20 Internal.png