[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.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
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)))
+1
View File
@@ -11,6 +11,7 @@
<file name="datalink.h"/>
<file name="downlink.h"/>
</header>
<init fun="datalink_init()"/>
<init fun="downlink_init()"/>
<periodic fun="telemetry_reporting_task()"/>
<periodic fun="datalink_periodic()" freq="1"/>
-4
View File
@@ -1,8 +1,6 @@
/* Definitions and declarations required to compile autopilot code on a
i386 architecture. Bindings for OCaml. */
#define MODULES_C
#include <stdio.h>
#include <assert.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;
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
@@ -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();
@@ -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();
+12 -13
View File
@@ -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);
+9 -12
View File
@@ -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);
-4
View File
@@ -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
+1 -2
View File
@@ -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();
+1 -2
View File
@@ -21,8 +21,6 @@
#include <inttypes.h>
#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();
}
+1 -3
View File
@@ -21,7 +21,6 @@
#include <inttypes.h>
#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();
@@ -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();
}
+1 -3
View File
@@ -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
+1 -1
View File
@@ -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();
}
@@ -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"
+1 -1
View File
@@ -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();
}
+1 -2
View File
@@ -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();
+1 -1
View File
@@ -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();
+1 -1
View File
@@ -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);
+1 -2
View File
@@ -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();
}
+1 -3
View File
@@ -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();
+1 -3
View File
@@ -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();
}
+1 -1
View File
@@ -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();
+1 -3
View File
@@ -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();
}