[telemetry] disabling telemetry made easier

- reorganize telemetry makefiles for FW
- protect some calls and provide default implementation of
  register_periodic
- improve generator with attribute unused keyword
This commit is contained in:
Gautier Hattenberger
2014-12-09 23:29:01 +01:00
committed by Felix Ruess
parent 3c8ee22880
commit 83df8f15b5
12 changed files with 88 additions and 40 deletions
@@ -143,7 +143,6 @@ fbw_srcs += $(SRC_FIRMWARE)/main_fbw.c
fbw_srcs += subsystems/electrical.c
fbw_srcs += subsystems/commands.c
fbw_srcs += subsystems/actuators.c
fbw_srcs += $(SRC_FIRMWARE)/fbw_downlink.c
######################################################################
##
@@ -151,11 +150,8 @@ fbw_srcs += $(SRC_FIRMWARE)/fbw_downlink.c
##
ap_CFLAGS += -DAP
ap_CFLAGS += -DDefaultPeriodic='&telemetry_Ap'
ap_srcs += $(SRC_FIRMWARE)/main_ap.c
ap_srcs += $(SRC_FIRMWARE)/autopilot.c
ap_srcs += $(SRC_FIRMWARE)/ap_downlink.c
ap_srcs += subsystems/datalink/telemetry.c
ap_srcs += state.c
ap_srcs += subsystems/settings.c
ap_srcs += $(SRC_ARCH)/subsystems/settings_arch.c
@@ -182,8 +178,8 @@ sim.srcs += $(fbw_srcs) $(ap_srcs)
sim.CFLAGS += -DSITL
sim.srcs += $(SRC_ARCH)/sim_ap.c
sim.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_TRANSPORT=ivy_tp -DDOWNLINK_DEVICE=ivy_tp
sim.srcs += subsystems/datalink/downlink.c $(SRC_FIRMWARE)/datalink.c subsystems/datalink/ivy_transport.c
sim.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_TRANSPORT=ivy_tp -DDOWNLINK_DEVICE=ivy_tp -DDefaultPeriodic='&telemetry_Ap'
sim.srcs += subsystems/datalink/downlink.c $(SRC_FIRMWARE)/datalink.c subsystems/datalink/ivy_transport.c subsystems/datalink/telemetry.c $(SRC_FIRMWARE)/ap_downlink.c $(SRC_FIRMWARE)/fbw_downlink.c
sim.srcs += $(SRC_ARCH)/sim_gps.c $(SRC_ARCH)/sim_adc_generic.c
@@ -243,9 +239,6 @@ else
ifeq ($(SEPARATE_FBW),)
ap.CFLAGS += $(fbw_CFLAGS)
ap.srcs += $(fbw_srcs)
else
# avoid fbw_telemetry_mode error
ap_srcs += $(SRC_FIRMWARE)/fbw_downlink.c
endif
endif
@@ -6,9 +6,14 @@ ap.CFLAGS += -DUSE_$(MODEM_PORT)
ap.CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
ap.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_FBW_DEVICE=superbitrf -DDOWNLINK_AP_DEVICE=superbitrf
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=SUPERBITRF
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=SUPERBITRF -DDefaultPeriodic='&telemetry_Ap'
#ap.CFLAGS += -DUSE_SUPERBITRF -DUSE_SPI2 -DUSE_SPI_SLAVE2
ap.srcs += peripherals/cyrf6936.c
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/superbitrf.c subsystems/datalink/pprz_transport.c subsystems/datalink/telemetry.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/ap_downlink.c
# avoid fbw_telemetry_mode error
ap.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
fbw.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
@@ -5,9 +5,14 @@ PPRZ_MODEM_PORT_LOWER=$(shell echo $(MODEM_PORT) | tr A-Z a-z)
telemetry_CFLAGS = -DUSE_$(MODEM_PORT)
telemetry_CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD)
telemetry_CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_DEVICE=$(PPRZ_MODEM_PORT_LOWER) -DPPRZ_UART=$(MODEM_PORT)
telemetry_CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ
telemetry_srcs = subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c
telemetry_CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -DDefaultPeriodic='&telemetry_Ap'
telemetry_srcs = subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c subsystems/datalink/telemetry.c
ap.CFLAGS += $(telemetry_CFLAGS)
ap.srcs += $(telemetry_srcs) $(SRC_FIRMWARE)/datalink.c
ap.srcs += $(telemetry_srcs) $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/ap_downlink.c
# avoid fbw_telemetry_mode error
ap.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
fbw.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
@@ -1,21 +1,26 @@
# Hey Emacs, this is a -*- makefile -*-
#serial USB (e.g. /dev/ttyACM0)
telemetry_CFLAGS = -DDOWNLINK -DDOWNLINK_DEVICE=usb_serial -DPPRZ_UART=UsbS
telemetry_CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -DUSE_USB_SERIAL
telemetry_CFLAGS += -DDefaultPeriodic='&telemetry_Ap'
telemetry_srcs = subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c subsystems/datalink/telemetry.c
telemetry_srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/ap_downlink.c $(SRC_FIRMWARE)/fbw_downlink.c
# avoid fbw_telemetry_mode error
telemetry_srcs += $(SRC_FIRMWARE)/fbw_downlink.c
ap.CFLAGS += $(telemetry_CFLAGS)
ap.srcs += $(telemetry_srcs)
fbw.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
ifeq ($(ARCH), lpc21)
ap.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_DEVICE=usb_serial -DPPRZ_UART=UsbS
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -DUSE_USB_SERIAL -DUSE_USB_HIGH_PCLK
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c
ap.CFLAGS += -DUSE_USB_HIGH_PCLK
ap.srcs += $(SRC_ARCH)/usb_ser_hw.c $(SRC_ARCH)/lpcusb/usbhw_lpc.c $(SRC_ARCH)/lpcusb/usbcontrol.c
ap.srcs += $(SRC_ARCH)/lpcusb/usbstdreq.c $(SRC_ARCH)/lpcusb/usbinit.c
else
ifeq ($(ARCH), stm32)
ap.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_DEVICE=usb_serial -DPPRZ_UART=UsbS
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=PPRZ -DUSE_USB_SERIAL
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/pprz_transport.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c
ap.srcs += $(SRC_ARCH)/usb_ser_hw.c
else
ifneq ($(ARCH), sim)
@@ -8,10 +8,15 @@ W5100_MULTICAST_IP ?= "224,1,1,11"
W5100_MULTICAST_PORT ?= "1234"
ap.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_DEVICE=chip0
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=W5100
ap.CFLAGS += -DDOWNLINK_TRANSPORT=pprz_tp -DDATALINK=W5100 -DDefaultPeriodic='&telemetry_Ap'
ap.CFLAGS += -DW5100_IP=$(W5100_IP) -DW5100_SUBNET=$(W5100_SUBNET) -DW5100_MULTICAST_IP=$(W5100_MULTICAST_IP) -DW5100_MULTICAST_PORT=$(W5100_MULTICAST_PORT)
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/w5100.c subsystems/datalink/pprz_transport.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/w5100.c subsystems/datalink/pprz_transport.c subsystems/datalink/telemetry.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/ap_downlink.c
# avoid fbw_telemetry_mode error
ap.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
fbw.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
ifeq ($(ARCH), lpc21)
# only an issue of setting the DRDY pin in w5100.c, which is stm32 specific
@@ -8,6 +8,11 @@ ap.CFLAGS += -DUSE_$(MODEM_PORT)
ap.CFLAGS += -D$(MODEM_PORT)_BAUD=$(MODEM_BAUD) -DXBEE_BAUD=$(MODEM_BAUD)
ap.CFLAGS += -DDOWNLINK -DPERIODIC_TELEMETRY -DDOWNLINK_DEVICE=$(XBEE_MODEM_PORT_LOWER) -DXBEE_UART=$(MODEM_PORT)
ap.CFLAGS += -DDOWNLINK_TRANSPORT=xbee_tp -DDATALINK=XBEE
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/xbee.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c
ap.CFLAGS += -DDOWNLINK_TRANSPORT=xbee_tp -DDATALINK=XBEE -DDefaultPeriodic='&telemetry_Ap'
ap.srcs += subsystems/datalink/downlink.c subsystems/datalink/xbee.c subsystems/datalink/telemetry.c
ap.srcs += $(SRC_FIRMWARE)/datalink.c $(SRC_FIRMWARE)/ap_downlink.c
# avoid fbw_telemetry_mode error
ap.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
fbw.srcs += $(SRC_FIRMWARE)/fbw_downlink.c
@@ -77,7 +77,9 @@ static void send_mode(struct transport_tx *trans, struct link_device *dev) {
void autopilot_send_mode(void) {
// use default telemetry here
#if DOWNLINK
send_mode(&(DefaultChannel).trans_tx, &(DefaultDevice).device);
#endif
}
static void send_attitude(struct transport_tx *trans, struct link_device *dev) {
@@ -241,7 +241,9 @@ void init_ap( void ) {
/** - start interrupt task */
mcu_int_enable();
#if DOWNLINK
downlink_init();
#endif
#if defined AEROCOMM_DATA_PIN
IO0DIR |= _BV(AEROCOMM_DATA_PIN);
@@ -449,7 +451,9 @@ void reporting_task( void ) {
/** then report periodicly */
else {
//PeriodicSendAp(DefaultChannel, DefaultDevice);
#if PERIODIC_TELEMETRY
periodic_telemetry_send_Ap(&(DefaultChannel).trans_tx, &(DefaultDevice).device);
#endif
}
}
+9 -1
View File
@@ -176,7 +176,9 @@ STATIC_INLINE void main_init( void ) {
mcu_int_enable();
#if DOWNLINK
downlink_init();
#endif
// register the timers for the periodic functions
main_periodic_tid = sys_time_register_timer((1./PERIODIC_FREQUENCY), NULL);
@@ -220,14 +222,20 @@ STATIC_INLINE void main_periodic( void ) {
SetActuatorsFromCommands(commands, autopilot_mode);
if (autopilot_in_flight) {
RunOnceEvery(PERIODIC_FREQUENCY, { autopilot_flight_time++; datalink_time++; });
RunOnceEvery(PERIODIC_FREQUENCY, { autopilot_flight_time++;
#if defined DATALINK || defined SITL
datalink_time++;
#endif
});
}
RunOnceEvery(10, LED_PERIODIC());
}
STATIC_INLINE void telemetry_periodic(void) {
#if PERIODIC_TELEMETRY
periodic_telemetry_send_Main(&(DefaultChannel).trans_tx, &(DefaultDevice).device);
#endif
}
/** mode to enter when RC is lost while using a mode with RC input (not AP_MODE_NAV) */
@@ -36,6 +36,8 @@
* @return TRUE if message registered with success, FALSE otherwise
*/
bool_t register_periodic_telemetry(struct pprz_telemetry * _pt, const char * _msg, telemetry_cb _cb) {
// return FALSE if NULL is passed as pprz_telemetry
if (_pt == NULL) return FALSE;
// look for message name
uint8_t i;
for (i = 0; i < _pt->nb; i++) {
@@ -34,6 +34,12 @@
#include "mcu_periph/link_device.h"
#include "subsystems/datalink/transport.h"
/** Set default periodic telemetry to NULL
*/
#ifndef DefaultPeriodic
#define DefaultPeriodic NULL
#endif
/** Telemetry callback definition
*/
typedef void (*telemetry_cb)(struct transport_tx *trans, struct link_device *dev);
@@ -55,12 +61,17 @@ struct pprz_telemetry {
};
/** Register a telemetry callback function.
* empty implementation is provided if PERIODIC_TELEMETRY is not set or set to FALSE
* @param _pt periodic telemetry structure to register
* @param _msg message name (string) as defined in telemetry xml file
* @param _cb callback function, called according to telemetry mode and specified period
* @return TRUE if message registered with success, FALSE otherwise
*/
#if PERIODIC_TELEMETRY
extern bool_t register_periodic_telemetry(struct pprz_telemetry * _pt, const char * _msg, telemetry_cb _cb);
#else
static inline bool_t register_periodic_telemetry(struct pprz_telemetry * _pt __attribute__((unused)), const char * _msg __attribute__((unused)), telemetry_cb _cb __attribute__((unused))) { return FALSE; }
#endif
#if USE_PERIODIC_TELEMETRY_REPORT
/** Send an error report when trying to send message that as not been register
+13 -10
View File
@@ -166,17 +166,20 @@ module Gen_onboard = struct
print_macro_param h f;
List.iter (fun f -> fprintf h ", "; print_macro_param h f) fields
let print_fun_param h = function
(Array (t, _), s, _) -> fprintf h "uint8_t %s, %s *_%s" (Syntax.length_name s) (c_type (Syntax.nameof (Basic t))) s
| (FixedArray (t, _, _), s, _) -> fprintf h "%s *_%s" (c_type (Syntax.nameof (Basic t))) s
| (t, s, _) -> fprintf h "%s *_%s" (c_type (Syntax.nameof t)) s
let print_unused_param = fun unused ->
if unused then " __attribute__((unused))" else ""
let print_function_parameters h = function
let print_fun_param ?(unused=false) h = function
(Array (t, _), s, _) -> fprintf h "uint8_t %s%s, %s *_%s%s" (Syntax.length_name s) (print_unused_param unused) (c_type (Syntax.nameof (Basic t))) s (print_unused_param unused)
| (FixedArray (t, _, _), s, _) -> fprintf h "%s *_%s%s" (c_type (Syntax.nameof (Basic t))) s (print_unused_param unused)
| (t, s, _) -> fprintf h "%s *_%s%s" (c_type (Syntax.nameof t)) s (print_unused_param unused)
let print_function_parameters ?(unused=false) h = function
[] -> ()
| f::fields ->
fprintf h ", ";
print_fun_param h f;
List.iter (fun f -> fprintf h ", "; print_fun_param h f) fields
print_fun_param ~unused h f;
List.iter (fun f -> fprintf h ", "; print_fun_param ~unused h f) fields
let rec size_fields = fun fields size ->
match fields with
@@ -222,8 +225,8 @@ module Gen_onboard = struct
fprintf h "#define DOWNLINK_SEND_%s(_trans, _dev" s;
print_macro_parameters h fields;
fprintf h ") {}\n";
fprintf h "void pprz_msg_send_%s(struct transport_tx *trans, struct link_device *dev, uint8_t ac_id" s;
print_function_parameters h fields;
fprintf h "static inline void pprz_msg_send_%s(struct transport_tx *trans __attribute__((unused)), struct link_device *dev __attribute__((unused)), uint8_t ac_id __attribute__((unused))" s;
print_function_parameters ~unused:true h fields;
fprintf h ") {}\n"
(** Prints the messages ids *)
@@ -370,7 +373,7 @@ let () =
(** Macros for airborne downlink (sending) *)
if class_name = "telemetry" then begin (** FIXME *)
Printf.fprintf h "#ifdef DOWNLINK\n"
Printf.fprintf h "#if DOWNLINK\n"
end;
Gen_onboard.print_downlink_macros h class_name messages;
if class_name = "telemetry" then begin