#define CONFIG_ERROR(x, ...) ERROR_LOG("%s: " x, filename, ##__VA_ARGS__)
static bool populate_connector_config(struct lease_config *config,
+ toml_table_t *global_table,
toml_array_t *conns)
{
int nconnectors = toml_array_nelem(conns);
config->nconnectors = nconnectors;
for (int i = 0; i < config->nconnectors; i++) {
+ struct connector_config *conn_config = &config->connectors[i];
toml_datum_t conn = toml_string_at(conns, i);
if (!conn.ok) {
ERROR_LOG("Invalid connector in lease %s: idx:%d\n",
config->lease_name, i);
return false;
}
- config->connectors[i].name = conn.u.s;
+ conn_config->name = conn.u.s;
+
+ toml_table_t *conn_config_data =
+ toml_table_in(global_table, conn.u.s);
+ if (!conn_config_data)
+ continue;
+
+ toml_datum_t optional =
+ toml_bool_in(conn_config_data, "optional");
+ if (optional.ok)
+ config->connectors[i].optional = optional.u.b;
}
return true;
}
config[i].lease_name = name.u.s;
toml_array_t *conns = toml_array_in(lease, "connectors");
- if (conns && !populate_connector_config(&config[i], conns)) {
+ if (conns &&
+ !populate_connector_config(&config[i], t_config, conns)) {
CONFIG_ERROR("Error configuring lease: %s\n",
config[i].lease_name);
goto err_free_config;
for (int i = 0; i < nconnectors; i++) {
uint32_t cid;
+ struct connector_config *con_config = NULL;
- if (config->nconnectors > 0) {
- char *connector_name = config->connectors[i].name;
+ if (config->nconnectors > 0)
+ con_config = &config->connectors[i];
- if (!drm_find_connector(lm, connector_name, &cid)) {
+ if (con_config) {
+ char *connector_name = con_config->name;
+ bool optional = con_config->optional;
+
+ bool found =
+ drm_find_connector(lm, connector_name, &cid);
+
+ bool missing_mandatory = !found && !optional;
+ bool missing_optional = !found && optional;
+
+ if (missing_mandatory) {
+ ERROR_LOG("Lease: %s, "
+ "mandatory connector %s not found\n",
+ config->lease_name, connector_name);
+ goto err;
+ } else if (missing_optional) {
WARN_LOG("Lease: %s, "
"unknown DRM connector: %s\n",
config->lease_name, connector_name);