#include <stdio.h>
#include <stdint.h>
#include <aspoutil.h>
#include <aspoprotocol.h>

#include "feig.h"
/*
  All section and page referenses are for H20800-18e-ID-B.pdf,
  ask a Feig represenative for the file.
*/

LOG_BUFFER(400)

#define BUFSZ 255
const size_t bufsize = BUFSZ;
uint8_t buf[BUFSZ];

/**************************************/

static void Usage(void) {
  printf("Usage:\n"
         "\t%s device_name com-adr\n"
	 "Arguments:\n"
	 "\tdevice_name (e.g. /dev/ttyS0) serial port to scan\n"
	 "\tcom-adr value to write to CFG1, byte 0\n"
         , cmdline_pgm);
  exit(1);
}

int main(int argc, char *argv[]) {
  int fd;
  struct termios save;
  uint8_t com_adr;
  struct openraw_t sp;
  struct feig_readerinfo_t info;

  (void) cmdline_extrpgm(argv);
  log_open(NULL, 0, 0);
  LOG_IF (feig_baud_bits_sz == 0, LOG_CRIT) exit(1);

  if (argc < 3) Usage();

  LOG_IF( (fd = tty_openraw(&save, argv[1], 0, &sp)) < 0, LOG_ERR) return -1;

  {
    char *pp;
    long val = strtol(argv[2], &pp, 0);
    if (*pp || val < 0 || 255 < val) {
      printf("argument 2 (%s) should be a number between 0 and 255 (0xff)\n", argv[2]);
      Usage();
    }
    com_adr = val;
  }
  printf("opened %s, com_adr = 0x%02x\n", sp.dev, com_adr);
  if (feig_find(fd, &sp, 500000, NULL, &info) < 0) goto End;

  printf("Found at baud rate %s, %s parity:\n", ttybaud_speed(sp.baud_bits)->str, parity_name[sp.parity]);
  (void) feig_readerinfo_print("  ", &info);

  (void) feig_standard_setup(fd, info.sw_type, com_adr);

 End:
  LOG_VIF( tty_close(fd, &save, sp.dev, getpid()), LOG_ERR, " dev = %s", sp.dev) {}
  return 0;
}
