luat_shell_air101.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "luat_shell.h"
  2. #include "wm_include.h"
  3. #define LUAT_LOG_TAG "luat.shell"
  4. #include "luat_log.h"
  5. static int drv = -1;
  6. #define CONSOLE_BUF_SIZE 512
  7. typedef struct console_st
  8. {
  9. size_t rx_data_len;
  10. char rx_buf[CONSOLE_BUF_SIZE]; /*uart rx*/
  11. } console;
  12. static console ShellConsole;
  13. int luat_sendchar(int port,int ch){
  14. if (port == 0){
  15. if(ch == '\n'){
  16. while (tls_reg_read32(HR_UART0_FIFO_STATUS) & 0x3F);
  17. tls_reg_write32(HR_UART0_TX_WIN, '\r');
  18. }
  19. while(tls_reg_read32(HR_UART0_FIFO_STATUS) & 0x3F);
  20. tls_reg_write32(HR_UART0_TX_WIN, (char)ch);
  21. }else if (port == 1){
  22. if(ch == '\n'){
  23. while (tls_reg_read32(HR_UART1_FIFO_STATUS) & 0x3F);
  24. tls_reg_write32(HR_UART1_TX_WIN, '\r');
  25. }
  26. while(tls_reg_read32(HR_UART1_FIFO_STATUS) & 0x3F);
  27. tls_reg_write32(HR_UART1_TX_WIN, (char)ch);
  28. }else if (port == 2){
  29. if(ch == '\n'){
  30. while (tls_reg_read32(HR_UART2_FIFO_STATUS) & 0x3F);
  31. tls_reg_write32(HR_UART2_TX_WIN, '\r');
  32. }
  33. while(tls_reg_read32(HR_UART2_FIFO_STATUS) & 0x3F);
  34. tls_reg_write32(HR_UART2_TX_WIN, (char)ch);
  35. }else if (port == 3){
  36. if(ch == '\n'){
  37. while (tls_reg_read32(HR_UART3_FIFO_STATUS) & 0x3F);
  38. tls_reg_write32(HR_UART3_TX_WIN, '\r');
  39. }
  40. while(tls_reg_read32(HR_UART3_FIFO_STATUS) & 0x3F);
  41. tls_reg_write32(HR_UART3_TX_WIN, (char)ch);
  42. }else if (port == 4){
  43. if(ch == '\n'){
  44. while (tls_reg_read32(HR_UART4_FIFO_STATUS) & 0x3F);
  45. tls_reg_write32(HR_UART4_TX_WIN, '\r');
  46. }
  47. while(tls_reg_read32(HR_UART4_FIFO_STATUS) & 0x3F);
  48. tls_reg_write32(HR_UART4_TX_WIN, (char)ch);
  49. }
  50. return ch;
  51. }
  52. void luat_shell_write(char* buff, size_t len) {
  53. int i=0;
  54. if (drv > -1 && len >= 0) {
  55. while (i<len){
  56. luat_sendchar(drv,buff[i++]);
  57. };
  58. }
  59. }
  60. char* luat_shell_read(size_t *len) {
  61. if(ShellConsole.rx_data_len == 0)
  62. {
  63. *len = 0;
  64. return NULL;
  65. }
  66. if (ShellConsole.rx_data_len > CONSOLE_BUF_SIZE)
  67. ShellConsole.rx_data_len = CONSOLE_BUF_SIZE;
  68. int ret = tls_uart_read(drv, ShellConsole.rx_buf, ShellConsole.rx_data_len);
  69. *len = ret;
  70. return ShellConsole.rx_buf;
  71. }
  72. void luat_shell_notify_recv(void) {
  73. ShellConsole.rx_data_len = 0;
  74. }
  75. int16_t demo_console_rx(uint16_t len, void* user_data){
  76. ShellConsole.rx_data_len += len;
  77. luat_shell_notify_read();
  78. return 0;
  79. }
  80. void luat_shell_poweron(int _drv) {
  81. drv = _drv;
  82. memset(ShellConsole.rx_buf, 0, CONSOLE_BUF_SIZE + 1);
  83. tls_uart_rx_callback_register(drv,(int16_t(*)(uint16_t, void*))demo_console_rx, NULL);
  84. luat_shell_notify_recv();
  85. }