static void cliSet(char *cmdline) { int i; int len; const clivalue_t *val; char *eqptr = NULL; int value = 0; float valuef = 0; len = strlen(cmdline); if (len == 0 || (len == 1 && cmdline[0] == '*')) { cliPrint("Current settings: \r\n"); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; printf("%s = ", valueTable[i].name); cliPrintVar(val, len); // when len is 1 (when * is passed as argument), it will print min/max values as well, for gui cliPrint("\r\n"); } } else if ((eqptr = strstr(cmdline, "=")) != NULL) { // has equal, set var eqptr++; len--; value = atoi(eqptr); valuef = _atof(eqptr); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; if (strncasecmp(cmdline, valueTable[i].name, strlen(valueTable[i].name)) == 0) { if (valuef >= valueTable[i].min && valuef <= valueTable[i].max) { // here we compare the float value since... it should work, RIGHT? int_float_value_t tmp; if (valueTable[i].type == VAR_FLOAT) tmp.float_value = valuef; else tmp.int_value = value; cliSetVar(val, tmp); printf("%s set to ", valueTable[i].name); cliPrintVar(val, 0); } else { cliPrint("ERR: Value assignment out of range\r\n"); } return; } } cliPrint("ERR: Unknown variable name\r\n"); } else { // no equals, check for matching variables. for (i = 0; i < VALUE_COUNT; i++) { if (strstr(valueTable[i].name, cmdline)) { val = &valueTable[i]; printf("%s = ", valueTable[i].name); cliPrintVar(val, 0); printf("\r\n"); } } } }
void cliSet(char *cmdline) { uint32_t i; uint32_t len; const clivalue_t *val; char *eqptr = NULL; int32_t value = 0; float valuef = 0; len = strlen(cmdline); if (len == 3 && cmdline[0] == '*') { // printf("Current settings: \r\n"); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; printf("%s=", valueTable[i].name); // cliPrintVar(val, len); // when len is 1 (when * is passed as argument), it will print min/max values as well, for gui cliPrintVar(val, 0); printf("\r"); } // f.IMU_GRAPH_OUT=1; } else if (strstr(cmdline, "=")) { void (*Func) (void); eqptr = strstr(cmdline, "="); // has equal, set var eqptr++; len--; value= atoi(eqptr); valuef = _atof(eqptr); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; if (strncasecmp(cmdline, valueTable[i].name, strlen(valueTable[i].name)) == 0) { if (valuef >= valueTable[i].min && valuef <= valueTable[i].max) { // here we compare the float value since... it should work, RIGHT? cliSetVar(val, valueTable[i].type == VAR_FLOAT ? *(uint32_t *)&valuef : value); // this is a silly dirty hack. please fix me later. if(valueTable[i].function!=NULL) { Func = valueTable[i].function; //관련된 함수 호출 Func(); } printf("%s=", valueTable[i].name); // printf("%d ", value); cliPrintVar(val, 0); printf("\r"); // printf(" %d",cfg.gyroPitchKi); } else { printf("ERR: Value assignment out of range\r\n"); } return; } } printf("ERR: Unknown variable name\r\n"); } }
static void cliSet(char *cmdline) { uint32_t i; uint32_t len; const clivalue_t *val; char *eqptr = NULL; int32_t value = 0; float valuef = 0; len = strlen(cmdline); if (len == 0 || (len == 1 && cmdline[0] == '*')) { cliPrint("Current settings: \r\n"); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; printf("%s = ", valueTable[i].name); cliPrintVar(val, len); // when len is 1 (when * is passed as argument), it will print min/max values as well, for gui cliPrint("\r\n"); } } else if ((eqptr = strstr(cmdline, "=")) != NULL) { // has equal, set var char *lastNonSpaceCharacter = eqptr; while (*(lastNonSpaceCharacter - 1) == ' ') { lastNonSpaceCharacter--; } uint8_t variableNameLength = lastNonSpaceCharacter - cmdline; eqptr++; len--; value = atoi(eqptr); valuef = fastA2F(eqptr); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; // ensure exact match when setting to prevent setting variables with shorter names if (strncasecmp(cmdline, valueTable[i].name, strlen(valueTable[i].name)) == 0 && variableNameLength == strlen(valueTable[i].name)) { if (valuef >= valueTable[i].min && valuef <= valueTable[i].max) { // here we compare the float value since... it should work, RIGHT? int_float_value_t tmp; if (valueTable[i].type & VAR_FLOAT) tmp.float_value = valuef; else tmp.int_value = value; cliSetVar(val, tmp); printf("%s set to ", valueTable[i].name); cliPrintVar(val, 0); } else { cliPrint("Value assignment out of range\r\n"); } return; } } cliPrint("Unknown variable name\r\n"); } else { // no equals, check for matching variables. cliGet(cmdline); } }
static void cliSet(char *cmdline) { uint32_t i; uint32_t len; const clivalue_t *val; char *eqptr = NULL; int32_t value = 0; len = strlen(cmdline); if (len == 0 || (len == 1 && cmdline[0] == '*')) { uartPrint("Current settings: \r\n"); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; printf("%s = ", valueTable[i].name); cliPrintVar(val, len); // when len is 1 (when * is passed as argument), it will print min/max values as well, for gui uartPrint("\r\n"); } } else if ((eqptr = strstr(cmdline, "="))) { // has equal, set var eqptr++; len--; value = atoi(eqptr); for (i = 0; i < VALUE_COUNT; i++) { val = &valueTable[i]; if (strncasecmp(cmdline, valueTable[i].name, strlen(valueTable[i].name)) == 0) { // found if (value >= valueTable[i].min && value <= valueTable[i].max) { cliSetVar(val, value); printf("%s set to ", valueTable[i].name); cliPrintVar(val, 0); } else { uartPrint("ERR: Value assignment out of range\r\n"); } return; } } uartPrint("ERR: Unknown variable name\r\n"); } }
static void cliDump(char *cmdline) { int i; const clivalue_t *setval; // print settings for (i = 0; i < VALUE_COUNT; i++) { setval = &valueTable[i]; printf("set %s = ", valueTable[i].name); cliPrintVar(setval, 0); cliPrint("\r\n"); } }
void cli_cmd_set(char *cmdline) { uint32_t len; const clivalue_t *val; char *eqptr, *ptr2; len = strlen(cmdline); if (len == 0 || (len == 1 && cmdline[0] == '*')) { cli_puts("Current settings:\r\n"); for (val = &value_table[0]; val->name != NULL; val++) { cli_printf("%s = ", val->name); cliPrintVar(val, len); cli_puts("\r\n"); } } else if ((eqptr = strstr(cmdline, "="))) { /* Null-terminate the setting name */ ptr2 = eqptr; *ptr2 = 0; while (*--ptr2 == ' ') { *ptr2 = 0; } eqptr++; len--; while (*eqptr == ' ') { eqptr++; len--; } for (val = &value_table[0]; val->name != NULL; val++) { if (!strcmp(cmdline, val->name)) { cliSetVar(val, eqptr); cli_printf("%s set to ", val->name); cliPrintVar(val, 0); return; } } cli_puts("ERR: Unknown variable name\r\n"); } }
static void dumpValues(uint8_t mask) { uint32_t i; const clivalue_t *value; for (i = 0; i < VALUE_COUNT; i++) { value = &valueTable[i]; if ((value->type & mask) == 0) { continue; } printf("set %s = ", valueTable[i].name); cliPrintVar(value, 0); cliPrint("\r\n"); } }
static void cliGet(char *cmdline) { uint32_t i; const clivalue_t *val; int matchedCommands = 0; for (i = 0; i < VALUE_COUNT; i++) { if (strstr(valueTable[i].name, cmdline)) { val = &valueTable[i]; printf("%s = ", valueTable[i].name); cliPrintVar(val, 0); printf("\r\n"); matchedCommands++; } } if (matchedCommands) { return; } cliPrint("Unknown variable name\r\n"); }
static void cliDump(char *cmdline) { (void)cmdline; unsigned int i, channel; char buf[16]; float thr, roll, pitch, yaw; uint32_t mask; const clivalue_t *setval; cliVersion(NULL); printf("Current Config: Copy everything below here...\r\n"); // print out aux switches cliAux(""); // print out current motor mix printf("mixer %s\r\n", mixerNames[mcfg.mixerConfiguration - 1]); // print custom mix if exists if (mcfg.customMixer[0].throttle != 0.0f) { for (i = 0; i < MAX_MOTORS; i++) { if (mcfg.customMixer[i].throttle == 0.0f) break; thr = mcfg.customMixer[i].throttle; roll = mcfg.customMixer[i].roll; pitch = mcfg.customMixer[i].pitch; yaw = mcfg.customMixer[i].yaw; printf("cmix %d", i + 1); if (thr < 0) printf(" "); printf("%s", ftoa(thr, buf)); if (roll < 0) printf(" "); printf("%s", ftoa(roll, buf)); if (pitch < 0) printf(" "); printf("%s", ftoa(pitch, buf)); if (yaw < 0) printf(" "); printf("%s\r\n", ftoa(yaw, buf)); } printf("cmix %d 0 0 0 0\r\n", i + 1); } // print custom servo mixer if exists if (mcfg.customServoMixer[0].rate != 0) { for (i = 0; i < MAX_SERVO_RULES; i++) { if (mcfg.customServoMixer[i].rate == 0) break; printf("smix %d ", i + 1); printf("%d ", mcfg.customServoMixer[i].targetChannel + 1); printf("%d ", mcfg.customServoMixer[i].fromChannel + 1); printf("%d ", mcfg.customServoMixer[i].rate); printf("%d ", mcfg.customServoMixer[i].speed); printf("%d ", mcfg.customServoMixer[i].min); printf("%d ", mcfg.customServoMixer[i].max); printf("%d\r\n", mcfg.customServoMixer[i].box); } printf("smix %d 0 0 0 0\r\n", i + 1); } // print servo directions for (i = 0; i < MAX_SERVOS; i++) for (channel = 0; channel < INPUT_ITEMS; channel++) if (cfg.servoConf[i].direction & (1 << channel)) printf("smix direction %d %d -1\r\n", i + 1 , channel + 1); // print servo config for (i = 0; i < MAX_SERVOS; i++) printf("servo %d %d %d %d %d\r\n", i + 1, cfg.servoConf[i].min, cfg.servoConf[i].middle, cfg.servoConf[i].max, cfg.servoConf[i].rate); // print enabled features mask = featureMask(); for (i = 0; ; i++) { // disable all feature first if (featureNames[i] == NULL) break; printf("feature -%s\r\n", featureNames[i]); } for (i = 0; ; i++) { // reenable what we want. if (featureNames[i] == NULL) break; if (mask & (1 << i)) printf("feature %s\r\n", featureNames[i]); } // print RC MAPPING for (i = 0; i < mcfg.rc_channel_count; i++) buf[mcfg.rcmap[i]] = rcChannelLetters[i]; buf[i] = '\0'; printf("map %s\r\n", buf); // print settings for (i = 0; i < VALUE_COUNT; i++) { setval = &valueTable[i]; printf("set %s = ", valueTable[i].name); cliPrintVar(setval, 0); cliPrint("\r\n"); } }
static void cliDump(char *cmdline) { int i; char buf[16]; float thr, roll, pitch, yaw; uint32_t mask; const clivalue_t *setval; printf("Current Config: Copy everything below here...\r\n"); // print out aux switches cliAux(""); // print out current motor mix printf("mixer %s\r\n", mixerNames[mcfg.mixerConfiguration - 1]); // print custom mix if exists if (mcfg.customMixer[0].throttle != 0.0f) { for (i = 0; i < MAX_MOTORS; i++) { if (mcfg.customMixer[i].throttle == 0.0f) break; thr = mcfg.customMixer[i].throttle; roll = mcfg.customMixer[i].roll; pitch = mcfg.customMixer[i].pitch; yaw = mcfg.customMixer[i].yaw; printf("cmix %d", i + 1); if (thr < 0) printf(" "); printf("%s", ftoa(thr, buf)); if (roll < 0) printf(" "); printf("%s", ftoa(roll, buf)); if (pitch < 0) printf(" "); printf("%s", ftoa(pitch, buf)); if (yaw < 0) printf(" "); printf("%s\r\n", ftoa(yaw, buf)); } printf("cmix %d 0 0 0 0\r\n", i + 1); } // print enabled features mask = featureMask(); for (i = 0; ; i++) { // disable all feature first if (featureNames[i] == NULL) break; printf("feature -%s\r\n", featureNames[i]); } for (i = 0; ; i++) { // reenable what we want. if (featureNames[i] == NULL) break; if (mask & (1 << i)) printf("feature %s\r\n", featureNames[i]); } // print RC MAPPING for (i = 0; i < 8; i++) buf[mcfg.rcmap[i]] = rcChannelLetters[i]; buf[i] = '\0'; printf("map %s\r\n", buf); // print settings for (i = 0; i < VALUE_COUNT; i++) { setval = &valueTable[i]; printf("set %s = ", valueTable[i].name); cliPrintVar(setval, 0); cliPrint("\r\n"); } }