#pragma once
#include <unordered_map>
#include <vector>
#include <string>

template<typename T>
struct FVector3
{
	T X;
	T Y;
	T Z;
};
 
enum  RadarPosition :int32_t
{
	RADAR_LEFT,
	RADAR_RIGHT,
	RADAR_REAR,
	RADAR_ALL
};
enum  RenderPosition :int32_t
{
	FRONT,
	BACK,
	LEFT,
	RIGHT,
	DASHBOARD,
	DASHBOARD_m,
	ALL
};
enum EgoType :int32_t
{
	None,
	User,	 
	Car
};

enum ChannelType:int32_t
{
	CHANNEL_CAR,
	CHANNEL_IMU,
	CHANNEL_RADAR,
	
#ifdef LIDAR_SENSOR
    CHANNEL_LEFT_LIDAR,
	CHANNEL_RIGHT_LIDAR,
#endif

	CHANNEL_ALL,
};

 
enum UserState
{
	Offline=0,
	Idle = 1,
	Remote = 2,
	Automotive = 3,
	AskRemote = 4
};

struct UserCamera
{
	int32_t uid;
	EgoType type;
	UserState state;
	std::string name;
 
};
struct OfferDesc
{
	char type[16];
	char sdp[4096 * 3-16];
};
struct AnswerDesc
{
	char type[16];
	char sdp[4096 * 3 - 16];
};
struct CandidateDesc
{
	char  candidate[4096];
	char sdp_mid[4096];
	int32_t sdp_mline_index;
};
#pragma pack(1)
#define CAN_MSG_LEN  13
struct cannet_frame
{
	int8_t dlc;
	int32_t canid;
	int8_t data[8];
	
};

#pragma pack()
enum RobotStatus
{
	 OK,
	 Fail,
};

#pragma pack()
struct RadarData
{
     int32_t r0;
     int32_t r1;
     int32_t r2;
     int32_t r3;
     int32_t r4;
     int32_t r5;
     int32_t r6;
     int32_t r7;
};

struct FeedData
{
	//int32_t work_pressure;
	//int32_t brake_pressure;
	//int32_t gearbox_oil_temp;
	//int32_t gearbox_oil_pressure; 
	//int32_t engine_rpm;
	//int32_t engine_pressure;
	//int32_t speed;
	////	int32_t gear;
	//int32_t cold_water;
	//int32_t steer_angle;
	//int32_t left_lock_status;
	//int32_t right_lock_status;
	///////////////////////////////////////////////////////状态参数
	int32_t Engine_speed = 1;//发动机转速
	int32_t Travel_speed = 2;//行驶速度
	int32_t Fuel_level = 3;//燃油油位
	int32_t Engine_temperature = 4;//发动机水温
	int32_t Hydraulic_oil_temperature = 5;//液压油油温
	int32_t Main_pump_1_pressure = 6;//主泵1压力
	int32_t Main_pump_2_pressure = 7;//主泵2压力
	int32_t Hand_gear = 8;//水箱水位
	int32_t Actual_gear = 9;//发动机机油压力
	_Float32 Gripper_height = 10;//抓具高度
	_Float32 amplitude = 11;//幅度
	int32_t Boom_angle = 12;//动臂角度
	int32_t Stick_angle = 13;//斗杆角度
	///////////////////////////////////////////////////////报警信息
	int32_t Idle_protection = 14;//怠速保护
	int32_t Front_toggle = 15;//前轮对中
	int32_t Back_toggle = 16;//后轮对中
	int8_t Error_Buff[8];//报警信息

