void param_reset_excludes(const char *excludes[], int num_excludes) { param_lock(); param_t param; for (param = 0; handle_in_range(param); param++) { const char *name = param_name(param); bool exclude = false; for (int index = 0; index < num_excludes; index ++) { int len = strlen(excludes[index]); if ((excludes[index][len - 1] == '*' && strncmp(name, excludes[index], len - 1) == 0) || strcmp(name, excludes[index]) == 0) { exclude = true; break; } } if (!exclude) { param_reset(param); } } param_unlock(); param_notify_changes(); }
u08 cmd_parse(u08 len, const char *cmd) { u08 status; switch(cmd[0]) { // ----- v) version ----- case 'v': uart_send_string("plip2slip " VERSION); uart_send_crlf(); return SER_PARSE_CMD_OK; // ----- x) exit ----- case 'x': return SER_PARSE_CMD_EXIT; // ----- s) stats ----- case 's': if(len==1) { // show stats stats_dump(); return SER_PARSE_CMD_OK; } else { switch(cmd[1]) { case 'r': // stats reset stats_reset(); return SER_PARSE_CMD_OK; default: return SER_PARSE_CMD_UNKNOWN; } } // ----- b) bench ----- case 'b': bench_dump(); return SER_PARSE_CMD_OK; // ----- p) param ----- case 'p': if(len==1) { // show params param_dump(); return SER_PARSE_CMD_OK; } else { switch(cmd[1]) { case 's': // param save status = param_save(); return (status == PARAM_OK) ? SER_PARSE_CMD_OK : SER_PARSE_CMD_FAIL; case 'l': // param load status = param_load(); return (status == PARAM_OK) ? SER_PARSE_CMD_OK : SER_PARSE_CMD_FAIL; case 'r': // param reset param_reset(); return SER_PARSE_CMD_OK; default: return SER_PARSE_CMD_UNKNOWN; } } return SER_PARSE_CMD_UNKNOWN; // ----- m) mode ----- case 'm': if(len==2) { u08 value; status = parse_nybble(cmd[1],&value); if(!status || (value >= PARAM_MODE_TOTAL_NUMBER)) { return SER_PARSE_CMD_FAIL; } param.mode = value; return SER_PARSE_CMD_OK; } return SER_PARSE_CMD_UNKNOWN; // ----- f) fake_tx ----- case 'f': if(len==2) { u08 value; status = parse_nybble(cmd[1],&value); if(!status) { return SER_PARSE_CMD_FAIL; } param.fake_tx = value ? 1 : 0; return SER_PARSE_CMD_OK; } return SER_PARSE_CMD_UNKNOWN; // ----- l) log ----- case 'l': if(len==1) { // show log log_dump(); return SER_PARSE_CMD_OK; } else { switch(cmd[1]) { case 'r': // reset log log_init(); return SER_PARSE_CMD_OK; default: return SER_PARSE_CMD_UNKNOWN; } } return SER_PARSE_CMD_UNKNOWN; // ----- e) error sim ----- case 'e': if(len==2) { u08 value; status = parse_nybble(cmd[1],&value); if(!status) { return SER_PARSE_CMD_FAIL; } for(u08 i=0;i<value;i++) { error_add(); } return SER_PARSE_CMD_OK; } else { error_add(); } return SER_PARSE_CMD_OK; // unknown command default: return SER_PARSE_CMD_UNKNOWN; } }