
#ifndef _FIRE_UI_VAR_H_
#define _FIRE_UI_VAR_H_


#define VAR_SELECT_HOLD_OFFSET      ((VAR_MAX+4-1)/4)       //快上快下时，每次切换偏移量。目前设置为变量总数的1/4.可修改成其他数
#define VAR_VALUE_HOLE_OFFSET       10

#define UI_VAR_USE_LCD              1                       //同步信号时需要定义是否使用LCD显示数据（1为显示，0为不显示）


typedef struct
{
    uint32  val;            //目前的值
    uint32  oldval;         //通常情况下，两者是相同，修改后，没按确认键，则不相同。按确认键发送后，则相同
                            //即最后发送的值
    uint32  minval;         //最小值
    uint32  maxval;         //最大值
    Site_t  site;           //LCD 显示的坐标位置
} ui_var_info_t;            //变量信息

//变量的发送与接收
typedef enum
{
    //变量的编号

    /* 8位变量 */
    CAR_CTRL,
    VAR1,
    VAR2,
    VAR_8BIT = VAR2, //8位变量的结束编号

    /* 16位变量 */
    VAR3,
    VAR4,
    VAR_16BIT  = VAR4,          //16位变量的结束编号

    /* 32位变量 */
    VAR5,
    VAR6,
    VAR_32BIT  = VAR6,          //32位变量的结束编号

    VAR_MAX,        //变量数目
} var_tab_e;

typedef enum
{
    VAR_NEXT,           //下一个
    VAR_PREV,           //上一个
    VAR_NEXT_HOLD,      //快下，偏移为：VAR_SELECT_HOLD_OFFSET
    VAR_PREV_HOLD,      //快上，偏移为：VAR_SELECT_HOLD_OFFSET

    VAR_ADD,            //加1
    VAR_SUB,            //减1
    VAR_ADD_HOLD,       //快加，偏移为：VAR_VALUE_HOLE_OFFSET
    VAR_SUB_HOLD,       //快减，偏移为：VAR_VALUE_HOLE_OFFSET

    VAR_OK,             //确定
    VAR_CANCEL,         //取消

    VAR_EVENT_MAX,
} ui_var_event_e;

typedef enum
{
    CAR_NULL,           //不处理

    //图像的发送
    CAR_IMG_CLOSE,      //关闭小车图像发送(包括摄像头图像和线性CCD等大容量数据)
    CAR_IMG_OPEN,       //开启小车图像发送

    //一键停车开车
    CAR_START,          //开车
    CAR_STOP,           //停车

    //遥控小车
    CAR_FORWARD,        //前进
    CAR_BACK,           //后退

    CAR_LEFT,           //左转
    CAR_RIGHT,          //右转

    CAR_FAST,           //加速
    CAR_SLOW,           //降速





    //用户可在 此处加入 一些自定义功能
    //若增加功能，务必保证 接收和发送两端都是 使用相同的 控制功能编号


    CAR_CTRL_MAX,

}CAR_CTRL_MODE_e;


extern uint32   last_tab;           //最后接收到的变量编号

void var_init();

//变量 的 赋值 与 读值
extern void     save_var(var_tab_e var_tal, uint32 var_data);       //保存编号变量的值
extern void     get_var(var_tab_e var_tal, uint32 *var_data);       //获取编号变量的值 (根据变量编号找到变量地址，从而获取变量的值)
extern void     updata_var(var_tab_e var_tal);                      //更新编号变量的值（修改变量的值后，需要调用此函数来更新编号变量的值）

extern void     var_display(uint8 tab);                             //显示编号变量的值
extern uint8    var_syn(uint8 tab);                                 //同步指定的值。tab 为 VAR_NUM 时表示全部同步，小于则同步对应的编号变量


//变量 的 选择 与 加减 控制
extern void     var_select(ui_var_event_e  ctrl);   //选择切换变量
extern void     var_value(ui_var_event_e ctrl);     //改变变量的值
extern void     var_ok();                           //确认当前选择的
extern void     val_cancel();                       //取消当前选择的值  OK


extern uint8    car_ctrl_get();                     //获取小车控制命令
extern uint8    car_ctrl_syn(CAR_CTRL_MODE_e mode); //发送小车控制命令



#endif  //_FIRE_UI_VAR_H_

