/**
  ******************************************************************************
  * @file    TADebug.c
  * @author  C. Otten
  * @version V0.0.0
  * @date    03/10/2011
  * @brief   Thermistor Array debug
  ******************************************************************************
  *
  * COPYRIGHT 2011 Liquid Robotics, Inc.
  **/

#include "includes.h"
#include "uart.h"
#include "pib_apps.h"
#include "User_app_init.h"
#include "fltPyldComms.h"
#include "TADebug.h"

#ifdef  _DEBUG_PORT

typedef struct _TADEBUG_TASK_
{
  uint8_t taskID;
  uint8_t portNum;
}TADEBUG_TASK, *PTADEBUG_TASK;

extern char fileIn[NUM_TASK_FILES][MAX_FILE_SIZE_IN] __attribute__((section(".xdata")));
extern char fileOut[NUM_TASK_FILES][MAX_FILE_SIZE_OUT] __attribute__((section(".xdata")));
extern uint16_t fileOutSize[NUM_TASK_FILES];
extern BOOL fileAvailable[NUM_TASK_FILES];
extern uint32_t fileAvailableID[NUM_TASK_FILES];

extern FLOAT_TX_BUFFER txFloatData[MAX_FLOAT_BUFFERS] __attribute__((section(".xdata")));
extern uint8_t  headFloatTx;
extern uint8_t tailFloatTx;

extern uint8_t  DotToPad(char* pad, char* dot);
extern uint16_t mainTaskAddress;

uint8_t TADebug_Init(PTADEBUG_TASK pTaskInfo)
{
  uint8_t retval = SUCCESS;

  OSuartInitPort(pTaskInfo->portNum, 115200, UART_MODE_EIGHT_DATA_BITS, UART_MODE_ONE_STOP_BIT, UART_MODE_NO_PARITY);

  OSTimeDlyHMSM(0,0,1,0);

  return retval;
}


extern uint8_t ta_busy;
void TADebug(void* pParam)                    // Task.
{
  TADEBUG_TASK taskInfo;
  PTADEBUG_TASK pTaskInit = (PTADEBUG_TASK)pParam;
  uint8_t retval = FAIL;

  taskInfo.taskID = pTaskInit->taskID;
  taskInfo.portNum = pTaskInit->portNum;

  retval = TADebug_Init(&taskInfo);


  uint8_t err;
  uint8_t achar;
  // Debug. Send string to a PCOM in the debug slot.
  //  If there's no PCOM, no harm done. If there is one, make sure it is not attached to any instrument.
  OSuartPutStrWait(taskInfo.portNum, "tadebug start\r", 100, &err);

  if(retval == SUCCESS)
  {
    for(;;)
    {
      while (ta_busy == 1)
      // When PowerLoad is busy with Float C&C, let it focus on that task only.
      // Capture debug commands for as long as the receive buffer allows.
      OSTimeDly(10);

//Needs to be initialized first! PORTL |= (1<<3);
      achar = OSuartGetCharWait(taskInfo.portNum, 1, &err);
      if (err == OS_ERR_NONE)
    {
        if (ta_busy == 0)
          OSuartPutCharWait(USER_PORT_2, achar, 10);
        else
          OSuartPutStrWait(taskInfo.portNum, "Therm. Array in use.\r", 100, &err);
    }

      if (ta_busy == 0)
      {
        achar = OSuartGetCharWait(USER_PORT_2, 1, &err);
        if (err == OS_ERR_NONE)
          OSuartPutCharWait(taskInfo.portNum, achar, 10);
      }
//Needs to be initialized first! PORTL &= ~(1<<3);
    } // for (ever)
  }
  return;
} // TADebug (task)
#endif // _DEBUG_PORT
