66 lines
2.7 KiB
C
66 lines
2.7 KiB
C
#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_*/
|