///////////////////////////////////////////////////////////////
//AGSerialComTest.cc
//
//Author:     Amanda Green
//Date:       6/26/00
//Version:    2
//
//Purpose:    Attempting to get serial data from Joystick
///////////////////////////////////////////////////////////////

#include "AGSerialComTest.h"
#include "DeviceIF.h"
#include "StreamSerialDriver.h"
#include "SerialDevice.h"
#include "SerialParameters.h"
#include <string.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>



#define MaxRecordBytes 50
#define READ_TIMEOUT 2000

AGSerialComTest::AGSerialComTest(SerialDevice *device, SerialParameters *serialParams) : StreamSerialDriver("agDriver", device, MaxRecordBytes, "*", READ_TIMEOUT)
{
        _device = device;
        _serialParams = serialParams;
}

//commenting out for now, not sure what I should get rid of 
//upon termination
//AGSerialComTest::~AGSerialComTest()
//{
//}

DeviceIF::Status AGSerialComTest::initialize()
{
    char buf[30];

    _device->commsDebugMode(SerialDevice::DebugOff);

    //initialize serial port
    _device->setLineFormat(_serialParams);

    //clear serial port
    //probably not necessary
    _device->clearPort();
    _device->flushReceiveBuf();

    return DeviceIF::Ok;
}

DeviceIF::Status AGSerialComTest::processRecord(unsigned char *record, int nRecordBytes)
{
	Boolean debug = False;
	char *reply = (char *)record;

	//variable declaration
	int inMode = 1, inPropeller, inRudder, inElevator, inChecksum;
	
	char seps[]   = "_*";
	char *token;
  	
	/* Establish string and get the first token: */
	token = strtok( reply, seps );

        reply = 0;
	int x = 0, i = 0;

	while( token != NULL )
	{
	     // While there are tokens in "reply" 
	     //printf( " %s\n", token );

	     x = atoi(token);

	     switch(i)
	     {
		case 0:
		    inMode = x;
		    break;
		case 1:
		    inPropeller = x;
		    break;
		case 2:
		    inElevator = x;
		    break;
		case 3:
		    inRudder = x;
		    break;
	 	case 4:
		    inChecksum = x;
		    break;
	     }

	     i++;

	     /* Get next token: */
	     token = strtok( NULL, seps );
        }

	//Do Stuff With the Data///////////////////////
	cout<<"Mode: "<<inMode <<"\nPropeller:  " <<inPropeller;
	cout<<"\nRudder: " <<inRudder <<"\nElevator: ";
	cout<<inElevator <<"\nChecksum: " <<inChecksum <<endl;


    
        return DeviceIF::Ok;
   
}



int main(int argc, char **argv)
{
  SerialDevice *device;
  AGSerialComTest *test;


  try {
    SerialParameters serialParams(&argc, argv);
    device = new SerialDevice(&serialParams);
    test = new AGSerialComTest(device, &serialParams);
    test->run();
  }
  catch (Exception e) {
    fprintf(stderr, "Caught Exception: %s\n", e.msg);
  }

  return 0;
}



