FreeCalypso > hg > fc-sim-tools
diff 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 |
line wrap: on
line diff
--- a/libcommon/backend.c Sat Mar 20 21:53:31 2021 +0000 +++ b/libcommon/backend.c Sun Mar 21 01:56:49 2021 +0000 @@ -7,12 +7,15 @@ #include <stdlib.h> #include <unistd.h> -extern unsigned calypso_fd, pcsc_reader_num; +extern unsigned calypso_fd, pcsc_reader_num, serial_spenh; +extern int use_pcsc; +extern char *serial_device, *serial_baud; static char calypso_be_pathname[] = "/opt/freecalypso/bin/fcsim-calypso-be"; +static char serial_be_pathname[] = "/opt/freecalypso/bin/fcsim-serial-be"; static char pcsc_be_pathname[] = "/opt/freecalypso/bin/fc-pcsc-backend"; -static char *backend_prog, *backend_argv[3], backend_optarg[16]; +static char *backend_prog, *backend_argv[4], backend_optarg[16]; FILE *cpipeF, *rpipeF; @@ -36,14 +39,36 @@ backend_argv[2] = 0; } +static void +setup_be_serial() +{ + backend_prog = serial_be_pathname; + backend_argv[0] = "fcsim-serial-be"; + backend_argv[1] = serial_device; + if (serial_baud) + backend_argv[2] = serial_baud; + else if (serial_spenh) { + sprintf(backend_optarg, "9600,55800,%u", serial_spenh); + backend_argv[2] = backend_optarg; + } else + backend_argv[2] = "9600"; + backend_argv[3] = 0; +} + launch_backend() { int cpipe[2], rpipe[2], rc; if (calypso_fd) setup_be_calypso(); - else + else if (use_pcsc) setup_be_pcsc(); + else if (serial_device) + setup_be_serial(); + else { + fprintf(stderr, "error: no -d or -p target selected\n"); + exit(1); + } if (pipe(cpipe) < 0 || pipe(rpipe) < 0) { perror("pipe"); exit(1);