#ifndef _COMMANDS_H
#define _COMMANDS_H

#define NUM_COMMANDS 26

//TODO handle with enums
#define MAX_TYPE 6
#define MAX_SUBTYPE 100

int debug(unsigned char *c, int dataLen);
int setyaw(unsigned char *c, int dataLen);
int setyawp(unsigned char *c, int dataLen);
int setyawd(unsigned char *c, int dataLen);
int setroll(unsigned char *c, int dataLen);
int setrollp(unsigned char *c, int dataLen);
int setrolld(unsigned char *c, int dataLen);
int setpitch(unsigned char *c, int dataLen);
int setpitchp(unsigned char *c, int dataLen);
int setpitchd(unsigned char *c, int dataLen);
int setthrottle(unsigned char *c, int dataLen);
int setthrottlep(unsigned char *c, int dataLen);
int setthrottlei(unsigned char *c, int dataLen);
int setthrottled(unsigned char *c, int dataLen);
int getaccel(unsigned char *c, int dataLen);
int getgyro(unsigned char *c, int dataLen);
int getpitchangle(unsigned char *c, int dataLen);
int getrollangle(unsigned char *c, int dataLen);
int accelresp(unsigned char *c, int dataLen);
int gyroresp(unsigned char *c, int dataLen);
int pitchangleresp(unsigned char *c, int dataLen);
int rollangleresp(unsigned char *c, int dataLen);
int update(unsigned char *c, int dataLen);
int beginupdate(unsigned char *c, int dataLen);
int logdata(unsigned char *c, int dataLen);
int response(unsigned char *packet, int dataLen);

enum Message{
	BEGIN_CHAR = 0xBE,
	END_CHAR   = 0xED
};

enum DataType
{
	floatType,
	intType,
	stringType
};

typedef struct command {
	char ID;
	char subID;
	char dataType;
	char commandText[100];
	int (*functionPtr)(unsigned char *command, int dataLen);
}command_t;

enum CommandIDs{
	DEBUG,
	CALIBRATION,
	REQUEST,
	RESPONSE,
	UPDATE,
	LOG,
	MAX_COMMAND_IDS
};

static command_t registeredCommands[NUM_COMMANDS];

#endif