uint8_t * db_js_lookup(const char * model, const char * jstag) { struct db_dev_model * mdl; struct cmd_list * lst; struct db_info * inf; int tagid; int nmid; int idx; int j; if ((inf = db_info_get()) == NULL) return NULL; DCC_LOG(LOG_TRACE, "1. str_lookup()"); if ((tagid = str_lookup(jstag, strlen(jstag))) < 0) { DCC_LOG(LOG_WARNING, "tag not found!"); return NULL; } DCC_LOG(LOG_TRACE, "2. str_lookup()"); if ((nmid = str_lookup(model, strlen(model))) < 0) { DCC_LOG(LOG_WARNING, "model name not found!"); return NULL; } DCC_LOG(LOG_TRACE, "3. db_dev_model_index_by_name()"); idx = db_dev_model_index_by_name(inf, nmid); if ((mdl = db_dev_model_by_index(inf, idx)) == NULL) { DCC_LOG(LOG_WARNING, "device not found!"); return NULL; } if ((lst = mdl->cmd) == NULL) { DCC_LOG(LOG_WARNING, "command list empty!"); return NULL; } DCC_LOG(LOG_TRACE, "4. lookup..."); for (j = 0; j < lst->cnt; ++j) { struct cmd_entry * cmd = &lst->cmd[j]; if (cmd->tag == tagid) return cmd->code; } DCC_LOG(LOG_WARNING, "command not found!"); return NULL; }
static int shell_pw_sel(FILE * f, int argc, char ** argv, int n) { struct db_dev_model * mod; struct ss_device * dev; int addr; int sel; if (argc < 3) return SHELL_ERR_ARG_MISSING; addr = strtoul(argv[1], NULL, 0); if (addr > 160) return SHELL_ERR_ARG_INVALID; sel = strtoul(argv[2], NULL, 0); if (sel > 16) return SHELL_ERR_ARG_INVALID; dev = sensor(addr); if ((mod = db_dev_model_by_index(db_info_get(), dev->model)) == NULL) return SHELL_ERR_ARG_INVALID; switch (n) { case 1: dev->pw1 = device_db_pw_lookup(mod->pw1, sel); break; case 2: dev->pw2 = device_db_pw_lookup(mod->pw2, sel); break; case 3: dev->pw3 = device_db_pw_lookup(mod->pw3, sel); break; case 4: dev->pw4 = device_db_pw_lookup(mod->pw4, sel); break; case 5: dev->pw5 = device_db_pw_lookup(mod->pw5, sel); break; } return 0; }