#ifndef TELEMETRIE_H_ #define TELEMETRIE_H_ #include "tdc_proto.h" struct comm_device { struct fifo *rxfifo; struct fifo *txfifo; void (*trigger_tx)(void); }; void tdc_register_device(uint32_t addr, struct comm_device *device); int32_t tdc_transmit(uint32_t addr, struct tdc_pkt_header *head); void tdc_check(void); void tdc_init(void); struct tdc_value { void *data; const char *name; uint32_t flags; }; #if 1 #define TDC_VALUE(name, var, desc, type, flags) \ type * tdc_check_##name(void) { return (&var); } \ static struct tdc_value __attribute__((used, section(".tdc_value"))) \ tdc_value_##name = { &var, desc, sizeof(type) | flags }; \ tdc_value_##name = tdc_value_##name; #define TDC_PTR(name, ptr, desc, type, flags) \ static struct tdc_value __attribute__((used, section(".tdc_value"))) \ tdc_value_##name = { ptr, desc, sizeof(type) | flags }; \ #else #define TDC_VALUE(name, var, desc, type, flags) #define TDC_PTR(name, ptr, desc, type, flags); #endif #define TDC_UINT8(var, desc) TDC_VALUE(var, var, desc, uint8_t, TDC_UNSIGNED) #define TDC_UINT16(var, desc) TDC_VALUE(var, var, desc, uint16_t, TDC_UNSIGNED) #define TDC_UINT32(var, desc) TDC_VALUE(var, var, desc, uint32_t, TDC_UNSIGNED) #define TDC_UINT64(var, desc) TDC_VALUE(var, var, desc, uint64_t, TDC_UNSIGNED) #define TDC_INT8(var, desc) TDC_VALUE(var, var, desc, int8_t, TDC_SIGNED) #define TDC_INT16(var, desc) TDC_VALUE(var, var, desc, int16_t, TDC_SIGNED) #define TDC_INT32(var, desc) TDC_VALUE(var, var, desc, int32_t, TDC_SIGNED) #define TDC_INT64(var, desc) TDC_VALUE(var, var, desc, int64_t, TDC_SIGNED) #define TDC_FLOAT(var, desc) TDC_VALUE(var, var, desc, float, TDC_FP) #define TDC_DOUBLE(var, desc) TDC_VALUE(var, var, desc, double, TDC_FP) #define TDC_UINT8_RO(var, desc) TDC_VALUE(var, var, desc, uint8_t, TDC_UNSIGNED | TDC_READONLY) #define TDC_UINT16_RO(var, desc) TDC_VALUE(var, var, desc, uint16_t, TDC_UNSIGNED | TDC_READONLY) #define TDC_UINT32_RO(var, desc) TDC_VALUE(var, var, desc, uint32_t, TDC_UNSIGNED | TDC_READONLY) #define TDC_UINT64_RO(var, desc) TDC_VALUE(var, var, desc, uint64_t, TDC_UNSIGNED | TDC_READONLY) #define TDC_INT8_RO(var, desc) TDC_VALUE(var, var, desc, int8_t, TDC_SIGNED | TDC_READONLY) #define TDC_INT16_RO(var, desc) TDC_VALUE(var, var, desc, int16_t, TDC_SIGNED | TDC_READONLY) #define TDC_INT32_RO(var, desc) TDC_VALUE(var, var, desc, int32_t, TDC_SIGNED | TDC_READONLY) #define TDC_INT64_RO(var, desc) TDC_VALUE(var, var, desc, int64_t, TDC_SIGNED | TDC_READONLY) #define TDC_FLOAT_RO(var, desc) TDC_VALUE(var, var, desc, float, TDC_FP | TDC_READONLY) #define TDC_DOUBLE_RO(var, desc) TDC_VALUE(var, var, desc, double, TDC_FP | TDC_READONLY) #endif /*TELEMETRIE_H_*/