

#ifndef __SV203_H__
#define __SV203_H__


#include "SerialDevice.h"

#define COMMANDDELAY   10   //millisec delay inserted before all commands to controller
                            //controller docs say 3 millesec minimum required


class sv203{

 public:

  sv203(SerialDevice *dev, int board);

  ~sv203();

  int selectBoard();
  int selectServo(int servo);
  int moveAbsolute(int pos);
  int moveInc(int inc);
  int pause(int millisec);
  int pinSet(int pin);
  int pinClear(int pin);
  int pinToggle(int pin);
  int readA2D(int port);
  int shiftIn();
  int shiftOut(int bitmask);
  int writeRam(int addr, int val);
  int readRam(int addr);
  int eepromWrite(int addr, int val);
  int eepromRead(int addr);
  void readState(int *speed, int *temp);

 private:

  ////////////////////////////////////
  // routines to build the command strings

  int constructCmd(char* cmd);
  int constructCmd(char* cmd, int p1);
  int constructCmd(char* cmd, int p1, int p2);
  int constructCmd(char* cmd1, int p1, char *cmd2, int p2);


  //////////////////////////////////////////////
  // routine to read reply strings from stp100
  int readReply(int numbytes); 
  void readReply(int num, int vals[], int numbytes);
 
  int _board;
  int _timeout;
  SerialDevice *_dev;
  char *_cmdstr;
  char *_boardcmd;
  char *_replystr;
  int _currentServo;
  int _pos[8];
};


class sv203Exception : public Exception{
 public:
  sv203Exception(char* msg) : Exception(msg){}

};



#endif
