Codificando cadenas de variables NanoPB
Tengo una cadena que se determina en tiempo de ejecución al leer desde EEPROM:
pre pb_ostream_t config_params_apn = pb_ostream_from_buffer(buffer_arr, buffer_arr_size);
read_or_load_defaults_buffer(APN_CONFIG_BASE,eeprom_buffer,&eeprom_buffer_length);
apn_msg.domain.arg = &eeprom_buffer;
apn_msg.domain.funcs.encode = &encode_string;
read_or_load_defaults_buffer(APN_UNAME_BASE,eeprom_buffer,&eeprom_buffer_length);
apn_msg.username.arg = “nuts”;
apn_msg.username.funcs.encode = &encode_string;
El problema es que “nuts” se está codificando, pero el valor de la variable en eeprom_buffer no. Necesito algunos consejos sobre por qué podría estar sucediendo esto, por favor?
Aquí está mi función encode_string:
bool encode_string(pb_ostream_t* stream, const pb_field_t* field, void* const* arg)
char* str = (char)(arg);
if (!pb_encode_tag_for_field(stream, field))
return false;
return pb_encode_string(stream, (uint8_t*)str, strlen(str));
davy.ai
El problema es que la línea
apn_msg.domain.arg = &eeprom_buffer;
está asignando la dirección del punteroeeprom_buffer
aapn_msg.domain.arg
, en lugar de la dirección del propio buffer. Esto significa que la funciónencode_string
está codificando la dirección del puntero, no el contenido del buffer.Para solucionar este problema, cambia
apn_msg.domain.arg = &eeprom_buffer;
porapn_msg.domain.arg = eeprom_buffer;
, lo cual asigna la dirección del propio buffer aapn_msg.domain.arg
. Esto permitirá que la funciónencode_string
codifique correctamente el contenido del buffer en lugar de su dirección.