GCS_MAVLink: split DISTANCE_SENSOR onto its own ap_message id

This commit is contained in:
Peter Barker 2018-12-18 21:47:01 +11:00 committed by Peter Barker
parent a96c1566ec
commit 77be393ad4
2 changed files with 34 additions and 19 deletions

View File

@ -71,6 +71,7 @@ enum ap_message : uint8_t {
MSG_HWSTATUS, MSG_HWSTATUS,
MSG_WIND, MSG_WIND,
MSG_RANGEFINDER, MSG_RANGEFINDER,
MSG_DISTANCE_SENSOR,
MSG_TERRAIN, MSG_TERRAIN,
MSG_BATTERY2, MSG_BATTERY2,
MSG_CAMERA_FEEDBACK, MSG_CAMERA_FEEDBACK,
@ -183,9 +184,11 @@ public:
void send_battery_status(const AP_BattMonitor &battery, void send_battery_status(const AP_BattMonitor &battery,
const uint8_t instance) const; const uint8_t instance) const;
bool send_battery_status() const; bool send_battery_status() const;
bool send_distance_sensor() const; void send_distance_sensor() const;
void send_rangefinder_downward() const; // send_rangefinder sends only if a downward-facing instance is
bool send_proximity() const; // found. Rover overrides this!
virtual void send_rangefinder() const;
void send_proximity() const;
void send_ahrs2(); void send_ahrs2();
void send_system_time(); void send_system_time();
void send_radio_in(); void send_radio_in();

View File

@ -275,16 +275,19 @@ void GCS_MAVLINK::send_distance_sensor(const AP_RangeFinder_Backend *sensor, con
sensor->orientation(), // direction the sensor faces from MAV_SENSOR_ORIENTATION enum sensor->orientation(), // direction the sensor faces from MAV_SENSOR_ORIENTATION enum
0); // Measurement covariance in centimeters, 0 for unknown / invalid readings 0); // Measurement covariance in centimeters, 0 for unknown / invalid readings
} }
// send any and all distance_sensor messages. This starts by sending
bool GCS_MAVLINK::send_distance_sensor() const // any distance sensors not used by a Proximity sensor, then sends the
// proximity sensor ones.
void GCS_MAVLINK::send_distance_sensor() const
{ {
RangeFinder *rangefinder = RangeFinder::get_singleton(); RangeFinder *rangefinder = RangeFinder::get_singleton();
if (rangefinder == nullptr) { if (rangefinder == nullptr) {
return true; // this is wrong, but pretend we sent data and don't requeue return;
} }
// if we have a proximity backend that utilizes rangefinders cull sending them here, // if we have a proximity backend that utilizes rangefinders cull
// and allow the later proximity code to manage them // sending them here, and allow the later proximity code to manage
// them
bool filter_possible_proximity_sensors = false; bool filter_possible_proximity_sensors = false;
AP_Proximity *proximity = AP_Proximity::get_singleton(); AP_Proximity *proximity = AP_Proximity::get_singleton();
if (proximity != nullptr) { if (proximity != nullptr) {
@ -296,7 +299,9 @@ bool GCS_MAVLINK::send_distance_sensor() const
} }
for (uint8_t i = 0; i < RANGEFINDER_MAX_INSTANCES; i++) { for (uint8_t i = 0; i < RANGEFINDER_MAX_INSTANCES; i++) {
CHECK_PAYLOAD_SIZE(DISTANCE_SENSOR); if (!HAVE_PAYLOAD_SPACE(chan, DISTANCE_SENSOR)) {
return;
}
AP_RangeFinder_Backend *sensor = rangefinder->get_backend(i); AP_RangeFinder_Backend *sensor = rangefinder->get_backend(i);
if (sensor == nullptr) { if (sensor == nullptr) {
continue; continue;
@ -307,10 +312,11 @@ bool GCS_MAVLINK::send_distance_sensor() const
send_distance_sensor(sensor, i); send_distance_sensor(sensor, i);
} }
} }
return true;
send_proximity();
} }
void GCS_MAVLINK::send_rangefinder_downward() const void GCS_MAVLINK::send_rangefinder() const
{ {
RangeFinder *rangefinder = RangeFinder::get_singleton(); RangeFinder *rangefinder = RangeFinder::get_singleton();
if (rangefinder == nullptr) { if (rangefinder == nullptr) {
@ -326,11 +332,11 @@ void GCS_MAVLINK::send_rangefinder_downward() const
s->voltage_mv() * 0.001f); s->voltage_mv() * 0.001f);
} }
bool GCS_MAVLINK::send_proximity() const void GCS_MAVLINK::send_proximity() const
{ {
AP_Proximity *proximity = AP_Proximity::get_singleton(); AP_Proximity *proximity = AP_Proximity::get_singleton();
if (proximity == nullptr || proximity->get_status() == AP_Proximity::Proximity_NotConnected) { if (proximity == nullptr || proximity->get_status() == AP_Proximity::Proximity_NotConnected) {
return true; // this is wrong, but pretend we sent data and don't requeue return; // this is wrong, but pretend we sent data and don't requeue
} }
const uint16_t dist_min = (uint16_t)(proximity->distance_min() * 100.0f); // minimum distance the sensor can measure in centimeters const uint16_t dist_min = (uint16_t)(proximity->distance_min() * 100.0f); // minimum distance the sensor can measure in centimeters
@ -339,7 +345,9 @@ bool GCS_MAVLINK::send_proximity() const
AP_Proximity::Proximity_Distance_Array dist_array; AP_Proximity::Proximity_Distance_Array dist_array;
if (proximity->get_horizontal_distances(dist_array)) { if (proximity->get_horizontal_distances(dist_array)) {
for (uint8_t i = 0; i < PROXIMITY_MAX_DIRECTION; i++) { for (uint8_t i = 0; i < PROXIMITY_MAX_DIRECTION; i++) {
CHECK_PAYLOAD_SIZE(DISTANCE_SENSOR); if (!HAVE_PAYLOAD_SPACE(chan, DISTANCE_SENSOR)) {
return;
}
mavlink_msg_distance_sensor_send( mavlink_msg_distance_sensor_send(
chan, chan,
AP_HAL::millis(), // time since system boot AP_HAL::millis(), // time since system boot
@ -356,7 +364,9 @@ bool GCS_MAVLINK::send_proximity() const
// send upward distance // send upward distance
float dist_up; float dist_up;
if (proximity->get_upward_distance(dist_up)) { if (proximity->get_upward_distance(dist_up)) {
CHECK_PAYLOAD_SIZE(DISTANCE_SENSOR); if (!HAVE_PAYLOAD_SPACE(chan, DISTANCE_SENSOR)) {
return;
}
mavlink_msg_distance_sensor_send( mavlink_msg_distance_sensor_send(
chan, chan,
AP_HAL::millis(), // time since system boot AP_HAL::millis(), // time since system boot
@ -368,7 +378,6 @@ bool GCS_MAVLINK::send_proximity() const
MAV_SENSOR_ROTATION_PITCH_90, // direction upwards MAV_SENSOR_ROTATION_PITCH_90, // direction upwards
0); // Measurement covariance in centimeters, 0 for unknown / invalid readings 0); // Measurement covariance in centimeters, 0 for unknown / invalid readings
} }
return true;
} }
// report AHRS2 state // report AHRS2 state
@ -893,6 +902,7 @@ ap_message GCS_MAVLINK::mavlink_id_to_ap_message_id(const uint32_t mavlink_id) c
{ MAVLINK_MSG_ID_HWSTATUS, MSG_HWSTATUS}, { MAVLINK_MSG_ID_HWSTATUS, MSG_HWSTATUS},
{ MAVLINK_MSG_ID_WIND, MSG_WIND}, { MAVLINK_MSG_ID_WIND, MSG_WIND},
{ MAVLINK_MSG_ID_RANGEFINDER, MSG_RANGEFINDER}, { MAVLINK_MSG_ID_RANGEFINDER, MSG_RANGEFINDER},
{ MAVLINK_MSG_ID_DISTANCE_SENSOR, MSG_DISTANCE_SENSOR},
// request also does report: // request also does report:
{ MAVLINK_MSG_ID_TERRAIN_REQUEST, MSG_TERRAIN}, { MAVLINK_MSG_ID_TERRAIN_REQUEST, MSG_TERRAIN},
{ MAVLINK_MSG_ID_BATTERY2, MSG_BATTERY2}, { MAVLINK_MSG_ID_BATTERY2, MSG_BATTERY2},
@ -3708,9 +3718,11 @@ bool GCS_MAVLINK::try_send_message(const enum ap_message id)
case MSG_RANGEFINDER: case MSG_RANGEFINDER:
CHECK_PAYLOAD_SIZE(RANGEFINDER); CHECK_PAYLOAD_SIZE(RANGEFINDER);
send_rangefinder_downward(); send_rangefinder();
ret = send_distance_sensor(); break;
ret = ret && send_proximity();
case MSG_DISTANCE_SENSOR:
send_distance_sensor();
break; break;
case MSG_CAMERA_FEEDBACK: case MSG_CAMERA_FEEDBACK: