#ifndef FLYCONTROLINFO_H #define FLYCONTROLINFO_H #include #include #include #include #include #include #include "GDUModule/glink/glink_m/glink_m.h" #include "GDUModule/glink/glink_np/glink_np.h" class FlyControlInfo : public QObject { Q_OBJECT public: explicit FlyControlInfo(QObject *parent = nullptr); //**************第1包数据************** /*< bit0~6飞行状态 0:NULL 1:初始化中(不允许解锁,未解锁,未起飞) 2:初始化完成(允许解锁,未解锁,未起飞) 3:地面(已解锁,未起飞) 4:悬停中(已起飞) 5:手动飞行中(已起飞) 6:自主起飞中(已起飞) 7:自主降落中(已起飞) 8:自主返航中(已起飞) 9:自主环绕中(已起飞) 10:指点飞行中(已起飞) */ Q_PROPERTY(uchar fly_state READ fly_state NOTIFY basicStateNoti) uchar fly_state(){ return state1->SLfly_status & 0b01111111; } /* bit7模拟飞行标志 0:真实飞行 1:模拟飞行 */ Q_PROPERTY(uchar sim_fly_state READ sim_fly_state NOTIFY basicStateNoti) uchar sim_fly_state(){ return state1->SLfly_status & 0b10000000; } /* 0:未解锁 1:遥杆解锁 2:指令解锁 3: 遥控器拉油门着陆上锁 4: SDK向下控速着陆上锁 5:地面机身翻转上锁 6: 空中机身翻转上锁 7:指令上锁 8:自主降落着陆上锁 9:地面遥控器失联上锁 */ Q_PROPERTY(uchar unlock_reason READ unlock_reason NOTIFY basicStateNoti) uchar unlock_reason(){ return state1->armOrDisarm; } /*< 数据,赋值操作,操控模式属性: 0: 极限模式1: 姿态模式2: 位置-标准操控3: 位置-运动操控 4: 视觉模式*/ Q_PROPERTY(uchar control_mode READ control_mode NOTIFY basicStateNoti) uchar control_mode(){ return state1->controlMode; } /* byte-byte6 uint32 GPS时间(UTC) bit0~5(共6位)年份后两位 (例:21表示2021年) bit6~9(共4位)月 bit10~14(共5位)日 bit15~19(共5位)时 bit20~25(共6位)分 bit26~31(共6位)秒 (总例:0x7DF7BDFF表示2063年7月15日15时31分31秒) */ typedef struct { unsigned short year : 6; unsigned short month : 4; unsigned short day : 5; unsigned short hour : 5; unsigned short minute : 6; unsigned short second : 6; }GPS_TIME_t; GPS_TIME_t p_gps_time_t = {0,0,0,0,0,0}; Q_PROPERTY(QString gsp_time READ gsp_time NOTIFY basicStateNoti) QString gsp_time(){ p_gps_time_t.year = (state1->GPStime & 0b00000000000000000000000000111111); p_gps_time_t.month = (state1->GPStime & 0b00000000000000000000001111000000) >> 6; p_gps_time_t.day = (state1->GPStime & 0b00000000000000000111110000000000) >> 10; p_gps_time_t.hour = (state1->GPStime & 0b00000000000011111000000000000000) >> 15; p_gps_time_t.minute = (state1->GPStime & 0b00000011111100000000000000000000) >> 20; p_gps_time_t.second = (state1->GPStime & 0b11111100000000000000000000000000) >> 26; //memcpy(&p_gps_time_t,&(state1->GPStime),4); //return state1->GPStime; QString time = "" + QString::number(p_gps_time_t.year) + QString::number(p_gps_time_t.month) + QString::number(p_gps_time_t.day) + " " + QString::number(p_gps_time_t.hour) + ":" + QString::number(p_gps_time_t.minute) + ":" + QString::number(p_gps_time_t.second); return time; } /*< byte7-byte8 当次飞行时间 unsigned short 单位秒钟*/ Q_PROPERTY(ushort flight_time READ flight_time NOTIFY basicStateNoti) ushort flight_time(){ return state1->flytime; } /*< byte9-byte10 当前开机时间 unsigned short 单位秒钟*/ Q_PROPERTY(ushort boot_up READ boot_up NOTIFY basicStateNoti) ushort boot_up(){ return state1->CurrentFlyTime; } /*< byte11-byte14 总飞行时间unsigned int 单位秒钟*/ Q_PROPERTY(unsigned int total_time READ total_time NOTIFY basicStateNoti) unsigned int total_time(){ return state1->TotalFlyTime; } /* byte15-byte18 uint32 飞控版本号 十进制数各位含义(从左向右): 第1~6位(共6位):日期 例:210301表示2021年3月1日。 第7~9位(共3位):序号 值000~999 第10位(共1位):版本类型 值:0测试版;1发布版 总例:210301001 1表示2021年3月1日发布版第一版 */ Q_PROPERTY(uint fc_Version READ fc_Version NOTIFY basicStateNoti) uint fc_Version(){ return state1->fcVersion; } /* byte19-byte22 uint32 卫星天线数量及状态 bit0~4主天线星数 bit5~9主天线信号强度 bit10~14从1天线星数 (bit30~31位天线数量类型位值为1时该位值无意义) bit15~19从1天线信号强度 (bit30~31位天线数量类型位值为1(单天线版)时该位值无意义) bit20~29预留 (值0无意义) bit30~31天线数量类型 1:单天线版 2:双天线版 */ /*< 天线 */ Q_PROPERTY(char p_satellite_type READ p_satellite_type NOTIFY basicStateNoti) char p_satellite_type(){ return (state1->GPSNum & 0xC0000000) >> 30; } /* 主天线星数*/ Q_PROPERTY(char p_satellites_number READ p_satellites_number NOTIFY basicStateNoti) char p_satellites_number(){ return state1->GPSNum & 0b00000000000000000000000000011111; } /*主天线信号强度*/ Q_PROPERTY(char p_satellites_strength READ p_satellites_strength NOTIFY basicStateNoti) char p_satellites_strength(){ return (state1->GPSNum & 0b00000000000000000000001111100000) >> 5; } /*从天线星数*/ Q_PROPERTY(char s_satellites_number READ s_satellites_number NOTIFY basicStateNoti) char s_satellites_number(){ return (state1->GPSNum & 0b00000000000000000111110000000000) >> 10; } /*从天线信号强度*/ Q_PROPERTY(char s_satellites_strength READ s_satellites_strength NOTIFY basicStateNoti) char s_satellites_strength(){ return (state1->GPSNum & 0b0000000000001111100000000000000) >> 15; } /* byte23-byte24 uint16 RTK状态 bit0~bit2主天线定位差分状态: 0:未定位 1:2D定位 2:3D定位 4:RTK float 5:RTK fixed bit3~bit5从1天线定位差分状态 (9字段bit30~31天线数量类型为1(单天线版)时该位无意义) 0:未定位 1:2D定位 2:3D定位 4:RTK float 5:RTK fixed bit6~14预留 0无意义 bit15抗磁干扰模式,定向功能 0关闭 1开启 */ Q_PROPERTY(ushort rtk_state READ rtk_state NOTIFY basicStateNoti) ushort rtk_state(){ return state1->RTKstatus; } /*< byte25-byte26 int16 离禁飞区距离 m 在15KM范围里面进行相应播报。 在15KM范围以外,表示远离禁飞区,这时,直接固定填入特定值为20KM)。 负数表示已在禁飞区内。 */ Q_PROPERTY(short no_flyzone_distance READ no_flyzone_distance NOTIFY basicStateNoti) short no_flyzone_distance(){ return state1->flyzoneDistance; } /* byte27 uint8 返航状态 bit0~2返航状态 0:不在返航 1:指令返航(返航中) 2:失联返航(返航中) 3:累计失联返航(返航中) 4:低电返航(返航中) bit3~5返航状态 (bit0~2返航状态位值为0该位值无意义) 1:爬升 2:预定高度掉头 3:回航 4:home点上空掉头 5:降落 bit6预留 0无意义 bit7:返航点记录状态 0:返航点未记录或清除 1:返航点已记录 */ Q_PROPERTY(uchar return_Reason READ return_Reason NOTIFY basicStateNoti) uchar return_Reason(){ return state1->returnStatus & 0b00000111; } Q_PROPERTY(uchar return_status READ return_status NOTIFY basicStateNoti) uchar return_status(){ return (state1->returnStatus & 0b00111000) >> 3; } Q_PROPERTY(uchar return_point_status READ return_point_status NOTIFY basicStateNoti) uchar return_point_status(){ return (state1->returnStatus & 0b10000000) >> 7; } /* byte28-byte29 uint16 返航高度 dm */ Q_PROPERTY(ushort return_height READ return_height NOTIFY basicStateNoti) ushort return_height(){ return state1->returnHeight; } /*< * byte30-byte33 * int32 返航信息3 * 返航点经度 * deg * 1e7 */ Q_PROPERTY(double return_longitude READ return_longitude NOTIFY basicStateNoti) double return_longitude(){ return state1->returnLong * 1.0 / 10000000.0; } /* byte34 -byte37 int32 返航点纬度 deg 1e7 */ Q_PROPERTY(double return_latitude READ return_latitude NOTIFY basicStateNoti) double return_latitude(){ return state1->returnLat * 1.0 / 10000000.0; } /* byte38 uint8 自动降落信息 降落状态: 0不在降落 1指令降落(降落中) 2失联降落(降落中) 3低电降落(降落中) */ Q_PROPERTY(uchar auto_landing READ auto_landing NOTIFY basicStateNoti) uchar auto_landing(){ return state1->autoLanding; } /* byte39-byte40 uint16 水平限距距离 m 注:0xffff表示未开启限距功能 */ Q_PROPERTY(ushort distance_limit READ distance_limit NOTIFY basicStateNoti) ushort distance_limit(){ return state1->levelDistLimit; } /* byte41-byte42 uint16 限高高度 m 注:0xffff表示未开启限高功能 */ Q_PROPERTY(ushort height_limit READ height_limit NOTIFY basicStateNoti) ushort height_limit(){ return state1->heightLimit; } /* byte43-byte44 int16 航向x100,单位度,两位小数 */ Q_PROPERTY(double heading READ heading NOTIFY basicStateNoti) double heading(){ return state1->headingAngle /100.0; } /* byte45-byte46 int16 当前横滚角度 deg 1e2 滚转x100,单位度,两位小数 */ Q_PROPERTY(double roll READ roll NOTIFY basicStateNoti) double roll(){ return state1->rollAngle /100.0; } /* byte47-byte48 int16 当前俯仰角度 deg 1e2 俯仰x100,单位度,两位小数 */ Q_PROPERTY(double pitch READ pitch NOTIFY basicStateNoti) double pitch(){ return state1->pitchAngle /100.0; } /* byte49-byte50 int16 北向速度 cm/s */ Q_PROPERTY(short speed_north READ speed_north NOTIFY basicStateNoti) short speed_north(){ return state1->northSpeed; } /* byte51-byte52 int16 东向速度,单位cm/s */ Q_PROPERTY(short speed_east READ speed_east NOTIFY basicStateNoti) short speed_east(){ return state1->eastSpeed; } /* byte53-byte54 int16 机头速度,单位cm/s */ Q_PROPERTY(short speed_heading READ speed_heading NOTIFY basicStateNoti) short speed_heading (){ return state1->headSpeed; } /* byte55-byte56 int16 右向速度,单位cm/s */ Q_PROPERTY(short speed_right READ speed_right NOTIFY basicStateNoti) short speed_right(){ return state1->rightSpeed; } /* byte57-byte58 int16 垂直速度 cm/s 向上为正 */ Q_PROPERTY(short speed_vetical READ speed_vetical NOTIFY basicStateNoti) short speed_vetical(){ return state1->verticalSpeed; } /* byte59-byte62 int32 飞机当前位置 经度 deg 1e7 飞行当前点经度 degrees * 10^7 */ Q_PROPERTY(double current_longitude READ current_longitude NOTIFY basicStateNoti) double current_longitude(){ return state1->PositionLong * 1.0 / 10000000.0; } /* byte63-byte66 int32 飞机当前位置 纬度 deg 1e7 飞行当前点纬度 degrees * 10^7 */ Q_PROPERTY(double current_latitude READ current_latitude NOTIFY basicStateNoti) double current_latitude(){ return state1->PositionLat * 1.0 / 10000000.0; } /* byte67-byte70 uint32 水平距离 离起飞点距离 单位米 */ Q_PROPERTY(uint level_distance READ level_distance NOTIFY basicStateNoti) uint level_distance(){ return state1->levelDist; } /* byte71-byte74 int32 融合高度 cm */ Q_PROPERTY(int height READ height NOTIFY basicStateNoti) int height(){ return state1->height; } /* byte75-byte78 int32 气压高度 cm */ Q_PROPERTY(int barometric_height READ barometric_height NOTIFY basicStateNoti) int barometric_height(){ return state1->heightBarometric; } /* byte79-byte82 int32 GNSS 椭球高度 单位cm */ Q_PROPERTY(int height_GNSS READ height_GNSS NOTIFY basicStateNoti) int height_GNSS(){ return state1->heightEllipsoid; } /* byte83-byte86 int32 cm GNSS 海拔高度 */ Q_PROPERTY(int altitude_GNSS READ altitude_GNSS NOTIFY basicStateNoti) int altitude_GNSS(){ return state1->Altitude; } /* byte87-byte88 uint16 近地辅助高度(TOF/超声) cm */ Q_PROPERTY(int height_tof READ height_tof NOTIFY basicStateNoti) int height_tof(){ return state1->TOFheight; } /* byte89 uint8 bit0~1RCRC异常类型 1:已连接 2:连接不稳定 3:未连接 bit2电量值异常标志(1标志生效) bit3电压值异常标志(1标志生效) bit4~6电池报警 0:无报警 1:电量一级报警 2:电量二级报警 3:电量三级报警 4:电池不在线 bit7电池温度报警标志(1标志生效) RC连接状态 未连接 连接不稳 已连接 */ Q_PROPERTY(uchar rc_connect_state READ rc_connect_state NOTIFY basicStateNoti) uchar rc_connect_state(){ return state1->RCabnstatus & 0b00000011; } /*电池异常状态 */ Q_PROPERTY(uchar battery_error READ battery_error NOTIFY basicStateNoti) uchar battery_error(){ return (state1->RCabnstatus & 0b11111100) >> 2; } /* byte90 uint8 IMU异常状态 bit0~1异常类型 1:通信异常 2:数据异常 bit2震动标志(1标志生效) bit3晃动标志(1标志生效) bit4未校准标志(1标志生效) bit5~7传感器编号 */ Q_PROPERTY(uchar imu_error READ imu_error NOTIFY basicStateNoti) uchar imu_error(){ return state1->IMUsabntatus; } /* byte91-byte92 磁、气压计、光流、超声/TOF异常状态 bit0~1磁异常类型 1:通信异常 2:数据异常 3:环境干扰大 bit2 需校磁标志(1标志生效) bit3~4磁传感器编号 bit5~6气压计异常类型 1:通信异常 2:数据异常 bit7气压计温度异常标志(1标志生效) bit8~9气压计编号 bit10~11光流模块异常类型 1:通信异常 2:数据异常 bit12光流置信度低标志(1标志生效) bit13~14超声/TOF异常类型 1:通信异常 2:数据异常 bit15预留 0无意义 磁力计异常状态 */ //https://docs.microsoft.com/en-us/cpp/cpp/cpp-bit-fields?view=msvc-160 //https://en.cppreference.com/w/cpp/language/bit_field typedef struct { /* byte 0 */ unsigned short magWarngingType : 2;/* bit: 0~1 */ unsigned short needCalibrationFlag : 1;/* bit:2 */ unsigned short magNubmer : 2;/* bit: 3~4 */ unsigned short barometerWarningType : 2;/* bit: 5~6 */ unsigned short barometerTemperatureFlag : 1;/* bit:7 */ /* byte 2 */ unsigned short barometerNumber : 2;/* bit:8~9 */ unsigned short visionWarngingType : 2;/* bit:10~11 */ unsigned short visionLowConfidenceFlag : 1;/* bit:12 */ unsigned short tofWarngingType : 2;/* bit:13~14 */ unsigned short : 1; /*bit15预留*/ }MAGNETOMETER_ERROR_t; MAGNETOMETER_ERROR_t p_magnetometer_error_t = {0,0,0,0,0,0,0,0,0}; Q_PROPERTY(int magWarngingType READ magWarngingType NOTIFY basicStateNoti) int magWarngingType(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.magWarngingType; } Q_PROPERTY(bool needCalibrationFlag READ needCalibrationFlag NOTIFY basicStateNoti) bool needCalibrationFlag(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.needCalibrationFlag; } Q_PROPERTY(int magNubmer READ magNubmer NOTIFY basicStateNoti) int magNubmer(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.magNubmer; } Q_PROPERTY(int barometerWarngingType READ barometerWarngingType NOTIFY basicStateNoti) int barometerWarngingType(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.barometerWarningType; } Q_PROPERTY(bool barometerTemperatureFlag READ barometerTemperatureFlag NOTIFY basicStateNoti) bool barometerTemperatureFlag(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.barometerTemperatureFlag; } Q_PROPERTY(int barometerNumber READ barometerNumber NOTIFY basicStateNoti) int barometerNumber(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.barometerNumber; } Q_PROPERTY(int visionWarngingType READ visionWarngingType NOTIFY basicStateNoti) int visionWarngingType(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.visionWarngingType; } Q_PROPERTY(bool visionLowConfidenceFlag READ visionLowConfidenceFlag NOTIFY basicStateNoti) bool visionLowConfidenceFlag(){ memcpy(&p_magnetometer_error_t,&(state1->TOFabnstatus),2); return p_magnetometer_error_t.visionLowConfidenceFlag; } Q_PROPERTY(int tofWarngingType READ tofWarngingType NOTIFY basicStateNoti) int tofWarngingType(){ memset(&p_magnetometer_error_t, state1->TOFabnstatus,2); return p_magnetometer_error_t.tofWarngingType; } /* byte93 uint8 EEPROM、存储器、GPS模块异常状态 bit0EEPROM通信异常标志(1标志生效) bit1存储器通信异常标志(1标志生效) bit2存储器已满标志(1标志生效) bit3存储器保护标志(1标志生效) bit4~5GPS异常类型 1:通信异常 2:数据异常 bit6~7GPS模块编号 */ typedef struct { /* byte 0 */ unsigned short EEPROMComFlag : 1;/* bit: 0 */ unsigned short memoryComFlag : 1;/* bit: 1 */ unsigned short memoryFullFlag : 1;/* bit: 2 */ unsigned short memorySafeFlag : 1;/* bit: 3 */ unsigned short gpsWarningType : 2;/* bit: 4~5 */ unsigned short gpsNumber : 2;/* bit: 6~7 */ }MEMORY_STATE_t; MEMORY_STATE_t p_momory_state_t = {0,0,0,0,0,0}; Q_PROPERTY(bool EEPROMComFlag READ EEPROMComFlag NOTIFY basicStateNoti) bool EEPROMComFlag(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.EEPROMComFlag; } Q_PROPERTY(bool memoryComFlag READ memoryComFlag NOTIFY basicStateNoti) bool memoryComFlag(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.memoryComFlag; } Q_PROPERTY(bool memoryFullFlag READ memoryFullFlag NOTIFY basicStateNoti) bool memoryFullFlag(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.memoryFullFlag; } Q_PROPERTY(bool memorySafeFlag READ memorySafeFlag NOTIFY basicStateNoti) bool memorySafeFlag(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.memorySafeFlag; } Q_PROPERTY(int gpsWarningType READ gpsWarningType NOTIFY basicStateNoti) int gpsWarningType(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.gpsWarningType; } Q_PROPERTY(int gpsNumber READ gpsNumber NOTIFY basicStateNoti) int gpsNumber(){ memcpy(&p_momory_state_t,&(state1->EEPROMabnstatus),1); return p_momory_state_t.gpsNumber; } /* byte94 uint8 飞控主控异常状态 bit0温度异常标志(1标志生效) bit1与协处理器通信异常标志(1标志生效) bit2~7预留 0无意义 */ typedef struct { /* byte 0 */ unsigned short fcTemperatureWaringFlag : 1;/* bit: 0 */ unsigned short fcProcesssorComFlag : 1;/* bit: 1 */ unsigned short : 6;/* bit: 2~7 */ }FCMAIN_STATE_t; FCMAIN_STATE_t p_fcmain_state_t = {0,0}; Q_PROPERTY(bool fcTemperatureWaringFlag READ fcTemperatureWaringFlag NOTIFY basicStateNoti) bool fcTemperatureWaringFlag(){ memcpy(&p_fcmain_state_t,&(state1->FCabnstatus),1); return p_fcmain_state_t.fcTemperatureWaringFlag; } Q_PROPERTY(bool fcProcesssorComFlag READ fcProcesssorComFlag NOTIFY basicStateNoti) bool fcProcesssorComFlag(){ memcpy(&p_fcmain_state_t,&(state1->FCabnstatus),1); return p_fcmain_state_t.fcProcesssorComFlag; } /* byte0 uint8 SDK控制使能(RC以外的控制接入) (1标志生效) bit0:SDK使能 bit 1:航向角度控制 bit 2:航向速度控制 bit 3:水平速度控制 bit 4:水平位置控制 bit 5:高度控制 bit 6:高度速度控制 */ Q_PROPERTY(uchar sdk_control READ sdk_control NOTIFY basicStateNoti) uchar sdk_control(){ return {state2->SDKswitch}; } /* byte1 uint8 遥杆屏蔽状态(1标志生效) Bit0: 前进杆屏蔽状态 Bit1: 后退杆屏蔽状态 Bit2: 向左杆屏蔽状态 Bit3: 向右杆屏蔽状态 Bit4: 向上杆屏蔽状态 Bit5: 向下杆屏蔽状态 Bit6: 右旋杆屏蔽状态 */ Q_PROPERTY(uchar rc_shield READ rc_shield NOTIFY basicStateNoti) uchar rc_shield(){ return {state2->RCshield}; } /* byte2 uint8 飞控任务、功能 bit0~3任务 0:NONE_TASK 1:IDLE_TASK 2:MANUALPILOT_TASK 3:RTL_TASK 4:AUTO_TAKEOFF_TASK 5:AUTO_LAND_TASK 6:GNSS_SURROUND_TASK 7:TRAJECTOR_PLAN_TASK bit4~7功能 1:idle 2:standby 3:guide 4:takeoff 5:land 6:circle 7:NONE_FUNC */ typedef struct { /* byte 0 */ unsigned short fcTask : 4;/* bit: 0~3 */ unsigned short fcFunc : 4;/* bit: 4~7 */ }FCTASKFUNC_t; FCTASKFUNC_t p_fcTaskFunc_t = {0,0}; //zxtested Q_PROPERTY(int task READ task NOTIFY basicStateNoti) int task(){ memcpy(&p_fcTaskFunc_t,&(state2->fcTask),1); return p_fcTaskFunc_t.fcTask; } //zxtested Q_PROPERTY(int funcProper READ funcProper NOTIFY basicStateNoti) int funcProper(){ memcpy(&p_fcTaskFunc_t,&(state2->fcTask),1); return p_fcTaskFunc_t.fcFunc; } /* byte3-byte4 int16 油门通道控制量 zxtested */ Q_PROPERTY(short throttle READ throttle NOTIFY basicStateNoti) short throttle(){ return state2->throttle; } /* byte5-byte6 int16 航向通道控制量 zxtested */ Q_PROPERTY(short headingChannel READ headingChannel NOTIFY basicStateNoti) short headingChannel(){ return state2->heading; } /* byte7-byte8 int16 横滚通道控制量 zxtested */ Q_PROPERTY(short rollChannel READ rollChannel NOTIFY basicStateNoti) short rollChannel(){ return state2->roll; } /* byte9-byte10 int16 俯仰通道控制量 zxtested */ Q_PROPERTY(short pitchChannel READ pitchChannel NOTIFY basicStateNoti) short pitchChannel(){ return state2->pitch; } /* byte11-byte14 uint32 电机控制量(减去1000) 1~3号 bit0~9 1号电机 bit10~19 2号电机 bit20~29 3号电机 bit30~31预留 0无意义 */ typedef struct { short a : 10;/* bit: 0~9 */ short b : 10;/* bit: 10~19 */ short c : 10;/* bit: 20~29 */ short : 2;/* bit: 30~21 */ }ELECTRIC_MACHINERY_t; ELECTRIC_MACHINERY_t moter_1to3 = {0,0,0}; ELECTRIC_MACHINERY_t moter_4to6 = {0,0,0}; ELECTRIC_MACHINERY_t moter_7to9 = {0,0,0}; ELECTRIC_MACHINERY_t moter_10to12 = {0,0,0}; Q_PROPERTY(short electric_machinery_1 READ electric_machinery_1 NOTIFY basicStateNoti) short electric_machinery_1(){ moter_1to3.a = (state2->moter_1 & 0b00000000000000000000001111111111); moter_1to3.b = (state2->moter_1 & 0b00000000000011111111110000000000) >> 10; moter_1to3.c = (state2->moter_1 & 0b00111111111100000000000000000000) >> 20; return moter_1to3.a; } Q_PROPERTY(short electric_machinery_2 READ electric_machinery_2 NOTIFY basicStateNoti) short electric_machinery_2(){ moter_1to3.a = (state2->moter_1 & 0b00000000000000000000001111111111); moter_1to3.b = (state2->moter_1 & 0b00000000000011111111110000000000) >> 10; moter_1to3.c = (state2->moter_1 & 0b00111111111100000000000000000000) >> 20; return moter_1to3.b; } Q_PROPERTY(short electric_machinery_3 READ electric_machinery_3 NOTIFY basicStateNoti) short electric_machinery_3(){ moter_1to3.a = (state2->moter_1 & 0b00000000000000000000001111111111); moter_1to3.b = (state2->moter_1 & 0b00000000000011111111110000000000) >> 10; moter_1to3.c = (state2->moter_1 & 0b00111111111100000000000000000000) >> 20; return moter_1to3.c; } Q_PROPERTY(short electric_machinery_4 READ electric_machinery_4 NOTIFY basicStateNoti) short electric_machinery_4(){ moter_4to6.a = (state2->moter_4 & 0b00000000000000000000001111111111); moter_4to6.b = (state2->moter_4 & 0b00000000000011111111110000000000) >> 10; moter_4to6.c = (state2->moter_4 & 0b00111111111100000000000000000000) >> 20; return moter_4to6.a; } Q_PROPERTY(short electric_machinery_5 READ electric_machinery_5 NOTIFY basicStateNoti) short electric_machinery_5(){ moter_4to6.a = (state2->moter_4 & 0b00000000000000000000001111111111); moter_4to6.b = (state2->moter_4 & 0b00000000000011111111110000000000) >> 10; moter_4to6.c = (state2->moter_4 & 0b00111111111100000000000000000000) >> 20; return moter_4to6.b; } Q_PROPERTY(short electric_machinery_6 READ electric_machinery_6 NOTIFY basicStateNoti) short electric_machinery_6(){ moter_4to6.a = (state2->moter_4 & 0b00000000000000000000001111111111); moter_4to6.b = (state2->moter_4 & 0b00000000000011111111110000000000) >> 10; moter_4to6.c = (state2->moter_4 & 0b00111111111100000000000000000000) >> 20; return moter_4to6.c; } Q_PROPERTY(short electric_machinery_7 READ electric_machinery_7 NOTIFY basicStateNoti) short electric_machinery_7(){ moter_7to9.a = (state2->moter_7 & 0b00000000000000000000001111111111); moter_7to9.b = (state2->moter_7 & 0b00000000000011111111110000000000) >> 10; moter_7to9.c = (state2->moter_7 & 0b00111111111100000000000000000000) >> 20; return moter_7to9.a; } Q_PROPERTY(short electric_machinery_8 READ electric_machinery_8 NOTIFY basicStateNoti) short electric_machinery_8(){ moter_7to9.a = (state2->moter_7 & 0b00000000000000000000001111111111); moter_7to9.b = (state2->moter_7 & 0b00000000000011111111110000000000) >> 10; moter_7to9.c = (state2->moter_7 & 0b00111111111100000000000000000000) >> 20; return moter_7to9.b; } Q_PROPERTY(short electric_machinery_9 READ electric_machinery_9 NOTIFY basicStateNoti) short electric_machinery_9(){ moter_7to9.a = (state2->moter_7 & 0b00000000000000000000001111111111); moter_7to9.b = (state2->moter_7 & 0b00000000000011111111110000000000) >> 10; moter_7to9.c = (state2->moter_7 & 0b00111111111100000000000000000000) >> 20; return moter_7to9.c; } Q_PROPERTY(short electric_machinery_10 READ electric_machinery_10 NOTIFY basicStateNoti) short electric_machinery_10(){ moter_10to12.a = (state2->moter_10 & 0b00000000000000000000001111111111); moter_10to12.b = (state2->moter_10 & 0b00000000000011111111110000000000) >> 10; moter_10to12.c = (state2->moter_10 & 0b00111111111100000000000000000000) >> 20; return moter_10to12.a; } Q_PROPERTY(short electric_machinery_11 READ electric_machinery_11 NOTIFY basicStateNoti) short electric_machinery_11(){ moter_10to12.a = (state2->moter_10 & 0b00000000000000000000001111111111); moter_10to12.b = (state2->moter_10 & 0b00000000000011111111110000000000) >> 10; moter_10to12.c = (state2->moter_10 & 0b00111111111100000000000000000000) >> 20; return moter_10to12.b; } Q_PROPERTY(short electric_machinery_12 READ electric_machinery_12 NOTIFY basicStateNoti) short electric_machinery_12(){ moter_10to12.a = (state2->moter_10 & 0b00000000000000000000001111111111); moter_10to12.b = (state2->moter_10 & 0b00000000000011111111110000000000) >> 10; moter_10to12.c = (state2->moter_10 & 0b00111111111100000000000000000000) >> 20;; return moter_10to12.c; } /* byte27 uint8 振动晃动系数 bit0~3 振动系数 bit4~7 晃动系数 zxtested */ Q_PROPERTY(uchar vibrated_number READ vibrated_number NOTIFY basicStateNoti) uchar vibrated_number(){ return (state2->vibrationNum); } /* byte28-byte31 int32 GPS北向速度 cm/s */ Q_PROPERTY(short GNSSspeed_N READ GNSSspeed_N NOTIFY basicStateNoti) short GNSSspeed_N(){ return (state2->GPSnorthSpeed); } /* byte32-byte35 int32 GPS东向速度 cm/s */ Q_PROPERTY(short GNSSspeed_E READ GNSSspeed_E NOTIFY basicStateNoti) short GNSSspeed_E(){ return (state2->GPSeastSpeed); } /* byte36-byte39 int32 GPS地向速度 cm/s */ Q_PROPERTY(short GNSSspeed_D READ GNSSspeed_D NOTIFY basicStateNoti) short GNSSspeed_D(){ return (state2->GPSgroundSpeed); } /* byte40-byte43 int32 目标位置经度 deg 1e7 */ Q_PROPERTY(double target_longitude READ target_longitude NOTIFY basicStateNoti) double target_longitude(){ return state2->targetLong * 1.0 / 10000000.0; } /* byte44-byte47 int32 目标位置纬度 deg 1e7 */ Q_PROPERTY(double target_latitude READ target_latitude NOTIFY basicStateNoti) double target_latitude(){ return state2->targetLat * 1.0 / 10000000.0; } /* 数据,赋值操作,地向速度,单位cm/s */ Q_PROPERTY(short speed_ground READ speed_ground NOTIFY basicStateNoti) short speed_ground(){ return 0; } /* byte48 uint8 位置启动、电机状态 bit0水平位置控制 bit1高度位置控制 bit2~3电机状态 0:停转 1:怠速 2:运行 3:测试 zxtested */ typedef struct { unsigned short hControl : 1;/* bit: 0*/ unsigned short vControl : 1;/* bit: 1*/ unsigned short moter_state : 2;/* bit: 2~3 */ unsigned short : 4; }MOTER_STATE_t; MOTER_STATE_t p_moter_state_t = {0,0,0}; Q_PROPERTY(bool hControl READ hControl NOTIFY basicStateNoti) bool hControl(){ memcpy(&p_moter_state_t,&(state2->moterStatus),1); return p_moter_state_t.hControl; } Q_PROPERTY(bool vControl READ vControl NOTIFY basicStateNoti) bool vControl(){ memcpy(&p_moter_state_t,&(state2->moterStatus),1); return p_moter_state_t.vControl; } Q_PROPERTY(uchar alternator_state READ alternator_state NOTIFY basicStateNoti) uchar alternator_state(){ memcpy(&p_moter_state_t,&(state2->moterStatus),1); return p_moter_state_t.moter_state; } /* byte49-byte50 int16 IMU温度 deg */ Q_PROPERTY(short imu_temperature READ imu_temperature NOTIFY basicStateNoti) short imu_temperature(){ return (state2->IMU_temp); } /* byte51-byte52 uint16 平均转速 */ Q_PROPERTY(short speed READ speed NOTIFY basicStateNoti) short speed(){ return (state2->avgNum); } //飞控上报数据1 glink_m_aircraft_fc_basic_state_1_t *state1 = glink_m_aircraft_fc_basic_state_1_createEmptyInfo(); //QVariantMap infoMap1; glink_m_aircraft_fc_basic_state_2_t *state2 = glink_m_aircraft_fc_basic_state_2_createEmptyInfo(); //QVariantMap infoMap2; Q_PROPERTY(QPointF droneCoordinate READ droneCoordinate NOTIFY droneCoordinateNoti) QPointF droneCoordinate(){ return QPointF(current_longitude(),current_latitude()); } void updataBaseState(){ emit basicStateNoti(); emit droneCoordinateNoti(droneCoordinate()); } signals: void basicStateNoti(); void droneCoordinateNoti(QPointF point); public slots: private: }; #endif // FLYCONTROLINFO_H