Skip to content
Snippets Groups Projects
Commit 25cff520 authored by Beat Küng's avatar Beat Küng Committed by Lorenz Meier
Browse files

RTCM: use MAVLINK_MSG_ID_GPS_RTCM_DATA mavlink message (supports fragmentation)

parent 0e3d660c
No related branches found
No related tags found
No related merge requests found
uint8 len # length of data
uint8[110] data # data to write to GPS device
uint8 flags # LSB: 1=fragmented
uint8[182] data # data to write to GPS device (RTCM message)
......@@ -441,6 +441,11 @@ void GPS::handleInjectDataTopic()
if (updated) {
struct gps_inject_data_s msg;
orb_copy(ORB_ID(gps_inject_data), orb_inject_data_cur_fd, &msg);
/* Write the message to the gps device. Note that the message could be fragmented.
* But as we don't write anywhere else to the device during operation, we don't
* need to assemble the message first.
*/
injectData(msg.data, msg.len);
_orb_inject_data_next = (_orb_inject_data_next + 1) % _orb_inject_data_fd_count;
......
......@@ -250,8 +250,8 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg)
handle_message_adsb_vehicle(msg);
break;
case MAVLINK_MSG_ID_GPS_INJECT_DATA:
handle_message_gps_inject_data(msg);
case MAVLINK_MSG_ID_GPS_RTCM_DATA:
handle_message_gps_rtcm_data(msg);
break;
default:
......@@ -1775,16 +1775,17 @@ void MavlinkReceiver::handle_message_adsb_vehicle(mavlink_message_t *msg)
}
}
void MavlinkReceiver::handle_message_gps_inject_data(mavlink_message_t *msg)
void MavlinkReceiver::handle_message_gps_rtcm_data(mavlink_message_t *msg)
{
mavlink_gps_inject_data_t gps_inject_data_msg;
mavlink_gps_rtcm_data_t gps_rtcm_data_msg;
gps_inject_data_s gps_inject_data_topic;
mavlink_msg_gps_inject_data_decode(msg, &gps_inject_data_msg);
mavlink_msg_gps_rtcm_data_decode(msg, &gps_rtcm_data_msg);
gps_inject_data_topic.len = gps_inject_data_msg.len;
memcpy(gps_inject_data_topic.data, gps_inject_data_msg.data,
math::min((int)sizeof(gps_inject_data_topic.data), (int)sizeof(uint8_t) * gps_inject_data_msg.len));
gps_inject_data_topic.len = gps_rtcm_data_msg.len;
gps_inject_data_topic.flags = gps_rtcm_data_msg.flags;
memcpy(gps_inject_data_topic.data, gps_rtcm_data_msg.data,
math::min((int)sizeof(gps_inject_data_topic.data), (int)sizeof(uint8_t) * gps_rtcm_data_msg.len));
orb_advert_t &pub = _gps_inject_data_pub[_gps_inject_data_next_idx];
......
......@@ -141,7 +141,7 @@ private:
void handle_message_distance_sensor(mavlink_message_t *msg);
void handle_message_follow_target(mavlink_message_t *msg);
void handle_message_adsb_vehicle(mavlink_message_t *msg);
void handle_message_gps_inject_data(mavlink_message_t *msg);
void handle_message_gps_rtcm_data(mavlink_message_t *msg);
void *receive_thread(void *arg);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment