#ifndef MSGHANDLER_H
#define	MSGHANDLER_H

#include <stdint.h>

/** GENERAL DEFINES **/
#define MSGID_SENSORDATAOUT 0x91

//StreamingOutput Mask (DataOutputConfig), bitmask, 2Bytes
#define STREAMOUT_DSPINFO      0x0001   //b0 : DSPInfo field
#define STREAMOUT_GESTUREINFO  0x0002   //b1 : GestureInfo field
#define STREAMOUT_TOUCHINFO    0x0004   //b2 : TouchInfo field
#define STREAMOUT_AIRWHEELINFO 0x0008   //b3 : AirWheelInfo field
#define STREAMOUT_XYZPOSITION  0x0010   //b4 : XYZPosition field

//SytemInfo Mask, bitmask, 1Byte
#define SI_POSVALID         0x01        //b0 : PositionValid
#define SI_AIRWHEELVALID    0x02        //b1 : AirWheelValid

//Tap Bitmask
#define BITSHIFT_TAP_SOUTH       5
#define BITSHIFT_TAP_WEST        6
#define BITSHIFT_TAP_NORTH       7
#define BITSHIFT_TAP_EAST        8
#define BITSHIFT_TAP_CENTER      9

//Gesture Info (decimal number)
#define GI_NOGESTURE        0
#define GI_GARBAGEMOD       1
#define GI_FLICK_WE         2
#define GI_FLICK_EW         3
#define GI_FLICK_SN         4
#define GI_FLICK_NS         5

//Tap Info
#define GI_TAP_WEST         50
#define GI_TAP_EAST         51
#define GI_TAP_SOUTH        52
#define GI_TAP_NORTH        53
#define GI_TAP_CENTER       54

//Airwheel Info
#define GI_AIRWHEEL_CW      90
#define GI_AIRWHEEL_CCW     91

#define MD_BUF_LEN 128

extern uint8_t i2cMsgFlag;

inline void md_start(void);
inline void md_next(uint8_t c);
uint8_t mgcProcMsg(void);

#endif