From 106948ba7b8f75c7171107d3f9ecad5673042531 Mon Sep 17 00:00:00 2001 From: "Mengjie (Kaylee) Xie" Date: Mon, 29 Jan 2024 10:38:37 -0800 Subject: [PATCH] allocate memory to store vehicles --- libraries/AP_ODIDScanner/AP_ODIDScanner.cpp | 17 +++++++++++++++++ libraries/AP_ODIDScanner/AP_ODIDScanner.h | 7 ++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/libraries/AP_ODIDScanner/AP_ODIDScanner.cpp b/libraries/AP_ODIDScanner/AP_ODIDScanner.cpp index 607df7aa2974f..3f5529a6bae88 100644 --- a/libraries/AP_ODIDScanner/AP_ODIDScanner.cpp +++ b/libraries/AP_ODIDScanner/AP_ODIDScanner.cpp @@ -28,6 +28,23 @@ void AP_ODIDScanner::init() { GCS_SEND_TEXT(MAV_SEVERITY_INFO, "Scanner: Found RID Device"); _port->begin(57600, 512, 512); } + + if (in_state.vehicle_list == nullptr) { + // sanity check param + // in_state.list_size_param.set(constrain_int16(in_state.list_size_param, 1, INT16_MAX)); + + in_state.list_size_param = RID_MAX_INSTANCES; + + in_state.vehicle_list = new rid_vehicle_t[in_state.list_size_param]; + + if (in_state.vehicle_list == nullptr) { + // dynamic RAM allocation of in_state.vehicle_list[] failed + _init_failed = true; + GCS_SEND_TEXT(MAV_SEVERITY_INFO, "RID: Unable to initialize RID vehicle list"); + return; + } + in_state.list_size_allocated = in_state.list_size_param; + } } void AP_ODIDScanner::update_recv() { diff --git a/libraries/AP_ODIDScanner/AP_ODIDScanner.h b/libraries/AP_ODIDScanner/AP_ODIDScanner.h index 28a6f02a12e46..ef70c212c6c56 100644 --- a/libraries/AP_ODIDScanner/AP_ODIDScanner.h +++ b/libraries/AP_ODIDScanner/AP_ODIDScanner.h @@ -12,6 +12,8 @@ #include #include +#define RID_MAX_INSTANCES 10 // Maximum number of RID sensor instances available on this platform + struct Loc : Location { AltType loc_alt_type; // more information on altitude in base class @@ -68,11 +70,14 @@ struct rid_vehicle_t { class AP_ODIDScanner { public: + + bool _init_failed; + struct { // list management AP_Int16 list_size_param; uint16_t list_size_allocated; - adsb_vehicle_t *vehicle_list; + rid_vehicle_t *vehicle_list; uint16_t vehicle_count; AP_Int32 list_radius; AP_Int16 list_altitude;