// *************************************************************
// The Robotics Institute
// Carnegie Mellon University
// Copyright (C) 2000 by RI.
// All Rights Reserved.
//
// File: 					sample.cpp
// Project: 			PalmPilot Robot source code (Advanced project)
// Author: 				Greg Reshko
// Last modified: 4/03/2000
// Program:
// Simple demo/test program.
// *************************************************************


#include "TestForm_res.h"	// include form resource
#define PILOT_PRECOMPILED_HEADERS_OFF
#include <Common.h>
#include <Pilot.h>
#include <SysAll.h>
#include <UIAll.h>
#include <SerialMgr.h>

#include "MathLib.h"	// Pilot IEEE-754 double math functions
											// Note: Library requires installed MathLib.prc 
#include "vecmath.h"	// vector math operations
#include "sv203.h"		// SV203 board class
#include "robot.h"		// Robot class


Robot myrobot;	// create "myrobot" PalmPilot Robot

Boolean Form1Handle(EventPtr event);	// prototype for event handler 

// Simple demo/test function
void SimpleFunction(void) {
	int a, ir1;
	vector A(0.10,0.00), B(0.00, 0.10);	// create 2 vectors
	myrobot.Vector_Drive(A, 0);					// drive in direction of A vector (X direction)
	myrobot.Wait(100, NULL);						// wait for 100ms
	myrobot.Stop();											// stop
	myrobot.Message("Hello!");					// say hello!
	myrobot.Wait(10000, &a);						// wait until screen was touched
	myrobot.Vector_Drive(B, 0);					// drive in direction of B vector (Y direction)
	myrobot.Wait(100, NULL);						// wait for 100ms
	myrobot.Stop();											// stop
	ir1 = myrobot.IRDist(1);						// get distance from first IR sensor
	myrobot.Message(ir1);								// display that distance
	
}


// Main event loop
// The loop uses Form1Handle to handle all events
void EventLoop() {
  EventType e;
  unsigned short err, formID;
  FormType* form;
  do {
		EvtGetEvent(&e,-1);
    if (SysHandleEvent(&e)) continue;
    if (MenuHandleEvent(0, &e, &err)) continue;
    if (e.eType == frmLoadEvent) {
      formID = e.data.frmLoad.formID;
      form=FrmInitForm(formID);
      FrmSetActiveForm(form);
      switch (formID) {
        case Form1Form: FrmSetEventHandler(form, (FormEventHandlerPtr) Form1Handle); break; } }
    FrmDispatchEvent(&e);
  } while(e.eType != appStopEvent);
}

// Main function; required for all applications
DWord  PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags) {
	if (cmd == sysAppLaunchCmdNormalLaunch) {	// application launched
	  FrmGotoForm(Form1Form);									// go to Form1 form
		EventLoop(); }													// run main event loop 
	return 0;
}


// Main event handler
Boolean Form1Handle(EventPtr event) {
	Boolean Handled=false;
    switch (event->eType) {
			case frmOpenEvent:
    		Handled=true;
        FrmDrawForm(FrmGetActiveForm());
				break;
      case nilEvent: 
       	Handled=true;
        break;
			case ctlSelectEvent:													// Button: click
        switch (event->data.ctlSelect.controlID) {
					case Form1StopButton:											// 'Stop' button
						SimpleFunction();
						break; }
	      Handled=true;
        break;
	    default:
	    	FrmHandleEvent(FrmGetActiveForm(), event);
	    	Handled=true;
	    	break; }
  return Handled;
}


