319 lines
9.8 KiB
C
319 lines
9.8 KiB
C
#pragma once
|
||
|
||
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,
|
||
|
||
CountMenuCategories = 32,
|
||
CategoriesMenu = 33,
|
||
CategoriesParameters = 34,
|
||
|
||
//Ping = 200, // :)
|
||
//Pong = 201, // :]
|
||
};
|
||
enum class COMMANDS_NAME : unsigned char
|
||
{
|
||
ChangeNav = 1,
|
||
ChangeSpeed = 2,
|
||
Land = 3,
|
||
GoHome = 4,
|
||
StopEngine = 5,
|
||
StartEngine = 6,
|
||
Pause = 7,
|
||
Continue = 8,
|
||
GoToGlobal = 9,
|
||
GoToLocal = 10,
|
||
|
||
SetParameter = 15,
|
||
};
|
||
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
|
||
};
|
||
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
|
||
};
|
||
|
||
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
|
||
};
|
||
|
||
#pragma pack(push,1)
|
||
|
||
const unsigned short MaxLength = 256;
|
||
const unsigned char Global_stx = 0xAA;
|
||
//Начало заголовка
|
||
struct HeaderBegin
|
||
{
|
||
unsigned char stx;
|
||
unsigned short len1; //Len header + payload (message)
|
||
unsigned short len2; //Len header + payload (message)
|
||
unsigned char crc; // CRC MESSAGE
|
||
unsigned char data[0]; // Message
|
||
//---
|
||
bool CheckCRC();
|
||
void SetCRC();
|
||
};
|
||
// Заголовок сообщения
|
||
struct HeaderMessages
|
||
{
|
||
MESSAGES_ID msgId;
|
||
unsigned char srcId;
|
||
unsigned char dstId;
|
||
unsigned char len;
|
||
unsigned long long timeusec;
|
||
unsigned char data[0];
|
||
};
|
||
struct CommandObj
|
||
{
|
||
COMMANDS_NAME commandId;
|
||
unsigned char data[0];
|
||
};
|
||
//Полезная нагрузка сообщения с данными по АКБ
|
||
struct PayloadBatteryInfo
|
||
{
|
||
unsigned char perCharge;
|
||
float voltage;
|
||
float amperage;
|
||
float temp;
|
||
float totalPower;
|
||
unsigned long long timeRemaining;
|
||
};
|
||
// Структура с данными по каждому мотору
|
||
struct EnginePowerInfo
|
||
{
|
||
unsigned char power; //Текущая нагрузка на мотор от 0 до 100%
|
||
unsigned int engineSpeed;//Текущие оборты в секунду мотора
|
||
float current; // Ток потребляемый мотором
|
||
float voltage; // Напряжение на моторе
|
||
float temp; // Температура мотора
|
||
|
||
};
|
||
struct PayloadSysInfo // Полезная нагрузка с данными о остоянии БПЛА
|
||
{
|
||
SYS_MODE mode; //Текущий режим полета (взлет - 1, посадка - 2, режим автоматического возврата домой - 3, режим автономного полета - 4, ожидание - 5)
|
||
STATUS_MODE statusMode; //Текущий статус режим (На земле (on ground) - 1, набор высоты (TakingOff) - 2, полет (In air) - 3, приземление (Landing) - 4)
|
||
NAV_SYS_MODE navSys; // Текущая используемая система навигации (GPS\ИНС\Optical Flow) ИНС - 1, GPS - 2, Optical Flow - 3
|
||
ENGINE_STATUS engineStatus; // Текущее состояние моторов. Выкл - 0, Вкл - 1.
|
||
unsigned char engineCount; // Количество двигателей на БПЛА
|
||
float pressureBaro; //Атмосферное давление
|
||
float tempBaro; // Температура Окр. среды
|
||
EnginePowerInfo enginePower[0];
|
||
};
|
||
struct PayloadGyroInfo // Полезная нагрузка с данными от гироскопа
|
||
{
|
||
float yawGyroVel; // Текущая скорость изменения угла рысканья (в чем будет измеряться? рад\с?)
|
||
float pitchGyroVel; // Текущая скорость изменения угла тангажа (в чем будет измеряться? рад\с?)
|
||
float rollGyroVel; // Текущая скорость изменения угла крена (в чем будет измеряться? рад\с?)
|
||
};
|
||
struct PayloadAccelInfo // Полезная нагрузка сообщения с данными от акселерометра
|
||
{
|
||
float yawAccelVel; // текущее ускорение изменения угла рысканья (Z)
|
||
float pitchAccelVel; // текущее ускорение изменения угла тангажа (Y)
|
||
float rollAccelVel; // текущее ускорение изменения угла крена (X)
|
||
float aX; // ускорение по X (м\с^2)
|
||
float aY; // ускорение по У (м\с^2)
|
||
float aZ; // ускорение по Z (м\с^2)
|
||
float tempAccel; //Температура акселерометра
|
||
};
|
||
struct PayloadGpsInfo // Полезная нагрузка сообщения с данными от GPS датчика
|
||
{
|
||
float lat; //
|
||
float 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; // NO_GPS - 0, NO_FIX - 1, 2D_FIX - 2, 3D_FIX - 3, DGPS - 4, RTK_FLOAT - 5, RTK_FIXED - 6, STATIC - 7, PPP - 8
|
||
unsigned long long timeUTC; // UTC - GPS
|
||
};
|
||
struct PayloadInertialInfo // Полезная нагрузка с данными от инерциальной системы координат
|
||
{
|
||
float x; // Координата X (по локальной системе координат)
|
||
float y; // Координата Y (по локальной системе координат)
|
||
float z; // Координата высоты (по локальной системе координат)
|
||
float headingDeg; // Текущее направление движения БПЛА относительно севера
|
||
float speed; // скорость БПЛА (полученная не по GPS)
|
||
float roll; // текущий угол крена в градусах
|
||
float pitch; // текущий угол тангажа в градусах
|
||
float yaw; // текущий угол рысканья в градусах
|
||
float rollVel; // Скорость по направлению крена м\с (в направлении оси Y)
|
||
float pitchVel; // Скорость по направлению тангажа м\с (в направлении оси Х)
|
||
float yawVel; // Скорость по направлению рысканья м\с (в направлении оси Z)
|
||
float baroAlt; // Высота в метрах по барометру
|
||
};
|
||
//Полезная нагрузка сообщения с ответом о получении команды
|
||
struct PayloadCommandAck
|
||
{
|
||
COMMANDS_NAME commandId;
|
||
FEASIBILITY_CODE_COMMAND status; // 0 - не может быть выполнена (указывается код ошибки), 1 - принята
|
||
ERROR_CODE_COMMAND errorCode;
|
||
};
|
||
struct PayloadStatusCommand
|
||
{
|
||
COMMANDS_NAME commandId;
|
||
EXEC_CODE_COMMAND executionCode; // 0 - ошибка при выполнении ,1 - выполняется ,2 - выполнена успешно.
|
||
ERROR_CODE_COMMAND errorCode;
|
||
};
|
||
// Полезная нагрузка команды для смены скорости полета
|
||
struct PayloadCommandChangeSpeed
|
||
{
|
||
float speed;
|
||
};
|
||
// Полезная нагрузка команды для смены текущей исп. нав. системы.
|
||
struct PayloadCommandChangeNav
|
||
{
|
||
unsigned char nav_id; // Inertial - 1, GPS = 2, Oprical_Flow = 3
|
||
};
|
||
// Полезная нагрузка команды для перемещения в точку по глобальным координатам
|
||
struct PayloadCommandGoToGlobal
|
||
{
|
||
float lat;
|
||
float lon;
|
||
float abs_alt;
|
||
float speed;
|
||
};
|
||
// Полезная нагрузка команды для перемещения в точку по локальным координатам
|
||
struct PayloadCommandGoToLocal
|
||
{
|
||
float x;
|
||
float y;
|
||
float z;
|
||
float speed;
|
||
};
|
||
|
||
struct PayloadCountMenuCategories
|
||
{
|
||
unsigned char countCategories;
|
||
unsigned char data[0];
|
||
};
|
||
|
||
struct MenuCategori
|
||
{
|
||
unsigned char id;
|
||
unsigned char len_name;
|
||
unsigned char count_param;
|
||
char name[0];
|
||
};
|
||
|
||
struct PayloadMenuCategories
|
||
{
|
||
unsigned char countCategories;
|
||
unsigned char categories[0];
|
||
};
|
||
|
||
struct PayloadCategoriesParameters
|
||
{
|
||
unsigned char cat_id;
|
||
unsigned char param_id;
|
||
unsigned char param_name_len;
|
||
unsigned char param_len;
|
||
DATA_TYPES param_type_code;
|
||
char param_data[0];
|
||
};
|
||
|
||
struct PayloadCommandSetParameter
|
||
{
|
||
unsigned char cat_id;
|
||
unsigned char param_id;
|
||
DATA_TYPES param_type_code;
|
||
unsigned char param_len;
|
||
char param_data[0];
|
||
};
|
||
|
||
#pragma pack(pop)
|