terminal_sbs.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include "terminal_sbs.h"
  2. #include "common_config.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <stdbool.h>
  7. SbsTerminal sbsTerminal;
  8. Terminal* pTerminal; //Глобальный указатель на терминал
  9. void vTerminal(void *params);
  10. //
  11. SbsTerminal::SbsTerminal() :
  12. Terminal()
  13. {}
  14. //
  15. void SbsTerminal::configure()
  16. {
  17. Terminal::configure();
  18. pTerminal = &sbsTerminal;
  19. m_dataQueue = xQueueCreate(20, 1);
  20. xTaskCreate(vTerminal, "terminal", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL);
  21. }
  22. //
  23. int SbsTerminal::execute(int argc, const char * const *argv)
  24. {
  25. //char str[20];
  26. if (argc <= 0) {
  27. return -1;
  28. }
  29. if (strcmp(argv[0], "help") == 0) {
  30. return help(argc, argv);
  31. }
  32. // ---------------------------------------------------------------------- //
  33. else {
  34. printeol();
  35. printll("Uncknown command [oO]");
  36. return -1;
  37. }
  38. }
  39. void SbsTerminal::sigint() {
  40. }
  41. //Колбэк, который может быть вызван при подключении
  42. void SbsTerminal::connectCallback()
  43. {
  44. clearScreen();
  45. printll("SBS terminal.");
  46. //Тут выводим полезную при подключении информацию
  47. printeol();
  48. printll("For help type 'help'.");
  49. insert('\r');
  50. }
  51. //
  52. int SbsTerminal::help(int argc, const char * const *argv)
  53. {
  54. printeol();
  55. printeol();
  56. printl ("You can use the following commands:");
  57. printll(" version Print software version");
  58. printeol();
  59. return 0;
  60. }
  61. //
  62. int SbsTerminal::version(int argc, const char * const *argv)
  63. {
  64. printeol();
  65. print(VERSION);
  66. printeol();
  67. return 0;
  68. }
  69. //
  70. int SbsTerminal::clear(int argc, const char * const *argv)
  71. {
  72. if ((argc > 1) && (strcmp(argv[1], "help") == 0))
  73. {
  74. printeol();
  75. printl("Clear terminal screen");
  76. printeol();
  77. printeol();
  78. return 0;
  79. }
  80. clearScreen();
  81. return 0;
  82. }
  83. //
  84. void SbsTerminal::put_byte(char byte)
  85. {
  86. portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
  87. xQueueSendFromISR(m_dataQueue, &byte, &xHigherPriorityTaskWoken);
  88. }
  89. //
  90. void vTerminal(void *params)
  91. {
  92. char val;
  93. for (;;)
  94. {
  95. if (xQueueReceive(sbsTerminal.m_dataQueue, &val, 1000 ) == pdPASS)
  96. {
  97. sbsTerminal.insert(val);
  98. }
  99. }
  100. }