Newer
Older
#include <QDebug>
SlugsMAV::SlugsMAV(MAVLinkProtocol* mavlink, int id) :
widgetTimer = new QTimer (this);
widgetTimer->setInterval(SLUGS_UPDATE_RATE);
connect (widgetTimer, SIGNAL(timeout()), this, SLOT(emitSignals()));
widgetTimer->start();
memset(&mlRawImuData ,0, sizeof(mavlink_raw_imu_t));// clear all the state structures
#ifdef MAVLINK_ENABLED_SLUGS
memset(&mlGpsData, 0, sizeof(mavlink_gps_raw_t));
memset(&mlCpuLoadData, 0, sizeof(mavlink_cpu_load_t));
memset(&mlAirData, 0, sizeof(mavlink_air_data_t));
memset(&mlSensorBiasData, 0, sizeof(mavlink_sensor_bias_t));
memset(&mlDiagnosticData, 0, sizeof(mavlink_diagnostic_t));
memset(&mlBoot ,0, sizeof(mavlink_boot_t));
memset(&mlGpsDateTime ,0, sizeof(mavlink_gps_date_time_t));
memset(&mlApMode ,0, sizeof(mavlink_set_mode_t));
memset(&mlNavigation ,0, sizeof(mavlink_slugs_navigation_t));
memset(&mlDataLog ,0, sizeof(mavlink_data_log_t));
memset(&mlPassthrough ,0, sizeof(mavlink_ctrl_srfc_pt_t));
memset(&mlActionAck,0, sizeof(mavlink_action_ack_t));
memset(&mlAction ,0, sizeof(mavlink_slugs_action_t));
memset(&mlScaled ,0, sizeof(mavlink_scaled_imu_t));
memset(&mlServo ,0, sizeof(mavlink_servo_output_raw_t));
memset(&mlChannels ,0, sizeof(mavlink_rc_channels_raw_t));
updateRoundRobin = 0;
uasId = id;
#endif
/**
* This function is called by MAVLink once a complete, uncorrupted (CRC check valid)
* mavlink packet is received.
*
* @param link Hardware link the message came from (e.g. /dev/ttyUSB0 or UDP port).
* messages can be sent back to the system via this link
* @param message MAVLink message, as received from the MAVLink protocol stack
*/
void SlugsMAV::receiveMessage(LinkInterface* link, mavlink_message_t message)
{
UAS::receiveMessage(link, message);// Let UAS handle the default message set
Mariano Lizarraga
committed
if (message.sysid == uasId)
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#ifdef MAVLINK_ENABLED_SLUGS// Handle your special messages mavlink_message_t* msg = &message;
switch (message.msgid)
{
case MAVLINK_MSG_ID_RAW_IMU:
mavlink_msg_raw_imu_decode(&message, &mlRawImuData);
break;
case MAVLINK_MSG_ID_BOOT:
mavlink_msg_boot_decode(&message,&mlBoot);
emit slugsBootMsg(uasId, mlBoot);
break;
case MAVLINK_MSG_ID_ATTITUDE:
mavlink_msg_attitude_decode(&message, &mlAttitude);
break;
case MAVLINK_MSG_ID_GPS_RAW:
mavlink_msg_gps_raw_decode(&message, &mlGpsData);
break;
case MAVLINK_MSG_ID_CPU_LOAD: //170
mavlink_msg_cpu_load_decode(&message,&mlCpuLoadData);
break;
case MAVLINK_MSG_ID_AIR_DATA: //171
mavlink_msg_air_data_decode(&message,&mlAirData);
break;
case MAVLINK_MSG_ID_SENSOR_BIAS: //172
mavlink_msg_sensor_bias_decode(&message,&mlSensorBiasData);
break;
case MAVLINK_MSG_ID_DIAGNOSTIC: //173
mavlink_msg_diagnostic_decode(&message,&mlDiagnosticData);
break;
case MAVLINK_MSG_ID_SLUGS_NAVIGATION://176
mavlink_msg_slugs_navigation_decode(&message,&mlNavigation);
break;
case MAVLINK_MSG_ID_DATA_LOG: //177
mavlink_msg_data_log_decode(&message,&mlDataLog);
break;
case MAVLINK_MSG_ID_GPS_DATE_TIME: //179
mavlink_msg_gps_date_time_decode(&message,&mlGpsDateTime);
break;
case MAVLINK_MSG_ID_MID_LVL_CMDS: //180
mavlink_msg_mid_lvl_cmds_decode(&message, &mlMidLevelCommands);
break;
case MAVLINK_MSG_ID_CTRL_SRFC_PT: //181
mavlink_msg_ctrl_srfc_pt_decode(&message, &mlPassthrough);
break;
case MAVLINK_MSG_ID_SLUGS_ACTION: //183
mavlink_msg_slugs_action_decode(&message, &mlAction);
break;
case MAVLINK_MSG_ID_SCALED_IMU:
mavlink_msg_scaled_imu_decode(&message, &mlScaled);
break;
case MAVLINK_MSG_ID_SERVO_OUTPUT_RAW:
mavlink_msg_servo_output_raw_decode(&message, &mlServo);
break;
case MAVLINK_MSG_ID_RC_CHANNELS_RAW:
mavlink_msg_rc_channels_raw_decode(&message, &mlChannels);
break;
switch (mlAction.actionId)
{
case SLUGS_ACTION_EEPROM:
if (mlAction.actionVal == SLUGS_ACTION_FAIL)
{
emit textMessageReceived(message.sysid, message.compid, 255, "EEPROM Write Fail, Data was not saved in Memory!");
case SLUGS_ACTION_PT_CHANGE:
if (mlAction.actionVal == SLUGS_ACTION_SUCCESS)
{
emit textMessageReceived(message.sysid, message.compid, 0, "Passthrough Succesfully Changed");
case SLUGS_ACTION_MLC_CHANGE:
if (mlAction.actionVal == SLUGS_ACTION_SUCCESS)
{
emit textMessageReceived(message.sysid, message.compid, 0, "Mid-level Commands Succesfully Changed");
// qDebug() << "\nSLUGS RECEIVED MESSAGE WITH ID" << message.msgid;
Mariano Lizarraga
committed
break;
}
}
Mariano Lizarraga
committed
}
void SlugsMAV::emitSignals (void)
{
#ifdef MAVLINK_ENABLED_SLUGS
Mariano Lizarraga
committed
switch(updateRoundRobin){
case 1:
emit slugsCPULoad(uasId, mlCpuLoadData);
emit slugsSensorBias(uasId,mlSensorBiasData);
break;
case 2:
emit slugsAirData(uasId, mlAirData);
emit slugsDiagnostic(uasId,mlDiagnosticData);
Mariano Lizarraga
committed
break;
case 3:
emit slugsNavegation(uasId, mlNavigation);
emit slugsDataLog(uasId, mlDataLog);
break;
Mariano Lizarraga
committed
case 4:
Mariano Lizarraga
committed
emit slugsGPSDateTime(uasId, mlGpsDateTime);
Mariano Lizarraga
committed
Mariano Lizarraga
committed
case 5:
Mariano Lizarraga
committed
emit slugsActionAck(uasId,mlActionAck);
emit emitGpsSignals();
break;
case 6:
emit slugsChannels(uasId, mlChannels);
emit slugsServo(uasId, mlServo);
emit slugsScaled(uasId, mlScaled);
Mariano Lizarraga
committed
break;
Mariano Lizarraga
committed
}
Mariano Lizarraga
committed
emit slugsAttitude(uasId, mlAttitude);
emit attitudeChanged(this,
mlAttitude.roll,
mlAttitude.pitch,
mlAttitude.yaw,
0.0);
#endif
Mariano Lizarraga
committed
emit slugsRawImu(uasId, mlRawImuData);
Mariano Lizarraga
committed
// wrap around
updateRoundRobin = updateRoundRobin > 10? 1: updateRoundRobin + 1;
Mariano Lizarraga
committed
}
Mariano Lizarraga
committed
Mariano Lizarraga
committed
#ifdef MAVLINK_ENABLED_SLUGS
void SlugsMAV::emitGpsSignals (void){
// qDebug()<<"After Emit GPS Signal"<<mlGpsData.fix_type;
//ToDo Uncomment if. it was comment only to test
// if (mlGpsData.fix_type > 0){
Mariano Lizarraga
committed
emit globalPositionChanged(this,
mlGpsData.lon,
mlGpsData.lat,
mlGpsData.alt,
0.0);
emit slugsGPSCogSog(uasId,mlGpsData.hdg, mlGpsData.v);
Mariano Lizarraga
committed
Mariano Lizarraga
committed
#endif // MAVLINK_ENABLED_SLUGS