#include "terminal_user.h" #include "cmsis_os.h" #include "config.h" #include "menu.h" #include #include #include #include SbsTerminal sbsTerminal; Terminal* pTerminal; osThreadId terminaltTaskHandle; void vTerminal(void const *params); // SbsTerminal::SbsTerminal() : Terminal() {} // void SbsTerminal::configure() { Terminal::configure(); pTerminal = &sbsTerminal; osMessageQDef(TerminalQueue, 20, uint8_t); m_dataQueue = osMessageCreate(osMessageQ(TerminalQueue), NULL); osThreadDef(Terminal, vTerminal, osPriorityNormal, 0, 2*128); terminaltTaskHandle = osThreadCreate(osThread(Terminal), NULL); } // int SbsTerminal::execute(int argc, const char * const *argv) { if (argc <= 0) { return -1; } if (strcmp(argv[0], "help") == 0) { return help(argc, argv); } else if (strcmp(argv[0], "version") == 0) { return version(argc, argv); } else if (strcmp(argv[0], "clear") == 0) { return clear(argc, argv); } else if (strcmp(argv[0], "reset") == 0) { NVIC_SystemReset(); } // ---------------------------------------------------------------------- // else { printeol(); printll("Uncknown command [oO]"); return 0; } } void SbsTerminal::sigint() { } //Колбэк, который может быть вызван при подключении void SbsTerminal::connectCallback() { clearScreen(); printll("SBS terminal."); //Тут выводим полезную при подключении информацию printeol(); printll("For help type 'help'."); insert('\r'); } // int SbsTerminal::help(int argc, const char * const *argv) { printeol(); printeol(); printl ("You can use the following commands:"); printl (" version Print nSBS software version"); printll (" clear Clear terminal screen"); printeol(); help_connection(); return 0; } // Справка по поводу соединения int SbsTerminal::help_connection() { return 0; } // int SbsTerminal::version(int argc, const char * const *argv) { printeol(); //print(FW_VERSION); printeol(); return 0; } // int SbsTerminal::clear(int argc, const char * const *argv) { if ((argc > 1) && (strcmp(argv[1], "help") == 0)) { printeol(); printl("Clear terminal screen"); printeol(); printeol(); return 0; } clearScreen(); return 0; } // void SbsTerminal::put_byte(char byte) { osMessagePut(m_dataQueue, byte, 0); } // void vTerminal(void const *params) { osEvent event; for (;;) { event = osMessageGet(sbsTerminal.m_dataQueue, 1000); if (event.status == osEventMessage) { #ifdef KEYBOARD_MENU if (event.value.v == 'a') button_left(); else if (event.value.v == 'd') button_right(); else if (event.value.v == 's') button_enter(); #else sbsTerminal.insert(event.value.v); #endif } } }