/****************************************************************************/
/* 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, ERRORS)

#include "cmd_io.c"

long clockTicks = 0;

#INT_RTCC
rtccCounter()
{
    clockTicks++;
}

int showHelp()
{
    printf("V - show version\r\n");
    printf("? - show this menu\r\n");
    
    return ERR_SUCCESS;
}

int showVersion()
{
    printf("Alana's Magic PIC Board, rev %s\r\n", VS_VERSION);
    printf("built on %s\r\n", __DATE__);
    
    return ERR_SUCCESS;
}

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;  
    }
    
    /************************************************************************/
    /***                        start debug commands                      ***/
    /************************************************************************/
    
    /************************************************************************/
    /***                         end debug commands                       ***/
    /************************************************************************/

    /****************************** END CMDS ********************************/

    putErr(NO_COMMAND_MATCH);
    return;
}

main()
{
    /* set up the system clock */
    setup_counters(RTCC_INTERNAL, RTCC_DIV_64);
    
    /* enable appropriate interrupts */
    enable_interrupts(INT_RTCC);
    enable_interrupts(GLOBAL);

    /* main loop */
    for(;;)
    {
        output_bit(PIN_C3, LO);
        delay_ms(2000);
        output_bit(PIN_C3, HI);
        delay_ms(2000);
        processCmds();
    }
}
