comparison libcommon/backend.c @ 45:9eb5460f51a6

main tools: support both pcsc and serial back ends
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Mar 2021 01:56:49 +0000
parents c9ef9e91dd8e
children
comparison
equal deleted inserted replaced
44:0bc89d61fc59 45:9eb5460f51a6
5 5
6 #include <stdio.h> 6 #include <stdio.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 #include <unistd.h> 8 #include <unistd.h>
9 9
10 extern unsigned calypso_fd, pcsc_reader_num; 10 extern unsigned calypso_fd, pcsc_reader_num, serial_spenh;
11 extern int use_pcsc;
12 extern char *serial_device, *serial_baud;
11 13
12 static char calypso_be_pathname[] = "/opt/freecalypso/bin/fcsim-calypso-be"; 14 static char calypso_be_pathname[] = "/opt/freecalypso/bin/fcsim-calypso-be";
15 static char serial_be_pathname[] = "/opt/freecalypso/bin/fcsim-serial-be";
13 static char pcsc_be_pathname[] = "/opt/freecalypso/bin/fc-pcsc-backend"; 16 static char pcsc_be_pathname[] = "/opt/freecalypso/bin/fc-pcsc-backend";
14 17
15 static char *backend_prog, *backend_argv[3], backend_optarg[16]; 18 static char *backend_prog, *backend_argv[4], backend_optarg[16];
16 19
17 FILE *cpipeF, *rpipeF; 20 FILE *cpipeF, *rpipeF;
18 21
19 static void 22 static void
20 setup_be_calypso() 23 setup_be_calypso()
34 sprintf(backend_optarg, "-p%u", pcsc_reader_num); 37 sprintf(backend_optarg, "-p%u", pcsc_reader_num);
35 backend_argv[1] = backend_optarg; 38 backend_argv[1] = backend_optarg;
36 backend_argv[2] = 0; 39 backend_argv[2] = 0;
37 } 40 }
38 41
42 static void
43 setup_be_serial()
44 {
45 backend_prog = serial_be_pathname;
46 backend_argv[0] = "fcsim-serial-be";
47 backend_argv[1] = serial_device;
48 if (serial_baud)
49 backend_argv[2] = serial_baud;
50 else if (serial_spenh) {
51 sprintf(backend_optarg, "9600,55800,%u", serial_spenh);
52 backend_argv[2] = backend_optarg;
53 } else
54 backend_argv[2] = "9600";
55 backend_argv[3] = 0;
56 }
57
39 launch_backend() 58 launch_backend()
40 { 59 {
41 int cpipe[2], rpipe[2], rc; 60 int cpipe[2], rpipe[2], rc;
42 61
43 if (calypso_fd) 62 if (calypso_fd)
44 setup_be_calypso(); 63 setup_be_calypso();
45 else 64 else if (use_pcsc)
46 setup_be_pcsc(); 65 setup_be_pcsc();
66 else if (serial_device)
67 setup_be_serial();
68 else {
69 fprintf(stderr, "error: no -d or -p target selected\n");
70 exit(1);
71 }
47 if (pipe(cpipe) < 0 || pipe(rpipe) < 0) { 72 if (pipe(cpipe) < 0 || pipe(rpipe) < 0) {
48 perror("pipe"); 73 perror("pipe");
49 exit(1); 74 exit(1);
50 } 75 }
51 rc = vfork(); 76 rc = vfork();