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
  • Hello,

    ziv123 said:
    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 ??? 

    Does that mean your issue has been resolved? The problem was probably due to a missing function declaration. Without it, the compiler guessed the function's details, like its return type and parameters, which caused issues.

    Kind Regards,

    Abhijith

Reply
  • Hello,

    ziv123 said:
    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 ??? 

    Does that mean your issue has been resolved? The problem was probably due to a missing function declaration. Without it, the compiler guessed the function's details, like its return type and parameters, which caused issues.

    Kind Regards,

    Abhijith

Children
Related