annotate target-utils/simagent/byterx.c @ 786:b761029f9c03

simagent: spenh command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 13 Mar 2021 22:41:33 +0000
parents c136a1a2474b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
771
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 #include <stdlib.h>
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 #include "types.h"
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3 #include "simregs.h"
783
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
4 #include "timeout.h"
771
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 rx_sim_byte(count)
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 unsigned count;
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 {
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 for (; count; count--) {
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 if (!(SIMREGS.stat & SIM_STAT_FEMPTY))
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11 return SIMREGS.drx;
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 }
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 return(-1);
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 }
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15
783
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
16 rx_sim_byte_hl()
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
17 {
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
18 int rc;
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
19 unsigned parcnt;
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
20
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
21 for (parcnt = 0; parcnt < 3; parcnt++) {
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
22 rc = rx_sim_byte(SIM_WAIT_TIMEOUT);
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
23 if (rc < 0) {
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
24 printf("ERROR: timeout waiting for SIM response\n");
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
25 return(-1);
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
26 }
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
27 if (rc & 0x100)
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
28 return rc & 0xFF;
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
29 }
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
30 printf("ERROR: received bad parity 3 times in a row\n");
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
31 return(-1);
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
32 }
c136a1a2474b simagent: initial implementation of APDU exchange
Mychaela Falconia <falcon@freecalypso.org>
parents: 782
diff changeset
33
782
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
34 flush_rx_fifo()
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
35 {
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
36 unsigned count;
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
37
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
38 for (count = 0; ; ) {
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
39 if (SIMREGS.stat & SIM_STAT_FEMPTY)
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
40 break;
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
41 (void) SIMREGS.drx;
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
42 if (++count >= 32) {
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
43 printf("ERROR: Rx FIFO flush does not end\n");
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
44 return(-1);
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
45 }
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
46 }
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
47 return(0);
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
48 }
badc5399d641 simagent: flush_rx_fifo() factored out
Mychaela Falconia <falcon@freecalypso.org>
parents: 771
diff changeset
49
771
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 void
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 cmd_sertimeout(argbulk)
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52 char *argbulk;
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 {
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 char *argv[2];
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 int count;
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 if (parse_args(argbulk, 1, 1, argv, 0) < 0)
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 return;
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 count = atoi(argv[0]);
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 rx_sim_byte(count);
9c1d580b50fb simagent: Rx byte timeout test implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61 }