#ifndef PIBOT_DATA_FRAME_H_
#define PIBOT_DATA_FRAME_H_

// 协议接口类

//消息id定义
enum MESSAGE_ID
{
    ID_GET_VERSION = 0,             // 获取version信息
    ID_SET_ROBOT_PARAMTER = 1,      // 设置机器人参数
    ID_GET_ROBOT_PARAMTER = 2,      // 获取机器人参数
    ID_CLEAR_ODOM = 3,              // 清除里程计
    ID_SET_VELOCITY = 4,            // 下发速度值
    ID_GET_ODOM = 5,                // 获取里程计值
    ID_GET_PID_DATA = 6,            // 获取PID值的输入和反馈（用于PID参数调节)
    ID_GET_IMU_DATA = 7,            // 获取imu值
    ID_GET_ENCODER_COUNT = 8,
    ID_SET_MOTOR_PWM = 9,
    ID_MESSGAE_MAX
};

// 通知接口
class Notify
{
public:
    virtual void update(const MESSAGE_ID id, void* data) = 0;
};

// 协议接口， 继承改接口实现一种协议
class Dataframe
{
public:
    //初始化
    virtual bool init()=0;

    // 注册notify， 对需要关注的id添加关注
    virtual void RegisterNotify(const MESSAGE_ID id, Notify* _nf)=0;

    // 数据接收接口
    virtual bool dataRecv(unsigned char c)=0;

    // 解析协议
    virtual bool dataParse()=0;

    // 用于主动交互信息 预留
    virtual bool interact(const MESSAGE_ID id)=0;
};

#endif
