From a5231d5f439e8e6d458b8dbca7daea840bd0270f Mon Sep 17 00:00:00 2001 From: wgzAIIT <820906721@qq.com> Date: Mon, 19 Dec 2022 18:05:01 +0800 Subject: [PATCH] add e22 support for edu-riscv64 on nuttx --- .../Framework/connection/lora/Kconfig | 2 +- .../Framework/connection/lora/e22/Kconfig | 44 +++++++----- .../Framework/connection/lora/e22/Makefile | 2 +- .../Framework/connection/lora/e22/e22.c | 72 ++++++++++++++----- 4 files changed, 82 insertions(+), 38 deletions(-) diff --git a/APP_Framework/Framework/connection/lora/Kconfig b/APP_Framework/Framework/connection/lora/Kconfig index 03e097ae7..00774ce08 100644 --- a/APP_Framework/Framework/connection/lora/Kconfig +++ b/APP_Framework/Framework/connection/lora/Kconfig @@ -7,7 +7,7 @@ config ADAPTER_E220 default n config ADAPTER_E22 - bool "Using lora adapter device E22-400T33D" + bool "Using lora adapter device E22-400T30s" default n choice diff --git a/APP_Framework/Framework/connection/lora/e22/Kconfig b/APP_Framework/Framework/connection/lora/e22/Kconfig index 093d3ecd0..ec61a8558 100644 --- a/APP_Framework/Framework/connection/lora/e22/Kconfig +++ b/APP_Framework/Framework/connection/lora/e22/Kconfig @@ -1,28 +1,34 @@ config ADAPTER_LORA_E22 - string "E22-400T33D adapter name" + string "E22-400T30S adapter name" default "e22" -if ADD_XIZI_FETURES - -endif - if ADD_NUTTX_FETURES - config ADAPTER_E22_M0_PATH - string "E22 M0 pin device" - default "/dev/gpio0" + config ADAPTER_E22_M0_PATH + string "E22 M0 pin device" + default "/dev/gpio0" - config ADAPTER_E22_M1_PATH - string "E22 M1 pin device" - default "/dev/gpio1" - + config ADAPTER_E22_M1_PATH + string "E22 M1 pin device" + default "/dev/gpio1" + + config ADAPTER_E22_DRIVER_EXTUART + bool "Using extra uart to support lora" + default n - config ADAPTER_E22_DRIVER - string "E22 device uart driver path" - default "/dev/ttyS3" - -endif - -if ADD_RTTHREAD_FETURES + config ADAPTER_E22_DRIVER + string "E22 device uart driver path" + default "/dev/ttyS2" + depends on !ADAPTER_E22_DRIVER_EXTUART + + if ADAPTER_E22_DRIVER_EXTUART + config ADAPTER_E22_DRIVER + string "E22 device extra uart driver path" + default "/dev/extuart_dev3" + + config ADAPTER_E22_DRIVER_EXT_PORT + int "if E22 device using extuart, choose port" + default "3" + endif endif diff --git a/APP_Framework/Framework/connection/lora/e22/Makefile b/APP_Framework/Framework/connection/lora/e22/Makefile index 18f300097..c0da4046f 100644 --- a/APP_Framework/Framework/connection/lora/e22/Makefile +++ b/APP_Framework/Framework/connection/lora/e22/Makefile @@ -4,4 +4,4 @@ ifeq ($(CONFIG_ADD_NUTTX_FETURES),y) CSRCS += e22.c include $(APPDIR)/Application.mk -endif \ No newline at end of file +endif diff --git a/APP_Framework/Framework/connection/lora/e22/e22.c b/APP_Framework/Framework/connection/lora/e22/e22.c index bdb401fb6..677c02083 100644 --- a/APP_Framework/Framework/connection/lora/e22/e22.c +++ b/APP_Framework/Framework/connection/lora/e22/e22.c @@ -49,6 +49,7 @@ enum E22LoraMode static void E22LoraModeConfig(enum E22LoraMode mode) { int m0_fd, m1_fd; + char value0, value1; //delay 1s , wait AUX ready PrivTaskDelay(1000); @@ -68,23 +69,31 @@ static void E22LoraModeConfig(enum E22LoraMode mode) switch (mode) { case DATA_TRANSFER_MODE: - PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); - PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); + value1 = '0'; + value0 = '0'; + PrivWrite(m1_fd, &value1, 1); + PrivWrite(m0_fd, &value0, 1); break; case WOR_SEND_MODE: - PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); - PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); + value1 = '0'; + value0 = '1'; + PrivWrite(m1_fd, &value1, 1); + PrivWrite(m0_fd, &value0, 1); break; case CONFIGURE_MODE: - PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); - PrivIoctl(m0_fd, GPIOC_WRITE,(unsigned long)GPIO_LOW); + value1 = '1'; + value0 = '0'; + PrivWrite(m1_fd, &value1, 1); + PrivWrite(m0_fd, &value0, 1); break; case SLEEP_MODE: - PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); - PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); + value1 = '1'; + value0 = '1'; + PrivWrite(m1_fd, &value1, 1); + PrivWrite(m0_fd, &value0, 1); break; default: @@ -246,8 +255,6 @@ static int E22GetRegisterParam(uint8 *buf) */ static int E22Open(struct Adapter *adapter) { - int ret = 0; - struct termios cfg; /*step1: open e22 uart port*/ adapter->fd = PrivOpen(ADAPTER_E22_DRIVER, O_RDWR); if (adapter->fd < 0) { @@ -255,22 +262,53 @@ static int E22Open(struct Adapter *adapter) return -1; } - tcgetattr(adapter->fd, &cfg); - cfsetspeed(&cfg, BAUD_RATE_9600); - tcsetattr(adapter->fd, TCSANOW, &cfg); + struct SerialDataCfg cfg; + memset(&cfg, 0 ,sizeof(struct SerialDataCfg)); + + cfg.serial_baud_rate = BAUD_RATE_9600; + cfg.serial_data_bits = DATA_BITS_8; + cfg.serial_stop_bits = STOP_BITS_1; + cfg.serial_parity_mode = PARITY_NONE; + cfg.serial_bit_order = BIT_ORDER_LSB; + cfg.serial_invert_mode = NRZ_NORMAL; + cfg.serial_buffer_size = SERIAL_RB_BUFSZ; + cfg.is_ext_uart = 0; + + /*aiit board use ch438, so it needs more serial configuration*/ +#ifdef ADAPTER_E22_DRIVER_EXTUART + cfg.is_ext_uart = 1; + cfg.ext_uart_no = ADAPTER_E22_DRIVER_EXT_PORT; + cfg.port_configure = PORT_CFG_INIT; +#endif + +#ifdef AS_LORA_GATEWAY_ROLE + //serial receive timeout 10s + cfg.serial_timeout = 10000; +#endif + +#ifdef AS_LORA_CLIENT_ROLE + //serial receive wait forever + cfg.serial_timeout = -1; +#endif + + struct PrivIoctlCfg ioctl_cfg; + ioctl_cfg.ioctl_driver_type = SERIAL_TYPE; + ioctl_cfg.args = &cfg; + + PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); E22SetRegisterParam(adapter, E22_ADDRESS, E22_CHANNEL, E22_UART_BAUD_RATE); + cfg.serial_baud_rate = E22_UART_BAUD_RATE; + ioctl_cfg.args = &cfg; - cfsetspeed(&cfg, E22_UART_BAUD_RATE); - tcsetattr(adapter->fd, TCSANOW, &cfg); + PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); ADAPTER_DEBUG("E22Open done\n"); return 0; } - /** * @description: Close E22 uart function * @param adapter - Lora device pointer @@ -351,7 +389,7 @@ static int E22Send(struct Adapter *adapter, const void *buf, size_t len) */ static int E22Recv(struct Adapter *adapter, void *buf, size_t len) { - int recv_len, recv_len_continue; + int recv_len = 0, recv_len_continue = 0; uint8 *recv_buf = PrivMalloc(len);