int do_input( a) { static int c, f = EOF; if (a == 0) { if (f == EOF) f = char_input(); if (f != EOF) c = f; return 2 + (f != EOF); } else if (a == 1) { /*data port*/ if (f == EOF) f = char_input(); if (f != EOF) { c = f; f = EOF; } return c; } }
int main(void) { BOARD_Init(); SERIAL_Init(); //Init the motors, duh initMotors(); char input; dbprintf("Welcome to the Motor Test Harness\n"); dbprintf("Speed: 0-10, f: forward, s: backward\n"); dbprintf("r: right motor, l: left motor, b: battery\n"); while (1) { input = GetChar(); char_input(input); DELAY(A_BIT) } return 0; }
int char_input(void) { int c, w, sum; if (!xmstat) { if (infile) { c = getc(infile); if (c == EOF) { fclose(infile); infile = 0; return char_input(); } if (c == '\n') c = '\r'; return c; } else return getchar(); } else if (xmstat == 1) { if (xidx) { c = xmbuf[xidx++]; if (xidx == 132) { xidx = 0; rcvdnak = EOF; acknak = 6; } } else { if (acknak == 21 && rcvdnak == 21 || acknak == 6 && rcvdnak == 6) { rcvdnak = 0; memset(xmbuf, 0, 132); w = fread(xmbuf + 3, 1, 128, xfile); if (w) { printf("Block %3d transmitted, ", blocknum); xmbuf[0] = 1; xmbuf[1] = blocknum; xmbuf[2] = 255 - blocknum; blocknum = (blocknum + 1) & 255; sum = 0; for (w = 3; w < 131; w++) sum = (sum + xmbuf[w]) & 255; xmbuf[131] = sum; acknak = 6; c = 1; xidx = 1; } else { printf("EOT transmitted, "); acknak = 4; c = 4; } } else if (rcvdnak == 21) { rcvdnak = 0; printf("Block %3d retransmitted, ", xmbuf[1]); c = xmbuf[xidx++]; /*retransmit the same block */ } else c = EOF; } return c; } else { if (acknak == 4) { c = 6; acknak = 0; fclose(xfile); xfile = 0; xmstat = 0; } else if (acknak) { c = acknak; acknak = 0; } else c = EOF; if (c == 6) printf("ACK\n"); if (c == 21) printf("NAK\n"); return c; } }