From b48d3e61e87814c7b31dc40d5152ffb58b15e7bf Mon Sep 17 00:00:00 2001 From: Gautier Hattenberger Date: Wed, 16 Nov 2022 16:05:14 +0100 Subject: [PATCH] [datalink] add a datalink init function (#2950) * [datalink] add a datalink init function and get rid of the DATALINK_C trick * [datalink] weak parsing function * [sim] remove MODULES_C define from sim_ap this is not necessary and is a source of multiple definition errors --- conf/firmwares/setup.makefile | 2 +- conf/firmwares/test_chibios.makefile | 2 +- conf/firmwares/test_progs.makefile | 2 +- conf/modules/datalink_common.xml | 1 + sw/airborne/arch/sim/sim_ap.c | 4 --- .../firmwares/demo/demo_ahrs_actuators.c | 2 +- sw/airborne/firmwares/setup/setup_actuators.c | 3 +-- sw/airborne/modules/datalink/datalink.c | 25 +++++++++---------- sw/airborne/modules/datalink/datalink.h | 21 +++++++--------- sw/airborne/modules/datalink/downlink.c | 4 --- sw/airborne/test/mcu_periph/test_adc.c | 3 +-- sw/airborne/test/modules/test_ahrs.c | 3 +-- sw/airborne/test/modules/test_imu.c | 4 +-- sw/airborne/test/modules/test_radio_control.c | 2 +- sw/airborne/test/modules/test_settings.c | 4 +-- sw/airborne/test/peripherals/test_ami601.c | 2 +- .../test/peripherals/test_lis302dl_spi.c | 1 - sw/airborne/test/peripherals/test_ms2100.c | 2 +- sw/airborne/test/test_actuators_pwm.c | 3 +-- sw/airborne/test/test_baro_board.c | 2 +- sw/airborne/test/test_can.c | 2 +- sw/airborne/test/test_datalink.c | 3 +-- sw/airborne/test/test_manual.c | 4 +-- sw/airborne/test/test_math_trig_compressed.c | 4 +-- sw/airborne/test/test_module.c | 2 +- sw/airborne/test/test_telemetry.c | 4 +-- 26 files changed, 42 insertions(+), 69 deletions(-) diff --git a/conf/firmwares/setup.makefile b/conf/firmwares/setup.makefile index fba26d1888..5230b7ffd4 100644 --- a/conf/firmwares/setup.makefile +++ b/conf/firmwares/setup.makefile @@ -101,7 +101,7 @@ setup_actuators.CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD) SETUP_ACTUATORS_MODEM_PORT_LOWER=$(shell echo $(MODEM_PORT) | tr A-Z a-z) setup_actuators.CFLAGS += -DDOWNLINK -DDOWNLINK_DEVICE=$(SETUP_ACTUATORS_MODEM_PORT_LOWER) -DPPRZ_UART=$(SETUP_ACTUATORS_MODEM_PORT_LOWER) setup_actuators.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -setup_actuators.srcs += modules/datalink/downlink.c pprzlink/src/pprz_transport.c modules/datalink/pprz_dl.c +setup_actuators.srcs += modules/datalink/downlink.c modules/datalink/datalink.c pprzlink/src/pprz_transport.c modules/datalink/pprz_dl.c setup_actuators.srcs += modules/actuators/actuators.c setup_actuators.srcs += $(SRC_FIRMWARE)/setup_actuators.c diff --git a/conf/firmwares/test_chibios.makefile b/conf/firmwares/test_chibios.makefile index caaa1b1580..17baa92656 100644 --- a/conf/firmwares/test_chibios.makefile +++ b/conf/firmwares/test_chibios.makefile @@ -67,7 +67,7 @@ COMMON_TEST_SRCS += $(SRC_ARCH)/mcu_periph/gpio_arch.c # pprz downlink/datalink COMMON_TELEMETRY_CFLAGS = -DDOWNLINK -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -COMMON_TELEMETRY_SRCS = modules/datalink/downlink.c modules/datalink/pprz_transport.c modules/datalink/pprz_dl.c +COMMON_TELEMETRY_SRCS = modules/datalink/downlink.c modules/datalink/datalink.c modules/datalink/pprz_transport.c modules/datalink/pprz_dl.c COMMON_TELEMETRY_MODEM_PORT_LOWER=$(shell echo $(MODEM_PORT) | tr A-Z a-z) COMMON_TELEMETRY_CFLAGS += -DUSE_$(MODEM_PORT) -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD) diff --git a/conf/firmwares/test_progs.makefile b/conf/firmwares/test_progs.makefile index 55ebd8ed54..3704c81339 100644 --- a/conf/firmwares/test_progs.makefile +++ b/conf/firmwares/test_progs.makefile @@ -68,7 +68,7 @@ endif # pprz downlink/datalink COMMON_TELEMETRY_CFLAGS = -DDOWNLINK -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -COMMON_TELEMETRY_SRCS = modules/datalink/downlink.c pprzlink/src/pprz_transport.c modules/datalink/pprz_dl.c +COMMON_TELEMETRY_SRCS = modules/datalink/downlink.c modules/datalink/datalink.c pprzlink/src/pprz_transport.c modules/datalink/pprz_dl.c # check if we are using UDP ifneq (,$(findstring UDP, $(MODEM_DEV))) diff --git a/conf/modules/datalink_common.xml b/conf/modules/datalink_common.xml index 792491c190..972a3fd581 100644 --- a/conf/modules/datalink_common.xml +++ b/conf/modules/datalink_common.xml @@ -11,6 +11,7 @@ + diff --git a/sw/airborne/arch/sim/sim_ap.c b/sw/airborne/arch/sim/sim_ap.c index 2899b33cfc..fab8228568 100644 --- a/sw/airborne/arch/sim/sim_ap.c +++ b/sw/airborne/arch/sim/sim_ap.c @@ -1,8 +1,6 @@ /* Definitions and declarations required to compile autopilot code on a i386 architecture. Bindings for OCaml. */ -#define MODULES_C - #include #include #include @@ -37,8 +35,6 @@ bool rc_event_1, rc_event_2; uint8_t gps_nb_ovrn, link_fbw_fbw_nb_err, link_fbw_nb_err; float alt_roll_pgain; float roll_rate_pgain; -uint16_t datalink_time = 0; -uint16_t datalink_nb_msgs = 0; #ifndef SIM_UPDATE_DL #define SIM_UPDATE_DL TRUE diff --git a/sw/airborne/firmwares/demo/demo_ahrs_actuators.c b/sw/airborne/firmwares/demo/demo_ahrs_actuators.c index 6acafbb043..0251b5f6a9 100644 --- a/sw/airborne/firmwares/demo/demo_ahrs_actuators.c +++ b/sw/airborne/firmwares/demo/demo_ahrs_actuators.c @@ -124,7 +124,7 @@ static inline void main_periodic_task(void) modules_periodic_task(); } RunOnceEvery(10, { LED_PERIODIC();}); - RunOnceEvery(PERIODIC_FREQUENCY, { datalink_time++; }); + RunOnceEvery(PERIODIC_FREQUENCY, { datalink_periodic(); }); periodic_telemetry_send_Main(DefaultPeriodic, &(DefaultChannel).trans_tx, &(DefaultDevice).device); modules_periodic_task(); diff --git a/sw/airborne/firmwares/setup/setup_actuators.c b/sw/airborne/firmwares/setup/setup_actuators.c index 9c84c2525b..392701f6e2 100644 --- a/sw/airborne/firmwares/setup/setup_actuators.c +++ b/sw/airborne/firmwares/setup/setup_actuators.c @@ -22,7 +22,6 @@ * */ -#define DATALINK_C #define MODULES_C /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h @@ -71,7 +70,7 @@ int main(void) static inline void main_init(void) { mcu_init(); - + datalink_init(); downlink_init(); pprz_dl_init(); diff --git a/sw/airborne/modules/datalink/datalink.c b/sw/airborne/modules/datalink/datalink.c index 6d1dbcfa79..9bba881f26 100644 --- a/sw/airborne/modules/datalink/datalink.c +++ b/sw/airborne/modules/datalink/datalink.c @@ -25,7 +25,6 @@ * */ -#define DATALINK_C #define MODULES_DATALINK_C #include "datalink.h" @@ -36,22 +35,22 @@ #include "pprzlink/messages.h" -#if defined RADIO_CONTROL && defined RADIO_CONTROL_TYPE_DATALINK -#include "modules/radio_control/radio_control.h" -#endif - -#if USE_GPS -#include "modules/gps/gps.h" -#endif - -#ifdef RADIO_CONTROL_DATALINK_LED -#include "led.h" -#endif +bool dl_msg_available; +uint16_t datalink_time; +uint16_t datalink_nb_msgs; +uint8_t dl_buffer[MSG_SIZE] __attribute__((aligned)); #if USE_NPS bool datalink_enabled = true; #endif +void datalink_init(void) +{ + dl_msg_available = false; + datalink_time = 0; + datalink_nb_msgs = 0; +} + void datalink_periodic(void) { datalink_time++; // called at 1Hz @@ -69,7 +68,7 @@ void datalink_parse_PING(struct link_device *dev, struct transport_tx *trans, ui pprzlink_msg_send_PONG(&msg); } -void dl_parse_msg(struct link_device *dev, struct transport_tx *trans, uint8_t *buf) +void WEAK dl_parse_msg(struct link_device *dev, struct transport_tx *trans, uint8_t *buf) { uint8_t msg_id = pprzlink_get_msg_id(buf); uint8_t class_id = pprzlink_get_msg_class_id(buf); diff --git a/sw/airborne/modules/datalink/datalink.h b/sw/airborne/modules/datalink/datalink.h index 9de4e9a285..9e2d9c3358 100644 --- a/sw/airborne/modules/datalink/datalink.h +++ b/sw/airborne/modules/datalink/datalink.h @@ -27,12 +27,6 @@ #ifndef DATALINK_H #define DATALINK_H -#ifdef DATALINK_C -#define EXTERN -#else -#define EXTERN extern -#endif - #include "std.h" #include "pprzlink/dl_protocol.h" @@ -44,22 +38,22 @@ #define BLUEGIGA 5 /** Flag provided to control calls to ::dl_parse_msg. NOT used in this module*/ -EXTERN bool dl_msg_available; +extern bool dl_msg_available; /** time in seconds since last datalink message was received */ -EXTERN uint16_t datalink_time; +extern uint16_t datalink_time; /** number of datalink/uplink messages received */ -EXTERN uint16_t datalink_nb_msgs; +extern uint16_t datalink_nb_msgs; #define MSG_SIZE 256 -EXTERN uint8_t dl_buffer[MSG_SIZE] __attribute__((aligned)); +extern uint8_t dl_buffer[MSG_SIZE] __attribute__((aligned)); /** Should be called when chars are available in dl_buffer */ -EXTERN void dl_parse_msg(struct link_device *dev, struct transport_tx *trans, uint8_t *buf); +extern void dl_parse_msg(struct link_device *dev, struct transport_tx *trans, uint8_t *buf); #if USE_NPS -EXTERN bool datalink_enabled; +extern bool datalink_enabled; #endif /** Convenience macro to fill dl_buffer */ @@ -72,6 +66,9 @@ EXTERN bool datalink_enabled; dl_msg_available = true; \ } +/** init function */ +extern void datalink_init(void); + /** periodic function, should be called at 1Hz */ extern void datalink_periodic(void); diff --git a/sw/airborne/modules/datalink/downlink.c b/sw/airborne/modules/datalink/downlink.c index c64e8a1eaf..0cd57fd900 100644 --- a/sw/airborne/modules/datalink/downlink.c +++ b/sw/airborne/modules/datalink/downlink.c @@ -71,10 +71,6 @@ void downlink_init(void) (DefaultDevice).device.nb_bytes = 0; (DefaultDevice).device.nb_msgs = 0; -#if defined DATALINK - datalink_nb_msgs = 0; -#endif - #if PERIODIC_TELEMETRY register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_DATALINK_REPORT, send_downlink); #endif diff --git a/sw/airborne/test/mcu_periph/test_adc.c b/sw/airborne/test/mcu_periph/test_adc.c index bae00a9a5a..1339e62db1 100644 --- a/sw/airborne/test/mcu_periph/test_adc.c +++ b/sw/airborne/test/mcu_periph/test_adc.c @@ -20,8 +20,6 @@ * */ -#define DATALINK_C - #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" @@ -43,6 +41,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / 100), NULL); + datalink_init(); downlink_init(); adc_init(); pprz_dl_init(); diff --git a/sw/airborne/test/modules/test_ahrs.c b/sw/airborne/test/modules/test_ahrs.c index 025579528b..9b9593f2b6 100644 --- a/sw/airborne/test/modules/test_ahrs.c +++ b/sw/airborne/test/modules/test_ahrs.c @@ -21,8 +21,6 @@ #include -#define DATALINK_C - /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h * in order to implement telemetry_mode_Main_* */ @@ -79,6 +77,7 @@ static inline void main_init(void) modules_init(); ahrs_init(); pprz_dl_init(); + datalink_init(); downlink_init(); } diff --git a/sw/airborne/test/modules/test_imu.c b/sw/airborne/test/modules/test_imu.c index eae686b074..6ce4bcf7b7 100644 --- a/sw/airborne/test/modules/test_imu.c +++ b/sw/airborne/test/modules/test_imu.c @@ -21,7 +21,6 @@ #include -#define DATALINK_C #define ABI_C #define MODULES_C @@ -83,8 +82,7 @@ static inline void main_init(void) sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); modules_init(); - - + datalink_init(); downlink_init(); pprz_dl_init(); diff --git a/sw/airborne/test/modules/test_radio_control.c b/sw/airborne/test/modules/test_radio_control.c index f8eee2a7e0..c996c6eabe 100644 --- a/sw/airborne/test/modules/test_radio_control.c +++ b/sw/airborne/test/modules/test_radio_control.c @@ -23,7 +23,6 @@ #include "mcu.h" #include "mcu_periph/sys_time.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "modules/datalink/pprz_dl.h" #include "modules/radio_control/radio_control.h" @@ -50,6 +49,7 @@ static inline void main_init(void) mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); radio_control_init(); + datalink_init(); downlink_init(); pprz_dl_init(); } diff --git a/sw/airborne/test/modules/test_settings.c b/sw/airborne/test/modules/test_settings.c index 1ecc608540..7d424f24aa 100644 --- a/sw/airborne/test/modules/test_settings.c +++ b/sw/airborne/test/modules/test_settings.c @@ -25,8 +25,6 @@ * Test persistent settings, use together with conf/settings/test_settings.xml */ -#define DATALINK_C - #include BOARD_CONFIG #include "std.h" @@ -72,7 +70,7 @@ static inline void main_init(void) settings_init(); pprz_dl_init(); - + datalink_init(); #if DOWNLINK downlink_init(); #endif diff --git a/sw/airborne/test/peripherals/test_ami601.c b/sw/airborne/test/peripherals/test_ami601.c index 0b4f628eac..3104794e28 100644 --- a/sw/airborne/test/peripherals/test_ami601.c +++ b/sw/airborne/test/peripherals/test_ami601.c @@ -25,7 +25,6 @@ #include "mcu.h" #include "mcu_periph/sys_time.h" #include "led.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "mcu_periph/i2c.h" @@ -59,6 +58,7 @@ static inline void main_init(void) LED_ON(4); ami601_init(); + datalink_init(); downlink_init(); } diff --git a/sw/airborne/test/peripherals/test_lis302dl_spi.c b/sw/airborne/test/peripherals/test_lis302dl_spi.c index f73dfb15af..72bfb2d448 100644 --- a/sw/airborne/test/peripherals/test_lis302dl_spi.c +++ b/sw/airborne/test/peripherals/test_lis302dl_spi.c @@ -28,7 +28,6 @@ #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "led.h" diff --git a/sw/airborne/test/peripherals/test_ms2100.c b/sw/airborne/test/peripherals/test_ms2100.c index 8ded9602df..fd707ba7f8 100644 --- a/sw/airborne/test/peripherals/test_ms2100.c +++ b/sw/airborne/test/peripherals/test_ms2100.c @@ -23,7 +23,6 @@ #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "modules/datalink/pprz_dl.h" #include "peripherals/ms2100.h" @@ -54,6 +53,7 @@ static inline void main_init(void) sys_time_register_timer((1. / 50), NULL); ms2100_init(&ms2100, &(MS2100_SPI_DEV), MS2100_SLAVE_IDX); + datalink_init(); downlink_init(); pprz_dl_init(); } diff --git a/sw/airborne/test/test_actuators_pwm.c b/sw/airborne/test/test_actuators_pwm.c index 6cbf46c324..f036275f3e 100644 --- a/sw/airborne/test/test_actuators_pwm.c +++ b/sw/airborne/test/test_actuators_pwm.c @@ -25,8 +25,6 @@ */ -#define DATALINK_C - /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h * in order to implement telemetry_mode_Main_* */ @@ -72,6 +70,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); + datalink_init(); downlink_init(); pprz_dl_init(); ActuatorsPwmInit(); diff --git a/sw/airborne/test/test_baro_board.c b/sw/airborne/test/test_baro_board.c index b141e7f615..3e9b9fcff1 100644 --- a/sw/airborne/test/test_baro_board.c +++ b/sw/airborne/test/test_baro_board.c @@ -31,7 +31,6 @@ #include "mcu_periph/sys_time.h" #include "led.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "modules/datalink/pprz_dl.h" @@ -110,6 +109,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); + datalink_init(); downlink_init(); pprz_dl_init(); test_baro_board_imu_init(); diff --git a/sw/airborne/test/test_can.c b/sw/airborne/test/test_can.c index 45be2913ef..8ac812b8a0 100644 --- a/sw/airborne/test/test_can.c +++ b/sw/airborne/test/test_can.c @@ -27,7 +27,6 @@ #include "mcu.h" #include "mcu_periph/sys_time.h" #include "led.h" -#define DATALINK_C #include "modules/datalink/downlink.h" #include "modules/datalink/pprz_dl.h" #include "mcu_periph/can.h" @@ -70,6 +69,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((0.5 / PERIODIC_FREQUENCY), NULL); + datalink_init(); downlink_init(); pprz_dl_init(); ppz_can_init((can_rx_callback_t)main_on_can_msg); diff --git a/sw/airborne/test/test_datalink.c b/sw/airborne/test/test_datalink.c index 94fdb3d90e..a852d63520 100644 --- a/sw/airborne/test/test_datalink.c +++ b/sw/airborne/test/test_datalink.c @@ -24,8 +24,6 @@ * * Periodically sends ALIVE (10Hz) and ping/pong (every 5s) telemetry messages. */ -#define DATALINK_C - #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" @@ -55,6 +53,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); + datalink_init(); downlink_init(); pprz_dl_init(); } diff --git a/sw/airborne/test/test_manual.c b/sw/airborne/test/test_manual.c index 2b0a4c8931..f056890389 100644 --- a/sw/airborne/test/test_manual.c +++ b/sw/airborne/test/test_manual.c @@ -24,9 +24,6 @@ * Test the manual control via RC including command_laws. */ - -#define DATALINK_C - #include "generated/airframe.h" #include "generated/settings.h" @@ -76,6 +73,7 @@ int main(void) static inline void main_init(void) { mcu_init(); + datalink_init(); downlink_init(); pprz_dl_init(); diff --git a/sw/airborne/test/test_math_trig_compressed.c b/sw/airborne/test/test_math_trig_compressed.c index f3e6e2cacb..c7d2feb2a8 100644 --- a/sw/airborne/test/test_math_trig_compressed.c +++ b/sw/airborne/test/test_math_trig_compressed.c @@ -76,8 +76,6 @@ */ -#define DATALINK_C - #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" @@ -204,7 +202,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); - + datalink_init(); downlink_init(); } diff --git a/sw/airborne/test/test_module.c b/sw/airborne/test/test_module.c index 0dab604a46..4438b7d05d 100644 --- a/sw/airborne/test/test_module.c +++ b/sw/airborne/test/test_module.c @@ -27,7 +27,6 @@ #include BOARD_CONFIG -#define DATALINK_C #define MODULES_C #define ABI_C @@ -71,6 +70,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); + datalink_init(); downlink_init(); modules_init(); diff --git a/sw/airborne/test/test_telemetry.c b/sw/airborne/test/test_telemetry.c index ba6d0b40ed..dd5c5b65d7 100644 --- a/sw/airborne/test/test_telemetry.c +++ b/sw/airborne/test/test_telemetry.c @@ -25,8 +25,6 @@ * Periodically sends ALIVE telemetry messages. */ -#define DATALINK_C - #include BOARD_CONFIG #include "mcu.h" #include "mcu_periph/sys_time.h" @@ -55,7 +53,7 @@ static inline void main_init(void) { mcu_init(); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); - + datalink_init(); downlink_init(); pprz_dl_init(); }