diff --git a/msg/CMakeLists.txt b/msg/CMakeLists.txt index 148caa3d0e..7404cf5e71 100644 --- a/msg/CMakeLists.txt +++ b/msg/CMakeLists.txt @@ -41,6 +41,7 @@ set(msg_files battery_status.msg camera_capture.msg camera_trigger.msg + cellular_status.msg collision_report.msg collision_constraints.msg commander_state.msg diff --git a/msg/cellular_status.msg b/msg/cellular_status.msg new file mode 100644 index 0000000000..ca01e12122 --- /dev/null +++ b/msg/cellular_status.msg @@ -0,0 +1,9 @@ +uint64 timestamp # time since system start (microseconds) + +uint16 status # Status bitmap 1: Roaming is active +uint8 type # Cellular network radio type 0: none 1: gsm 2: cdma 3: wcdma 4: lte +uint8 quality # Cellular network RSSI/RSRP in dBm, absolute value +uint16 mcc # Mobile country code. If unknown, set to: UINT16_MAX +uint16 mnc # Mobile network code. If unknown, set to: UINT16_MAX +uint16 lac # Location area code. If unknown, set to: 0 +uint32 cid # Cell ID. If unknown, set to: UINT32_MAX diff --git a/msg/tools/uorb_rtps_message_ids.yaml b/msg/tools/uorb_rtps_message_ids.yaml index 612d8a210f..dd5148e4fe 100644 --- a/msg/tools/uorb_rtps_message_ids.yaml +++ b/msg/tools/uorb_rtps_message_ids.yaml @@ -262,6 +262,8 @@ rtps: id: 115 - msg: onboard_computer_status id: 116 + - msg: cellular_status + id: 117 ########## multi topics: begin ########## - msg: actuator_controls_0 id: 150 diff --git a/src/modules/logger/logger.cpp b/src/modules/logger/logger.cpp index 70b807b828..b1ca8301ee 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -637,6 +637,7 @@ void Logger::add_sensor_comparison_topics() void Logger::add_vision_and_avoidance_topics() { + add_topic("cellular_status", 200); add_topic("collision_constraints"); add_topic("obstacle_distance_fused"); add_topic("onboard_computer_status", 200); diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index bd749e64d1..290c8a6f32 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -190,6 +190,10 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg) handle_message_landing_target(msg); break; + case MAVLINK_MSG_ID_CELLULAR_STATUS: + handle_message_cellular_status(msg); + break; + case MAVLINK_MSG_ID_ADSB_VEHICLE: handle_message_adsb_vehicle(msg); break; @@ -2194,6 +2198,26 @@ MavlinkReceiver::handle_message_landing_target(mavlink_message_t *msg) } } +void +MavlinkReceiver::handle_message_cellular_status(mavlink_message_t *msg) +{ + mavlink_cellular_status_t status; + mavlink_msg_cellular_status_decode(msg, &status); + + cellular_status_s cellular_status{}; + + cellular_status.timestamp = hrt_absolute_time(); + cellular_status.status = status.status; + cellular_status.type = status.type; + cellular_status.quality = status.quality; + cellular_status.mcc = status.mcc; + cellular_status.mnc = status.mnc; + cellular_status.lac = status.lac; + cellular_status.cid = status.cid; + + _cellular_status_pub.publish(cellular_status); +} + void MavlinkReceiver::handle_message_adsb_vehicle(mavlink_message_t *msg) { diff --git a/src/modules/mavlink/mavlink_receiver.h b/src/modules/mavlink/mavlink_receiver.h index e770eb5049..98acb8ab1d 100644 --- a/src/modules/mavlink/mavlink_receiver.h +++ b/src/modules/mavlink/mavlink_receiver.h @@ -57,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -131,6 +132,7 @@ private: void handle_message_adsb_vehicle(mavlink_message_t *msg); void handle_message_att_pos_mocap(mavlink_message_t *msg); void handle_message_battery_status(mavlink_message_t *msg); + void handle_message_cellular_status(mavlink_message_t *msg); void handle_message_collision(mavlink_message_t *msg); void handle_message_command_ack(mavlink_message_t *msg); void handle_message_command_int(mavlink_message_t *msg); @@ -222,6 +224,7 @@ private: uORB::Publication _actuator_controls_pubs[4] {ORB_ID(actuator_controls_0), ORB_ID(actuator_controls_1), ORB_ID(actuator_controls_2), ORB_ID(actuator_controls_3)}; uORB::Publication _airspeed_pub{ORB_ID(airspeed)}; uORB::Publication _battery_pub{ORB_ID(battery_status)}; + uORB::Publication _cellular_status_pub{ORB_ID(cellular_status)}; uORB::Publication _collision_report_pub{ORB_ID(collision_report)}; uORB::Publication _debug_array_pub{ORB_ID(debug_array)}; uORB::Publication _debug_key_value_pub{ORB_ID(debug_key_value)};