Serial port settings:
// CRTSCTS: Enable hardware flow control
// B38400: 38400 baud
// CLOCAL: Local line - do not change "owner" of port
// PARENB: Enable parity bit
// CREAD: Enable receiver
// CS8: 8 data bits
termios_new.c_cflag = CRTSCTS|B38400|CLOCAL|PARENB|CREAD|CS8;
// INPCK: Enable parity check
// IGNPAR: Ignore parity errors
termios_new.c_iflag = INPCK|IGNPAR;
struct SubcpuCommand
{
_BYTE opcode;
_BYTE byte1;
_BYTE byte2;
_BYTE byte3;
_BYTE cksum;
};
all opcodes have high bit set (0x80)
cksum = 255 - opcode;
Opcodes. hs = host to subcpu, sh = subcpu to host
A2 [hs,sh]: receive ack
A3 [hs,sh]: receive nack
B1 [sh]: Key Code
byte1: hw key code
byte2: 0x2B == key down(?)
B2 [sh]: Key JOG
(byte1&1) ? JOG DOWN : JOG UP
nTimes = byte2 & 7
B3 [sh]: Key Status
byte1: keydownstatus
byte2: bit0 ?
B4 [sh]: battery level
level = byte2 & 0x1F
23..31: 100%
18..22: 74%
13..17: 50%
7..12: 25%
3.. 6: 1%
0.. 2: 0%
byte1 & 3:
0 = Inner Litium
1 = Alkali
2 = Extra Litium
B5, B6, B7 [hs]: request battery level
BA [hs]: LED settings
byte1 = 0x30
byte2 = 0x40
bits 4..3:
0 = LED_ON
1 = LED_OFF
2 = LED_FLASH
3 = LED_MOMENT_ON
bits 0..2:
0 = SPEED_5HZ
1 = SPEED_2HZ
2 = SPEED_1HZ
7 = SPEED_1ON4OFF
BB [hs]: set blue LED
byte1 = on ? 0x31 : 0x30
BC [hs]: LED ON
C0 [hs]: request date
C1 [hs]: request time
C2 : date info
[sh]
year = byte1 + 100;
month = byte2 & 0xF;
mday = byte3 & 0x1F;
[hs]
byte1 = year - 100
byte2 = month + 1;
byte3 = mday | 0x40
C3 : time info
[sh]
hour = byte1 & 0x1F;
min = byte2 & 0x3F;
sec = byte3 & 0x3F;
[hs]
byte1 = hour | 0x40
byte2 = min | 0x40
byte3 = sec | 0x40
D0 [sh]: Receive Battery Status
byte1 & 3:
0 = CHG_COMPLETE
1 = CHG_NOW
2 = CHG_TROUBLE
3 = BAT_TROUBLE
(byte1 & 0xCu) >> 2:
0 = IN_LITHIUM_BAT
1 = ALKALI_BAT
2 = AC_ADAPTOR
3 = EXT_LITHIUM_BAT
byte2 & 1 ? EXTRA LITHIUM CHG_NOW : EXTRA LITHIUM CHG_COMPLETE
byte2 & 2 ? EXTRA LITHIUM EXIST : NO EXTRA LITHIUM
byte2 & 4 ? EXTRA LITIUM AVAILABLE : EXTRA LITIUM NOT AVAILABLE
byte2 & 8 ? ALKALI BAT AVAILABLE : ALKALI BAT NOT AVAILABLE
byte2 & 0x10 ? IN LITHIUM AVAILABLE : IN LITHIUM NOT AVAILABLE
D1 [hs]: request battery status
D2 [sh]: HOST Shutdown Request
D4 [sh]: HOST Sleep Request
systemstate = 3
send D6
D5 [sh]: HOST Resume Request
systemstate = 1
D6 [hs]: go to sleep?
D7 [hs]: initialize?
D8 [hs]: USB??
hw->sw key map (B1)
0x00, 0x26
0x01, 0x21
0x03, 0x42
0x02, 0x30
0x04, 0x31
0x05, 0x32
0x06, 0x41
0x07, 0x40
0x10, 0x72
0x11, 0x43
0x12, 0x73
0x13, 0x44
0x14, 0x74
0x15, 0x45
0x16, 0x75
0x17, 0x46
0x20, 0x25
0x21, 0x27
0x22, 0x23
0x23, 0x24
0x24, 0x47
0x25, 0x76
0x26, 0x71
0x27, 0x70
librie hw codes:
0x20: page UP (0xA8)
0x21: page DOWN (0xA9)
0x22: Q
0x23: Z
0x24: moji (0x8B)
0x25: space (henkan) (0x20)
0x26: jisyo (0x8C)
0x27: hondana (0xA6)
0x30: W
0x31: E
0x32: D
0x33: S
0x34: A
0x35: C
0x36: X
0x37: kakudai (0x86)
0x40: R
0x41: T
0x42: F
0x43: V
0x44: B
0x45: jump (0x82)
0x46: touroku (0x85)
0x50: Y
0x51: U
0x52: G
0x53: H
0x54: N
0x55: mae page(Right) (0x82)
0x56: tsugi page(Left) (0x81)
0x60: I
0x61: J
0x62: K
0x63: M
0x64: -
0x65: JOG Dial Push (0x0D)
0x66: VOL- (0x8A)
0x67: VOL+ (0x89)
0x70: O
0x71: P
0x72: L
0x73: */& (0x81)
0x74: MENU (0x83)
0x75: modoru (0x84)
0x76: ENTER(kettei) (0x0D)