123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #include "terminal_sbs.h"
- #include "common_config.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdbool.h>
- 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);
- }
- }
- }
|