incorrect values via zcbor

hello Nordic

i am working with ncs v2.5.0 with nrf52840 and nrf52832

i use cbor for some command i build over smp (user groups >64)..

i have this code part

{
    zcbor_state_t *zse = ctxt->writer->zs;
    bool ok = true;

    uint32_t uptime_sec = (uint32_t)(k_uptime_get() / 1000);
    float temperature = temp_read();
#ifdef ONE_BAORD
    double temperature = 0;
    get_temp(&temperature);
#elif defined (BOARD_X) || defined(BOARD_Y)
    float temperature = 0.0;
    get_temp(&temperature);
#endif
    int16_t temperature_int = (int16_t)temperature;
    LOG_INF("temp %d, uptime %d", temperature_int, uptime_sec);
    
    ok = augu_status_encode_battery_mv(zse) && 
         zcbor_tstr_put_lit(zse, FIELD_UPTIME_SEC) && zcbor_uint32_encode(zse, &uptime_sec) &&
         zcbor_tstr_put_lit(zse, FIELD_TEMPERATURE) && zcbor_int_encode(zse, &temperature_int, sizeof(int16_t)) &&
...
return (ok ? MGMT_ERR_EOK : MGMT_ERR_EMSGSIZE);
 

i see in the print of LOG_INF that the values are the same, i have no idea why temp changes with uptime rise and remain equal .. any ideas ???

and off course  when i decode the cbor i get, using https://cbor.me/, i get that the temperature value is the same as the uptime value .. i am not sure why (i know casting doublt to int16 is not best practice but worst case i would expect to get some other false value not the exact same ) any ideas ?

and also how to fix it ... does using "put" instead of "encode" can help, this put and encode is not very clear or maybe use zcor_unint32_encode will solve it .. i can try but i want to understand what is happening

hope to read you soon

best regards

Ziv

Parents Reply Children
No Data
Related