actube/src/cw/cw_write_descriptor_subelem.c

46 lines
1.1 KiB
C
Raw Normal View History

2022-07-31 17:15:32 +02:00
#include "val.h"
#include "keys.h"
#include "log.h"
#include "cw.h"
#include "dbg.h"
2022-08-13 09:47:12 +02:00
#include "cfg.h"
2022-08-17 18:41:17 +02:00
int cw_write_descriptor_subelem (uint8_t *dst, cw_Cfg_t ** cfg_list,
int subelem_id, const char * parent_key )
{
2022-08-30 20:25:55 +02:00
char key[CW_CFG_MAX_KEY_LEN];
2022-08-13 09:47:12 +02:00
uint32_t vendor;
2022-08-30 20:25:55 +02:00
bstr16_t version;
2022-08-13 09:47:12 +02:00
const char *vendor_s;
2022-08-13 09:47:12 +02:00
uint8_t *d;
sprintf (key, "%s/%s", parent_key, CW_SKEY_VENDOR);
2022-08-17 18:41:17 +02:00
vendor_s = cw_cfg_get_l (cfg_list, key, NULL);
2022-08-13 09:47:12 +02:00
if (vendor_s == NULL) {
cw_log (LOG_ERR, "Can't put subelem %s, no value found. Setting zero.", key);
2022-08-30 20:25:55 +02:00
vendor_s = "0";
}
2022-08-13 09:47:12 +02:00
vendor = atoi(vendor_s);
sprintf (key, "%s/%s", parent_key, CW_SKEY_VERSION);
2022-08-30 20:25:55 +02:00
version = cw_cfg_get_bstr16_l(cfg_list,key,NULL);
if (version == NULL) {
cw_log (LOG_ERR, "Can't put subelem %s, no value found. Setting zero.", key);
version = bstr16_create_from_str("0.0.0.0");
}
d = dst;
/* put vendor */
d += cw_put_dword(d, vendor);
/* put version */
2022-08-30 20:25:55 +02:00
d += cw_put_dword (d, (subelem_id << 16) | bstr16_len(version));
d += cw_put_bstr16(d, version);
2022-08-13 09:47:12 +02:00
2022-08-30 20:25:55 +02:00
free(version);
return d-dst;
}