diff --git a/conf/messages.xml b/conf/messages.xml index 435a83c755..e3d06e6d30 100644 --- a/conf/messages.xml +++ b/conf/messages.xml @@ -1898,7 +1898,12 @@ - + + + + + + diff --git a/sw/airborne/subsystems/datalink/telemetry.c b/sw/airborne/subsystems/datalink/telemetry.c index 42b7da2079..f172d6105c 100644 --- a/sw/airborne/subsystems/datalink/telemetry.c +++ b/sw/airborne/subsystems/datalink/telemetry.c @@ -52,3 +52,20 @@ bool_t register_periodic_telemetry(struct pprz_telemetry * _pt, char * _msg, tel return FALSE; } +#if USE_PERIODIC_TELEMETRY_REPORT + +#include "subsystems/datalink/downlink.h" + +/** Send an error report when trying to send message that as not been register + * @param _process telemetry process id + * @param _mode telemetry mode + * @param _id id of the message in telemetry system (see var//generated/periodic_telemetry.h) + */ +void periodic_telemetry_err_report(uint8_t _process, uint8_t _mode, uint8_t _id) { + uint8_t process = _process; + uint8_t mode = _mode; + uint8_t id = _id; + DOWNLINK_SEND_PERIODIC_TELEMETRY_ERR(DefaultChannel, DefaultDevice, &process, &mode, &id); +} + +#endif diff --git a/sw/airborne/subsystems/datalink/telemetry_common.h b/sw/airborne/subsystems/datalink/telemetry_common.h index d078e8b359..30aaf3e0e0 100644 --- a/sw/airborne/subsystems/datalink/telemetry_common.h +++ b/sw/airborne/subsystems/datalink/telemetry_common.h @@ -58,8 +58,16 @@ struct pprz_telemetry { * @param _cb callback function, called according to telemetry mode and specified period * @return TRUE if message registered with success, FALSE otherwise */ -bool_t register_periodic_telemetry(struct pprz_telemetry * _pt, char * _msg, telemetry_cb _cb); +extern bool_t register_periodic_telemetry(struct pprz_telemetry * _pt, char * _msg, telemetry_cb _cb); +#if USE_PERIODIC_TELEMETRY_REPORT +/** Send an error report when trying to send message that as not been register + * @param _process telemetry process id + * @param _mode telemetry mode + * @param _id id of the message in telemetry system (see var//generated/periodic_telemetry.h) + */ +extern void periodic_telemetry_err_report(uint8_t _process, uint8_t _mode, uint8_t _id); +#endif #endif /* TELEMETRY_COMMON_H */ diff --git a/sw/tools/gen_periodic.ml b/sw/tools/gen_periodic.ml index f70e5ede37..af18793702 100644 --- a/sw/tools/gen_periodic.ml +++ b/sw/tools/gen_periodic.ml @@ -87,7 +87,7 @@ let output_modes = fun out_h process_name modes freq modules -> lprintf out_h "telemetry_%s.msgs[TELEMETRY_%s_MSG_%s_ID].cb();\n" process_name (String.uppercase process_name) message_name; left (); fprintf out_h "#if USE_PERIODIC_TELEMETRY_REPORT\n"; - lprintf out_h "else peridodic_telemetry_err_report(TELEMETRY_%s_MSG_%s_ID);\n" (String.uppercase process_name) message_name; + lprintf out_h "else periodic_telemetry_err_report(TELEMETRY_PROCESS_%s, telemetry_mode_%s, TELEMETRY_%s_MSG_%s_ID);\n" process_name process_name (String.uppercase process_name) message_name; fprintf out_h "#endif\n"; left (); lprintf out_h "}\n" @@ -160,6 +160,9 @@ let _ = let messages = Hashtbl.create 5 in fprintf out_h "\n/* Periodic telemetry: %s process */\n" process_name; + let p_id = ref 0 in + Xml2h.define (sprintf "TELEMETRY_PROCESS_%s" process_name) (string_of_int !p_id); + incr p_id; let i = ref 0 in (** For each mode of this process *)