std::string known_command(const ARG_LIST &args) { ArgString * s = (ArgString *)args.front().get(); std::string cmd = s->data; return is_command(cmd) ? "true" : "false"; }
int cmd_lcd(int argc, char **argv) { int i; int ret; if (is_command(argc, argv, "init")) { printf("Initializing LCD... "); ret = lcd_init(); if (ret) printf("failed: %d\n", ret); else printf("Ok\n"); } #ifdef LCD_DEBUG else if (is_command(argc, argv, "dump")) { lcd_dump(); } #endif else if (is_command(argc, argv, "run")) { printf("Running LCD... "); ret = lcd_run(); if (ret) printf("failed: %d\n", ret); else printf("Ok\n"); } else if (is_command(argc, argv, "stop")) { printf("Stopping LCD... "); ret = lcd_stop(); if (ret) printf("failed: %d\n", ret); else printf("Ok\n"); } else if (is_command(argc, argv, "tpp1")) { int w = lcd_width(); int h = lcd_height(); int total = w * h; for (i = 0; i < total; i++) lcd_addpixel(i); } else if (is_command(argc, argv, "tpp2")) { int x, y; i = 0; for (y = 0; y < lcd_height(); y++) for (x = 0; x < lcd_width(); x++) lcd_addpixel(rgb(i++, 0, 0)); } else if (is_command(argc, argv, "tpd")) { static int step = 0; pixel_t *fb; int x, y; int w, h; fb = lcd_fb(); h = lcd_height(); w = lcd_width(); /* Stupid clear-screen */ memset(fb, 0, w * h * lcd_bpp()); printf("Width: %d Height: %d\n", w, h); i = step++; fb = lcd_fb(); for (y = 0; y < h; y++) { for (x = 0; x < w; x++) { /* Swap axes, to verify X and Y work */ if (step & 1) *fb++ = color_wheel(y + step); else *fb++ = color_wheel(x + step); } } lcd_run(); } else { printf("lcd sub-commands (usage: lcd [subcmd]):\n"); printf("\tinit Initialize LCD registers\n"); printf("\trun Transfer one frame of the LCD\n"); printf("\tstop Stop and reset LCD auto-update\n"); #ifdef LCD_DEBUG printf("\tdump Dump current register list\n"); #endif printf("\ttpp1 Display bitbanged, PIO 'test pattern 1'\n"); printf("\ttpp2 Display bitbanged, PIO 'test pattern 2'\n"); printf("\ttpd DMA test pattern (flips on each iteration)\n"); } return 0; }
int cli_docmd (char *commandline, void *data) { int largc=0; char **largv; ItemT *titem = items; int ret=(int)data; cli_calllevel++; if (cli_precmd) cli_precmd (commandline); if (!inited) { init_cli (); titem = items; inited = 1; } largv=argv_tokenize(commandline); if(largv)largc=argc_of_argv(largv); if((!largc) || largv[0][0]=='\0' ){ free(largv); return ret; } while (titem) { if (!strcmp (largv[0], titem->name)) { if (is_command (titem)) { ret=titem->func (largc,largv, data); if (cli_postcmd) cli_postcmd (commandline); cli_calllevel--; free(largv); return ret; } else if (is_variable (titem)) { if (largc==1) { if (titem->string) { cli_outfunf ("%s\t[%s]\t- %s\n", titem->name, titem->string, titem->usage); } else if (titem->integer) { cli_outfunf ("%s\t[%i]\t- %s\n", titem->name, *titem->integer, titem->usage); } else { cli_outfunf ("%s\tis a broken variable\n", titem->name); } } else { if (titem->integer) *titem->integer = atoi (largv[1]); if (titem->string) strcpy (titem->string, largv[1]); if (titem->func) ret=titem->func (largc,largv, data); } if (cli_postcmd) cli_postcmd (commandline); cli_calllevel--; free(largv); return ret; } } titem = titem->next; } if(cli_unknown) cli_unknown(1,&commandline,data); if (cli_postcmd) cli_postcmd (commandline); cli_calllevel--; free(largv); return ret; }