296 lines
6.5 KiB
C
296 lines
6.5 KiB
C
#pragma once
|
||
|
||
#ifndef PROTOCOL_H
|
||
#define PROTOCOL_H
|
||
|
||
#define MAX_LEN_MISSION_NAME 64
|
||
#define MAX_COUNT_MISSION_POINT 100
|
||
|
||
enum class MESSAGES_ID : unsigned char
|
||
{
|
||
SysInfo = 1,
|
||
GyroInfo = 2,
|
||
AccelInfo = 3,
|
||
GpsInfo = 4,
|
||
InertialInfo = 5,
|
||
BatteryInfo = 6,
|
||
Ack = 7,
|
||
StatusCommand = 8,
|
||
StatusAllCommands = 9,
|
||
Command = 10,
|
||
RequestReg = 11,
|
||
ResponseReg = 12,
|
||
Auth = 13,
|
||
OpenKey = 14,
|
||
MissionCount = 15,
|
||
MissionItem = 16,
|
||
MissionItemAck = 17,
|
||
MissionRequestItem = 18,
|
||
RequestLastMessage = 19,
|
||
ConnectionTest = 20,
|
||
MissionProgress = 21,
|
||
CountMenuCategories = 32,
|
||
CategoriesMenu = 33,
|
||
CategoriesParameters = 34,
|
||
RawCalibData = 35
|
||
};
|
||
enum class COMMANDS_ID : unsigned char
|
||
{
|
||
ChangeNav = 1,
|
||
ChangeSpeed = 2,
|
||
Land = 3,
|
||
GoHome = 4,
|
||
StopEngine = 5,
|
||
StartEngine = 6,
|
||
Pause = 7,
|
||
Continue = 8,
|
||
GoToGlobal = 9,
|
||
GoToLocal = 10,
|
||
MissionStart = 11,
|
||
SetParameter = 15,
|
||
ProcessingCalibration = 16,
|
||
SetCalibrationData = 17,
|
||
MotorMoutionTest = 18
|
||
};
|
||
enum class ERROR_CODE_COMMAND : unsigned char
|
||
{
|
||
No_error = 0,
|
||
Speed_has_already_been_set = 1,
|
||
Engines_are_already_running = 2,
|
||
Engines_have_already_been_stopped = 3,
|
||
UAV_is_already_on_the_ground = 4,
|
||
UAV_is_already_landing = 5,
|
||
UAV_is_already_moving = 6,
|
||
Mission_has_not_been_launched = 7,
|
||
Mission_is_already_on_pause = 8,
|
||
Mission_was_not_on_pause = 9,
|
||
Mission_was_not_launched = 10,
|
||
This_NavSys_has_already_been_applied = 11,
|
||
Lost_connection_with_controller = 12,
|
||
The_command_is_canceled_when_a_new_one_is_received = 13,
|
||
Error_reading_the_mission_file = 14,
|
||
Error_validating_the_mission_file = 15,
|
||
This_attack_event_already_exists = 16,
|
||
Error_creating_the_configuration_file_moa = 17,
|
||
Error_saving_the_configuration_file_moa = 18,
|
||
Error_deleting_the_attack_event = 19,
|
||
This_attack_event_cannot_be_deleted = 20,
|
||
This_attack_event_does_not_exist = 21,
|
||
Gps_not_init = 22,
|
||
};
|
||
enum class SENSOR_ID : unsigned char
|
||
{
|
||
ACC = 0,
|
||
IMU_MAG = 1,
|
||
EXTERNAL_MAG = 2,
|
||
LEVEL_HOR = 3
|
||
};
|
||
enum class ENGINE_STATUS : unsigned char
|
||
{
|
||
disable = 0,
|
||
enable = 1
|
||
};
|
||
enum class STATUS_MODE : unsigned char
|
||
{
|
||
on_ground = 1,
|
||
taking_off = 2,
|
||
fly = 3,
|
||
landing = 4
|
||
};
|
||
enum class SYS_MODE : unsigned char
|
||
{
|
||
take_off = 1,
|
||
land = 2,
|
||
go_home = 3,
|
||
auto_mode = 4,
|
||
hold = 5,
|
||
manual = 6
|
||
};
|
||
enum class NAV_SYS_MODE : unsigned char
|
||
{
|
||
inertial = 1,
|
||
gps = 2,
|
||
Optical_flow = 3
|
||
};
|
||
enum class EXEC_CODE_COMMAND : unsigned char
|
||
{
|
||
error = 0,
|
||
in_progress = 1,
|
||
completed = 2
|
||
};
|
||
enum class FEASIBILITY_CODE_COMMAND : unsigned char
|
||
{
|
||
cannot_be_performed = 0,
|
||
accepted = 1
|
||
};
|
||
enum class DATA_TYPES : unsigned char
|
||
{
|
||
dt_char = 0,
|
||
dt_unsigned_char = 1,
|
||
dt_string = 2,
|
||
dt_short = 3,
|
||
dt_bool = 4,
|
||
dt_unsigned_short = 5,
|
||
dt_int = 6,
|
||
dt_unsigned_int = 7,
|
||
dt_long = 8,
|
||
dt_unsigned_long = 9,
|
||
dt_long_long = 10,
|
||
dt_unsigned_long_long = 11,
|
||
dt_float_32 = 12,
|
||
dt_float_64 = 13,
|
||
dt_unknown = 255
|
||
};
|
||
|
||
//extern CRITICAL_SECTION ProtoSection;
|
||
|
||
#pragma pack(push,1)
|
||
|
||
struct MissionItemData
|
||
{
|
||
unsigned long long item_number;
|
||
COMMANDS_ID item_command; // ID команды, может быть: движение к точке, возврат домой, посадка, смена скорости и др.
|
||
char param1; // резерв
|
||
float param2; // значение скорости, если в миссии есть команда смены скорости, для других команд - резерв
|
||
char param3; // резерв
|
||
float param4; // yaw
|
||
double param5; // широта
|
||
double param6; // долгота
|
||
float param7; // абс. высота
|
||
};
|
||
|
||
struct MissionMetaData
|
||
{
|
||
unsigned long long current_item;
|
||
unsigned long long total_items;
|
||
bool launch_confidentiality;
|
||
bool mission_priority;
|
||
bool fault_tolerence;
|
||
bool f_start;
|
||
bool f_pause;
|
||
unsigned char mission_name_len;
|
||
char mission_name[MAX_LEN_MISSION_NAME];
|
||
};
|
||
struct MissionItemsData
|
||
{
|
||
MissionItemData items[MAX_COUNT_MISSION_POINT];
|
||
};
|
||
|
||
struct EnginePowerInfo
|
||
{
|
||
unsigned char power; //Текущая нагрузка на мотор от 0 до 100%
|
||
unsigned int engineSpeed;//Текущие оборты в секунду мотора
|
||
float current; // Ток потребляемый мотором
|
||
float voltage; // Напряжение на моторе
|
||
float temp; // Температура мотора
|
||
|
||
static const unsigned char MaxCount = 8;
|
||
};
|
||
|
||
struct ProtoDataBattery
|
||
{
|
||
unsigned char perCharge;
|
||
float voltage;
|
||
float amperage;
|
||
float temp;
|
||
float totalPower;
|
||
unsigned long long timeRemaining;
|
||
};
|
||
struct ProtoDataSysInfo
|
||
{
|
||
SYS_MODE mode;
|
||
STATUS_MODE statusMode;
|
||
NAV_SYS_MODE navSys;
|
||
ENGINE_STATUS engineStatus;
|
||
unsigned char engineCount;
|
||
float pressureBaro;
|
||
float tempBaro;
|
||
|
||
EnginePowerInfo enginePower[EnginePowerInfo::MaxCount];
|
||
};
|
||
struct ProtoDataGyroInfo
|
||
{
|
||
float yawGyroVel;
|
||
float pitchGyroVel;
|
||
float rollGyroVel;
|
||
};
|
||
struct ProtoDataAccelInfo
|
||
{
|
||
float yawAccelVel;
|
||
float pitchAccelVel;
|
||
float rollAccelVel;
|
||
float aX;
|
||
float aY;
|
||
float aZ;
|
||
float tempAccel;
|
||
};
|
||
struct ProtoDataGpsInfo
|
||
{
|
||
double lat;
|
||
double lon;
|
||
float absAlt;
|
||
float realAlt;
|
||
float hdop;
|
||
float vdop;
|
||
float pdop;
|
||
float noise;
|
||
float jamming;
|
||
unsigned char satVisible;
|
||
unsigned char satUsed;
|
||
float speed;
|
||
unsigned char fixType;
|
||
unsigned long long timeUTC;
|
||
};
|
||
struct ProtoDataInertialInfo
|
||
{
|
||
float x;
|
||
float y;
|
||
float z;
|
||
float headingDeg;
|
||
float speed;
|
||
float roll;
|
||
float pitch;
|
||
float yaw;
|
||
float rollVel;
|
||
float pitchVel;
|
||
float yawVel;
|
||
float baroAlt;
|
||
};
|
||
|
||
struct ProtoDataRawCalib
|
||
{
|
||
SENSOR_ID sensor;
|
||
float X;
|
||
float Y;
|
||
float Z;
|
||
};
|
||
|
||
struct ParameterData
|
||
{
|
||
const char* name;
|
||
void* value;
|
||
DATA_TYPES type;
|
||
};
|
||
|
||
#pragma pack(pop)
|
||
|
||
typedef void (*SendCallback)(void* data, unsigned long size);
|
||
|
||
void MainInit(SendCallback send);
|
||
bool MainUpdate(unsigned char byte);
|
||
|
||
void ProtoDataWriteReadBattery(ProtoDataBattery& data, bool read=true);
|
||
void ProtoDataWriteReadSysInfo(ProtoDataSysInfo& data, bool read = true);
|
||
//void ProtoDataWriteReadEngineInfo(EnginePowerInfo data[], unsigned char count, bool read = true);
|
||
void ProtoDataWriteReadGyroInfo(ProtoDataGyroInfo& data, bool read = true);
|
||
void ProtoDataWriteReadAccelInfo(ProtoDataAccelInfo& data, bool read = true);
|
||
void ProtoDataWriteReadGpsInfo(ProtoDataGpsInfo& data, bool read = true);
|
||
void ProtoDataWriteReadInertialInfo(ProtoDataInertialInfo& data, bool read = true);
|
||
void ProtoDataWriteReadRawCalib(ProtoDataRawCalib& data, bool read = true);
|
||
|
||
void RawCalibData();
|
||
|
||
extern MissionMetaData ProtoMissionInfo;
|
||
extern MissionItemsData ProtoMissionData;
|
||
|
||
#endif |