50#define LOG_MODULE "lwm2m-tlv"
51#define LOG_LEVEL LOG_LEVEL_NONE
55init_write(lwm2m_context_t *ctx)
61end_write(lwm2m_context_t *ctx)
67write_int_tlv(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
70 uint8_t type = ctx->writer_flags & WRITER_RESOURCE_INSTANCE ?
71 LWM2M_TLV_TYPE_RESOURCE_INSTANCE : LWM2M_TLV_TYPE_RESOURCE;
72 uint16_t
id = ctx->writer_flags & WRITER_RESOURCE_INSTANCE ?
73 ctx->resource_instance_id : ctx->resource_id;
74 return lwm2m_tlv_write_int32(type,
id, value, outbuf, outlen);
78write_boolean_tlv(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
81 return write_int_tlv(ctx, outbuf, outlen, value != 0 ? 1 : 0);
85write_float32fix_tlv(lwm2m_context_t *ctx, uint8_t *outbuf,
86 size_t outlen, int32_t value,
int bits)
88 uint8_t type = ctx->writer_flags & WRITER_RESOURCE_INSTANCE ?
89 LWM2M_TLV_TYPE_RESOURCE_INSTANCE : LWM2M_TLV_TYPE_RESOURCE;
90 uint16_t
id = ctx->writer_flags & WRITER_RESOURCE_INSTANCE ?
91 ctx->resource_instance_id : ctx->resource_id;
92 return lwm2m_tlv_write_float32(type,
id, value, bits, outbuf, outlen);
96write_string_tlv(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
97 const char *value,
size_t stringlen)
100 tlv.type = ctx->writer_flags & WRITER_RESOURCE_INSTANCE ?
101 LWM2M_TLV_TYPE_RESOURCE_INSTANCE : LWM2M_TLV_TYPE_RESOURCE;
102 tlv.value = (uint8_t *) value;
103 tlv.length = (uint32_t) stringlen;
104 tlv.id = ctx->resource_id;
105 return lwm2m_tlv_write(&tlv, outbuf, outlen);
109write_opaque_header(lwm2m_context_t *ctx,
size_t payloadsize)
112 tlv.type = LWM2M_TLV_TYPE_RESOURCE;
113 tlv.value = (uint8_t *) NULL;
114 tlv.length = (uint32_t) payloadsize;
115 tlv.id = ctx->resource_id;
116 return lwm2m_tlv_write(&tlv, &ctx->outbuf->buffer[ctx->outbuf->len],
117 ctx->outbuf->size - ctx->outbuf->len);
121enter_sub(lwm2m_context_t *ctx)
126 LOG_DBG(
"Enter sub-resource rsc=%d mark:%d\n", ctx->resource_id, ctx->outbuf->len);
127 ctx->writer_flags |= WRITER_RESOURCE_INSTANCE;
128 tlv.type = LWM2M_TLV_TYPE_MULTI_RESOURCE;
131 tlv.id = ctx->resource_id;
132 len = lwm2m_tlv_write(&tlv, &ctx->outbuf->buffer[ctx->outbuf->len],
133 ctx->outbuf->size - ctx->outbuf->len);
136 ctx->out_mark_pos_ri = ctx->outbuf->len;
141exit_sub(lwm2m_context_t *ctx)
146 ctx->writer_flags &= ~WRITER_RESOURCE_INSTANCE;
148 if(ctx->resource_id > 0xff) {
151 len = ctx->outbuf->len - ctx->out_mark_pos_ri;
153 LOG_DBG(
"Exit sub-resource rsc=%d mark:%d len=%d\n", ctx->resource_id,
154 ctx->out_mark_pos_ri, len);
157 ctx->outbuf->buffer[pos + ctx->out_mark_pos_ri] = len - (pos + 1);
161const lwm2m_writer_t lwm2m_tlv_writer = {
168 write_float32fix_tlv,
Header file for the LWM2M object API.
Header file for the Contiki OMA LWM2M TLV.