#ifndef __BORLANDC__
#include <msp430x14x.h>
#endif
#include <stdio.h>

#include "basic.h"
#include "config.h"
#include "errnum.h"
#include "eventq.h"
#include "timer.h"
#include "util.h"
#include "cmdparse.h"
#include "poll.h"

static int period = 10;
static pTimer pollTimer;

int getPeriodHandler(char *cmdStr);
int setPeriodHandler(char *);
int pollHandler(char *);

int pollInit(void)
{
  // create a timer with the initial polling period (period)

  pollTimer = timerCreate(TIMER_FLAGS_PERIODIC,
                          period,
			  EVENTQ_EVENT_DATAPOLL);

  cmdparseAddCommand("set", "period", setPeriodHandler);
  cmdparseAddCommand("get", "period", getPeriodHandler);
  cmdparseAddCommand("poll", NULL, pollHandler);  
  return 0;
}

static int getPeriodHandler(char *cmdStr)
{
  // printf("period[%d]\n",period);
  return 0;
}

static int setPeriodHandler(char *cmdStr)
{
  int retVal, setPeriod;
  
  eatWhiteSpace(&cmdStr);
  retVal = sscanf(cmdStr, "%d", &setPeriod);
  
  if (retVal != 1)
    return ERRNUM_INVALID_ARG;

  // max 1/1sec sampling rate
  
  if (setPeriod < 0) {
    return ERRNUM_INVALID_ARG;
    }
  else if (setPeriod == 0) {
    // cancel timer
    // timerCancel(pollTimer);
    }
  else {
    // mod timer
    timerModify(pollTimer, TIMER_FLAGS_PERIODIC, setPeriod);
    // printf("setPeriodHandler: setting period to [%d]\n", setPeriod);
  }

  return 0;
}

static int pollHandler(char * cmdStr)
{
  eventqPut(EVENTQ_EVENT_DATAPOLL);
  return 0;
}
