[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
This commit is contained in:
Gautier Hattenberger
2022-11-16 16:05:14 +01:00
committed by GitHub
parent f5a666b0b3
commit b48d3e61e8
26 changed files with 42 additions and 69 deletions
+1 -1
View File
@@ -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_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 -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.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 += modules/actuators/actuators.c
setup_actuators.srcs += $(SRC_FIRMWARE)/setup_actuators.c setup_actuators.srcs += $(SRC_FIRMWARE)/setup_actuators.c
+1 -1
View File
@@ -67,7 +67,7 @@ COMMON_TEST_SRCS += $(SRC_ARCH)/mcu_periph/gpio_arch.c
# pprz downlink/datalink # pprz downlink/datalink
COMMON_TELEMETRY_CFLAGS = -DDOWNLINK -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ 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_MODEM_PORT_LOWER=$(shell echo $(MODEM_PORT) | tr A-Z a-z)
COMMON_TELEMETRY_CFLAGS += -DUSE_$(MODEM_PORT) -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD) COMMON_TELEMETRY_CFLAGS += -DUSE_$(MODEM_PORT) -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
+1 -1
View File
@@ -68,7 +68,7 @@ endif
# pprz downlink/datalink # pprz downlink/datalink
COMMON_TELEMETRY_CFLAGS = -DDOWNLINK -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ 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 # check if we are using UDP
ifneq (,$(findstring UDP, $(MODEM_DEV))) ifneq (,$(findstring UDP, $(MODEM_DEV)))
+1
View File
@@ -11,6 +11,7 @@
<file name="datalink.h"/> <file name="datalink.h"/>
<file name="downlink.h"/> <file name="downlink.h"/>
</header> </header>
<init fun="datalink_init()"/>
<init fun="downlink_init()"/> <init fun="downlink_init()"/>
<periodic fun="telemetry_reporting_task()"/> <periodic fun="telemetry_reporting_task()"/>
<periodic fun="datalink_periodic()" freq="1"/> <periodic fun="datalink_periodic()" freq="1"/>
-4
View File
@@ -1,8 +1,6 @@
/* Definitions and declarations required to compile autopilot code on a /* Definitions and declarations required to compile autopilot code on a
i386 architecture. Bindings for OCaml. */ i386 architecture. Bindings for OCaml. */
#define MODULES_C
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
#include <sys/time.h> #include <sys/time.h>
@@ -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; uint8_t gps_nb_ovrn, link_fbw_fbw_nb_err, link_fbw_nb_err;
float alt_roll_pgain; float alt_roll_pgain;
float roll_rate_pgain; float roll_rate_pgain;
uint16_t datalink_time = 0;
uint16_t datalink_nb_msgs = 0;
#ifndef SIM_UPDATE_DL #ifndef SIM_UPDATE_DL
#define SIM_UPDATE_DL TRUE #define SIM_UPDATE_DL TRUE
@@ -124,7 +124,7 @@ static inline void main_periodic_task(void)
modules_periodic_task(); modules_periodic_task();
} }
RunOnceEvery(10, { LED_PERIODIC();}); RunOnceEvery(10, { LED_PERIODIC();});
RunOnceEvery(PERIODIC_FREQUENCY, { datalink_time++; }); RunOnceEvery(PERIODIC_FREQUENCY, { datalink_periodic(); });
periodic_telemetry_send_Main(DefaultPeriodic, &(DefaultChannel).trans_tx, &(DefaultDevice).device); periodic_telemetry_send_Main(DefaultPeriodic, &(DefaultChannel).trans_tx, &(DefaultDevice).device);
modules_periodic_task(); modules_periodic_task();
@@ -22,7 +22,6 @@
* *
*/ */
#define DATALINK_C
#define MODULES_C #define MODULES_C
/* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h
@@ -71,7 +70,7 @@ int main(void)
static inline void main_init(void) static inline void main_init(void)
{ {
mcu_init(); mcu_init();
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
+12 -13
View File
@@ -25,7 +25,6 @@
* *
*/ */
#define DATALINK_C
#define MODULES_DATALINK_C #define MODULES_DATALINK_C
#include "datalink.h" #include "datalink.h"
@@ -36,22 +35,22 @@
#include "pprzlink/messages.h" #include "pprzlink/messages.h"
#if defined RADIO_CONTROL && defined RADIO_CONTROL_TYPE_DATALINK bool dl_msg_available;
#include "modules/radio_control/radio_control.h" uint16_t datalink_time;
#endif uint16_t datalink_nb_msgs;
uint8_t dl_buffer[MSG_SIZE] __attribute__((aligned));
#if USE_GPS
#include "modules/gps/gps.h"
#endif
#ifdef RADIO_CONTROL_DATALINK_LED
#include "led.h"
#endif
#if USE_NPS #if USE_NPS
bool datalink_enabled = true; bool datalink_enabled = true;
#endif #endif
void datalink_init(void)
{
dl_msg_available = false;
datalink_time = 0;
datalink_nb_msgs = 0;
}
void datalink_periodic(void) void datalink_periodic(void)
{ {
datalink_time++; // called at 1Hz 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); 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 msg_id = pprzlink_get_msg_id(buf);
uint8_t class_id = pprzlink_get_msg_class_id(buf); uint8_t class_id = pprzlink_get_msg_class_id(buf);
+9 -12
View File
@@ -27,12 +27,6 @@
#ifndef DATALINK_H #ifndef DATALINK_H
#define DATALINK_H #define DATALINK_H
#ifdef DATALINK_C
#define EXTERN
#else
#define EXTERN extern
#endif
#include "std.h" #include "std.h"
#include "pprzlink/dl_protocol.h" #include "pprzlink/dl_protocol.h"
@@ -44,22 +38,22 @@
#define BLUEGIGA 5 #define BLUEGIGA 5
/** Flag provided to control calls to ::dl_parse_msg. NOT used in this module*/ /** 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 */ /** 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 */ /** number of datalink/uplink messages received */
EXTERN uint16_t datalink_nb_msgs; extern uint16_t datalink_nb_msgs;
#define MSG_SIZE 256 #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 */ /** 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 #if USE_NPS
EXTERN bool datalink_enabled; extern bool datalink_enabled;
#endif #endif
/** Convenience macro to fill dl_buffer */ /** Convenience macro to fill dl_buffer */
@@ -72,6 +66,9 @@ EXTERN bool datalink_enabled;
dl_msg_available = true; \ dl_msg_available = true; \
} }
/** init function */
extern void datalink_init(void);
/** periodic function, should be called at 1Hz */ /** periodic function, should be called at 1Hz */
extern void datalink_periodic(void); extern void datalink_periodic(void);
-4
View File
@@ -71,10 +71,6 @@ void downlink_init(void)
(DefaultDevice).device.nb_bytes = 0; (DefaultDevice).device.nb_bytes = 0;
(DefaultDevice).device.nb_msgs = 0; (DefaultDevice).device.nb_msgs = 0;
#if defined DATALINK
datalink_nb_msgs = 0;
#endif
#if PERIODIC_TELEMETRY #if PERIODIC_TELEMETRY
register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_DATALINK_REPORT, send_downlink); register_periodic_telemetry(DefaultPeriodic, PPRZ_MSG_ID_DATALINK_REPORT, send_downlink);
#endif #endif
+1 -2
View File
@@ -20,8 +20,6 @@
* *
*/ */
#define DATALINK_C
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
@@ -43,6 +41,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / 100), NULL); sys_time_register_timer((1. / 100), NULL);
datalink_init();
downlink_init(); downlink_init();
adc_init(); adc_init();
pprz_dl_init(); pprz_dl_init();
+1 -2
View File
@@ -21,8 +21,6 @@
#include <inttypes.h> #include <inttypes.h>
#define DATALINK_C
/* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h
* in order to implement telemetry_mode_Main_* * in order to implement telemetry_mode_Main_*
*/ */
@@ -79,6 +77,7 @@ static inline void main_init(void)
modules_init(); modules_init();
ahrs_init(); ahrs_init();
pprz_dl_init(); pprz_dl_init();
datalink_init();
downlink_init(); downlink_init();
} }
+1 -3
View File
@@ -21,7 +21,6 @@
#include <inttypes.h> #include <inttypes.h>
#define DATALINK_C
#define ABI_C #define ABI_C
#define MODULES_C #define MODULES_C
@@ -83,8 +82,7 @@ static inline void main_init(void)
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
modules_init(); modules_init();
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
@@ -23,7 +23,6 @@
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "modules/datalink/pprz_dl.h" #include "modules/datalink/pprz_dl.h"
#include "modules/radio_control/radio_control.h" #include "modules/radio_control/radio_control.h"
@@ -50,6 +49,7 @@ static inline void main_init(void)
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
radio_control_init(); radio_control_init();
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
} }
+1 -3
View File
@@ -25,8 +25,6 @@
* Test persistent settings, use together with conf/settings/test_settings.xml * Test persistent settings, use together with conf/settings/test_settings.xml
*/ */
#define DATALINK_C
#include BOARD_CONFIG #include BOARD_CONFIG
#include "std.h" #include "std.h"
@@ -72,7 +70,7 @@ static inline void main_init(void)
settings_init(); settings_init();
pprz_dl_init(); pprz_dl_init();
datalink_init();
#if DOWNLINK #if DOWNLINK
downlink_init(); downlink_init();
#endif #endif
+1 -1
View File
@@ -25,7 +25,6 @@
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#include "led.h" #include "led.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "mcu_periph/i2c.h" #include "mcu_periph/i2c.h"
@@ -59,6 +58,7 @@ static inline void main_init(void)
LED_ON(4); LED_ON(4);
ami601_init(); ami601_init();
datalink_init();
downlink_init(); downlink_init();
} }
@@ -28,7 +28,6 @@
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "led.h" #include "led.h"
+1 -1
View File
@@ -23,7 +23,6 @@
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "modules/datalink/pprz_dl.h" #include "modules/datalink/pprz_dl.h"
#include "peripherals/ms2100.h" #include "peripherals/ms2100.h"
@@ -54,6 +53,7 @@ static inline void main_init(void)
sys_time_register_timer((1. / 50), NULL); sys_time_register_timer((1. / 50), NULL);
ms2100_init(&ms2100, &(MS2100_SPI_DEV), MS2100_SLAVE_IDX); ms2100_init(&ms2100, &(MS2100_SPI_DEV), MS2100_SLAVE_IDX);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
} }
+1 -2
View File
@@ -25,8 +25,6 @@
*/ */
#define DATALINK_C
/* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h /* PERIODIC_C_MAIN is defined before generated/periodic_telemetry.h
* in order to implement telemetry_mode_Main_* * in order to implement telemetry_mode_Main_*
*/ */
@@ -72,6 +70,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
ActuatorsPwmInit(); ActuatorsPwmInit();
+1 -1
View File
@@ -31,7 +31,6 @@
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#include "led.h" #include "led.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "modules/datalink/pprz_dl.h" #include "modules/datalink/pprz_dl.h"
@@ -110,6 +109,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
test_baro_board_imu_init(); test_baro_board_imu_init();
+1 -1
View File
@@ -27,7 +27,6 @@
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
#include "led.h" #include "led.h"
#define DATALINK_C
#include "modules/datalink/downlink.h" #include "modules/datalink/downlink.h"
#include "modules/datalink/pprz_dl.h" #include "modules/datalink/pprz_dl.h"
#include "mcu_periph/can.h" #include "mcu_periph/can.h"
@@ -70,6 +69,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((0.5 / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((0.5 / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
ppz_can_init((can_rx_callback_t)main_on_can_msg); ppz_can_init((can_rx_callback_t)main_on_can_msg);
+1 -2
View File
@@ -24,8 +24,6 @@
* *
* Periodically sends ALIVE (10Hz) and ping/pong (every 5s) telemetry messages. * Periodically sends ALIVE (10Hz) and ping/pong (every 5s) telemetry messages.
*/ */
#define DATALINK_C
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
@@ -55,6 +53,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
} }
+1 -3
View File
@@ -24,9 +24,6 @@
* Test the manual control via RC including command_laws. * Test the manual control via RC including command_laws.
*/ */
#define DATALINK_C
#include "generated/airframe.h" #include "generated/airframe.h"
#include "generated/settings.h" #include "generated/settings.h"
@@ -76,6 +73,7 @@ int main(void)
static inline void main_init(void) static inline void main_init(void)
{ {
mcu_init(); mcu_init();
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
+1 -3
View File
@@ -76,8 +76,6 @@
*/ */
#define DATALINK_C
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
@@ -204,7 +202,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
} }
+1 -1
View File
@@ -27,7 +27,6 @@
#include BOARD_CONFIG #include BOARD_CONFIG
#define DATALINK_C
#define MODULES_C #define MODULES_C
#define ABI_C #define ABI_C
@@ -71,6 +70,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
modules_init(); modules_init();
+1 -3
View File
@@ -25,8 +25,6 @@
* Periodically sends ALIVE telemetry messages. * Periodically sends ALIVE telemetry messages.
*/ */
#define DATALINK_C
#include BOARD_CONFIG #include BOARD_CONFIG
#include "mcu.h" #include "mcu.h"
#include "mcu_periph/sys_time.h" #include "mcu_periph/sys_time.h"
@@ -55,7 +53,7 @@ static inline void main_init(void)
{ {
mcu_init(); mcu_init();
sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL); sys_time_register_timer((1. / PERIODIC_FREQUENCY), NULL);
datalink_init();
downlink_init(); downlink_init();
pprz_dl_init(); pprz_dl_init();
} }