Skip to content

Commit eaa6937

Browse files
authored
Merge pull request #1 from jnomikos/remote_id_arm
OPEN_DRONE_ID_SYSTEM, OPEN_DRONE_ID_SELF_ID, and OPEN_DRONE_ID_OPERATOR_ID values getting cached within PX4
2 parents be38633 + 17f706b commit eaa6937

9 files changed

Lines changed: 193 additions & 26 deletions

msg/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,9 @@ set(msg_files
138138
OffboardControlMode.msg
139139
OnboardComputerStatus.msg
140140
OpenDroneIdArmStatus.msg
141+
OpenDroneIdOperatorId.msg
142+
OpenDroneIdSelfId.msg
143+
OpenDroneIdSystem.msg
141144
OrbitStatus.msg
142145
OrbTest.msg
143146
OrbTestLarge.msg

msg/OpenDroneIdOperatorId.msg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
uint64 timestamp
2+
uint8 target_system
3+
uint8 target_component
4+
uint8[20] id_or_mac
5+
uint8 operator_id_type
6+
char[20] operator_id

msg/OpenDroneIdSelfId.msg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
uint64 timestamp
2+
uint8 target_system
3+
uint8 target_component
4+
uint8[20] id_or_mac
5+
uint8 description_type
6+
char[23] description

msg/OpenDroneIdSystem.msg

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
uint64 timestamp
2+
uint8 target_system
3+
uint8 target_component
4+
uint8[20] id_or_mac
5+
uint8 operator_location_type
6+
uint8 classification_type
7+
int32 operator_latitude
8+
int32 operator_longitude
9+
uint16 area_count
10+
uint16 area_radius
11+
float32 area_ceiling
12+
float32 area_floor
13+
uint8 category_eu
14+
uint8 class_eu
15+
float32 operator_altitude_geo

src/modules/mavlink/mavlink_receiver.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,18 @@ MavlinkReceiver::handle_message(mavlink_message_t *msg)
288288
handle_message_open_drone_id_arm_status(msg);
289289
break;
290290

291+
case MAVLINK_MSG_ID_OPEN_DRONE_ID_OPERATOR_ID:
292+
handle_message_open_drone_id_operator_id(msg);
293+
break;
294+
295+
case MAVLINK_MSG_ID_OPEN_DRONE_ID_SELF_ID:
296+
handle_message_open_drone_id_self_id(msg);
297+
break;
298+
299+
case MAVLINK_MSG_ID_OPEN_DRONE_ID_SYSTEM:
300+
handle_message_open_drone_id_system(msg);
301+
break;
302+
291303
#if !defined(CONSTRAINED_FLASH)
292304

293305
case MAVLINK_MSG_ID_NAMED_VALUE_FLOAT:
@@ -3088,6 +3100,72 @@ void MavlinkReceiver::handle_message_open_drone_id_arm_status(
30883100

30893101
_open_drone_id_arm_status_pub.publish(odid_arm);
30903102
}
3103+
3104+
void MavlinkReceiver::handle_message_open_drone_id_operator_id(
3105+
mavlink_message_t *msg)
3106+
{
3107+
3108+
mavlink_open_drone_id_operator_id_t odid_module;
3109+
mavlink_msg_open_drone_id_operator_id_decode(msg, &odid_module);
3110+
3111+
open_drone_id_operator_id_s odid_operator_id{};
3112+
memset(&odid_operator_id, 0, sizeof(odid_operator_id));
3113+
3114+
odid_operator_id.timestamp = hrt_absolute_time();
3115+
odid_operator_id.target_system = odid_module.target_system;
3116+
odid_operator_id.target_component = odid_module.target_component;
3117+
memcpy(odid_operator_id.id_or_mac, odid_module.id_or_mac, sizeof(odid_operator_id.id_or_mac));
3118+
odid_operator_id.operator_id_type = odid_module.operator_id_type;
3119+
memcpy(odid_operator_id.operator_id, odid_module.operator_id, sizeof(odid_operator_id.operator_id));
3120+
3121+
_open_drone_id_operator_id_pub.publish(odid_operator_id);
3122+
}
3123+
3124+
void MavlinkReceiver::handle_message_open_drone_id_self_id(
3125+
mavlink_message_t *msg)
3126+
{
3127+
mavlink_open_drone_id_self_id_t odid_module;
3128+
mavlink_msg_open_drone_id_self_id_decode(msg, &odid_module);
3129+
3130+
open_drone_id_self_id_s odid_self_id{};
3131+
memset(&odid_self_id, 0, sizeof(odid_self_id));
3132+
3133+
odid_self_id.timestamp = hrt_absolute_time();
3134+
odid_self_id.target_system = odid_module.target_system;
3135+
odid_self_id.target_component = odid_module.target_component;
3136+
memcpy(odid_self_id.id_or_mac, odid_module.id_or_mac, sizeof(odid_self_id.id_or_mac));
3137+
odid_self_id.description_type = odid_module.description_type;
3138+
memcpy(odid_self_id.description, odid_module.description, sizeof(odid_self_id.description));
3139+
3140+
_open_drone_id_self_id_pub.publish(odid_self_id);
3141+
}
3142+
3143+
void MavlinkReceiver::handle_message_open_drone_id_system(
3144+
mavlink_message_t *msg)
3145+
{
3146+
mavlink_open_drone_id_system_t odid_module;
3147+
mavlink_msg_open_drone_id_system_decode(msg, &odid_module);
3148+
3149+
open_drone_id_system_s odid_system{};
3150+
memset(&odid_system, 0, sizeof(odid_system));
3151+
3152+
odid_system.timestamp = hrt_absolute_time();
3153+
odid_system.target_system = odid_module.target_system;
3154+
odid_system.target_component = odid_module.target_component;
3155+
memcpy(odid_system.id_or_mac, odid_module.id_or_mac, sizeof(odid_system.id_or_mac));
3156+
odid_system.operator_location_type = odid_module.operator_location_type;
3157+
odid_system.classification_type = odid_module.classification_type;
3158+
odid_system.operator_latitude = odid_module.operator_latitude;
3159+
odid_system.operator_longitude = odid_module.operator_longitude;
3160+
odid_system.area_count = odid_module.area_count;
3161+
odid_system.area_radius = odid_module.area_radius;
3162+
odid_system.area_ceiling = odid_module.area_ceiling;
3163+
odid_system.area_floor = odid_module.area_floor;
3164+
odid_system.category_eu = odid_module.category_eu;
3165+
odid_system.class_eu = odid_module.class_eu;
3166+
odid_system.operator_altitude_geo = odid_module.operator_altitude_geo;
3167+
}
3168+
30913169
void
30923170
MavlinkReceiver::run()
30933171
{

src/modules/mavlink/mavlink_receiver.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@
8888
#include <uORB/topics/offboard_control_mode.h>
8989
#include <uORB/topics/onboard_computer_status.h>
9090
#include <uORB/topics/open_drone_id_arm_status.h>
91+
#include <uORB/topics/open_drone_id_operator_id.h>
92+
#include <uORB/topics/open_drone_id_self_id.h>
93+
#include <uORB/topics/open_drone_id_system.h>
9194
#include <uORB/topics/ping.h>
9295
#include <uORB/topics/position_setpoint_triplet.h>
9396
#include <uORB/topics/radio_status.h>
@@ -181,6 +184,9 @@ class MavlinkReceiver : public ModuleParams
181184
void handle_message_odometry(mavlink_message_t *msg);
182185
void handle_message_onboard_computer_status(mavlink_message_t *msg);
183186
void handle_message_open_drone_id_arm_status(mavlink_message_t *msg);
187+
void handle_message_open_drone_id_operator_id(mavlink_message_t *msg);
188+
void handle_message_open_drone_id_self_id(mavlink_message_t *msg);
189+
void handle_message_open_drone_id_system(mavlink_message_t *msg);
184190
void handle_message_optical_flow_rad(mavlink_message_t *msg);
185191
void handle_message_ping(mavlink_message_t *msg);
186192
void handle_message_play_tune(mavlink_message_t *msg);
@@ -308,6 +314,9 @@ class MavlinkReceiver : public ModuleParams
308314
uORB::Publication<offboard_control_mode_s> _offboard_control_mode_pub{ORB_ID(offboard_control_mode)};
309315
uORB::Publication<onboard_computer_status_s> _onboard_computer_status_pub{ORB_ID(onboard_computer_status)};
310316
uORB::Publication<open_drone_id_arm_status_s> _open_drone_id_arm_status_pub{ORB_ID(open_drone_id_arm_status)};
317+
uORB::Publication<open_drone_id_operator_id_s> _open_drone_id_operator_id_pub{ORB_ID(open_drone_id_operator_id)};
318+
uORB::Publication<open_drone_id_self_id_s> _open_drone_id_self_id_pub{ORB_ID(open_drone_id_self_id)};
319+
uORB::Publication<open_drone_id_system_s> _open_drone_id_system_pub{ORB_ID(open_drone_id_system)};
311320
uORB::Publication<generator_status_s> _generator_status_pub{ORB_ID(generator_status)};
312321
uORB::Publication<vehicle_attitude_s> _attitude_pub{ORB_ID(vehicle_attitude)};
313322
uORB::Publication<vehicle_attitude_setpoint_s> _att_sp_pub{ORB_ID(vehicle_attitude_setpoint)};

src/modules/mavlink/streams/OPEN_DRONE_ID_OPERATOR_ID.hpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#define OPEN_DRONE_ID_OPERATOR_ID_HPP
3636

3737
#include <uORB/topics/vehicle_status.h>
38+
#include <uORB/topics/open_drone_id_operator_id.h>
3839

3940
class MavlinkStreamOpenDroneIdOperatorId : public MavlinkStream
4041
{
@@ -68,23 +69,31 @@ class MavlinkStreamOpenDroneIdOperatorId : public MavlinkStream
6869
: MavlinkStream(mavlink) {}
6970

7071
uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)};
72+
uORB::Subscription _open_drone_id_operator_id_sub{ORB_ID(open_drone_id_operator_id)};
7173

7274
bool send() override
7375
{
74-
mavlink_open_drone_id_operator_id_t msg{};
75-
msg.target_component = 0; // 0 for broadcast
76-
msg.target_system = 0; // 0 for broadcast
77-
// msg.id_or_mac // Only used for drone ID data received from other UAs.
78-
msg.operator_id_type = 0;
79-
80-
for (uint8_t i = 0; i < 20; ++i) {
81-
msg.operator_id[i] = '\0';
82-
}
76+
open_drone_id_operator_id_s operator_id{};
77+
78+
if(_open_drone_id_operator_id_sub.update(&operator_id)) {
79+
80+
mavlink_open_drone_id_operator_id_t msg{};
81+
msg.target_system = 0; // 0 for broadcast
82+
msg.target_component = 0; // 0 for broadcast
83+
// msg.id_or_mac // Only used for drone ID data received from other UAs.
84+
msg.operator_id_type = operator_id.operator_id_type;
8385

84-
mavlink_msg_open_drone_id_operator_id_send_struct(_mavlink->get_channel(),
85-
&msg);
86+
for (uint8_t i = 0; i < 20; ++i) {
87+
msg.operator_id[i] = operator_id.operator_id[i];
88+
}
89+
90+
mavlink_msg_open_drone_id_operator_id_send_struct(_mavlink->get_channel(),
91+
&msg);
92+
93+
return true;
94+
}
8695

87-
return true;
96+
return false;
8897
}
8998
};
9099

