/*
  视觉与电控通信协议
  协议中 主要包含了 数据帧 和CRC校验 
  其中数据帧用了自定义的结构体 在结构体中修改所需要的数据域的内容
*/


#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

#define HEAD (0xFF)
#define TAIL (0xFE)

#define NAVI (0x05)
#define PICK (0x06)

#define TEAM_RED (0x01)
#define TEAM_BLUE (0x02)


typedef uint8_t Protocol_ID_t;

/* 电控 -> 视觉 MCU数据结构体*/
typedef struct __attribute__((packed)) {
   
	int remain;
} Protocol_UpDataMCU_t;
/* 视觉 -> 电控  底盘数据结构体*/
typedef struct __attribute__((packed)) {

  Protocol_ID_t recv_id;//作为帧头使用确认通信ID正确
  uint8_t status; /* 控制命令 */  
	
  struct __attribute__((packed)) {
    float posy;   /*pitch轴*/
    float posx;   /*yaw轴*/
    char  cmd;  
		float dis;   /*距离*/
  }pick;

  struct __attribute__((packed)) {
    float vx;         /* x轴移动速度 */
    float vy;         /* y轴移动速度 */
    float wz;         /* z轴转动速度 */
  }navi; 

} Protocol_DownDataChassis_t;

/* 视觉 -> 电控 上层机构数据结构体*/
typedef struct __attribute__((packed)) {

  uint8_t status; /* 控制命令 */

} Protocol_DownDataUpper_t;


typedef struct __attribute__((packed)) {
  Protocol_UpDataMCU_t data;
} Protocol_UpPackageMCU_t;


typedef struct __attribute__((packed)) {
  Protocol_DownDataChassis_t data;
} Protocol_DownPackageChassis_t;

typedef struct __attribute__((packed)) {
  Protocol_DownDataUpper_t data;
} Protocol_DownPackageUpper_t;
#ifdef __cplusplus
}
#endif