NTURT Zephyr v0.0.1
NTURT common library for Zephyr RTOS
Loading...
Searching...
No Matches
Telemetry

Telemetry support. More...

+ Collaboration diagram for Telemetry:

Topics

 VCU Telemetry
 VCU telemetry support.
 

Data Structures

struct  tm_group_data
 Telemetry group data. More...
 
struct  tm_data
 Telemetry data. More...
 
struct  tm_group
 Telemetry publishing group. More...
 

Macros

#define TM_DATA_DECLARE(name, type)
 Declare a telemetry data, useful for header files.
 
#define TM_DATA_DEFINE(_name, _type, _addr)
 Define a telemetry data.
 
#define TM_ALIAS_DECLARE(name, alias)
 Declare a telemetry data alias, useful for header files.
 
#define TM_ALIAS_DEFINE(_name, _alias, _addr)
 Define a telemetry data alias.
 
#define TM_GROUP_DATA(data, ...)
 Specify a telemetry data to be aggregated and published by a telemetry group. Used in TM_GROUP_DEFINE.
 
#define TM_GROUP_DEFINE(_name, _period, _min_separation, _watermark, _flag, _publish, _user_data, ...)
 Define a telemetry group to aggregrate and publish telementry data.
 
#define TM_DATA_GET(name)
 Get the value of telemetry data using its name.
 
#define TM_DATA_UPDATE(name, value)
 Update telemetry data using its name and value.
 

Typedefs

typedef void(* tm_publish_t) (uint32_t addr, const void *data, size_t size, void *user_data)
 Function to publish the data.
 

Enumerations

enum  tm_data_type { TM_DATA_TYPE_NORMAL = 0 , TM_DATA_TYPE_ALIAS }
 Telemetry data type. More...
 

Functions

int tm_data_get (uint32_t addr, void *value)
 Get telemetry data using its address and pointer to value.
 
int tm_data_update (uint32_t addr, const void *value)
 Update telemetry data using its address and pointer to value.
 
void tm_data_notify_lock (const struct tm_data *data)
 Notify the telemetry groups that this data has been updated. Must be called while holding the lock.
 
void tm_group_copy (struct tm_group *group)
 Copy the data in the telemetry data to the group's publishing buffer.
 

Detailed Description

Telemetry support.

Macro Definition Documentation

◆ TM_ALIAS_DECLARE

#define TM_ALIAS_DECLARE ( name,
alias )

#include <nturt/telemetry.h>

Value:
typedef _TM_DATA_TYPE(alias) _TM_DATA_TYPE(name); \
extern struct tm_data name
Telemetry data.
Definition telemetry.h:251
const char * name
Definition telemetry.h:262

Declare a telemetry data alias, useful for header files.

Parameters
[in]nameName of the alias.
[in]aliasTelemetry data that this alias refers to.

◆ TM_ALIAS_DEFINE

#define TM_ALIAS_DEFINE ( _name,
_alias,
_addr )

#include <nturt/telemetry.h>

Value:
TM_ALIAS_DECLARE(_name, _alias); \
\
STRUCT_SECTION_ITERABLE(tm_data, _name) = { \
.type = TM_DATA_TYPE_ALIAS, \
.addr = _addr, \
.alias = &_alias, \
};
#define TM_ALIAS_DECLARE(name, alias)
Declare a telemetry data alias, useful for header files.
Definition telemetry.h:73
@ TM_DATA_TYPE_ALIAS
Definition telemetry.h:226

Define a telemetry data alias.

Parameters
[in]_nameName of the alias.
[in]_aliasTelemetry data that this alias refers to.
[in]_addrAddress of the alias.

◆ TM_DATA_DECLARE

#define TM_DATA_DECLARE ( name,
type )

#include <nturt/telemetry.h>

Value:
typedef type _TM_DATA_TYPE(name); \
extern struct tm_data name

Declare a telemetry data, useful for header files.

Parameters
[in]nameName of the data.
[in]typeType of the data.

◆ TM_DATA_DEFINE

#define TM_DATA_DEFINE ( _name,
_type,
_addr )

#include <nturt/telemetry.h>

Value:
TM_DATA_DECLARE(_name, _type); \
\
STRUCT_SECTION_ITERABLE(tm_data, _name) = { \
.addr = _addr, \
.name = STRINGIFY(_name), \
.size = sizeof(_type), \
.data = &(_type){0}, \
};
#define TM_DATA_DECLARE(name, type)
Declare a telemetry data, useful for header files.
Definition telemetry.h:43
@ TM_DATA_TYPE_NORMAL
Definition telemetry.h:224

Define a telemetry data.

Parameters
[in]_nameName of the data.
[in]_typeType of the data.
[in]_addrAddress of the data.

◆ TM_DATA_GET

#define TM_DATA_GET ( name)

#include <nturt/telemetry.h>

Value:
({ \
struct tm_data *__data = &name; \
if (__data->type == TM_DATA_TYPE_ALIAS) { \
__data = __data->alias; \
} \
\
k_spinlock_key_t key = k_spin_lock(&__data->lock); \
_TM_DATA_TYPE(name) __value = *((_TM_DATA_TYPE(name) *)__data->data); \
k_spin_unlock(&__data->lock, key); \
\
__value; \
})
struct k_spinlock lock
Definition telemetry.h:271
enum tm_data_type type
Definition telemetry.h:253
struct tm_data *const alias
Definition telemetry.h:280
void *const data
Definition telemetry.h:274