src/modules/mavlink/streams/OPEN_DRONE_ID_SELF_ID.hpp

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#define OPEN_DRONE_ID_SELF_ID_HPP
3636

3737
#include <uORB/topics/vehicle_status.h>
38+
#include <uORB/topics/open_drone_id_self_id.h>
3839

3940
class MavlinkStreamOpenDroneIdSelfId : public MavlinkStream
4041
{
@@ -67,23 +68,31 @@ class MavlinkStreamOpenDroneIdSelfId : public MavlinkStream
6768
: MavlinkStream(mavlink) {}
6869

6970
uORB::Subscription _vehicle_status_sub{ORB_ID(vehicle_status)};
71+
uORB::Subscription _open_drone_id_self_id_sub{ORB_ID(open_drone_id_self_id)};
7072

7173
bool send() override
7274
{
73-
mavlink_open_drone_id_self_id_t msg{};
74-
msg.target_component = 0; // 0 for broadcast
75-
msg.target_system = 0; // 0 for broadcast
76-
// msg.id_or_mac // Only used for drone ID data received from other UAs.
77-
msg.description_type = 0;
78-
79-
for (uint8_t i = 0; i < 23; ++i) {
80-
msg.description[i] = '\0';
81-
}
75+
open_drone_id_self_id_s self_id;
76+
77+
if(_open_drone_id_self_id_sub.update(&self_id)) {
78+
79+
mavlink_open_drone_id_self_id_t msg{};
80+
msg.target_system = 0; // 0 for broadcast
81+
msg.target_component = 0; // 0 for broadcast
82+
// msg.id_or_mac // Only used for drone ID data received from other UAs.
83+
msg.description_type = self_id.description_type;
8284

83-
mavlink_msg_open_drone_id_self_id_send_struct(_mavlink->get_channel(),
84-
&msg);
85+
for (uint8_t i = 0; i < 23; ++i) {
86+
msg.description[i] = self_id.description[i];
87+
}
88+
89+
mavlink_msg_open_drone_id_self_id_send_struct(_mavlink->get_channel(),
90+
&msg);
91+
92+
return true;
93+
}
8594

86-
return true;
95+
return false;
8796
}
8897
};
8998

