|
|
|
@ -84,11 +84,12 @@ static NOINLINE void send_attitude(mavlink_channel_t chan)
@@ -84,11 +84,12 @@ static NOINLINE void send_attitude(mavlink_channel_t chan)
|
|
|
|
|
static void NOINLINE send_location(mavlink_channel_t chan) |
|
|
|
|
{ |
|
|
|
|
uint32_t fix_time; |
|
|
|
|
if (g_gps->status() >= GPS::GPS_OK_FIX_2D) { |
|
|
|
|
fix_time = g_gps->last_fix_time; |
|
|
|
|
if (gps.status() >= AP_GPS::GPS_OK_FIX_2D) { |
|
|
|
|
fix_time = gps.last_fix_time_ms(); |
|
|
|
|
} else { |
|
|
|
|
fix_time = hal.scheduler->millis(); |
|
|
|
|
} |
|
|
|
|
const Vector3f &vel = gps.velocity(); |
|
|
|
|
mavlink_msg_global_position_int_send( |
|
|
|
|
chan, |
|
|
|
|
fix_time, |
|
|
|
@ -96,31 +97,58 @@ static void NOINLINE send_location(mavlink_channel_t chan)
@@ -96,31 +97,58 @@ static void NOINLINE send_location(mavlink_channel_t chan)
|
|
|
|
|
current_loc.lng, // in 1E7 degrees |
|
|
|
|
current_loc.alt * 10, // millimeters above sea level |
|
|
|
|
0, |
|
|
|
|
g_gps->velocity_north() * 100, // X speed cm/s (+ve North) |
|
|
|
|
g_gps->velocity_east() * 100, // Y speed cm/s (+ve East) |
|
|
|
|
g_gps->velocity_down() * -100, // Z speed cm/s (+ve up) |
|
|
|
|
vel.x * 100, // X speed cm/s (+ve North) |
|
|
|
|
vel.y * 100, // Y speed cm/s (+ve East) |
|
|
|
|
vel.z * -100, // Z speed cm/s (+ve up) |
|
|
|
|
ahrs.yaw_sensor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void NOINLINE send_gps_raw(mavlink_channel_t chan) |
|
|
|
|
{ |
|
|
|
|
static uint32_t last_send_time; |
|
|
|
|
if (last_send_time != 0 && last_send_time == g_gps->last_fix_time && g_gps->status() >= GPS::GPS_OK_FIX_3D) { |
|
|
|
|
return; |
|
|
|
|
static uint32_t last_send_time_ms; |
|
|
|
|
if (last_send_time_ms == 0 || last_send_time_ms != gps.last_message_time_ms(0)) { |
|
|
|
|
last_send_time_ms = gps.last_message_time_ms(0); |
|
|
|
|
const Location &loc = gps.location(0); |
|
|
|
|
mavlink_msg_gps_raw_int_send( |
|
|
|
|
chan, |
|
|
|
|
gps.last_fix_time_ms(0)*(uint64_t)1000, |
|
|
|
|
gps.status(0), |
|
|
|
|
loc.lat, // in 1E7 degrees |
|
|
|
|
loc.lng, // in 1E7 degrees |
|
|
|
|
loc.alt * 10UL, // in mm |
|
|
|
|
gps.get_hdop(0), |
|
|
|
|
65535, |
|
|
|
|
gps.ground_speed(0)*100, // cm/s |
|
|
|
|
gps.ground_course_cd(0), // 1/100 degrees, |
|
|
|
|
gps.num_sats(0)); |
|
|
|
|
} |
|
|
|
|
last_send_time = g_gps->last_fix_time; |
|
|
|
|
mavlink_msg_gps_raw_int_send( |
|
|
|
|
chan, |
|
|
|
|
g_gps->last_fix_time*(uint64_t)1000, |
|
|
|
|
g_gps->status(), |
|
|
|
|
g_gps->latitude, // in 1E7 degrees |
|
|
|
|
g_gps->longitude, // in 1E7 degrees |
|
|
|
|
g_gps->altitude_cm * 10, // in mm |
|
|
|
|
g_gps->hdop, |
|
|
|
|
65535, |
|
|
|
|
g_gps->ground_speed_cm, // cm/s |
|
|
|
|
g_gps->ground_course_cd, // 1/100 degrees, |
|
|
|
|
g_gps->num_sats); |
|
|
|
|
|
|
|
|
|
#if HAL_CPU_CLASS > HAL_CPU_CLASS_16 |
|
|
|
|
static uint32_t last_send_time_ms2; |
|
|
|
|
if (gps.num_sensors() > 1 && |
|
|
|
|
gps.status(1) > AP_GPS::NO_GPS && |
|
|
|
|
(last_send_time_ms2 == 0 || last_send_time_ms2 != gps.last_message_time_ms(1))) { |
|
|
|
|
int16_t payload_space = comm_get_txspace(chan) - MAVLINK_NUM_NON_PAYLOAD_BYTES; |
|
|
|
|
if (payload_space >= MAVLINK_MSG_ID_GPS2_RAW_LEN) { |
|
|
|
|
const Location &loc = gps.location(1); |
|
|
|
|
last_send_time_ms = gps.last_message_time_ms(1); |
|
|
|
|
mavlink_msg_gps2_raw_send( |
|
|
|
|
chan, |
|
|
|
|
gps.last_fix_time_ms(1)*(uint64_t)1000, |
|
|
|
|
gps.status(1), |
|
|
|
|
loc.lat, |
|
|
|
|
loc.lng, |
|
|
|
|
loc.alt * 10UL, |
|
|
|
|
gps.get_hdop(1), |
|
|
|
|
65535, |
|
|
|
|
gps.ground_speed(1)*100, // cm/s |
|
|
|
|
gps.ground_course_cd(1), // 1/100 degrees, |
|
|
|
|
gps.num_sats(1), |
|
|
|
|
0, |
|
|
|
|
0); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void NOINLINE send_radio_out(mavlink_channel_t chan) |
|
|
|
|