#include "terminal_sbs.h" #include "common_config.h" #include #include #include #include SbsTerminal sbsTerminal; Terminal* pTerminal; //Глобальный указатель на терминал void vTerminal(void *params); // SbsTerminal::SbsTerminal() : Terminal() {} // void SbsTerminal::configure() { Terminal::configure(); pTerminal = &sbsTerminal; m_dataQueue = xQueueCreate(20, 1); xTaskCreate(vTerminal, "terminal", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL); } // int SbsTerminal::execute(int argc, const char * const *argv) { //char str[20]; if (argc <= 0) { return -1; } if (strcmp(argv[0], "help") == 0) { return help(argc, argv); } // ---------------------------------------------------------------------- // else { printeol(); printll("Uncknown command [oO]"); return -1; } } 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:"); printll(" version Print software version"); printeol(); return 0; } // int SbsTerminal::version(int argc, const char * const *argv) { printeol(); print(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) { portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; xQueueSendFromISR(m_dataQueue, &byte, &xHigherPriorityTaskWoken); } // void vTerminal(void *params) { char val; for (;;) { if (xQueueReceive(sbsTerminal.m_dataQueue, &val, 1000 ) == pdPASS) { sbsTerminal.insert(val); } } }