src/modules/mavlink/streams/OPEN_DRONE_ID_SYSTEM.hpp

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636

3737
#include <uORB/topics/home_position.h>
3838
#include <uORB/topics/sensor_gps.h>
39+
#include <uORB/topics/open_drone_id_system.h>
3940

4041
class MavlinkStreamOpenDroneIdSystem : public MavlinkStream
4142
{
@@ -74,20 +75,21 @@ class MavlinkStreamOpenDroneIdSystem : public MavlinkStream
7475

7576
uORB::Subscription _home_position_sub{ORB_ID(home_position)};
7677
uORB::Subscription _vehicle_gps_position_sub{ORB_ID(vehicle_gps_position)};
78+
uORB::Subscription _open_drone_id_system_sub{ORB_ID(open_drone_id_system)};
7779

7880
bool send() override
7981
{
8082
sensor_gps_s vehicle_gps_position;
8183
home_position_s home_position;
82-
84+
open_drone_id_system_s odid_system;
8385
if (_vehicle_gps_position_sub.update(&vehicle_gps_position) &&
8486
_home_position_sub.copy(&home_position)) {
8587
if (vehicle_gps_position.fix_type >= 3 && home_position.valid_alt &&
8688
home_position.valid_hpos) {
8789

8890
mavlink_open_drone_id_system_t msg{};
89-
msg.target_component = 0; // 0 for broadcast
9091
msg.target_system = 0; // 0 for broadcast
92+
msg.target_component = 0; // 0 for broadcast
9193
// msg.id_or_mac // Only used for drone ID data received from other UAs.
9294
msg.operator_location_type = MAV_ODID_OPERATOR_LOCATION_TYPE_TAKEOFF;
9395
msg.classification_type = MAV_ODID_CLASSIFICATION_TYPE_UNDECLARED;
@@ -114,6 +116,36 @@ class MavlinkStreamOpenDroneIdSystem : public MavlinkStream
114116
}
115117
}
116118

119+
120+
if (_vehicle_gps_position_sub.update(&vehicle_gps_position) &&
121+
_home_position_sub.copy(&home_position) && _open_drone_id_system_sub.update(&odid_system)) {
122+
if (vehicle_gps_position.fix_type >= 3 && home_position.valid_alt &&
123+
home_position.valid_hpos) {
124+
125+
mavlink_open_drone_id_system_t msg{};
126+
127+
msg.target_system = 0; // 0 for broadcast
128+
msg.target_component = 0; // 0 for broadcast
129+
// msg.id_or_mac // Only used for drone ID data received from other UAs.
130+
msg.operator_location_type = odid_system.operator_location_type;
131+
msg.classification_type = odid_system.classification_type;
132+
msg.operator_latitude = odid_system.operator_latitude;
133+
msg.operator_longitude = odid_system.operator_longitude;
134+
msg.area_count = odid_system.area_count;
135+
msg.area_radius = odid_system.area_radius;
136+
msg.area_ceiling = odid_system.area_ceiling;
137+
msg.area_floor = odid_system.area_floor;
138+
msg.category_eu = odid_system.category_eu;
139+
msg.class_eu = odid_system.class_eu;
140+
msg.operator_altitude_geo = odid_system.operator_altitude_geo;
141+
142+
msg.timestamp = odid_system.timestamp;
143+
144+
mavlink_msg_open_drone_id_system_send_struct(_mavlink->get_channel(),
145+
&msg);
146+
return true;
147+
}
148+
}
117149
return false;
118150
}
119151
};

0 commit comments

Comments
 (0)