diff --git a/msg/CMakeLists.txt b/msg/CMakeLists.txt index 0542639650f3..d63886df0dd5 100644 --- a/msg/CMakeLists.txt +++ b/msg/CMakeLists.txt @@ -42,6 +42,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 000000000000..ca01e1212283 --- /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 03869706e081..3d18642946d7 100644 --- a/msg/tools/uorb_rtps_message_ids.yaml +++ b/msg/tools/uorb_rtps_message_ids.yaml @@ -262,6 +262,8 @@ rtps: id: 114 - msg: airspeed_validated id: 115 + - 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 10c6d2bcb68d..cb7b2962cf92 100644 --- a/src/modules/logger/logger.cpp +++ b/src/modules/logger/logger.cpp @@ -638,6 +638,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("vehicle_mocap_odometry", 30); diff --git a/src/modules/mavlink/mavlink_receiver.cpp b/src/modules/mavlink/mavlink_receiver.cpp index 10d54bf5b582..f87dd0d11e79 100644 --- a/src/modules/mavlink/mavlink_receiver.cpp +++ b/src/modules/mavlink/mavlink_receiver.cpp @@ -189,6 +189,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; @@ -2165,6 +2169,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 e4098e59c5c6..f676d116d2ae 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 @@ -130,6 +131,7 @@ class MavlinkReceiver : public ModuleParams 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); @@ -218,6 +220,7 @@ class MavlinkReceiver : public ModuleParams 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)};