فهرست منبع

add:添加shell(暂不可用)

Dozingfiretruck 3 سال پیش
والد
کامیت
c213cf4feb

+ 7 - 0
luatos/components/luat/CMakeLists.txt

@@ -5,6 +5,10 @@ idf_component_register(SRC_DIRS ${LUATOS_ROOT}/luat/modules
                                 ${LUATOS_ROOT}/luat/vfs
                                 ${LUATOS_ROOT}/luat/vfs
                                 ${LUATOS_ROOT}/lua/src
                                 ${LUATOS_ROOT}/lua/src
                                 port
                                 port
+                                ${LUATOS_ROOT}/components/shell
+                                ${LUATOS_ROOT}/components/ymodem
+                                ${LUATOS_ROOT}/components/cmux
+                                ${LUATOS_ROOT}/components/i2c-tools
                                 ${LUATOS_ROOT}/components/lfs
                                 ${LUATOS_ROOT}/components/lfs
                                 ${LUATOS_ROOT}/components/iotauth
                                 ${LUATOS_ROOT}/components/iotauth
                                 ${LUATOS_ROOT}/components/lua-cjson
                                 ${LUATOS_ROOT}/components/lua-cjson
@@ -61,7 +65,10 @@ idf_component_register(SRC_DIRS ${LUATOS_ROOT}/luat/modules
                     INCLUDE_DIRS ../../include
                     INCLUDE_DIRS ../../include
                                 ${LUATOS_ROOT}/lua/include
                                 ${LUATOS_ROOT}/lua/include
                                 ${LUATOS_ROOT}/luat/include
                                 ${LUATOS_ROOT}/luat/include
+                                ${LUATOS_ROOT}/components/shell
+                                ${LUATOS_ROOT}/components/ymodem
                                 ${LUATOS_ROOT}/components/cmux
                                 ${LUATOS_ROOT}/components/cmux
+                                ${LUATOS_ROOT}/components/i2c-tools
                                 ${LUATOS_ROOT}/components/fatfs
                                 ${LUATOS_ROOT}/components/fatfs
                                 ${LUATOS_ROOT}/components/lfs
                                 ${LUATOS_ROOT}/components/lfs
                                 ${LUATOS_ROOT}/components/lua-cjson
                                 ${LUATOS_ROOT}/components/lua-cjson

+ 6 - 2
luatos/components/luat/port/luat_log_idf5.c

@@ -27,8 +27,10 @@ void luat_nprint(char *s, size_t l) {
     if (cmux_ctx.state == 1 && cmux_ctx.log_state ==1){
     if (cmux_ctx.state == 1 && cmux_ctx.log_state ==1){
         luat_cmux_write(LUAT_CMUX_CH_LOG,  CMUX_FRAME_UIH & ~ CMUX_CONTROL_PF,s, l);
         luat_cmux_write(LUAT_CMUX_CH_LOG,  CMUX_FRAME_UIH & ~ CMUX_CONTROL_PF,s, l);
     }else
     }else
-#endif
+    luat_uart_write(luat_log_uart_port, s, l);
+#else
     printf("%.*s", l, s);
     printf("%.*s", l, s);
+#endif
 }
 }
 
 
 void luat_log_write(char *s, size_t l) {
 void luat_log_write(char *s, size_t l) {
@@ -36,8 +38,10 @@ void luat_log_write(char *s, size_t l) {
     if (cmux_ctx.state == 1 && cmux_ctx.log_state ==1){
     if (cmux_ctx.state == 1 && cmux_ctx.log_state ==1){
         luat_cmux_write(LUAT_CMUX_CH_LOG,  CMUX_FRAME_UIH & ~ CMUX_CONTROL_PF,s, l);
         luat_cmux_write(LUAT_CMUX_CH_LOG,  CMUX_FRAME_UIH & ~ CMUX_CONTROL_PF,s, l);
     }else
     }else
-#endif
+    luat_uart_write(luat_log_uart_port, s, l);
+#else
     printf("%.*s", l, s);
     printf("%.*s", l, s);
+#endif
 }
 }
 
 
 void luat_log_set_level(int level) {
 void luat_log_set_level(int level) {

+ 22 - 0
luatos/components/luat/port/luat_shell_idf5.c

@@ -0,0 +1,22 @@
+
+#include "luat_base.h"
+#include "luat_shell.h"
+#include "luat_uart.h"
+
+
+
+#include "luat_log.h"
+#define LUAT_LOG_TAG "shell"
+
+
+typedef struct {
+	size_t len;
+	char buff[0];
+}uart_data;
+
+void luat_shell_write(char* buff, size_t len) {
+	luat_uart_write(0, buff, len);
+}
+
+void luat_shell_notify_recv(void) {
+}

+ 44 - 2
luatos/components/luat/port/luat_uart_idf5.c

@@ -1,6 +1,7 @@
 
 
 #include "luat_base.h"
 #include "luat_base.h"
 #include "luat_uart.h"
 #include "luat_uart.h"
+#include "luat_shell.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/FreeRTOS.h"
 #include "freertos/task.h"
 #include "freertos/task.h"
 #include "freertos/queue.h"
 #include "freertos/queue.h"
@@ -9,6 +10,10 @@
 #include "luat_log.h"
 #include "luat_log.h"
 #define LUAT_LOG_TAG "uart"
 #define LUAT_LOG_TAG "uart"
 
 
+#ifdef LUAT_USE_SHELL
+static uint8_t shell_state = 0;
+static char shell_buffer[1024] = {0};
+#endif
 typedef struct ifd_uart_port{
 typedef struct ifd_uart_port{
     TaskHandle_t xHandle;
     TaskHandle_t xHandle;
     QueueHandle_t xQueue;
     QueueHandle_t xQueue;
@@ -37,6 +42,15 @@ static void uart0_irq_task(void *arg){
                     msg.arg2 = 1;
                     msg.arg2 = 1;
                     luat_msgbus_put(&msg, 0);
                     luat_msgbus_put(&msg, 0);
                 }
                 }
+#ifdef LUAT_USE_SHELL
+            if (shell_state==2){
+                int len = luat_uart_read(0, shell_buffer, 1024);
+                if (len < 1)
+                    continue;
+                shell_buffer[len] = 0x00;
+                luat_shell_push(shell_buffer, len);
+            }
+#endif
                 xQueueReset(uart_port[0].xQueue);
                 xQueueReset(uart_port[0].xQueue);
             }
             }
         }
         }
@@ -101,12 +115,20 @@ int luat_uart_setup(luat_uart_t *uart){
     uart_config.source_clk = UART_SCLK_XTAL;
     uart_config.source_clk = UART_SCLK_XTAL;
     switch (id){
     switch (id){
     case 0:
     case 0:
+#ifdef LUAT_USE_SHELL
+        shell_state++;
+        if (shell_state==1){
+            shell_state = 0;
+        }else if(shell_state==3){
+            shell_state = 0;
+        }
+#endif
         if (uart_port[id].xHandle==NULL){
         if (uart_port[id].xHandle==NULL){
             uart_driver_install(0, uart->bufsz * 2, uart->bufsz * 2, 20, &(uart_port[0].xQueue), 0);
             uart_driver_install(0, uart->bufsz * 2, uart->bufsz * 2, 20, &(uart_port[0].xQueue), 0);
             uart_set_pin(0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
             uart_set_pin(0, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
             uart_param_config(id, &uart_config);
             uart_param_config(id, &uart_config);
             uart_pattern_queue_reset(id, 20);
             uart_pattern_queue_reset(id, 20);
-            uart_port[id].xHandle = xTaskCreate(uart0_irq_task, "uart0_irq_task", 2048, NULL, 10, NULL);
+            xTaskCreate(uart0_irq_task, "uart0_irq_task", 2048, NULL, 10, &uart_port[id].xHandle);
         }
         }
         break;
         break;
     case 1:
     case 1:
@@ -115,7 +137,7 @@ int luat_uart_setup(luat_uart_t *uart){
             uart_set_pin(1, 18, 19, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
             uart_set_pin(1, 18, 19, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
             uart_param_config(id, &uart_config);
             uart_param_config(id, &uart_config);
             uart_pattern_queue_reset(id, 20);
             uart_pattern_queue_reset(id, 20);
-            uart_port[id].xHandle = xTaskCreate(uart1_irq_task, "uart1_irq_task", 2048, NULL, 10, NULL);
+            xTaskCreate(uart1_irq_task, "uart1_irq_task", 2048, NULL, 10, &uart_port[id].xHandle);
         }
         }
         break;
         break;
     default:
     default:
@@ -161,3 +183,23 @@ int luat_setup_cb(int uartid, int received, int sent){
     }
     }
     return 0;
     return 0;
 }
 }
+
+#ifdef LUAT_USE_SHELL
+void luat_shell_poweron(int _drv) {
+    uart_set_baudrate(0, 921600);
+    shell_state = 1;
+    luat_uart_t shell_uart = {
+        .id = _drv,
+        .baud_rate=921600,
+        .baud_rate=8,
+        .parity=LUAT_PARITY_NONE,
+        .bit_order=LUAT_BIT_ORDER_LSB,
+        .bufsz=1024,
+        .pin485=0xffffffff,
+    };
+    luat_uart_setup(&shell_uart);
+}
+#endif
+
+
+

+ 4 - 0
luatos/main/idf5_main.c

@@ -33,6 +33,10 @@ static void luat_lvgl_callback(TimerHandle_t xTimer){
 #endif
 #endif
 
 
 void app_main(void){
 void app_main(void){
+#ifdef LUAT_USE_SHELL
+    extern void luat_shell_poweron(int _drv);
+	luat_shell_poweron(0);
+#endif
     bootloader_random_enable();
     bootloader_random_enable();
     esp_err_t r = nvs_flash_init();
     esp_err_t r = nvs_flash_init();
     if (r == ESP_ERR_NVS_NO_FREE_PAGES || r == ESP_ERR_NVS_NEW_VERSION_FOUND) {
     if (r == ESP_ERR_NVS_NO_FREE_PAGES || r == ESP_ERR_NVS_NEW_VERSION_FOUND) {