#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef __BORLANDC__
#include <conio.h>
#endif

#include "basic.h"
#include "sensor.h"
#include "eventq.h"
#include "cmdparse.h"
#include "cmdproc.h"

extern void skelSensorInit(int sensorId);
void processCommand(void);

static char testSetLevel[] = "set levels $PALEVEL, PL1.20000, PH3.400000, HL5.600000, HH7.800000, TL9.100000, TH10.11.000000, GFLL11.120000, GFLH13.140000, GFHL15.160000, GFHH17.180000";

void main(int argc, char *argv[])
{
  int i;

  (void)eventqInit();
  cmdprocInit();
  (void)cmdparseInit();
  (void)sensorInit();
  outfmtInit();
  (void)versionInit();
  rtcInit();

  cmdparseShow();

  // set up the skeleton sensors for now
  for (i=0;i<SENSOR_NUM_SENSORS;i++)
    skelSensorInit(i);

  for (i=0;i<(SENSOR_NUM_SENSORS<<1);i++)
    sensorSetLevel(i,(float)(i* 1.0));

  eventqFireEvent(EVENTQ_EVENT_TIMER);

  cmdparseDoCommand("set amask 0x00");
  cmdparseDoCommand("set amask 0x01");

  cmdparseDoCommand("get amask");

  eventqFireEvent(EVENTQ_EVENT_TIMER);

  cmdparseDoCommand("set echo on");

  // breakpoint here!!!
  cmdparseDoCommand(testSetLevel);

  printf("parstest: hit 'q' to quit\n");

  outfmtSendPrompt();

  while(1) {
    eventqProcessEvents();
    processCommand();
  }
}

static boolean sendLF = true;

void processCommand(void)
{
  char ch;
  if (kbhit() == true) {
    ch = getch();
    if (ch == 'q')
      exit(0);
    cmdprocAccumulateChExt(ch);
    if ((ch == 0x0d) && (sendLF == true)) {
      cmdprocAccumulateChExt(0x0a);
    }
    // if (sendLF == true) sendLF = false; else sendLF = true;
  }
}
