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

  • Hello,

    In the code snippet you shared, I noticed that the temperature variable is declared twice with different types in the same scope. This might be causing the issue.

    Kind regards,
    Abhijith

  • Hey Menon

    the temperature variable is declared twice with different types in the same scope

    temperature is declared twice but there is an #ifdef meaning the running code only has one option.

    i added an include for the "get_temp" function which seemed like the compiler did not identify but also did not give any warning about in compilation, which is strange ??? 

    also not clear why it would cause such an issue, cause it seems like adding the include for the header in which this function is declared solved the issue ??? 

    hope you have some insights on the described behaviour 

    best regards

    Ziv

Related