22#include <rusefi/rusefi_math.h>
25#include "rusefi/efistringutil.h"
31#ifndef CONSOLE_MAX_ACTIONS
32#define CONSOLE_MAX_ACTIONS 256
35#ifndef MAX_CMD_LINE_LENGTH
36#define MAX_CMD_LINE_LENGTH 100
42using namespace rusefi::stringutil;
52#if !defined(EFI_DISABLE_CONSOLE_ACTIONS)
53 for (uint32_t i = 0; i < std::strlen(token); i++) {
73 current->
token = token;
166 switch (parameterType) {
204 efiPrintf(
"For more visit https://github.com/rusefi/rusefi/wiki/Dev-Console-Commands");
208 if (line[0] ==
'"') {
212 int v = indexOf(line + 1,
'"');
224 return indexOf(line, SPACE_CHAR);
234 if (
ch == SPACE_CHAR) {
243 if (line[0] ==
'"') {
244 int len = std::strlen(line);
245 if (line[len - 1] ==
'"') {
253static int setargs(
char *args,
char **argv,
int max_args)
257 while (isspace(*args)) {
261 while ((*args) && (
count < max_args)) {
265 while ((*args) && (!isspace(*args))) {
269 while ((*args) && (*args !=
'"')) {
283 while (isspace(*args)) {
304 (*callbackS)(current->
param);
310 (*callbackS)(argv[0]);
316 (*callbackS)(argv[0], current->
param);
322 (*callbackS)(argv[0], argv[1]);
328 (*callbackS)(argv[0], argv[1], current->
param);
334 (*callbackS)(argv[0], argv[1], argv[2]);
340 (*callbackS)(argv[0], argv[1], argv[2], argv[3], argv[4]);
346 for (
int i = 0; i < 2; i++) {
347 value[i] = atoi(argv[i]);
348 if (absI(value[i]) == ATOI_ERROR_CODE) {
349 #if EFI_PROD_CODE || EFI_SIMULATOR
350 efiPrintf(
"not an integer [%s]", argv[0]);
356 (*callbackS)(value[0], value[1]);
361 float value = atoff(argv[0]);
369 float value = atoff(argv[0]);
370 if (std::isnan(value)) {
371 efiPrintf(
"invalid float [%s]", argv[0]);
383 for (
int i = 0; i < 2; i++) {
384 value[i] = atoff(argv[i]);
385 if (std::isnan(value[i])) {
386 efiPrintf(
"invalid float [%s]", argv[i]);
392 (*callbackS)(value[0], value[1]);
395 (*callbackS)(value[0], value[1], current->
param);
402 for (
int i = 0; i < 3; i++) {
403 value[i] = atoff(argv[i]);
404 if (std::isnan(value[i])) {
405 efiPrintf(
"invalid float [%s]", argv[i]);
410 (*callbackS)(value[0], value[1], value[2]);
416 for (
int i = 0; i < 4; i++) {
417 value[i] = atoff(argv[i]);
418 if (std::isnan(value[i])) {
419 efiPrintf(
"invalid float [%s]", argv[i]);
424 (*callbackS)(value[0], value[1], value[2], value[3]);
429 int value1 = atoi(argv[0]);
430 if (absI(
value1) == ATOI_ERROR_CODE) {
431 #if EFI_PROD_CODE || EFI_SIMULATOR
432 efiPrintf(
"not an integer [%s]", argv[0]);
436 float value2 = atoff(argv[1]);
437 if (std::isnan(value2)) {
438 efiPrintf(
"invalid float [%s]", argv[1]);
448 int value = atoi(argv[0]);
449 if (absI(value) == ATOI_ERROR_CODE) {
450 #if EFI_PROD_CODE || EFI_SIMULATOR
451 efiPrintf(
"not an integer [%s]", argv[0]);
457 (*callback1)(value, current->
param);
466 efiPrintf(
"Unsupported parameterType %d", current->
parameterType);
485 efiPrintf(
"invalid input");
491 if (strEqual(argv[0], current->
token)) {
493 efiPrintf(
"Incorrect argument count %d, expected %d",
503 efiPrintf(
"unknown command [%s]", commandLine);
514 int lineLength = std::strlen(line);
515 if (lineLength > MAX_CMD_LINE_LENGTH) {
517 efiPrintf(
"Long line?");
524 efiPrintf(
"failed to handle command [%s]", line);
528 efiPrintf(
"confirmation_%s:%d", line, lineLength);
void addConsoleActionSSSSS(const char *token, VoidCharPtrCharPtrCharPtrCharPtrCharPtr callback)
void addConsoleActionP(const char *token, VoidPtr callback, void *param)
void addConsoleActionFF(const char *token, VoidFloatFloat callback)
static TokenCallback consoleActions[CONSOLE_MAX_ACTIONS]
void addConsoleActionSP(const char *token, VoidCharPtrVoidPtr callback, void *param)
static void doAddAction(const char *token, action_type_e type, Void callback, void *param)
void handleConsoleLine(char *line)
This function takes care of one command line once we have it.
void addConsoleActionIP(const char *token, VoidIntVoidPtr callback, void *param)
static int consoleActionCount
void addConsoleActionF(const char *token, VoidFloat callback)
static int setargs(char *args, char **argv, int max_args)
static int getParameterCount(action_type_e parameterType)
void resetConsoleActions(void)
void addConsoleActionS(const char *token, VoidCharPtr callback)
void helpCommand(void)
This function prints out a list of all available commands.
void addConsoleActionNANF(const char *token, VoidFloat callback)
int findEndOfToken(const char *line)
void addConsoleAction(const char *token, Void callback)
Register console action without parameters.
void addConsoleActionII(const char *token, VoidIntInt callback)
Register a console command with two Integer parameters.
int tokenLength(const char *msgp)
void addConsoleActionIIP(const char *token, VoidIntIntVoidPtr callback, void *param)
char * unquote(char *line)
void addConsoleActionSS(const char *token, VoidCharPtrCharPtr callback)
void addConsoleActionSSS(const char *token, VoidCharPtrCharPtrCharPtr callback)
static char handleBuffer[MAX_CMD_LINE_LENGTH+1]
void addConsoleActionI(const char *token, VoidInt callback)
Register a console command with one Integer parameter.
void addConsoleActionSSP(const char *token, VoidCharPtrCharPtrVoidPtr callback, void *param)
void addConsoleActionFFFF(const char *token, VoidFloatFloatFloatFloat callback)
static int handleConsoleLineInternal(const char *commandLine)
void addConsoleActionIF(const char *token, VoidIntFloat callback)
void addConsoleActionFFF(const char *token, VoidFloatFloatFloat callback)
void addConsoleActionFFP(const char *token, VoidFloatFloatVoidPtr callback, void *param)
int handleActionWithParameter(TokenCallback *current, char *argv[], int argc)
Command-line interface commands registry.
void(* VoidCharPtrCharPtr)(const char *, const char *)
void(* VoidCharPtrCharPtrVoidPtr)(const char *, const char *, void *)
void(* VoidIntInt)(int, int)
void(* VoidFloatFloatFloatFloat)(float, float, float, float)
void(* VoidIntIntVoidPtr)(int, int, void *)
void(* VoidCharPtrVoidPtr)(const char *, void *)
void(* VoidIntVoidPtr)(int, void *)
void(* VoidCharPtr)(const char *)
void(* VoidFloatFloatFloat)(float, float, float)
void(* VoidFloatFloat)(float, float)
void(* VoidCharPtrCharPtrCharPtrCharPtrCharPtr)(const char *, const char *, const char *, const char *, const char *)
void(* VoidIntFloat)(int, float)
void(* VoidCharPtrCharPtrCharPtr)(const char *, const char *, const char *)
void(* VoidFloatFloatVoidPtr)(float, float, void *)
@ FLOAT_FLOAT_FLOAT_PARAMETER
@ FLOAT_FLOAT_PARAMETER_P
@ FLOAT_PARAMETER_NAN_ALLOWED
@ FLOAT_FLOAT_FLOAT_FLOAT_PARAMETER
void onCliOverflowError()
void onCliDuplicateError(const char *token)
void onCliCaseError(const char *token)
value1("SENT ch0 value1", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 1974, 1.0, 0.0, 4095.0, "RAW")
action_type_e parameterType
static tstrWifiInitParam param