10
getbyte(int fd, unsigned char *b)
12
return(read(fd, b, 1) == 1);
16
putbyte(int fd, unsigned char b)
20
printf("write %02X\n", b);
21
if (write(fd, &b, 1) != 1) {
22
fprintf(stderr, "error write: %s\n", strerror(errno));
26
if (!getbyte(fd, &ack)) {
27
fprintf(stderr, "error read: %s\n", strerror(errno));
30
printf("read %02X\n", ack);
33
fprintf(stderr, "error ack\n");
41
special_cmd(int fd, unsigned char cmd)
45
if (putbyte(fd, 0xE6))
46
for (i = 0; i < 4; i++) {
47
printf("special_cmd %i\n", i);
48
if ((!putbyte(fd, 0xE8)) || (!putbyte(fd, (cmd>>6)&0x3)))
58
send_cmd(int fd, unsigned char cmd)
60
return (special_cmd(fd, cmd) &&
65
identify(int fd, unsigned long int *ident)
69
if (send_cmd(fd, 0x00) &&
70
getbyte(fd, &id[0]) &&
71
getbyte(fd, &id[1]) &&
72
getbyte(fd, &id[2])) {
73
*ident = (id[0]<<16)|(id[1]<<8)|id[2];
74
printf("ident %06X\n", *ident);
77
fprintf(stderr, "error identify\n");
87
if (!putbyte(fd, 0xFF)) {
88
fprintf(stderr, "error reset\n");
94
if (getbyte(fd, &r[0]) && getbyte(fd, &r[1]))
95
if (r[0] == 0xAA && r[1] == 0x00) {
96
fprintf(stderr, "reset done\n");
99
fprintf(stderr, "error reset ack\n");
104
main(int argc, char* argv[])
107
unsigned long int ident;
109
fd = open("/dev/psaux", O_RDWR);
111
fprintf(stderr, "error open: %s\n", strerror(errno));
116
identify(fd, &ident);