	int32_t interlock = 18;//启动联锁
	int32_t safety_switch = 19;//安全开关阀异常
	int32_t arm_lift_pilot = 20;//大臂提升先导比例阀异常
	int32_t arm_lowering_pilot = 21;//大臂下降先导比例阀异常
	int32_t lever_lifting_pilot = 22;//斗杆提升先导比例阀异常
	int32_t rod_lowering_pilot = 23;//斗杆下降先导比例阀异常
	int32_t left_rotary_pilot = 24;//左回转先导比例阀异常
	int32_t right_rotary_pilot = 25;//右回转先导比例阀异常
	int32_t grab_open_pilot = 26;//抓斗开启先导比例阀异常
	int32_t grab_close_pilot = 27;//抓斗闭合先导比例阀异常
	int32_t safety_valves = 28;//安全开关阀
	
	//int32_t Boom_lift_pilot_pressure = 15;//动臂提升先导压力传感器故障
	//int32_t Boom_drop_pilot_pressure = 16;//动臂下降先导压力传感器故障
	//int32_t Stick_lift_pilot_pressure = 17;//斗杆提升先导压力传感器故障
	//int32_t Stick_Drop_Pilot_Pressure = 18;//斗杆下降先导压力传感器故障
	//int32_t left_turn_Pressure = 19;//车体左回转先导压力传感器故障
	//int32_t right_turn_Pressure = 20;//车体右回转先导压力传感器故障
	//int32_t outstretched_Pressure = 21;//支腿伸出先导压力传感器故障
	//int32_t instretched_Pressure = 22;//支腿缩回先导压力传感器故障
	//int32_t grab_opens_the_pilot = 23;//抓斗开启先导压力传感器故障
	//int32_t grab_close_the_pilot = 24;//抓斗闭合先导压力传感器故障
	//int32_t Main_pump_1_pilot_pressure = 25;//主泵1压力传感器故障
	//int32_t Main_pump_2_pilot_pressure = 26;//主泵2压力传感器故障
	//int32_t rod_cavity_pressure = 27;//动臂无杆腔压力传感器故障
	//int32_t stick_cavity_pressure = 28;//斗杆无杆腔压力传感器故障
	//int32_t Parking_pressure = 29;//驻车压力传感器故障
	//int32_t Failure_of_the_accumulator_pressure = 30;//蓄能器压力传感器故障
	//int32_t Gas_pedal_failure = 31;//油门踏板故障
	//int32_t Faulty_throttle_knob = 32;//油门旋钮故障
	//int32_t Leg_handle_failure = 33;//支腿手柄故障
	//int32_t The_gripper_knob_faulty = 34;//抓具旋钮故障
	//int32_t Hydraulic_oil_temperature_sensor_failure = 35;//液压油温传感器故障
	//int32_t Faulty_fuel_level_sensor = 36;//燃油油位传感器故障
	//int32_t Boom_inclination_sensor_failure = 37;//动臂倾角传感器故障
	//int32_t Stick_inclination_sensor_communication = 38;//斗杆倾角传感器通讯故障
	//int32_t Expansion_module_communication_failure = 39;//扩展模块通讯故障
	//int32_t working_distance_exceeded = 40;//工作距离超限
	//int32_t hydraulic_oil_temperature_low = 41;//燃油油位低
	//int32_t Low_battery_voltage = 42;//电池电压低
	//int32_t High_battery_voltage = 43;//电池电压高
	//int32_t accumulator_pressure_abnormal = 44;//蓄能器压力异常
	//int32_t hydraulic_oil_temperature_high = 45;//液压油温高
	//int32_t Low_oil_pressure = 46;//机油压力低
	//int32_t Low_coolant_level = 47;//冷却液液位低
	//int32_t High_coolant_level = 48;//冷却液温度高
	//int32_t system_overloaded = 49;//系统超载
	//int32_t Safety_bypass_pressed = 50;//安全旁通按下
	//int32_t Engine_SPN_failure = 51;//发动机SPN故障
	//int32_t engine_warming_up = 52;//发动机预热中
	//int32_t engine_warming_up_timeout = 53;//发动机预热超时
	//int32_t Emergency_stop_press = 54;//紧急停止按下	
};

struct cannet_frame_receive
{
	int32_t canid;
	int8_t dlc;
	int8_t data[8];
	
};