X-Git-Url: https://git.karo-electronics.de/?p=magstrip.git;a=blobdiff_plain;f=lmain.c;h=f0b52e4b023d83d5aa4c201c89b238bb60cdb8bb;hp=a74ea2f8490f4d511aff2b8841e47e6c4413f980;hb=HEAD;hpb=15890c0fda5647d737f30bc6c1ce2d3e60f41423 diff --git a/lmain.c b/lmain.c index a74ea2f..f0b52e4 100755 --- a/lmain.c +++ b/lmain.c @@ -64,69 +64,191 @@ unsigned int sbpos = 0; free(sbuf); } +void print_help(void) +{ + fprintf(stderr, "r - initial RESET, required after power-on\n"); + fprintf(stderr, "i - C:2 insert permit request\n"); + fprintf(stderr, "s - C10 C/R status request\n"); + fprintf(stderr, "S - C11 sensor status\n"); + fprintf(stderr, "1 - Reads ISO #1 and sends data\n"); + fprintf(stderr, "2 - Reads ISO #2 and sends data\n"); + fprintf(stderr, "3 - Reads ISO #3 and sends data\n"); + fprintf(stderr, "m - Sends the read data in memory by this command\n"); + fprintf(stderr, "M - Sends multi-tracks data in the memory by this command and parameter\n"); + fprintf(stderr, "q - close serial and quite\n"); + fprintf(stderr, "h - this help\n"); +} + int process_user_cmd(char *rxbuf, int len, int ufd) { int in_cmd = 0; - if (rxbuf[0] == 'i') { - fprintf(stderr, "Init permit request... "); - send_command(ufd, "C:2", 3); - in_cmd = 1; - } - if (rxbuf[0] == 'r') { - fprintf(stderr, "RESET request... "); - send_command(ufd, "C00", 3); - in_cmd = 1; - } - if (rxbuf[0] == 'e') { - fprintf(stderr, "Eject request... "); - send_command(ufd, "C30", 3); - in_cmd = 1; - } - if (rxbuf[0] == 's') { - fprintf(stderr, "Status request... "); - send_command(ufd, "C10", 3); - in_cmd = 1; - } - if (rxbuf[0] == 'S') { - fprintf(stderr, "Status request... "); - send_command(ufd, "C11", 3); - in_cmd = 1; - } - if (rxbuf[0] == '1') { - fprintf(stderr, "Status request... "); - send_command(ufd, "C61", 3); - in_cmd = 1; - } - if (rxbuf[0] == '2') { - fprintf(stderr, "Status request... "); - send_command(ufd, "C62", 3); - in_cmd = 1; + switch (rxbuf[0]) { + case 'i': + fprintf(stderr, "Insert permit request... "); + send_command(ufd, "C:2", 3); + in_cmd = 1; + break; + case 'r': + fprintf(stderr, "RESET request... "); + send_command(ufd, "C00", 3); + in_cmd = 1; + break; + case 'e': + fprintf(stderr, "Eject request... "); + send_command(ufd, "C30", 3); + in_cmd = 1; + break; + case 'E': + fprintf(stderr, "Eject request... "); + send_command(ufd, "C31", 3); + in_cmd = 1; + break; + case 's': + fprintf(stderr, "Status request... "); + send_command(ufd, "C10", 3); + in_cmd = 1; + break; + case 'S': + fprintf(stderr, "Status request... "); + send_command(ufd, "C11", 3); + in_cmd = 1; + break; + case '1': + fprintf(stderr, "Status request... "); + send_command(ufd, "C61", 3); + in_cmd = 1; + break; + case '2': + fprintf(stderr, "Status request... "); + send_command(ufd, "C62", 3); + in_cmd = 1; + break; + case '3': + fprintf(stderr, "Status request... "); + send_command(ufd, "C63", 3); + in_cmd = 1; + break; + case 'R': + fprintf(stderr, "Status request... "); + send_command(ufd, "C687", 4); + in_cmd = 1; + break; + case 'm': + fprintf(stderr, "Status request... "); + send_command(ufd, "C69", 3); + in_cmd = 1; + break; + case 'M': + fprintf(stderr, "Status request... "); + send_command(ufd, "C6A7", 4); + in_cmd = 1; + break; + case 'w': + fprintf(stderr, "Status request... "); + send_command(ufd, "C731234", 7); + in_cmd = 1; + break; + case 'h': + print_help(); + in_cmd = 0; + break; + case 'q': + fprintf(stderr, "Exiting...\n"); + in_cmd = -1; + break; + default: + break; } - if (rxbuf[0] == '3') { - fprintf(stderr, "Status request... "); - send_command(ufd, "C63", 3); - in_cmd = 1; + + return in_cmd; +} + +void print_multi_track(char *rxbuf, int len) +{ +int bpos = 0, t, i; +int t1len, t2len, t3len; +char tmpstr[4]; + + fprintf(stderr, "tracks requested: %c\n", rxbuf[bpos++]); + memset(tmpstr, 0, 4); + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + fprintf(stderr, "t#1 read result: %s\n", tmpstr); + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + fprintf(stderr, "t#2 read result: %s\n", tmpstr); + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + fprintf(stderr, "t#3 read result: %s\n", tmpstr); + memset(tmpstr, 0, 4); + + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + t1len = atoi(tmpstr); + fprintf(stderr, "t#1 read len: %d\n", t1len); + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + t2len = atoi(tmpstr); + fprintf(stderr, "t#2 read len: %d\n", t2len); + t=0; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + tmpstr[t++] = rxbuf[bpos++]; + t3len = atoi(tmpstr); + fprintf(stderr, "t#3 read len: %d\n", t3len); + + fprintf(stderr, "t#1 data: '"); + for (i=0; i 31 || c < 128) + fprintf(stderr, "%c", c); + else + fprintf(stderr, "0x%02x ", c); } + fprintf(stderr, "'\n"); - if (rxbuf[0] == 'q') { - fprintf(stderr, "Exiting...\n"); - in_cmd = -1; + fprintf(stderr, "t#2 data: '"); + for (i=0; i 31 || c < 128) + fprintf(stderr, "%c", c); + else + fprintf(stderr, "0x%02x ", c); } + fprintf(stderr, "'\n"); - return in_cmd; + fprintf(stderr, "t#3 data: '"); + for (i=0; i 31 || c < 128) + fprintf(stderr, "%c", c); + else + fprintf(stderr, "0x%02x ", c); + } + fprintf(stderr, "'\n"); } void process_read_packet(char *rxbuf, int rxpos) { int bpos; +char cmd[2]; bpos = 2; // index into read buffer if (rxbuf[bpos] == 'P') { fprintf(stderr, "positive, "); bpos++; - fprintf(stderr, "cmd was '%c%c', ", rxbuf[bpos], rxbuf[bpos+1]); - bpos+=2; + cmd[0] = rxbuf[bpos++]; + cmd[1] = rxbuf[bpos++]; + fprintf(stderr, "cmd was '%c%c', ", cmd[0], cmd[1]); + if (rxbuf[bpos]=='0' && rxbuf[bpos+1]=='0') { fprintf(stderr, "no card present, "); } else if (rxbuf[bpos]=='0' && rxbuf[bpos+1]=='1') { @@ -139,7 +261,7 @@ int bpos; fprintf(stderr, "negative, "); bpos++; fprintf(stderr, "cmd was '%c%c', ", rxbuf[bpos], rxbuf[bpos+1]); - bpos+=2; + bpos += 2; if (rxbuf[bpos]=='0' && rxbuf[bpos+1]=='0') { fprintf(stderr, "undefined command, "); } else if (rxbuf[bpos]=='0' && rxbuf[bpos+1]=='1') { @@ -163,42 +285,53 @@ int bpos; } else if (rxbuf[bpos]=='4' && rxbuf[bpos+1]=='6') { fprintf(stderr, "Jitter read error, "); } else - fprintf(stderr, "stat is '%c%c', ", rxbuf[bpos], rxbuf[bpos+1]); + fprintf(stderr, "unknown stat '%c%c', ", rxbuf[bpos], rxbuf[bpos+1]); } - bpos+=2; - if (bpos < rxpos-3) + + bpos += 2; + if (bpos < rxpos-3) { fprintf(stderr, "\ndata: "); - while (bpos < rxpos-3) { - unsigned char c = rxbuf[bpos++]; - if (c > 31 || c < 128) - fprintf(stderr, "%c", c); - else - fprintf(stderr, "0x%02x ", c); - + if (cmd[0] == '6' && cmd[1] == 'A') { + print_multi_track((rxbuf+bpos), rxpos-3); + } else { + while (bpos < rxpos-3) { + unsigned char c = rxbuf[bpos++]; + if (c > 31 || c < 128) + fprintf(stderr, "%c", c); + else + fprintf(stderr, "0x%02x ", c); + } + fprintf(stderr, "\n"); + } } - fprintf(stderr, "\n"); } int main(int argc, char **argv) { +char *ser_dev; char rxbuf[256]; -int ufd, rxlen=0, rxpos=0, ret; +int ufd, rxlen=0, rxpos=0, ret=0; int in_cmd = 0; fd_set rfds; struct timeval tval; - if (open_uart("/dev/ttyUSB0", B9600) != 0) + if (argc > 1) + ser_dev = argv[1]; + else + ser_dev = "/dev/ttyS0"; + if (open_uart(ser_dev, B9600) != 0) return -1; ufd = uart_get_fd(); // fprintf(stderr, "UART fd = %d\n", ufd); + FD_ZERO(&rfds); FD_SET(ufd, &rfds); FD_SET(0, &rfds); tval.tv_sec = 0; tval.tv_usec = 5000000; - fprintf(stderr, "OMRON MVFW card reader terminal\nEnter 'h' for help\n"); - while (1) { + fprintf(stderr, "OMRON MVFW card reader terminal\non serial %s\nEnter 'h' for help\n", ser_dev); + while (ret >= 0) { ret = select((ufd+1), &rfds, NULL, NULL, &tval); if (ret == 0) { FD_ZERO(&rfds); @@ -228,8 +361,8 @@ struct timeval tval; process_read_packet(rxbuf, rxpos); memset(rxbuf, 0, 256); rxpos = 0; - } else - fprintf(stderr, "buf not complete yet\n"); + } //else + // fprintf(stderr, "buf not complete yet\n"); } if (FD_ISSET(0, &rfds)) { // fprintf(stderr, "**** keypress\n"); @@ -257,3 +390,4 @@ struct timeval tval; return 0; } +