// This file is Copyright (c) 2020 Florent Kermarrec // License: BSD #include #include #include #include #include #include #include /*-----------------------------------------------------------------------*/ /* Uart */ /*-----------------------------------------------------------------------*/ static char *readstr(void) { char c[2]; static char s[64]; static int ptr = 0; if(readchar_nonblock()) { c[0] = getchar(); c[1] = 0; switch(c[0]) { case 0x7f: case 0x08: if(ptr > 0) { ptr--; fputs("\x08 \x08", stdout); } break; case 0x07: break; case '\r': case '\n': s[ptr] = 0x00; fputs("\n", stdout); ptr = 0; return s; default: if(ptr >= (sizeof(s) - 1)) break; fputs(c, stdout); s[ptr] = c[0]; ptr++; break; } } return NULL; } static char *get_token(char **str) { char *c, *d; c = (char *)strchr(*str, ' '); if(c == NULL) { d = *str; *str = *str+strlen(*str); return d; } *c = 0; d = *str; *str = c+1; return d; } static void prompt(void) { printf("\e[92;1mlitex-demo-app\e[0m> "); } /*-----------------------------------------------------------------------*/ /* Help */ /*-----------------------------------------------------------------------*/ static void help(void) { puts("\nLiteX minimal demo app built "__DATE__" "__TIME__"\n"); puts("Available commands:"); puts("help - Show this command"); puts("reboot - Reboot CPU"); #ifdef CSR_LEDS_BASE puts("led - Led demo"); #endif puts("donut - Spinning Donut demo"); puts("helloc - Hello C"); #ifdef WITH_CXX puts("hellocpp - Hello C++"); #endif } /*-----------------------------------------------------------------------*/ /* Commands */ /*-----------------------------------------------------------------------*/ static void reboot_cmd(void) { ctrl_reset_write(1); } #ifdef CSR_LEDS_BASE static void led_cmd(void) { int i; printf("Led demo...\n"); printf("Counter mode...\n"); for(i=0; i<32; i++) { leds_out_write(i); busy_wait(100); } printf("Shift mode...\n"); for(i=0; i<4; i++) { leds_out_write(1<