net: lwm2m: fix reporting attributes with negative fraction
Fraction could be stored with negative value. The implementation was only considering the positive value case. Therefore, we have to modify the code to take care of the case. To test it ====================================================================== 1. launch eclipse/wakaama lwm2m server 2. launch zephyr lwm2m client and wait for registration completed 3. Issue commands from server * attr 0 /1/0/1 -0.1 0.1 * disc 0 /1/0 Current output ---------------------------------------------------------------------- Client #0 /1/0 : 2.05 (COAP_205_CONTENT) 105 bytes received of type application/link-format: </1/0>,</1/0/0>,</1/0/1>;gt=0.1;lt=0/00000,</1/0/2>,</1/0/3>,</1/0/4>, </1/0/5>,</1/0/6>,</1/0/7>,</1/0/8> Expected output ---------------------------------------------------------------------- Client #0 /1/0 : 2.05 (COAP_205_CONTENT) 102 bytes received of type application/link-format: </1/0>,</1/0/0>,</1/0/1>;gt=0.1;lt=-0.1,</1/0/2>,</1/0/3>,</1/0/4>, </1/0/5>,</1/0/6>,</1/0/7>,</1/0/8> Signed-off-by: Robert Chou <robert.ch.chou@acer.com>
This commit is contained in:
parent
abd54484fc
commit
6fbd86113d
1 changed files with 7 additions and 3 deletions
|
@ -2725,13 +2725,17 @@ static int print_attr(struct net_pkt *pkt, char *buf, u16_t buflen,
|
|||
|
||||
SYS_SLIST_FOR_EACH_CONTAINER(attr_list, attr, node) {
|
||||
/* assuming integer will have float_val.val2 set as 0 */
|
||||
used = snprintk(buf, buflen, ";%s=%d%s",
|
||||
|
||||
used = snprintk(buf, buflen, ";%s=%s%d%s",
|
||||
LWM2M_ATTR_STR[attr->type],
|
||||
attr->float_val.val1 == 0 &&
|
||||
attr->float_val.val2 < 0 ? "-" : "",
|
||||
attr->float_val.val1,
|
||||
attr->float_val.val2 > 0 ? "." : "");
|
||||
attr->float_val.val2 != 0 ? "." : "");
|
||||
|
||||
base = 100000;
|
||||
fraction = attr->float_val.val2;
|
||||
fraction = attr->float_val.val2 < 0 ?
|
||||
-attr->float_val.val2 : attr->float_val.val2;
|
||||
while (fraction && used < buflen && base > 0) {
|
||||
digit = fraction / base;
|
||||
buf[used++] = '0' + digit;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue