terminal_user.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "terminal_user.h"
  2. #include "cmsis_os.h"
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <stdbool.h>
  7. SbsTerminal sbsTerminal;
  8. Terminal* pTerminal;
  9. osThreadId terminaltTaskHandle;
  10. void vTerminal(void const *params);
  11. //
  12. SbsTerminal::SbsTerminal() :
  13. Terminal()
  14. {}
  15. //
  16. void SbsTerminal::configure()
  17. {
  18. Terminal::configure();
  19. pTerminal = &sbsTerminal;
  20. osMessageQDef(TerminalQueue, 20, uint8_t);
  21. m_dataQueue = osMessageCreate(osMessageQ(TerminalQueue), NULL);
  22. osThreadDef(Terminal, vTerminal, osPriorityNormal, 0, 2*128);
  23. terminaltTaskHandle = osThreadCreate(osThread(Terminal), NULL);
  24. }
  25. //
  26. int SbsTerminal::execute(int argc, const char * const *argv)
  27. {
  28. if (argc <= 0) {
  29. return -1;
  30. }
  31. if (strcmp(argv[0], "help") == 0) {
  32. return help(argc, argv);
  33. }
  34. else if (strcmp(argv[0], "version") == 0) {
  35. return version(argc, argv);
  36. }
  37. else if (strcmp(argv[0], "clear") == 0) {
  38. return clear(argc, argv);
  39. }
  40. else if (strcmp(argv[0], "reset") == 0) {
  41. NVIC_SystemReset();
  42. }
  43. // ---------------------------------------------------------------------- //
  44. else {
  45. printeol();
  46. printll("Uncknown command [oO]");
  47. return 0;
  48. }
  49. }
  50. void SbsTerminal::sigint() {
  51. }
  52. //Колбэк, который может быть вызван при подключении
  53. void SbsTerminal::connectCallback()
  54. {
  55. clearScreen();
  56. printll("SBS terminal.");
  57. //Тут выводим полезную при подключении информацию
  58. printeol();
  59. printll("For help type 'help'.");
  60. insert('\r');
  61. }
  62. //
  63. int SbsTerminal::help(int argc, const char * const *argv)
  64. {
  65. printeol();
  66. printeol();
  67. printl ("You can use the following commands:");
  68. printl (" version Print nSBS software version");
  69. printl (" os Print FreeRTOS statistics");
  70. printl (" stat Print FreeRTOS common controller statistics");
  71. printl (" ifconfig Print net params");
  72. printl (" set_ip Set IP address");
  73. printl (" set_mask Set netmask");
  74. printl (" set_gw Set gateway");
  75. printl (" set_usb_ip Set IP address for RNDIS");
  76. printl (" set_usb_mask Set netmask for RNDIS");
  77. printl (" set_usb_gw Set gateway for RNDIS");
  78. printl (" reset Controller reset");
  79. printl (" boot Go to DFU mode");
  80. printl (" clear Clear terminal screen");
  81. printl (" ls List of files");
  82. printl (" cat Cat file");
  83. printl (" del Delete file");
  84. printl (" format Format file system");
  85. printl (" phy dump phy reisters");
  86. printl (" fpga_boot Prepare FPGA for download mode");
  87. printll(" update update main firmaware");
  88. printeol();
  89. help_connection();
  90. return 0;
  91. }
  92. // Справка по поводу соединения
  93. int SbsTerminal::help_connection()
  94. {
  95. return 0;
  96. }
  97. //
  98. int SbsTerminal::version(int argc, const char * const *argv)
  99. {
  100. printeol();
  101. //print(FW_VERSION);
  102. printeol();
  103. return 0;
  104. }
  105. //
  106. int SbsTerminal::clear(int argc, const char * const *argv)
  107. {
  108. if ((argc > 1) && (strcmp(argv[1], "help") == 0))
  109. {
  110. printeol();
  111. printl("Clear terminal screen");
  112. printeol();
  113. printeol();
  114. return 0;
  115. }
  116. clearScreen();
  117. return 0;
  118. }
  119. //
  120. void SbsTerminal::put_byte(char byte)
  121. {
  122. osMessagePut(m_dataQueue, byte, 0);
  123. }
  124. //
  125. void vTerminal(void const *params)
  126. {
  127. osEvent event;
  128. for (;;)
  129. {
  130. event = osMessageGet(sbsTerminal.m_dataQueue, 1000);
  131. if (event.status == osEventMessage) {
  132. sbsTerminal.insert(event.value.v);
  133. }
  134. }
  135. }