view serial/main.c @ 53:fbedb67d234f

serial: fix parity for inverse coding convention Important note: it is my (Mother Mychaela's) understanding that SIM cards with inverse coding convention are extremely rare, and I have never seen such a card. Therefore, our support for the inverse coding convention will likely remain forever untested.
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 21 Mar 2021 20:46:09 +0000
parents be27d1c85861
children
line wrap: on
line source

/*
 * This module implements the main() function for fcsim-serial-be.
 */

#include <stdio.h>
#include <stdlib.h>

extern unsigned baud_base, baud_spenh;
extern int inverse_coding;

main(argc, argv)
	char **argv;
{
	char inbuf[576];
	u_char cmd[260];
	int rc;

	if (argc != 3) {
		fprintf(stderr, "usage: %s ttyport baud\n", argv[0]);
		exit(1);
	}
	open_serial_port(argv[1]);
	parse_baud_spenh_arg(argv[2]);
	set_serial_params(baud_base, -1);
	set_serial_nonblock(0);
	serial_card_reset();
	rc = collect_atr();
	if (rc < 0)
		exit(1);
	print_atr("A");
	set_serial_params(baud_base, inverse_coding);
	if (baud_spenh)
		spenh_logic();
	putchar('\n');
	fflush(stdout);

	for (; fgets(inbuf, sizeof inbuf, stdin); fflush(stdout)) {
		rc = parse_hex_input(inbuf, cmd);
		if (rc < 0)
			continue;
		if (rc < 5) {
			printf("error: command APDU is too short\n");
			continue;
		}
		apdu_exchange(cmd, rc);
	}

	exit(0);
}