Get the value of telemetry data using its name.

Parameters
[in]nameName of the telemetry data.
Returns
Value of the telemetry data.

◆ TM_DATA_UPDATE

#define TM_DATA_UPDATE ( name,
value )

#include <nturt/telemetry.h>

Value:
do { \
struct tm_data *__data = &name; \
if (__data->type == TM_DATA_TYPE_ALIAS) { \
__data = __data->alias; \
} \
\
K_SPINLOCK(&__data->lock) { \
*((_TM_DATA_TYPE(name) *)__data->data) = value; \
tm_data_notify_lock(__data); \
} \
\
} while (0)

Update telemetry data using its name and value.

Parameters
[in]nameName of the telemetry data.
[in]valueNew value of the telemetry data.

◆ TM_GROUP_DATA

#define TM_GROUP_DATA ( data,
... )

#include <nturt/telemetry.h>

Value:
(data, (COND_CODE_1(__VA_OPT__(1), (__VA_ARGS__), (0))))

Specify a telemetry data to be aggregated and published by a telemetry group. Used in TM_GROUP_DEFINE.

Parameters
[in]dataTelemetry data to be aggregated and published.
[in]...Optional flags of the data, the same ones and rules as AGG_MEMBER.

◆ TM_GROUP_DEFINE

#define TM_GROUP_DEFINE ( _name,
_period,
_min_separation,
_watermark,
_flag,
_publish,
_user_data,
... )

#include <nturt/telemetry.h>

Value:
_TM_AGG_PUBLISH_DEFINE(_name, \
FOR_EACH(_TM_GROUP_DATA_DATA, (, ), __VA_ARGS__)); \
\
STRUCT_SECTION_ITERABLE(tm_group, _name) = { \
.agg = AGG_INITIALIZER( \
_name.agg, _name, _period, _min_separation, _watermark, _flag, \
_TM_AGG_PUBLISH(_name), _user_data, \
FOR_EACH(_TM_GROUP_DATA_FLAGS, (, ), __VA_ARGS__)), \
.publish = _publish, \
.num_data = NUM_VA_ARGS(__VA_ARGS__), \
.datas = \
(struct tm_group_data[]){ \
FOR_EACH_FIXED_ARG( \
_TM_GROUP_DATA, (, ), _name, \
FOR_EACH(_TM_GROUP_DATA_DATA, (, ), __VA_ARGS__)), \
}, \
}
#define AGG_INITIALIZER(_obj, _name, _period, _min_separation, _watermark, _flag, _publish, _user_data,...)
Static initializer for a dataa aggregation. Refer to AGG_DEFINE for detailed parameter descriptions.
Definition aggregation.h:58
Telemetry group data.
Definition telemetry.h:230
Telemetry publishing group.
Definition telemetry.h:286

Define a telemetry group to aggregrate and publish telementry data.

Parameters
[in]_nameName of the telemetry group.
[in]_periodPeriod of data publishing.
[in]_min_separationMinimum separation time between two data publishing.
[in]_watermarkWatermark to wait for late-arriving members.
[in]_flagFlag of the aggregation. The same ones and rules as flag in AGG_DEFINE.
[in]_publishFunction to publish the data, must be of type tm_publish_t.
[in]_user_dataPointer to custom data for the callback.
[in]...Data to be aggregated and published, must be specified by TM_GROUP_DATA.

Typedef Documentation

◆ tm_publish_t

typedef void(* tm_publish_t) (uint32_t addr, const void *data, size_t size, void *user_data)

#include <nturt/telemetry.h>

Function to publish the data.

Parameters
[in]addrAddress of the data.
[in]dataPointer to the data to be published.
[in]sizeSize of the data to be published.
[in]user_dataPointer to custom data for callback functions.

Enumeration Type Documentation

◆ tm_data_type

#include <nturt/telemetry.h>

Telemetry data type.

Enumerator
TM_DATA_TYPE_NORMAL 
TM_DATA_TYPE_ALIAS 

Function Documentation

◆ tm_data_get()

int tm_data_get ( uint32_t addr,
void * value )

#include <nturt/telemetry.h>

Get telemetry data using its address and pointer to value.

Parameters
[in]addrAddress of the telemetry data.
[out]valuePointer to store the retrieved value.
Return values
0For success.
-ENOENTIf the data does not exist.

◆ tm_data_notify_lock()

void tm_data_notify_lock ( const struct tm_data * data)

#include <nturt/telemetry.h>

Notify the telemetry groups that this data has been updated. Must be called while holding the lock.

Parameters
[in]dataPointer to tm_data.
Warning
Internal use only.

◆ tm_data_update()

int tm_data_update ( uint32_t addr,
const void * value )

#include <nturt/telemetry.h>

Update telemetry data using its address and pointer to value.

Parameters
[in]addrAddress of the telemetry data.
[in]valuePointer to the new value of the telemetry data.
Return values
0For success.
-ENOENTIf the data does not exist.

◆ tm_group_copy()

void tm_group_copy ( struct tm_group * group)

#include <nturt/telemetry.h>

Copy the data in the telemetry data to the group's publishing buffer.

Parameters
[in]groupPointer to tm_group.
Warning
Internal use only.