/*
  控制命令
*/
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include "module/chassis.h"
#include "module/gimbal.h"
#include "module/shoot.h"


/* Exported constants ------------------------------------------------------- */
#define CMD_OK (0)        /* 运行正常 */
#define CMD_ERR_NULL (-1) /* 运行时发现NULL指针 */    
#define CMD_ERR_ERR (-2)  /* 运行时发现了其他错误 */
#define CMD_ERR_MODE (-3) /* 运行时配置了错误的Mode */
#define CMD_ERR_MOTOR (-4) /* 运行时配置了不存在的电机类型 */
#define CMD_ERR_MALLOC (-5) /* 内存分配失败 */
/* Exported macro ----------------------------------------------------------- */
/* Exported types ----------------------------------------------------------- */

typedef union rc_u rc_u; 

typedef struct {
    rc_u *rc;               
    enum { DR16, AT9S } rc_type;
} CMD_RCInputData_t;

#define CMD_REFEREE_MAX_NUM (3) /* 发送命令限定的最大数量 */

/* 输入源枚举 */
typedef enum {
  CMD_SRC_RC,      /* 遥控器 */
  CMD_SRC_PC,      /* 键盘鼠标 */
  CMD_SRC_NUC,     /* 上位机 */
  CMD_SRC_REFEREE, /* 裁判系统 */
  CMD_SRC_NUM
} CMD_InputSource_t;

typedef struct {
  
}CMD_PCInputData_t;

typedef struct {
  
}CMD_NUCInputData_t;

typedef struct {
  
}CMD_REFInputData_t;

/* 底盘控制命令 */
typedef struct {

} CMD_cmdForChassisCtrl_t;

/* 云台控制命令 */
typedef struct {

} CMD_cmdForGimbalCtrl_t;

/* 射击控制命令 */
typedef struct {
  CMD_InputSource_t src;
  Shoot_CMD_t shoot_cmd;
} CMD_Shoot_t;

typedef struct {
  bool pc_ctrl;        /* 是否使用键鼠控制 */
  bool host_overwrite; /* 是否Host控制 */
  uint16_t key_last;   /* 上次按键键值 */

} CMD_t;

/* Exported functions prototypes -------------------------------------------- */
#ifdef __cplusplus
}
#endif
