|
@@ -485,24 +485,31 @@ const i2c_config_t * config_i2c_get(int * i2c_port) {
|
|
|
/****************************************************************************************
|
|
|
* Get IO expander config structure from config string
|
|
|
*/
|
|
|
-const gpio_exp_config_t* config_gpio_exp_get(void) {
|
|
|
- char *nvs_item, *p;
|
|
|
- static gpio_exp_config_t config = {
|
|
|
- .intr = -1,
|
|
|
- .count = 16,
|
|
|
- .base = GPIO_NUM_MAX,
|
|
|
- };
|
|
|
- config.phy.port = i2c_system_port;
|
|
|
+const gpio_exp_config_t* config_gpio_exp_get(int index) {
|
|
|
+ char *nvs_item, *item, *p;
|
|
|
+ static gpio_exp_config_t config;
|
|
|
+
|
|
|
+ // re-initialize config every time
|
|
|
+ memset(&config, 0, sizeof(config));
|
|
|
+ config.intr = -1; config.count = 16; config.base = GPIO_NUM_MAX; config.phy.port = i2c_system_port;
|
|
|
|
|
|
nvs_item = config_alloc_get(NVS_TYPE_STR, "gpio_exp_config");
|
|
|
if (!nvs_item || !*nvs_item) return NULL;
|
|
|
-
|
|
|
- if ((p = strcasestr(nvs_item, "addr")) != NULL) config.phy.addr = atoi(strchr(p, '=') + 1);
|
|
|
- if ((p = strcasestr(nvs_item, "intr")) != NULL) config.intr = atoi(strchr(p, '=') + 1);
|
|
|
- if ((p = strcasestr(nvs_item, "base")) != NULL) config.base = atoi(strchr(p, '=') + 1);
|
|
|
- if ((p = strcasestr(nvs_item, "count")) != NULL) config.count = atoi(strchr(p, '=') + 1);
|
|
|
- if ((p = strcasestr(nvs_item, "model")) != NULL) sscanf(p, "%*[^=]=%31[^,]", config.model);
|
|
|
- if ((p = strcasestr(nvs_item, "port")) != NULL) {
|
|
|
+
|
|
|
+ // search index items
|
|
|
+ for (item = strtok(nvs_item, ";"); index && item; index--) {
|
|
|
+ if ((item = strtok(NULL, ";")) == NULL) {
|
|
|
+ free(nvs_item);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((p = strcasestr(item, "addr")) != NULL) config.phy.addr = atoi(strchr(p, '=') + 1);
|
|
|
+ if ((p = strcasestr(item, "intr")) != NULL) config.intr = atoi(strchr(p, '=') + 1);
|
|
|
+ if ((p = strcasestr(item, "base")) != NULL) config.base = atoi(strchr(p, '=') + 1);
|
|
|
+ if ((p = strcasestr(item, "count")) != NULL) config.count = atoi(strchr(p, '=') + 1);
|
|
|
+ if ((p = strcasestr(item, "model")) != NULL) sscanf(p, "%*[^=]=%31[^,]", config.model);
|
|
|
+ if ((p = strcasestr(item, "port")) != NULL) {
|
|
|
char port[8] = "";
|
|
|
sscanf(p, "%*[^=]=%7[^,]", port);
|
|
|
if (strcasestr(port, "dac")) config.phy.port = 0;
|