diff --git a/src/modules/module-avb/entity-parser.h b/src/modules/module-avb/entity-parser.h index 2f3886b77..635b80fa7 100644 --- a/src/modules/module-avb/entity-parser.h +++ b/src/modules/module-avb/entity-parser.h @@ -3,9 +3,11 @@ #include "aecp-aem-descriptors.h" #include "avb.h" -#include "entity_model.h" +#include "entity-model-milan-v12.h" #include "internal.h" #include "descriptors.h" +#include "strings.h" +#include struct avb_entity_config { char entity_name[64]; @@ -21,31 +23,51 @@ struct avb_entity_config { }; static inline struct avb_entity_config conf_load_entity (struct pw_properties *props) { + // Grab entity field and turn into pw_properties struct struct avb_entity_config entity_conf; - char* str; - pw_log_info("Acquiring entity properties from avb.properties.entity"); - str = pw_properties_get(props, "avb.properties.entity"); + char *str; + pw_log_info("Acquiring entity properties from entity dict in avb.properties"); + str = pw_properties_get(props, "entity"); struct pw_properties *entity_props; entity_props = pw_properties_new(NULL,NULL); pw_properties_update_string(entity_props, str, strlen(str)); + // Assign properties to aem_entity_config struct + // First handle strings + //TODO: with strings, check utf8 format and set as a filled 64 byte char array + // check zero padding and utf8 format pw_log_info("Assigning entity properties"); - char* name = pw_properties_get(entity_props, "entity_name"); - char *entity_name = name ? name : DSC_ENTITY_MODEL_ENTITY_NAME; - strncpy(entity_conf.entity_name, entity_name, sizeof(entity_conf.entity_name)); + char *name = pw_properties_get(entity_props, "entity_name"); + char *entity_name; + + int use_default = name ? 1 : 0; + size_t len; + + if (name){ + len = strnlen(name, 64); + if (validate_utf8(name, len)) entity_name = name; + else use_default = 1; + + if (use_default){ + len = strnlen(name, 64); + entity_name = (char *)DSC_ENTITY_MODEL_ENTITY_NAME; + } + memcpy(entity_conf.entity_name, entity_name, 64); + memset(entity_conf.entity_name + len, 0, 64 - len); char *serial = pw_properties_get(entity_props, "serial_number"); char *serial_number = serial ? serial : DSC_ENTITY_MODEL_SERIAL_NUMBER; strncpy(entity_conf.serial_number, serial_number, sizeof(entity_conf.serial_number)); char *firmware = pw_properties_get(entity_props, "firmware_version"); - char* firmware_version = firmware ? firmware : DSC_ENTITY_MODEL_FIRMWARE_VERSION; + char *firmware_version = firmware ? firmware : DSC_ENTITY_MODEL_FIRMWARE_VERSION; strncpy(entity_conf.firmware_version, firmware_version, sizeof(entity_conf.firmware_version)); - char* group = pw_properties_get(entity_props, "group_name"); - char* group_name = group ? group: DSC_ENTITY_MODEL_GROUP_NAME; + char *group = pw_properties_get(entity_props, "group_name"); + char *group_name = group ? group: DSC_ENTITY_MODEL_GROUP_NAME; strncpy(entity_conf.group_name, group_name, sizeof(entity_conf.group_name)); + // Handle integers uint32_t vendor_name; int vn_found = pw_properties_fetch_uint32(entity_props, "vendor_name", &vendor_name); entity_conf.vendor_name = !vn_found ? (uint16_t)vendor_name : DSC_ENTITY_MODEL_VENDOR_NAME_STRING;