52 #define LOG_MODULE "lwm2m-text" 53 #define LOG_LEVEL LOG_LEVEL_NONE 57 init_write(lwm2m_context_t *ctx)
63 end_write(lwm2m_context_t *ctx)
69 lwm2m_plain_text_read_int(
const uint8_t *inbuf,
size_t len, int32_t *value)
73 for(i = 0; i < len; i++) {
74 if(inbuf[i] >=
'0' && inbuf[i] <=
'9') {
75 *value = *value * 10 + (inbuf[i] -
'0');
76 }
else if(inbuf[i] ==
'-' && i == 0) {
89 lwm2m_plain_text_read_float32fix(
const uint8_t *inbuf,
size_t len,
90 int32_t *value,
int bits)
92 int i, dot = 0, neg = 0;
93 int32_t counter, integerpart, frac;
98 for(i = 0; i < len; i++) {
99 if(inbuf[i] >=
'0' && inbuf[i] <=
'9') {
100 counter = counter * 10 + (inbuf[i] -
'0');
102 }
else if(inbuf[i] ==
'.' && dot == 0) {
103 integerpart = counter;
107 }
else if(inbuf[i] ==
'-' && i == 0) {
114 integerpart = counter;
118 *value = integerpart << bits;
120 *value += ((counter << bits) / frac);
122 LOG_DBG(
"READ FLOATFIX: \"%.*s\" => int(%ld) frac(%ld) f=%ld Value=%ld\n",
123 (
int)len, (
char *)inbuf,
136 lwm2m_plain_text_write_float32fix(uint8_t *outbuf,
size_t outlen,
137 int32_t value,
int bits)
140 unsigned long integer_part;
141 unsigned long frac_part;
154 integer_part = (
unsigned long)(value >> bits);
155 v = value - (integer_part << bits);
156 v = (v * 100) >> bits;
157 frac_part = (
unsigned long)v;
159 n = snprintf((
char *)outbuf, outlen,
"%lu.%02lu", integer_part, frac_part);
160 if(n < 0 || n >= outlen) {
167 write_boolean(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
182 write_int(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
185 int n = snprintf((
char *)outbuf, outlen,
"%ld", (
long)value);
186 if(n < 0 || n >= outlen) {
193 write_float32fix(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
194 int32_t value,
int bits)
196 return lwm2m_plain_text_write_float32fix(outbuf, outlen, value, bits);
200 write_string(lwm2m_context_t *ctx, uint8_t *outbuf,
size_t outlen,
201 const char *value,
size_t stringlen)
203 int totlen = stringlen;
204 if(stringlen >= outlen) {
207 memmove(outbuf, value, totlen);
212 const lwm2m_writer_t lwm2m_plain_text_writer = {
224 read_int(lwm2m_context_t *ctx,
const uint8_t *inbuf,
size_t len,
227 int size = lwm2m_plain_text_read_int(inbuf, len, value);
228 ctx->last_value_len = size;
233 read_string(lwm2m_context_t *ctx,
const uint8_t *inbuf,
size_t len,
234 uint8_t *value,
size_t stringlen)
236 if(stringlen <= len) {
240 memcpy(value, inbuf, len);
242 ctx->last_value_len = len;
247 read_float32fix(lwm2m_context_t *ctx,
const uint8_t *inbuf,
size_t len,
248 int32_t *value,
int bits)
251 size = lwm2m_plain_text_read_float32fix(inbuf, len, value, bits);
252 ctx->last_value_len = size;
257 read_boolean(lwm2m_context_t *ctx,
const uint8_t *inbuf,
size_t len,
261 if(*inbuf ==
'1' || *inbuf ==
'0') {
262 *value = *inbuf ==
'1' ? 1 : 0;
263 ctx->last_value_len = 1;
270 const lwm2m_reader_t lwm2m_plain_text_reader = {
Header file for the LWM2M object API
Header file for the Contiki OMA LWM2M plain text reader / writer