/****************************************************************************/
/* Copyright 2005 MBARI.                                                    */
/* Monterey Bay Aquarium Research Institute Proprietary Information.        */
/* All rights reserved.                                                     */
/****************************************************************************/
#include <16f876.h>
#include <stdlib.h>
#include <string.h>
#include "pic_test.h"
#include "errors.h"

#if DEBUG
#device ICD=TRUE
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#else
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#endif

#use delay(clock=4000000)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STREAM=COM_A, ERRORS)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1, STREAM=PC, ERRORS)

#define  RS485_RX_BUFFER_SIZE 64
#define  RS485_USE_EXT_INT    TRUE

int8 OUR_RS485_ID = 0;
#define RS485_ID OUR_RS485_ID

#include <rs485.c>

#include "cmd_io.c"
int8 in_char = 0;
int8 next_in = 0;
int8 next_out = 0;
int8 msg[64];


long clockTicks = 0;

#INT_RTCC
rtccCounter()
{
    clockTicks++;
}
#INT_RDA
void serial_isr()
{
   in_char = fgetc(PC);
}


int showHelp()
{
  /*  fprintf(COM_A,"V - show version\r\n");
    fprintf(COM_A,"? - show this menu\r\n");
    fprintf(COM_B,"V - show version\r\n");
   */
    return ERR_SUCCESS;
}

int showVersion()
{
/*
    fprintf(COM_B,"Alana's Magic PIC Board, rev %s\r\n", VS_VERSION);
    fprintf(COM_A,"built on %s\r\n", __DATE__);
    fprintf(COM_A,"Alana's Magic PIC Board Serial Port2\r\n");
   */
    return ERR_SUCCESS;
}
int showMessage()
{
   // fprintf(COM_A,"T - test command return\r\n");
    
    return ERR_SUCCESS;
}


void RS485send(char* s, int8 id)
{
   int8 size;

   for(size=0; s[size]!='\0'; ++size);

   rs485_wait_for_bus(FALSE);

   while(!rs485_send_message(id, size, s))
      delay_ms(OUR_RS485_ID);
}


void processCmds()
{
    char *token;
    char usr_cmd[MAX_CHARS];
    char cmd_str[MAX_CHARS];
    char delim[2];

    strcpy(delim, " ");

    if ( !getCommand(usr_cmd) )
        return;

    if ( usr_cmd[0] == '\0' )
    {
        putErr(ERR_SUCCESS);
        return;
    }

    /* grab first token */
    token = strtok(usr_cmd, delim);

    /********************************** ? ***********************************/
    strcpy(cmd_str, "?");

    if ( stricmp(token, cmd_str) == 0 )
    {
        putErr(showHelp());
        return;
    }

    /********************************** V ***********************************/
    strcpy(cmd_str, "V");

    if ( stricmp(token, cmd_str) == 0 )
    {
        putErr(showVersion());

        return;  
    }
    
    strcpy(cmd_str, "T");

    if ( stricmp(token, cmd_str) == 0 )
    {
        putErr(showMessage());

        return;  
    }
    
    /************************************************************************/
    /***                        start debug commands                      ***/
    /************************************************************************/
    
    /************************************************************************/
    /***                         end debug commands                       ***/
    /************************************************************************/

    /****************************** END CMDS ********************************/

    putErr(NO_COMMAND_MATCH);
    return;
}

main()
{
char c;
    /* set up the system clock */
    setup_counters(RTCC_INTERNAL, RTCC_DIV_64);
    
    /* enable appropriate interrupts */
    enable_interrupts(INT_RTCC);
    enable_interrupts(INT_RDA);
    enable_interrupts(GLOBAL);
  
 rs485_init();

   while(OUR_RS485_ID == 0 || OUR_RS485_ID >= 255)
   {
      printf("Please choose a network ID (1-255): ");
      OUR_RS485_ID =1;
   }

   printf("\n\rYour ID is: %d\n\r\n\rIf you require assistance, press h.\n\r", OUR_RS485_ID);

    /* main loop */
    for(;;)
    {
         RS485send(PCgetMsg(), send_addr);
          
  //     output_bit(PIN_C3, HI);
  	/*	c=fgetc(COM_A);
  		fputc(c,COM_A);
  		fputc(c,COM_B);*/
      // processCmds();
    }
}
