/*************************************************************************************** Filename:lego.h, version v-1.0 Authored By: Sudhanshu Gaur (sgaur@vt.edu) Acknowledgement: This work is based on Daniel Berger's VC++ RCX interface and Kekoa's RCX Opcode reference page ****************************************************************************************/ #include typedef enum{ S1=0, S2=1, S3=2 } SENSOR_NAME; typedef enum{ A=1, B=2, C=4 }MOTOR; typedef enum { FORWARD = 0x80, BACKWARD = 0x00 } DIRECTION; typedef enum{ TOUCH_SENSOR=1, LIGHT_SENSOR=3, ROTATION_SENSOR=4 } SENSOR_TYPE; typedef enum { BLIP=0, BEEP_BEEP=1, DOWNWARD_TONE=2, UPWARD_TONE=3, LOW_BUZZ=4, FAST_UPWARD_TONE=5 } LEGO_SOUND; // SENSOR_MODE /* Note The SENSOR_MODE COMBINES THE SENSOR MODE AND THE SLOPE FOR THAT MODE ( ITS BASCICALLY what THEY CALL 'code') */ typedef enum{ BOOLEAN_MODE = 0x20, PERCENTAGE_MODE = 0x80, ANGLE_MODE = 0xFF } SENSOR_MODE; // transmitter range typedef enum { SHORT_RANGE = 0, LONG_RANGE = 1 } TRANSMITTER_RANGE; class lego { public: lego(); // constructor ~lego(); // destructor int open(); int close(); void DbgOn(); void DbgOff(); int SetSensor(SENSOR_NAME name, SENSOR_TYPE type); int SetSensorMode(SENSOR_NAME name, SENSOR_MODE mode); int SetTransmitRange(TRANSMITTER_RANGE dist); int ReadSensor(SENSOR_NAME name,int &value); int StartMotor(MOTOR motor); int SetMotorSpeed(MOTOR motor, int speed); int SetMotorDirection(MOTOR motor, DIRECTION direction); int StopMotor(MOTOR motor); int SetSound(LEGO_SOUND val); int SetTone(int freq,int dur); int Alive(int &val); private: int OpenUsbPort(); int CloseUsbPort(); int RCX_decode_sensor(unsigned char *recbuf, int len,int &value); int RCX_send(unsigned char *msgage, int length); int RCX_receive(unsigned char *rcbuf, unsigned long length); unsigned char toggle(unsigned char); void DownloadFirmware(); private: unsigned char switchbit; // used to toggle header bit on each msg to RCX // buffers used for RCX comm unsigned char sendbuf[2500]; unsigned char recbuf[2500]; unsigned char msg[1000]; DCB dcb; // used for USB comm HANDLE UsbPort; // used for USB comm int dbg_lvl; // debug print ? }; #define USB_TOWER "\\\\.\\LEGOTOWER1"