Zephyr Project API  3.3.0
A Scalable Open Source RTOS
lwm2m_path.h File Reference

Go to the source code of this file.

Macros

#define LWM2M_PATH(...)
 Generate LwM2M string paths using numeric components. More...
 
#define LWM2M_PATH_VA_NUM_ARGS(...)    LWM2M_PATH_VA_NUM_ARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1)
 
#define LWM2M_PATH_VA_NUM_ARGS_IMPL(_1, _2, _3, _4, N, ...)   N
 
#define LWM2M_PATH1(_x)   #_x
 
#define LWM2M_PATH2(_x, _y)   #_x "/" #_y
 
#define LWM2M_PATH3(_x, _y, _z)   #_x "/" #_y "/" #_z
 
#define LWM2M_PATH4(_a, _x, _y, _z)   #_a "/" #_x "/" #_y "/" #_z
 
#define LWM2M_PATH_MACRO(_1, _2, _3, _4, NAME, ...)   NAME
 
#define LWM2M_OBJ(...)    GET_OBJ_MACRO(__VA_ARGS__, LWM2M_OBJ4, LWM2M_OBJ3, LWM2M_OBJ2, LWM2M_OBJ1)(__VA_ARGS__)
 Initialize LwM2M object structure. More...
 
#define GET_OBJ_MACRO(_1, _2, _3, _4, NAME, ...)   NAME
 
#define LWM2M_OBJ1(oi)   (struct lwm2m_obj_path) {.obj_id = oi, .level = 1}
 
#define LWM2M_OBJ2(oi, oii)   (struct lwm2m_obj_path) {.obj_id = oi, .obj_inst_id = oii, .level = 2}
 
#define LWM2M_OBJ3(oi, oii, ri)
 
#define LWM2M_OBJ4(oi, oii, ri, rii)
 

Macro Definition Documentation

◆ GET_OBJ_MACRO

#define GET_OBJ_MACRO (   _1,
  _2,
  _3,
  _4,
  NAME,
  ... 
)    NAME

◆ LWM2M_OBJ

#define LWM2M_OBJ (   ...)     GET_OBJ_MACRO(__VA_ARGS__, LWM2M_OBJ4, LWM2M_OBJ3, LWM2M_OBJ2, LWM2M_OBJ1)(__VA_ARGS__)

Initialize LwM2M object structure.

Accepts at least one and up to four arguments. Fill up lwm2m_obj_path structure and sets the level. For example:

struct lwm2m_obj_path p = LWM2M_OBJ(MY_OBJ, 0, RESOURCE);

Can also be used in place of function argument to return the structure allocated from stack

lwm2m_notify_observer_path(&LWM2M_OBJ(MY_OBJ, inst_id, RESOURCE));

◆ LWM2M_OBJ1

#define LWM2M_OBJ1 (   oi)    (struct lwm2m_obj_path) {.obj_id = oi, .level = 1}

◆ LWM2M_OBJ2

#define LWM2M_OBJ2 (   oi,
  oii 
)    (struct lwm2m_obj_path) {.obj_id = oi, .obj_inst_id = oii, .level = 2}

◆ LWM2M_OBJ3

#define LWM2M_OBJ3 (   oi,
  oii,
  ri 
)
Value:
(struct lwm2m_obj_path) \
{.obj_id = oi, .obj_inst_id = oii, .res_id = ri, .level = 3}
Definition: lwm2m.h:79

◆ LWM2M_OBJ4

#define LWM2M_OBJ4 (   oi,
  oii,
  ri,
  rii 
)
Value:
(struct lwm2m_obj_path) \
{.obj_id = oi, .obj_inst_id = oii, .res_id = ri, .res_inst_id = rii, .level = 4}

◆ LWM2M_PATH

#define LWM2M_PATH (   ...)
Value:
LWM2M_PATH2, LWM2M_PATH1)(__VA_ARGS__)
#define LWM2M_PATH3(_x, _y, _z)
Definition: lwm2m_path.h:39
#define LWM2M_PATH4(_a, _x, _y, _z)
Definition: lwm2m_path.h:40
#define LWM2M_PATH1(_x)
Definition: lwm2m_path.h:37
#define LWM2M_PATH_MACRO(_1, _2, _3, _4, NAME,...)
Definition: lwm2m_path.h:42
#define LWM2M_PATH2(_x, _y)
Definition: lwm2m_path.h:38

Generate LwM2M string paths using numeric components.

Accepts at least one and up to four arguments. Each argument will be stringified by the pre-processor, so calling this with non-literals will likely not do what you want. For example,

 #define MY_OBJ_ID 3
 LWM2M_PATH(MY_OBJ_ID, 0, 1)

would evaluate to "3/0/1", while

int x = 3; LWM2M_PATH(x, 0, 1)

evaluates to "x/0/1".

◆ LWM2M_PATH1

#define LWM2M_PATH1 (   _x)    #_x

◆ LWM2M_PATH2

#define LWM2M_PATH2 (   _x,
  _y 
)    #_x "/" #_y

◆ LWM2M_PATH3

#define LWM2M_PATH3 (   _x,
  _y,
  _z 
)    #_x "/" #_y "/" #_z

◆ LWM2M_PATH4

#define LWM2M_PATH4 (   _a,
  _x,
  _y,
  _z 
)    #_a "/" #_x "/" #_y "/" #_z

◆ LWM2M_PATH_MACRO

#define LWM2M_PATH_MACRO (   _1,
  _2,
  _3,
  _4,
  NAME,
  ... 
)    NAME

◆ LWM2M_PATH_VA_NUM_ARGS

#define LWM2M_PATH_VA_NUM_ARGS (   ...)     LWM2M_PATH_VA_NUM_ARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1)

◆ LWM2M_PATH_VA_NUM_ARGS_IMPL

#define LWM2M_PATH_VA_NUM_ARGS_IMPL (   _1,
  _2,
  _3,
  _4,
  N,
  ... 
)    N