From bfa8c734c4849097e9edb7179103629e24ae1351 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Thu, 4 Aug 2022 14:42:25 +0800 Subject: [PATCH 01/16] xiuos\APP_Framework\Framework\connection\lora\e220: (1)Add Kconfig files and SConscript files related to e220 --- .../Framework/connection/lora/e220/Kconfig | 33 +++++++++++++++++-- .../Framework/connection/lora/e220/SConscript | 10 ++++++ 2 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 APP_Framework/Framework/connection/lora/e220/SConscript diff --git a/APP_Framework/Framework/connection/lora/e220/Kconfig b/APP_Framework/Framework/connection/lora/e220/Kconfig index 322b307c8..34e106f47 100644 --- a/APP_Framework/Framework/connection/lora/e220/Kconfig +++ b/APP_Framework/Framework/connection/lora/e220/Kconfig @@ -39,11 +39,11 @@ if ADD_NUTTX_FETURES config ADAPTER_E220_M0_PATH string "E220 M0 pin device" - default "/dev/gpio0" + default "/dev/gpout0" config ADAPTER_E220_M1_PATH string "E220 M1 pin device" - default "/dev/gpio1" + default "/dev/gpout1" config ADAPTER_E220_DRIVER_EXTUART bool "Using extra uart to support lora" @@ -64,5 +64,34 @@ if ADD_NUTTX_FETURES endif if ADD_RTTHREAD_FETURES + config ADAPTER_E220_M0 + int "E220 M0 pin number" + default "11" + config ADAPTER_E220_M1 + int "E220 M1 pin number" + default "9" + + config ADAPTER_E220_PIN_DRIVER + string "E220 device pin driver path" + default "/dev/dev3" + + config ADAPTER_E220_DRIVER_EXTUART + bool "Using extra uart to support lora" + default y + + config ADAPTER_E220_DRIVER + string "E220 device uart driver path" + default "/dev/dev3" + depends on !ADAPTER_E220_DRIVER_EXTUART + + if ADAPTER_E220_DRIVER_EXTUART + config ADAPTER_E220_DRIVER + string "E220 device extra uart driver path" + default "/dev/dev3" + + config ADAPTER_E220_DRIVER_EXT_PORT + int "if E220 device using extuart, choose port" + default "3" + endif endif diff --git a/APP_Framework/Framework/connection/lora/e220/SConscript b/APP_Framework/Framework/connection/lora/e220/SConscript new file mode 100644 index 000000000..8ad6e9cc3 --- /dev/null +++ b/APP_Framework/Framework/connection/lora/e220/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['ADAPTER_E220']): + src += ['e220.c'] +group = DefineGroup('connection lora e220', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file From f9984b5b7da52d36643e123a93a6b1f3dcf18022 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 10:53:00 +0800 Subject: [PATCH 02/16] xiuos\Ubiquitous\RT-Thread_Fusion_XiUOS\aiit_board\xidatong-arm32\test_photo: 1.Lora send and receive result --- .../test_photo/Lora/lora receive.PNG | Bin 0 -> 16836 bytes .../test_photo/Lora/lora send.PNG | Bin 0 -> 12399 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora receive.PNG create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora send.PNG diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora receive.PNG b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora receive.PNG new file mode 100644 index 0000000000000000000000000000000000000000..2650a4ede37ec93ae4ac8400f21ea121bb970239 GIT binary patch literal 16836 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 literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora send.PNG b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Lora/lora send.PNG new file mode 100644 index 0000000000000000000000000000000000000000..595a261573c6775d7194ed57602ba9556f855ffb GIT binary patch literal 12399 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 Date: Tue, 9 Aug 2022 10:54:12 +0800 Subject: [PATCH 03/16] =?UTF-8?q?xiuos\Ubiquitous\RT-Thread=5FFusion=5FXiU?= =?UTF-8?q?OS\aiit=5Fboard\xidatong-arm32\test=5Fphoto\CH438=EF=BC=9A=201.?= =?UTF-8?q?zigbee=20base=20ch438=20receive?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CH438/zigbee base ch438 receive.png | Bin 0 -> 42809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/CH438/zigbee base ch438 receive.png diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/CH438/zigbee base ch438 receive.png b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/CH438/zigbee base ch438 receive.png new file mode 100644 index 0000000000000000000000000000000000000000..72acb8cc451b691ea341caded175a56523241fcd GIT binary patch literal 42809 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%0A+UNY3i9 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 bo1Rv#C~=yK`F?E0ZFq*Xo$ONPe31Sd8MLjz literal 0 HcmV?d00001 From e812b5a49fddc5bf0e546506386969d411439a47 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 10:54:50 +0800 Subject: [PATCH 04/16] =?UTF-8?q?xiuos\Ubiquitous\RT-Thread=5FFusion=5FXiU?= =?UTF-8?q?OS\aiit=5Fboard\xidatong-arm32\board=EF=BC=9A=201.Add=20ch438.c?= =?UTF-8?q?=20and=20ch438.h=202.include=20test=20function=20about=20ch438,?= =?UTF-8?q?hc08,lora,e18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board/hardware/ch438/ch438.c | 1323 +++++++++++++++++ .../board/hardware/ch438/ch438.h | 413 +++++ 2 files changed, 1736 insertions(+) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/hardware/ch438/ch438.c create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/hardware/ch438/ch438.h diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/hardware/ch438/ch438.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/hardware/ch438/ch438.c new file mode 100644 index 000000000..4b5b21688 --- /dev/null +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/hardware/ch438/ch438.c @@ -0,0 +1,1323 @@ +/* +* Copyright (c) 2020 AIIT XUOS Lab +* XiOS is licensed under Mulan PSL v2. +* You can use this software according to the terms and conditions of the Mulan PSL v2. +* You may obtain a copy of Mulan PSL v2 at: +* http://license.coscl.org.cn/MulanPSL2 +* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +* See the Mulan PSL v2 for more details. +*/ + +/** + * @file .c + * @brief imxrt board sd card automount + * @version 1.0 + * @author AIIT XUOS Lab + * @date 2022.06.30 + */ + +#include "ch438.h" +#include + +#ifdef BSP_USING_CH438 + +#define RT (0U) // If config this macro ,we can use rt gpio for ch438 us + +/* This array shows whether the current serial port is selected */ +static bool const g_uart_selected[CH438PORTNUM] = +{ +#ifdef CONFIG_CH438_EXTUART0 + [0] = true, +#endif +#ifdef CONFIG_CH438_EXTUART1 + [1] = true, +#endif +#ifdef CONFIG_CH438_EXTUART2 + [2] = true, +#endif +#ifdef CONFIG_CH438_EXTUART3 + [3] = true, +#endif +#ifdef CONFIG_CH438_EXTUART4 + [4] = true, +#endif +#ifdef CONFIG_CH438_EXTUART5 + [5] = true, +#endif +#ifdef CONFIG_CH438_EXTUART6 + [6] = true, +#endif +#ifdef CONFIG_CH438_EXTUART7 + [7] = true, +#endif +}; + + +/* rt-thread sem and serial definition */ +struct rt_serial_device *extuart_serial_parm[CH438PORTNUM]; +static rt_sem_t rx_sem[CH438PORTNUM]={RT_NULL}; +char * sem[CH438PORTNUM]={"sem0","sem1","sem2","sem3","sem4","sem5","sem6","sem7"}; +/* rt-thread workqueue*/ +struct rt_workqueue* rq; +/* there is data available on the corresponding port */ +static volatile bool done[CH438PORTNUM] = {false,false,false,false,false,false,false,false}; + +/* Eight port data buffer */ +static uint8_t buff[CH438PORTNUM][CH438_BUFFSIZE]; + +/* the value of interrupt number of SSR register */ +static uint8_t Interruptnum[CH438PORTNUM] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; + +/* Offset address of serial port number */ +static uint8_t offsetadd[CH438PORTNUM] = {0x00,0x10,0x20,0x30,0x08,0x18,0x28,0x38,}; + + +const struct rt_uart_ops ch438_ops={ + rt_ch438_configure, + rt_ch438_control, + rt_ch438_putc, + rt_ch438_getc, + RT_NULL +}; + + +void Config_Interrupt(void){ + gpio_pin_config_t int_config = { + kGPIO_DigitalInput, + 0, + kGPIO_IntFallingEdge, + }; + GPIO_PinInit(CH438_CTL_GPIO, CH438_INT_PIN, &int_config); + /* Enable GPIO pin interrupt */ + GPIO_PortEnableInterrupts(CH438_CTL_GPIO, 1U << CH438_INT_PIN); +} + + +static void Ch438Irq(void * parameter) +{ + rt_uint8_t gInterruptStatus; + rt_uint8_t port = 0; + struct rt_serial_device *serial = (struct rt_serial_device *)parameter; + /* multi irq may happen*/ + gInterruptStatus = ReadCH438Data(REG_SSR_ADDR); + port=CH438_INT_PORT; + rt_hw_serial_isr(extuart_serial_parm[port], RT_SERIAL_EVENT_RX_IND); +} + + +static rt_err_t rt_ch438_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +{ + rt_uint32_t baud_rate = cfg->baud_rate; + rt_uint16_t port = cfg->reserved; + CH438PortInit(port, baud_rate); + return RT_EOK; +} + +static rt_err_t rt_ch438_control(struct rt_serial_device *serial, int cmd, void *arg) +{ + rt_uint16_t ext_uart_no = serial->config.reserved; + static rt_uint16_t register_flag = 0; + + switch (cmd) + { + case RT_DEVICE_CTRL_CLR_INT: + if(1 == register_flag) + { + /* Close interrupt of CH438 */ + /* GPIO3_3 INT*/ + rt_pin_irq_enable(CH438_INT, PIN_IRQ_DISABLE ); + register_flag = 0; + }break; + case RT_DEVICE_CTRL_SET_INT: + if(0 == register_flag) + { + rt_pin_mode(CH438_INT, PIN_MODE_INPUT_PULLUP); + rt_pin_attach_irq(CH438_INT, PIN_IRQ_MODE_FALLING,Ch438Irq,(void *)serial); + rt_pin_irq_enable(CH438_INT, PIN_IRQ_ENABLE); + register_flag = 1; + }break; + } + return (RT_EOK); +} + +static int rt_ch438_putc(struct rt_serial_device *serial, char c) +{ + uint16_t ext_uart_no = serial->config.reserved; + rt_uint8_t REG_LSR_ADDR,REG_THR_ADDR; + + REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR; + REG_THR_ADDR = offsetadd[ext_uart_no] | REG_THR0_ADDR; + rt_thread_mdelay(5); + if((ReadCH438Data( REG_LSR_ADDR ) & BIT_LSR_TEMT) != 0) + { + + WriteCH438Block( REG_THR_ADDR, 1, &c ); + return 1; + } else { + return 0; + } + +} + + +static int rt_ch438_getc(struct rt_serial_device *serial) +{ + + rt_uint8_t dat = 0; + rt_uint8_t REG_LSR_ADDR,REG_RBR_ADDR; + uint16_t ext_uart_no = serial->config.reserved;///< get extern uart port + + REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR; + REG_RBR_ADDR = offsetadd[ext_uart_no] | REG_RBR0_ADDR; + rt_thread_mdelay(5); + if((ReadCH438Data(REG_LSR_ADDR) & BIT_LSR_DATARDY) == 0x01) + { + dat = ReadCH438Data( REG_RBR_ADDR ); + if(dat >= 0) + return dat; + }else{ + return -1; + } + +} + + +int rt_hw_ch438_init(void) +{ + struct rt_serial_device *extserial; + struct device_uart *extuart; + struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT; + rt_err_t ret; + #ifdef CONFIG_CH438_EXTUART0 + static struct rt_serial_device extserial0; + + extserial = &extserial0; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 115200; + extserial->config.reserved = 0; ///< extern uart port + + extuart_serial_parm[0] = &extserial0; + + ret = rt_hw_serial_register(extserial, + "dev0", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev0 register failed.\n"); + } + #endif + #ifdef CONFIG_CH438_EXTUART1 + static struct rt_serial_device extserial1; + + extserial = &extserial1; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 115200; + extserial->config.reserved = 1; ///< extern uart port + + extuart_serial_parm[1] = &extserial1; + + ret = rt_hw_serial_register(extserial, + "dev1", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev1 register failed.\n"); + } + #endif + #ifdef CONFIG_CH438_EXTUART2 + static struct rt_serial_device extserial2; + + extserial = &extserial2; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 9600; + extserial->config.reserved = 2; ///< extern uart port + + extuart_serial_parm[2] = &extserial2; + + ret = rt_hw_serial_register(extserial, + "dev2", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev2 register failed.\n"); + } + rt_kprintf("extuart_dev2 register succeed.\n"); + #endif + #ifdef CONFIG_CH438_EXTUART3 + static struct rt_serial_device extserial3; + + extserial = &extserial3; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 9600; + extserial->config.reserved = 3; ///< extern uart port + + ret = rt_hw_serial_register(extserial, + "dev3", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev3 register failed.\n"); + } + + extuart_serial_parm[3] = &extserial3; + #endif + #ifdef CONFIG_CH438_EXTUART4 + static struct rt_serial_device extserial4; + + extserial = &extserial4; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 9600; + extserial->config.reserved = 4; ///< extern uart port + + ret = rt_hw_serial_register(extserial, + "dev4", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev4 register failed.\n"); + } + + extuart_serial_parm[4] = &extserial4; + #endif + #ifdef CONFIG_CH438_EXTUART5 + static struct rt_serial_device extserial5; + + extserial = &extserial5; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 115200; + extserial->config.reserved = 5; ///< extern uart port + + ret = rt_hw_serial_register(extserial, + "dev5", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev5 register failed.\n"); + } + + extuart_serial_parm[5] = &extserial5; + #endif + #ifdef CONFIG_CH438_EXTUART6 + static struct rt_serial_device extserial6; + + extserial = &extserial6; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 57600; + extserial->config.reserved = 6; ///< extern uart port + + ret = rt_hw_serial_register(extserial, + "dev6", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev6 register failed.\n"); + } + + extuart_serial_parm[6] = &extserial6; + #endif + #ifdef CONFIG_CH438_EXTUART7 + static struct rt_serial_device extserial7; + + extserial = &extserial7; + extserial->ops = &ch438_ops; + extserial->config = config; + extserial->config.baud_rate = 9600; + extserial->config.reserved = 7; ///< extern uart port + + ret = rt_hw_serial_register(extserial, + "dev7", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, + extuart); + if(ret < 0){ + rt_kprintf("extuart_dev7 register failed.\n"); + } + rt_kprintf("extuart_dev7 register succeed.\n"); + extuart_serial_parm[7] = &extserial7; + #endif + Ch438InitDefault(); + + return 0; + +} +INIT_DEVICE_EXPORT(rt_hw_ch438_init); + + +void up_udelay(void) +{ + volatile uint32_t i = 0; + for (i = 0; i < EXAMPLE_DELAY_COUNT; ++i) + { + __asm("NOP"); /* delay */ + } +} + +void up_mdelay(uint32_t time){ + + while(time--){ + udelay(1000); + } +} +/**************************************************************************** + * Name: CH438SetOutput + * + * Description: + * Configure pin mode to output + * + ****************************************************************************/ +static void CH438SetOutput(void) +{ + gpio_pin_config_t ch438_d0_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; + GPIO_PinInit(CH438_D_GPIO,CH438_D0_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D1_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D2_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D3_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D4_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D5_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D6_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D7_PIN,&ch438_d0_config); + +} + +/**************************************************************************** + * Name: CH438SetInput + * + * Description: + * Configure pin mode to input + * + ****************************************************************************/ +static void CH438SetInput(void) +{ + gpio_pin_config_t ch438_d0_config ={kGPIO_DigitalInput, 0, kGPIO_NoIntmode}; + GPIO_PinInit(CH438_D_GPIO,CH438_D0_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D1_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D2_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D3_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D4_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D5_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D6_PIN,&ch438_d0_config); + GPIO_PinInit(CH438_D_GPIO,CH438_D7_PIN,&ch438_d0_config); + +} +//#define ADAPTER_ZIGBEE_E18 +/**************************************************************************** + * Name: ReadCH438Data + * + * Description: + * Read data from ch438 address + * + ****************************************************************************/ +static uint8_t ReadCH438Data(uint8_t addr) +{ + uint8_t dat = 0; + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NWR_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NRD_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_HIGH); + + + CH438SetOutput(); + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + if(addr &0x80) GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_LOW); + if(addr &0x40) GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_LOW); + if(addr &0x20) GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_LOW); + if(addr &0x10) GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_LOW); + if(addr &0x08) GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_LOW); + if(addr &0x04) GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_LOW); + if(addr &0x02) GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_LOW); + if(addr &0x01) GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_LOW); + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_LOW); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + + CH438SetInput(); + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NRD_PIN,PIN_LOW); + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + + + if (GPIO_PinRead(CH438_D_GPIO,CH438_D7_PIN)) dat |= 0x80; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D6_PIN)) dat |= 0x40; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D5_PIN)) dat |= 0x20; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D4_PIN)) dat |= 0x10; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D3_PIN)) dat |= 0x08; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D2_PIN)) dat |= 0x04; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D1_PIN)) dat |= 0x02; + if (GPIO_PinRead(CH438_D_GPIO,CH438_D0_PIN)) dat |= 0x01; + + + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NRD_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_HIGH); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(10); + #else + udelay(1); + #endif + + + return dat; +} + +/**************************************************************************** + * Name: WriteCH438Data + * + * Description: + * write data to ch438 address + * + ****************************************************************************/ +static void WriteCH438Data(uint8_t addr, const uint8_t dat) +{ + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NRD_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NWR_PIN,PIN_HIGH); + + + CH438SetOutput(); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + + if(addr &0x80) GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_LOW); + if(addr &0x40) GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_LOW); + if(addr &0x20) GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_LOW); + if(addr &0x10) GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_LOW); + if(addr &0x08) GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_LOW); + if(addr &0x04) GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_LOW); + if(addr &0x02) GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_LOW); + if(addr &0x01) GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_LOW); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_LOW); + + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + + if(dat &0x80) GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D7_PIN,PIN_LOW); + if(dat &0x40) GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D6_PIN,PIN_LOW); + if(dat &0x20) GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D5_PIN,PIN_LOW); + if(dat &0x10) GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D4_PIN,PIN_LOW); + if(dat &0x08) GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D3_PIN,PIN_LOW); + if(dat &0x04) GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D2_PIN,PIN_LOW); + if(dat &0x02) GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D1_PIN,PIN_LOW); + if(dat &0x01) GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_HIGH); else GPIO_PinWrite(CH438_D_GPIO,CH438_D0_PIN,PIN_LOW); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NWR_PIN,PIN_LOW); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NWR_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_HIGH); + + + #ifdef ADAPTER_ZIGBEE_E18 + udelay(100); + #else + udelay(1); + #endif + + CH438SetInput(); + + return; +} + +/**************************************************************************** + * Name: WriteCH438Block + * + * Description: + * Write data block from ch438 address + * + ****************************************************************************/ +static void WriteCH438Block(uint8_t mAddr, uint8_t mLen, const uint8_t *mBuf) +{ + while(mLen--) + WriteCH438Data(mAddr, *mBuf++); +} + +/**************************************************************************** + * Name: CH438UARTSend + * + * Description: + * Enable FIFO mode, which is used for ch438 serial port to send multi byte data, + * with a maximum of 128 bytes of data sent at a time + * + ****************************************************************************/ +static void Ch438UartSend(uint8_t ext_uart_no, const uint8_t *Data, uint16_t Num) +{ + uint8_t REG_LSR_ADDR,REG_THR_ADDR; + REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR; + REG_THR_ADDR = offsetadd[ext_uart_no] | REG_THR0_ADDR; + + while(1) + { + while((ReadCH438Data(REG_LSR_ADDR) & BIT_LSR_TEMT) == 0); /* wait for sending data done, THR and TSR is NULL */ + if(Num <= 128) + { + WriteCH438Block(REG_THR_ADDR, Num, Data); + break; + } + else + { + WriteCH438Block(REG_THR_ADDR, 128, Data); + Num -= 128; + Data += 128; + } + } + +} + +/**************************************************************************** + * Name: CH438UARTRcv + * + * Description: + * Disable FIFO mode for ch438 serial port to receive multi byte data + * + ****************************************************************************/ +uint8_t CH438UARTRcv(uint8_t ext_uart_no, uint8_t *buf, size_t size) +{ + uint8_t rcv_num = 0; + uint8_t dat = 0; + uint8_t REG_LSR_ADDR,REG_RBR_ADDR; + uint8_t *read_buffer; + size_t buffer_index = 0; + + read_buffer = buf; + + REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR; + REG_RBR_ADDR = offsetadd[ext_uart_no] | REG_RBR0_ADDR; + + /* Wait for the data to be ready */ + int count=0; + while ((ReadCH438Data(REG_LSR_ADDR) & BIT_LSR_DATARDY) == 0){ + } + while (((ReadCH438Data(REG_LSR_ADDR) & BIT_LSR_DATARDY) == 0x01) && (size != 0)) + { count++; + if(1==count){ + rt_thread_mdelay(5000); + } + rt_thread_mdelay(5); + dat = ReadCH438Data(REG_RBR_ADDR); + *read_buffer = dat; + read_buffer++; + buffer_index++; + if (255 == buffer_index) { + buffer_index = 0; + read_buffer = buf; + } + + ++rcv_num; + --size; + } + + return rcv_num; +} + +/**************************************************************************** + * Name: ImxrtCH438Init + * + * Description: + * ch438 initialization + * + ****************************************************************************/ +static void ImxrtCH438Init(void) +{ + CH438SetOutput(); + gpio_pin_config_t ch438_ctl_config ={kGPIO_DigitalOutput, 0, kGPIO_NoIntmode}; + GPIO_PinInit(CH438_CTL_GPIO,CH438_NWR_PIN,&ch438_ctl_config); + GPIO_PinInit(CH438_CTL_GPIO,CH438_NRD_PIN,&ch438_ctl_config); + GPIO_PinInit(CH438_CTL_GPIO,CH438_ALE_PIN,&ch438_ctl_config); + + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NWR_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_NRD_PIN,PIN_HIGH); + GPIO_PinWrite(CH438_CTL_GPIO,CH438_ALE_PIN,PIN_HIGH); +} + +/**************************************************************************** + * Name: CH438PortInit + * + * Description: + * ch438 port initialization + * + ****************************************************************************/ +static void CH438PortInit(uint8_t ext_uart_no, uint32_t baud_rate) +{ + uint32_t div; + uint8_t DLL,DLM,dlab; + uint8_t REG_LCR_ADDR; + uint8_t REG_DLL_ADDR; + uint8_t REG_DLM_ADDR; + uint8_t REG_IER_ADDR; + uint8_t REG_MCR_ADDR; + uint8_t REG_FCR_ADDR; + + REG_LCR_ADDR = offsetadd[ext_uart_no] | REG_LCR0_ADDR; + REG_DLL_ADDR = offsetadd[ext_uart_no] | REG_DLL0_ADDR; + REG_DLM_ADDR = offsetadd[ext_uart_no] | REG_DLM0_ADDR; + REG_IER_ADDR = offsetadd[ext_uart_no] | REG_IER0_ADDR; + REG_MCR_ADDR = offsetadd[ext_uart_no] | REG_MCR0_ADDR; + REG_FCR_ADDR = offsetadd[ext_uart_no] | REG_FCR0_ADDR; + + /* reset the uart */ + WriteCH438Data(REG_IER_ADDR, BIT_IER_RESET); + up_mdelay(50); + + dlab = ReadCH438Data(REG_IER_ADDR); + dlab &= 0xDF; + WriteCH438Data(REG_IER_ADDR, dlab); + + /* set LCR register DLAB bit 1 */ + dlab = ReadCH438Data(REG_LCR_ADDR); + dlab |= 0x80; + WriteCH438Data(REG_LCR_ADDR, dlab); + + div = (Fpclk >> 4) / baud_rate; + DLM = div >> 8; + DLL = div & 0xff; + + /* set bps */ + WriteCH438Data(REG_DLL_ADDR, DLL); + WriteCH438Data(REG_DLM_ADDR, DLM); + + /* set FIFO mode, 112 bytes */ + WriteCH438Data(REG_FCR_ADDR, BIT_FCR_RECVTG1 | BIT_FCR_RECVTG0 | BIT_FCR_FIFOEN); + + /* 8 bit word size, 1 bit stop bit, no crc */ + WriteCH438Data(REG_LCR_ADDR, BIT_LCR_WORDSZ1 | BIT_LCR_WORDSZ0); + + /* enable interrupt */ + WriteCH438Data(REG_IER_ADDR, BIT_IER_IERECV); + + /* allow interrupt output, DTR and RTS is 1 */ + WriteCH438Data(REG_MCR_ADDR, BIT_MCR_OUT2); + + /* release the data in FIFO */ + WriteCH438Data(REG_FCR_ADDR, ReadCH438Data(REG_FCR_ADDR)| BIT_FCR_TFIFORST); +} +/**************************************************************************** + * Name: ImxrtCh438ReadData + * + * Description: + * Read data from ch438 port + * + ****************************************************************************/ +static int ImxrtCh438WriteData(uint8_t ext_uart_no, const uint8_t *write_buffer, size_t size) +{ + int write_len, write_len_continue; + int i, write_index; + if(write_buffer == NULL){ + return ERROR; + } + + write_len = size; + write_len_continue = size; + + if(write_len > 256) + { + if(0 == write_len % 256) + { + write_index = write_len / 256; + for(i = 0; i < write_index; i ++) + { + Ch438UartSend(ext_uart_no, write_buffer + i * 256, 256); + } + } + else + { + write_index = 0; + while(write_len_continue > 256) + { + Ch438UartSend(ext_uart_no, write_buffer + write_index * 256, 256); + write_index++; + write_len_continue = write_len - write_index * 256; + } + Ch438UartSend(ext_uart_no, write_buffer + write_index * 256, write_len_continue); + } + } + else + { + Ch438UartSend(ext_uart_no, write_buffer, write_len); + } + + return OK; +} + +/**************************************************************************** + * Name: ImxrtCh438ReadData + * + * Description: + * Read data from ch438 port + * + ****************************************************************************/ +static size_t ImxrtCh438ReadData(uint8_t ext_uart_no, size_t size) +{ + size_t RevLen = 0; + uint8_t InterruptStatus; + uint8_t REG_IIR_ADDR; + uint8_t REG_LSR_ADDR; + uint8_t REG_MSR_ADDR; + + REG_IIR_ADDR = offsetadd[ext_uart_no] | REG_IIR0_ADDR; + REG_LSR_ADDR = offsetadd[ext_uart_no] | REG_LSR0_ADDR; + REG_MSR_ADDR = offsetadd[ext_uart_no] | REG_MSR0_ADDR; + /* Read the interrupt status of the serial port */ + InterruptStatus = ReadCH438Data(REG_IIR_ADDR) & 0x0f; + rt_kprintf("InterruptStatus is %d\n", InterruptStatus); + + switch(InterruptStatus) + { + case INT_NOINT: /* no interrupt */ + break; + case INT_THR_EMPTY: /* the transmit hold register is not interrupted */ + break; + case INT_RCV_OVERTIME: /* receive data timeout interrupt */ + case INT_RCV_SUCCESS: /* receive data available interrupt */ + RevLen = CH438UARTRcv(ext_uart_no, buff[ext_uart_no], size); + break; + case INT_RCV_LINES: /* receive line status interrupt */ + ReadCH438Data(REG_LSR_ADDR); + break; + case INT_MODEM_CHANGE: /* modem input change interrupt */ + ReadCH438Data(REG_MSR_ADDR); + break; + default: + break; + } + + return RevLen; +} + +/**************************************************************************** + * Name: Ch438InitDefault + * + * Description: + * Ch438 default initialization function + * + ****************************************************************************/ +static void Ch438InitDefault(void) +{ + /*Dynamically create semaphores */ + semaphoreChInit(); + + ImxrtCH438Init(); + +/* If a port is checked, the port will be initialized. Otherwise, the interrupt of the port will be disabled. */ + +#ifdef CONFIG_CH438_EXTUART0 + CH438PortInit(0, CONFIG_CH438_EXTUART0_BAUD); +#else + WriteCH438Data(REG_IER0_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART1 + CH438PortInit(1, CONFIG_CH438_EXTUART1_BAUD); +#else + WriteCH438Data(REG_IER1_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART2 + CH438PortInit(2, CONFIG_CH438_EXTUART2_BAUD); +#else + WriteCH438Data(REG_IER2_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART3 + CH438PortInit(3, CONFIG_CH438_EXTUART3_BAUD); +#else + WriteCH438Data(REG_IER3_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART4 + CH438PortInit(4, CONFIG_CH438_EXTUART4_BAUD); +#else + WriteCH438Data(REG_IER4_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART5 + CH438PortInit(5, CONFIG_CH438_EXTUART5_BAUD); +#else + WriteCH438Data(REG_IER5_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART6 + CH438PortInit(6, CONFIG_CH438_EXTUART6_BAUD); +#else + WriteCH438Data(REG_IER6_ADDR, 0x00); +#endif + +#ifdef CONFIG_CH438_EXTUART7 + CH438PortInit(7, CONFIG_CH438_EXTUART7_BAUD); +#else + WriteCH438Data(REG_IER7_ADDR, 0x00); +#endif + + up_mdelay(10); + +} +/**************************************************************************** + * Name: static void getChInterruptStatus( void *arg) + * + * Description: + * read Interrupt register of ch438 + * + ****************************************************************************/ + +static int getCh438InterruptStatus(void ){ + uint8_t gChInterruptStatus=0; /*Interrupt register status*/ + uint8_t i=7; + gChInterruptStatus=ReadCH438Data(REG_SSR_ADDR); + rt_kprintf("gChInterruptStatus: %x",gChInterruptStatus); + if(gChInterruptStatus){ + for(i=0;i +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include "fsl_gpio.h" +#include "drv_gpio.h" +#include "MIMXRT1052.h" + + +/*self define*/ +/* output pin */ +#define CH438_D_GPIO GPIO1 +#define ZIGBEE_GPIO GPIO2 +#define CH438_CTL_GPIO GPIO3 + +#define CH438_INT_IRQ GPIO3_Combined_0_15_IRQn +#define CH438_INT_IRQ_HANDLER GPIO3_Combined_0_15_IRQHandler + +/* ch438 ctl pin */ +#define CH438_NWR 68 +#define CH438_NRD 69 +#define CH438_ALE 66 +#define CH438_INT 67 + +/* ch438 r/w pin*/ +#define CH438_D0 25 +#define CH438_D1 24 +#define CH438_D2 20 +#define CH438_D3 21 +#define CH438_D4 31 +#define CH438_D5 28 +#define CH438_D6 30 +#define CH438_D7 29 + + +#ifdef CONFIG_CH438_EXTUART0 +#define EXTU_UART_0 "dev0" +#endif + +#ifdef CONFIG_CH438_EXTUART1 +#define EXTU_UART_1 "dev1" +#endif + +#ifdef CONFIG_CH438_EXTUART2 +#define EXTU_UART_2 "dev2" +#endif + +#ifdef CONFIG_CH438_EXTUART3 +#define EXTU_UART_3 "dev3" +#endif + +#ifdef CONFIG_CH438_EXTUART4 +#define EXTU_UART_4 "dev4" +#endif + +#ifdef CONFIG_CH438_EXTUART5 +#define EXTU_UART_5 "dev5" +#endif + +#ifdef CONFIG_CH438_EXTUART6 +#define EXTU_UART_6 "dev6" +#endif + +#ifdef CONFIG_CH438_EXTUART7 +#define EXTU_UART_7 "dev7" +#endif + + +#define ZIGBEE_MODE_PIN (11U) + +#define CH438_D0_PIN (25U) +#define CH438_D1_PIN (24U) +#define CH438_D2_PIN (20U) +#define CH438_D3_PIN (21U) +#define CH438_D4_PIN (31U) +#define CH438_D5_PIN (28U) +#define CH438_D6_PIN (30U) +#define CH438_D7_PIN (29U) + +#define CH438_NWR_PIN (4U) +#define CH438_NRD_PIN (5U) +#define CH438_ALE_PIN (2U) +#define CH438_INT_PIN (3U) + +#define EXAMPLE_DELAY_COUNT 5000 +#define CH438PORTNUM 8 +#define CH438_BUFFSIZE 256 +#define CH438_INCREMENT MSEC2TICK(33) + +#define CONFIG_CH438_EXTUART0_BAUD 115200 +#define CONFIG_CH438_EXTUART1_BAUD 115200 +#define CONFIG_CH438_EXTUART2_BAUD 9600 +#define CONFIG_CH438_EXTUART3_BAUD 9600 +#define CONFIG_CH438_EXTUART4_BAUD 115200 +#define CONFIG_CH438_EXTUART5_BAUD 115200 +#define CONFIG_CH438_EXTUART6_BAUD 115200 +#define CONFIG_CH438_EXTUART7_BAUD 9600 +#define OK 0 +#define ERROR 1 + +/* chip definition */ +/* CH438serial port0 register address */ + +#define REG_RBR0_ADDR 0x00 /* serial port0receive buffer register address */ +#define REG_THR0_ADDR 0x00 /* serial port0send hold register address */ +#define REG_IER0_ADDR 0x01 /* serial port0interrupt enable register address */ +#define REG_IIR0_ADDR 0x02 /* serial port0interrupt identifies register address */ +#define REG_FCR0_ADDR 0x02 /* serial port0FIFO controls register address */ +#define REG_LCR0_ADDR 0x03 /* serial port0circuit control register address */ +#define REG_MCR0_ADDR 0x04 /* serial port0MODEM controls register address */ +#define REG_LSR0_ADDR 0x05 /* serial port0line status register address */ +#define REG_MSR0_ADDR 0x06 /* serial port0address of MODEM status register */ +#define REG_SCR0_ADDR 0x07 /* serial port0the user can define the register address */ +#define REG_DLL0_ADDR 0x00 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM0_ADDR 0x01 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port1 register address */ + +#define REG_RBR1_ADDR 0x10 /* serial port1receive buffer register address */ +#define REG_THR1_ADDR 0x10 /* serial port1send hold register address */ +#define REG_IER1_ADDR 0x11 /* serial port1interrupt enable register address */ +#define REG_IIR1_ADDR 0x12 /* serial port1interrupt identifies register address */ +#define REG_FCR1_ADDR 0x12 /* serial port1FIFO controls register address */ +#define REG_LCR1_ADDR 0x13 /* serial port1circuit control register address */ +#define REG_MCR1_ADDR 0x14 /* serial port1MODEM controls register address */ +#define REG_LSR1_ADDR 0x15 /* serial port1line status register address */ +#define REG_MSR1_ADDR 0x16 /* serial port1address of MODEM status register */ +#define REG_SCR1_ADDR 0x17 /* serial port1the user can define the register address */ +#define REG_DLL1_ADDR 0x10 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM1_ADDR 0x11 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port2 register address */ + +#define REG_RBR2_ADDR 0x20 /* serial port2receive buffer register address */ +#define REG_THR2_ADDR 0x20 /* serial port2send hold register address */ +#define REG_IER2_ADDR 0x21 /* serial port2interrupt enable register address */ +#define REG_IIR2_ADDR 0x22 /* serial port2interrupt identifies register address */ +#define REG_FCR2_ADDR 0x22 /* serial port2FIFO controls register address */ +#define REG_LCR2_ADDR 0x23 /* serial port2circuit control register address */ +#define REG_MCR2_ADDR 0x24 /* serial port2MODEM controls register address */ +#define REG_LSR2_ADDR 0x25 /* serial port2line status register address */ +#define REG_MSR2_ADDR 0x26 /* serial port2address of MODEM status register */ +#define REG_SCR2_ADDR 0x27 /* serial port2the user can define the register address */ +#define REG_DLL2_ADDR 0x20 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM2_ADDR 0x21 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port3 register address */ + +#define REG_RBR3_ADDR 0x30 /* serial port3receive buffer register address */ +#define REG_THR3_ADDR 0x30 /* serial port3send hold register address */ +#define REG_IER3_ADDR 0x31 /* serial port3interrupt enable register address */ +#define REG_IIR3_ADDR 0x32 /* serial port3interrupt identifies register address */ +#define REG_FCR3_ADDR 0x32 /* serial port3FIFO controls register address */ +#define REG_LCR3_ADDR 0x33 /* serial port3circuit control register address */ +#define REG_MCR3_ADDR 0x34 /* serial port3MODEM controls register address */ +#define REG_LSR3_ADDR 0x35 /* serial port3line status register address */ +#define REG_MSR3_ADDR 0x36 /* serial port3address of MODEM status register */ +#define REG_SCR3_ADDR 0x37 /* serial port3the user can define the register address */ +#define REG_DLL3_ADDR 0x30 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM3_ADDR 0x31 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port4 register address */ + +#define REG_RBR4_ADDR 0x08 /* serial port4receive buffer register address */ +#define REG_THR4_ADDR 0x08 /* serial port4send hold register address */ +#define REG_IER4_ADDR 0x09 /* serial port4interrupt enable register address */ +#define REG_IIR4_ADDR 0x0A /* serial port4interrupt identifies register address */ +#define REG_FCR4_ADDR 0x0A /* serial port4FIFO controls register address */ +#define REG_LCR4_ADDR 0x0B /* serial port4circuit control register address */ +#define REG_MCR4_ADDR 0x0C /* serial port4MODEM controls register address */ +#define REG_LSR4_ADDR 0x0D /* serial port4line status register address */ +#define REG_MSR4_ADDR 0x0E /* serial port4address of MODEM status register */ +#define REG_SCR4_ADDR 0x0F /* serial port4the user can define the register address */ +#define REG_DLL4_ADDR 0x08 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM4_ADDR 0x09 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port5 register address */ + +#define REG_RBR5_ADDR 0x18 /* serial port5receive buffer register address */ +#define REG_THR5_ADDR 0x18 /* serial port5send hold register address */ +#define REG_IER5_ADDR 0x19 /* serial port5interrupt enable register address */ +#define REG_IIR5_ADDR 0x1A /* serial port5interrupt identifies register address */ +#define REG_FCR5_ADDR 0x1A /* serial port5FIFO controls register address */ +#define REG_LCR5_ADDR 0x1B /* serial port5circuit control register address */ +#define REG_MCR5_ADDR 0x1C /* serial port5MODEM controls register address */ +#define REG_LSR5_ADDR 0x1D /* serial port5line status register address */ +#define REG_MSR5_ADDR 0x1E /* serial port5address of MODEM status register */ +#define REG_SCR5_ADDR 0x1F /* serial port5the user can define the register address */ +#define REG_DLL5_ADDR 0x18 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM5_ADDR 0x19 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port6 register address */ + +#define REG_RBR6_ADDR 0x28 /* serial port6receive buffer register address */ +#define REG_THR6_ADDR 0x28 /* serial port6send hold register address */ +#define REG_IER6_ADDR 0x29 /* serial port6interrupt enable register address */ +#define REG_IIR6_ADDR 0x2A /* serial port6interrupt identifies register address */ +#define REG_FCR6_ADDR 0x2A /* serial port6FIFO controls register address */ +#define REG_LCR6_ADDR 0x2B /* serial port6circuit control register address */ +#define REG_MCR6_ADDR 0x2C /* serial port6MODEM controls register address */ +#define REG_LSR6_ADDR 0x2D /* serial port6line status register address */ +#define REG_MSR6_ADDR 0x2E /* serial port6address of MODEM status register */ +#define REG_SCR6_ADDR 0x2F /* serial port6the user can define the register address */ +#define REG_DLL6_ADDR 0x28 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM6_ADDR 0x29 /* Baud rate divisor latch high 8-bit byte address */ + + +/* CH438serial port7 register address */ + +#define REG_RBR7_ADDR 0x38 /* serial port7receive buffer register address */ +#define REG_THR7_ADDR 0x38 /* serial port7send hold register address */ +#define REG_IER7_ADDR 0x39 /* serial port7interrupt enable register address */ +#define REG_IIR7_ADDR 0x3A /* serial port7interrupt identifies register address */ +#define REG_FCR7_ADDR 0x3A /* serial port7FIFO controls register address */ +#define REG_LCR7_ADDR 0x3B /* serial port7circuit control register address */ +#define REG_MCR7_ADDR 0x3C /* serial port7MODEM controls register address */ +#define REG_LSR7_ADDR 0x3D /* serial port7line status register address */ +#define REG_MSR7_ADDR 0x3E /* serial port7address of MODEM status register */ +#define REG_SCR7_ADDR 0x3F /* serial port7the user can define the register address */ +#define REG_DLL7_ADDR 0x38 /* Baud rate divisor latch low 8-bit byte address */ +#define REG_DLM7_ADDR 0x39 /* Baud rate divisor latch high 8-bit byte address */ + + +#define REG_SSR_ADDR 0x4F /* pecial status register address */ + + +/* IER register bit */ + +#define BIT_IER_RESET 0x80 /* The bit is 1 soft reset serial port */ +#define BIT_IER_LOWPOWER 0x40 /* The bit is 1 close serial port internal reference clock */ +#define BIT_IER_SLP 0x20 /* serial port0 is SLP, 1 close clock vibrator */ +#define BIT_IER1_CK2X 0x20 /* serial port1 is CK2X, 1 force the external clock signal after 2 times as internal */ +#define BIT_IER_IEMODEM 0x08 /* The bit is 1 allows MODEM input status to interrupt */ +#define BIT_IER_IELINES 0x04 /* The bit is 1 allow receiving line status to be interrupted */ +#define BIT_IER_IETHRE 0x02 /* The bit is 1 allows the send hold register to break in mid-air */ +#define BIT_IER_IERECV 0x01 /* The bit is 1 allows receiving data interrupts */ + +/* IIR register bit */ + +#define BIT_IIR_FIFOENS1 0x80 +#define BIT_IIR_FIFOENS0 0x40 /* The two is 1 said use FIFO */ + +/* Interrupt type: 0001 has no interrupt, 0110 receiving line status is interrupted, 0100 receiving data can be interrupted, +1100 received data timeout interrupt, 0010THR register air interrupt, 0000MODEM input change interrupt */ +#define BIT_IIR_IID3 0x08 +#define BIT_IIR_IID2 0x04 +#define BIT_IIR_IID1 0x02 +#define BIT_IIR_NOINT 0x01 + +/* FCR register bit */ + +/* Trigger point: 00 corresponds to 1 byte, 01 corresponds to 16 bytes, 10 corresponds to 64 bytes, 11 corresponds to 112 bytes */ +#define BIT_FCR_RECVTG1 0x80 /* Set the trigger point for FIFO interruption and automatic hardware flow control */ +#define BIT_FCR_RECVTG0 0x40 /* Set the trigger point for FIFO interruption and automatic hardware flow control */ + +#define BIT_FCR_TFIFORST 0x04 /* The bit is 1 empty the data sent in FIFO */ +#define BIT_FCR_RFIFORST 0x02 /* The bit is 1 empty the data sent in FIFO */ +#define BIT_FCR_FIFOEN 0x01 /* The bit is 1 use FIFO, 0 disable FIFO */ + +/* LCR register bit */ + +#define BIT_LCR_DLAB 0x80 /* To access DLL, DLM, 0 to access RBR/THR/IER */ +#define BIT_LCR_BREAKEN 0x40 /* 1 forces a BREAK line interval*/ + +/* Set the check format: when PAREN is 1, 00 odd check, 01 even check, 10 MARK (set 1), 11 blank (SPACE, clear 0) */ +#define BIT_LCR_PARMODE1 0x20 /* Sets the parity bit format */ +#define BIT_LCR_PARMODE0 0x10 /* Sets the parity bit format */ + +#define BIT_LCR_PAREN 0x08 /* A value of 1 allows you to generate and receive parity bits when sending */ +#define BIT_LCR_STOPBIT 0x04 /* If is 1, then two stop bits, is 0, a stop bit */ + +/* Set word length: 00 for 5 data bits, 01 for 6 data bits, 10 for 7 data bits and 11 for 8 data bits */ +#define BIT_LCR_WORDSZ1 0x02 /* Set the word length length */ +#define BIT_LCR_WORDSZ0 0x01 + +/* MCR register bit */ + +#define BIT_MCR_AFE 0x20 /* For 1 allows automatic flow control of CTS and RTS hardware */ +#define BIT_MCR_LOOP 0x10 /* Is the test mode of 1 enabling internal loop */ +#define BIT_MCR_OUT2 0x08 /* 1 Allows an interrupt request for the serial port output */ +#define BIT_MCR_OUT1 0x04 /* The MODEM control bit defined for the user */ +#define BIT_MCR_RTS 0x02 /* The bit is 1 RTS pin output effective */ +#define BIT_MCR_DTR 0x01 /* The bit is 1 DTR pin output effective */ + +/* LSR register bit */ + +#define BIT_LSR_RFIFOERR 0x80 /* 1 said There is at least one error in receiving FIFO */ +#define BIT_LSR_TEMT 0x40 /* 1 said THR and TSR are empty */ +#define BIT_LSR_THRE 0x20 /* 1 said THR is empty*/ +#define BIT_LSR_BREAKINT 0x10 /* The bit is 1 said the BREAK line interval was detected*/ +#define BIT_LSR_FRAMEERR 0x08 /* The bit is 1 said error reading data frame */ +#define BIT_LSR_PARERR 0x04 /* The bit is 1 said parity error */ +#define BIT_LSR_OVERR 0x02 /* 1 said receive FIFO buffer overflow */ +#define BIT_LSR_DATARDY 0x01 /* The bit is 1 said receive data received in FIFO */ + +/* MSR register bit */ + +#define BIT_MSR_DCD 0x80 /* The bit is 1 said DCD pin effective */ +#define BIT_MSR_RI 0x40 /* The bit is 1 said RI pin effective */ +#define BIT_MSR_DSR 0x20 /* The bit is 1 said DSR pin effective */ +#define BIT_MSR_CTS 0x10 /* The bit is 1 said CTS pin effective */ +#define BIT_MSR_DDCD 0x08 /* The bit is 1 said DCD pin The input state has changed */ +#define BIT_MSR_TERI 0x04 /* The bit is 1 said RI pin The input state has changed */ +#define BIT_MSR_DDSR 0x02 /* The bit is 1 said DSR pin The input state has changed */ +#define BIT_MSR_DCTS 0x01 /* The bit is 1 said CTS pin The input state has changed */ + +/* Interrupt status code */ + +#define INT_NOINT 0x01 /* There is no interruption */ +#define INT_THR_EMPTY 0x02 /* THR empty interruption */ +#define INT_RCV_OVERTIME 0x0C /* Receive timeout interrupt */ +#define INT_RCV_SUCCESS 0x04 /* Interrupts are available to receive data */ +#define INT_RCV_LINES 0x06 /* Receiving line status interrupted */ +#define INT_MODEM_CHANGE 0x00 /* MODEM input changes interrupt */ + +#define CH438_IIR_FIFOS_ENABLED 0xC0 /* use FIFO */ + +#define Fpclk 1843200 /* Define the internal clock frequency*/ + +/* For Interrupt */ +unsigned char CH438_CheckIIR(uint32_t iiraddr); /* Config serial port1interrupt identifies register function */ +void CH438_INTConfig(uint32_t ieraddr,uint32_t iiraddr,uint32_t mcraddr); /* Serial interrupt enable function */ +void Disable_Interrupt(void); /* Disable EXTI interrupt*/ +void Config_Interrupt(void); /* Config EXTI interrupt*/ + +/* For RT-Thread Config */ +static void Ch438Irq(void *parameter); +static rt_err_t rt_ch438_configure(struct rt_serial_device *serial, struct serial_configure *cfg); +static rt_err_t rt_ch438_control(struct rt_serial_device *serial, int cmd, void *arg); +static int rt_ch438_putc(struct rt_serial_device *serial, char c); +static int rt_ch438_getc(struct rt_serial_device *serial); +int rt_hw_ch438_init(void); + +int semaphoreChInit(void); + +/* Delay */ +void up_udelay(void); +void up_mdelay(uint32_t time); + +void udelay(unsigned long usecs); +/* CH438 Config */ +static void CH438SetOutput(void); +static void CH438SetInput(void); +static uint8_t ReadCH438Data(uint8_t addr); +static void WriteCH438Data(uint8_t addr, const uint8_t dat); +static void WriteCH438Block(uint8_t mAddr, uint8_t mLen, const uint8_t *mBuf); +static void Ch438UartSend(uint8_t ext_uart_no, const uint8_t *Data, uint16_t Num); +uint8_t CH438UARTRcv(uint8_t ext_uart_no, uint8_t *buf, size_t size); +static void ImxrtCH438Init(void); +static void CH438PortInit(uint8_t ext_uart_no, uint32_t baud_rate); +static int ImxrtCh438WriteData(uint8_t ext_uart_no, const uint8_t *write_buffer, size_t size); +static size_t ImxrtCh438ReadData(uint8_t ext_uart_no, size_t size); +static void Ch438InitDefault(void); + +static int getCh438InterruptStatus(void ); +/* CH438 Test Function */ +void CH438Test(void); +void HC08Test(void); +void ZigBeeTest(void); +void CH438Init(void); +#endif \ No newline at end of file From 252edf1add8daadd3085853683170c6ec194f674 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 10:55:24 +0800 Subject: [PATCH 05/16] =?UTF-8?q?xiuos\Ubiquitous\RT-Thread=5FFusion=5FXiU?= =?UTF-8?q?OS\aiit=5Fboard\xidatong-arm32\applications=EF=BC=9A=201.modify?= =?UTF-8?q?=20this=20file=20to=20avoid=20conflict=200f=20mux=20related=20t?= =?UTF-8?q?o=20lora=20mode=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xidatong-arm32/applications/main.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/applications/main.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/applications/main.c index 4c54c8355..56e528716 100644 --- a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/applications/main.c +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/applications/main.c @@ -13,22 +13,21 @@ #include #include "drv_gpio.h" #include - +#include "fsl_gpio.h" +#include "board/hardware/ch438/ch438.h" /* defined the LED pin: GPIO1_IO9 */ #define LED0_PIN GET_PIN(1,9) - +extern int FrameworkInit(void); int main(void) -{ +{ /* set LED0 pin mode to output */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); rt_kprintf("XIUOS xidatong build %s %s\n",__DATE__,__TIME__); - while (1) - { - rt_pin_write(LED0_PIN, PIN_HIGH); - rt_thread_mdelay(500); - rt_pin_write(LED0_PIN, PIN_LOW); - rt_thread_mdelay(500); - } + FrameworkInit(); + while (1) + { + rt_thread_mdelay(5000); + } } #ifdef BSP_USING_SDRAM From bf9b87a314bf5546a52c4a4dc9a063dab42f5657 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 10:57:55 +0800 Subject: [PATCH 06/16] xiuos\APP_Framework\Framework\connection\4g: (1)Modify the msh instructions in 4G Test function --- APP_Framework/Framework/connection/4g/adapter_4g.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/APP_Framework/Framework/connection/4g/adapter_4g.c b/APP_Framework/Framework/connection/4g/adapter_4g.c index a0a96cd62..765840810 100644 --- a/APP_Framework/Framework/connection/4g/adapter_4g.c +++ b/APP_Framework/Framework/connection/4g/adapter_4g.c @@ -110,7 +110,9 @@ int Adapter4GTest(void) return 0; } -// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, Adapter4GTest, Adapter4GTest, show adapter 4G information); -#ifdef ADD_RTTHREAD_FETURES -MSH_CMD_EXPORT(Adapter4GTestRTThread,a 4G adpter sample); + +#ifdef ADD_RTTHREAD_FETURES +MSH_CMD_EXPORT(Adapter4GTest,a EC200T adpter sample); +#else +SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, Adapter4GTest, Adapter4GTest, show adapter 4G information); #endif \ No newline at end of file From fe21a461a5699fcb4b9d963110ce7f3cb481758d Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 11:04:55 +0800 Subject: [PATCH 07/16] xiuos\APP_Framework\Framework\connection\lora\e220: 1.Add Kconfig files and SConscript files related to e220 --- .../Framework/connection/lora/e220/Kconfig | 4 +- .../Framework/connection/lora/e220/e220.c | 153 +++++++++++++++++- 2 files changed, 152 insertions(+), 5 deletions(-) diff --git a/APP_Framework/Framework/connection/lora/e220/Kconfig b/APP_Framework/Framework/connection/lora/e220/Kconfig index 34e106f47..aec5daab6 100644 --- a/APP_Framework/Framework/connection/lora/e220/Kconfig +++ b/APP_Framework/Framework/connection/lora/e220/Kconfig @@ -39,11 +39,11 @@ if ADD_NUTTX_FETURES config ADAPTER_E220_M0_PATH string "E220 M0 pin device" - default "/dev/gpout0" + default "/dev/gpio0" config ADAPTER_E220_M1_PATH string "E220 M1 pin device" - default "/dev/gpout1" + default "/dev/gpio1" config ADAPTER_E220_DRIVER_EXTUART bool "Using extra uart to support lora" diff --git a/APP_Framework/Framework/connection/lora/e220/e220.c b/APP_Framework/Framework/connection/lora/e220/e220.c index 880ba9e48..ce616269d 100644 --- a/APP_Framework/Framework/connection/lora/e220/e220.c +++ b/APP_Framework/Framework/connection/lora/e220/e220.c @@ -21,7 +21,12 @@ #include #define E220_GATEWAY_ADDRESS 0xFFFF + +#ifdef ADD_RTTHREAD_FETURES +#define E220_CHANNEL 0x02 +#else #define E220_CHANNEL 0x05 +#endif #ifdef AS_LORA_GATEWAY_ROLE #define E220_ADDRESS E220_GATEWAY_ADDRESS @@ -31,7 +36,11 @@ #define E220_ADDRESS ADAPTER_LORA_NET_ROLE_ID #endif +#ifdef ADD_RTTHREAD_FETURES +#define E220_UART_BAUD_RATE 9600 +#else #define E220_UART_BAUD_RATE 115200 +#endif enum E220LoraMode { @@ -265,13 +274,16 @@ static int E220SetRegisterParam(struct Adapter *adapter, uint16 address, uint8 c buffer[10] = 0; //low-cipher ret = PrivWrite(adapter->fd, (void *)buffer, 11); + if(ret < 0){ printf("E220SetRegisterParam send failed %d!\n", ret); } - PrivRead(adapter->fd, buffer, 11); - E220LoraModeConfig(DATA_TRANSFER_MODE); + PrivRead(adapter->fd, buffer, 11); + E220LoraModeConfig(DATA_TRANSFER_MODE); + + PrivTaskDelay(1000); return 0; @@ -337,6 +349,61 @@ static int E220Open(struct Adapter *adapter) return 0; } #else +#ifdef ADD_RTTHREAD_FETURES +static int E220Open(struct Adapter *adapter) +{ + /*step1: open e220 uart port*/ + adapter->fd = PrivOpen(ADAPTER_E220_DRIVER, O_RDWR); + if (adapter->fd < 0) { + printf("E220Open get uart %s fd error\n", ADAPTER_E220_DRIVER); + return -1; + } + + 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; + + /*aiit board use ch438, so it needs more serial configuration*/ +#ifdef ADAPTER_E220_DRIVER_EXTUART + cfg.ext_uart_no = ADAPTER_E220_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); + + + + cfg.serial_baud_rate = E220_UART_BAUD_RATE; + ioctl_cfg.args = &cfg; + + PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); + + ADAPTER_DEBUG("E220Open done\n"); + + return 0; +} +#else static int E220Open(struct Adapter *adapter) { /*step1: open e220 uart port*/ @@ -391,6 +458,7 @@ static int E220Open(struct Adapter *adapter) return 0; } #endif +#endif /** * @description: Close E220 uart function @@ -472,7 +540,7 @@ static int E220Send(struct Adapter *adapter, const void *buf, size_t len) */ static int E220Recv(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); @@ -558,7 +626,46 @@ static void LoraOpen(void) E220Open(adapter); } +MSH_CMD_EXPORT(LoraOpen,Lora open test sample); +#ifdef ADD_RTTHREAD_FETURES +static void LoraRead(void *parameter) +{ + int RevLen; + int i, cnt = 0; + + uint8 buffer[256]; + + memset(buffer, 0, 256); + + struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME); + if (NULL == adapter) { + printf("LoraRead find lora adapter error\n"); + return; + } + + while (1) + { + printf("ready to read lora data\n"); + + RevLen = E220Recv(adapter, buffer, 6); + if (RevLen) { + printf("lora get data %u\n", RevLen); + for (i = 0; i < RevLen; i ++) { + printf("i %u data 0x%x\n", i, buffer[i]); + } + + memset(buffer, 0, 256); + + PrivTaskDelay(1000); + + cnt ++; + E220Send(adapter, &cnt, 1); + } + } +} +MSH_CMD_EXPORT(LoraRead,Lora read test sample); +#else static void LoraRead(void *parameter) { int RevLen; @@ -594,6 +701,8 @@ static void LoraRead(void *parameter) } } } +#endif + #ifdef ADD_XIZI_FETURES static void LoraTest(void) @@ -667,3 +776,41 @@ void E220LoraSend(int argc, char *argv[]) } } #endif + +#ifdef ADD_RTTHREAD_FETURES + +static void LoraReadStart(void) +{ + int ret; + + LoraOpen(); + + rt_thread_t tid= rt_thread_create("LoraReadStart", LoraRead, RT_NULL,2048,10,5); + if(tid!=RT_NULL){ + rt_thread_startup(tid); + }else{ + rt_kprintf("LoraReadStart task_lora_read failed \r\n"); + return; + } + +} +MSH_CMD_EXPORT(LoraReadStart,Lora read task start sample); +#define E22400T_M1_PIN (11U) +#define E22400T_M0_PIN (9U) +static void LoraSend(int argc, char *argv[]) +{ + int8_t cmd[10]={0xFF,0xFF,0x02,0xAA,0XBB,0xCC}; //sned AA BB CC to address 01 channel05 + LoraOpen(); + struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME); + if (NULL == adapter) { + printf("LoraRead find lora adapter error\n"); + return; + } + rt_pin_mode (E22400T_M1_PIN, PIN_MODE_OUTPUT); + rt_pin_mode (E22400T_M0_PIN, PIN_MODE_OUTPUT); + rt_pin_write(E22400T_M1_PIN, PIN_LOW); + rt_pin_write(E22400T_M0_PIN, PIN_HIGH); + E220Send(adapter, cmd, 6); +} +MSH_CMD_EXPORT(LoraSend,Lora send sample); +#endif \ No newline at end of file From 83112073a94ff774295db5b82324ecad9dbee9ae Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 11:07:53 +0800 Subject: [PATCH 08/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\lora=EF=BC=9A=201.test=20function=20has=20been=20modified?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP_Framework/Framework/connection/lora/adapter_lora.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/APP_Framework/Framework/connection/lora/adapter_lora.c b/APP_Framework/Framework/connection/lora/adapter_lora.c index 0051bb487..cf330d37c 100644 --- a/APP_Framework/Framework/connection/lora/adapter_lora.c +++ b/APP_Framework/Framework/connection/lora/adapter_lora.c @@ -907,8 +907,8 @@ static pthread_t lora_client_data_task; int AdapterLoraTest(void) { - struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME); - + struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME); + AdapterDeviceOpen(adapter); //create lora gateway task @@ -962,6 +962,9 @@ int AdapterLoraTest(void) return 0; } +#ifdef ADD_RTTHREAD_FETURES +MSH_CMD_EXPORT(AdapterLoraTest,a Lora adpter sample); +#endif #ifdef ADD_XIZI_FETURES SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, AdapterLoraTest, AdapterLoraTest, show adapter lora information); #endif From c69397a2b7fcdf7a1987a9d75f9ba149e9dbadd8 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 11:12:44 +0800 Subject: [PATCH 09/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\lora=EF=BC=9A=201.test=20function=20has=20been=20modified?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiit_board/xidatong-arm32/board/board.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/board.c b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/board.c index 48db851df..68f13bd1e 100644 --- a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/board.c +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/board.c @@ -1091,7 +1091,15 @@ void rt_hw_board_init() void rt_hw_us_delay(rt_uint32_t usec) { - ; + rt_uint32_t start, now, delta, reload, us_tick; + start = SysTick->VAL; + reload = SysTick->LOAD; + us_tick = SystemCoreClock / 1000000UL; + do { + now = SysTick->VAL; + delta = start > now ? start - now : reload + start - now; + } while(delta < us_tick * usec); + } static int reboot(void) From 0526e73a6a3daa8f502be0bbd8c2b4e27cc451af Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 11:13:13 +0800 Subject: [PATCH 10/16] =?UTF-8?q?xiuos\Ubiquitous\RT-Thread=5FFusion=5FXiU?= =?UTF-8?q?OS\aiit=5Fboard\xidatong-arm32\board=EF=BC=9A=201.add=20kconfig?= =?UTF-8?q?=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aiit_board/xidatong-arm32/board/Kconfig | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/Kconfig b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/Kconfig index c06392967..267083666 100644 --- a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/Kconfig +++ b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/board/Kconfig @@ -229,7 +229,44 @@ menu "Onboard Peripheral Drivers" config BSP_USB1_HOST bool "Enable USB1 Host" default n + + config BSP_USING_RT_THREAD_HC08 + bool "Enable Bluetooth" + default n + menuconfig BSP_USING_CH438 + bool "Enable CH438" + if BSP_USING_CH438 + config CONFIG_CH438_EXTUART0 + bool "Enable CH438_EXTUART0" + default n + config CONFIG_CH438_EXTUART1 + bool "Enable CH438_EXTUART1" + default n + config CONFIG_CH438_EXTUART2 + bool "Enable CH438_EXTUART2" + default n + config CONFIG_CH438_EXTUART3 + bool "Enable CH438_EXTUART3" + default n + config CONFIG_CH438_EXTUART4 + bool "Enable CH438_EXTUART4" + default n + config CONFIG_CH438_EXTUART5 + bool "Enable CH438_EXTUART5" + default n + config CONFIG_CH438_EXTUART6 + bool "Enable CH438_EXTUART6" + default n + config CONFIG_CH438_EXTUART7 + bool "Enable CH438_EXTUART7" + default n + config CH438_INT_PORT + int "ch438 Interrupt Port deafult 3" + range 0 7 + default 3 + endif + menuconfig BSP_USING_ETH bool "Enable Ethernet" select RT_USING_NETDEV From 50b40bcf1fd6307569c3afbc17dcef50e247902a Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Tue, 9 Aug 2022 11:20:33 +0800 Subject: [PATCH 11/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\lora\e220=EF=BC=9A=20Modify=20this=20file=20again,and=20if=20?= =?UTF-8?q?you=20want=20to=20test=20the=20lora=20module,you=20can=20find?= =?UTF-8?q?=20test=20function=20in=20this=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- APP_Framework/Framework/connection/lora/e220/e220.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/APP_Framework/Framework/connection/lora/e220/e220.c b/APP_Framework/Framework/connection/lora/e220/e220.c index ce616269d..6b5ec4ece 100644 --- a/APP_Framework/Framework/connection/lora/e220/e220.c +++ b/APP_Framework/Framework/connection/lora/e220/e220.c @@ -21,7 +21,6 @@ #include #define E220_GATEWAY_ADDRESS 0xFFFF - #ifdef ADD_RTTHREAD_FETURES #define E220_CHANNEL 0x02 #else @@ -281,7 +280,7 @@ static int E220SetRegisterParam(struct Adapter *adapter, uint16 address, uint8 c PrivRead(adapter->fd, buffer, 11); - E220LoraModeConfig(DATA_TRANSFER_MODE); + E220LoraModeConfig(DATA_TRANSFER_MODE); PrivTaskDelay(1000); @@ -392,9 +391,7 @@ static int E220Open(struct Adapter *adapter) PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); - - - cfg.serial_baud_rate = E220_UART_BAUD_RATE; + cfg.serial_baud_rate = E220_UART_BAUD_RATE; ioctl_cfg.args = &cfg; PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); From 1293577e93b81032976ec117709713e438359102 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Mon, 15 Aug 2022 14:02:18 +0800 Subject: [PATCH 12/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\bluetooth=EF=BC=9A=201.modify=20the=20Kconfig=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connection/bluetooth/hc08/Kconfig | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/APP_Framework/Framework/connection/bluetooth/hc08/Kconfig b/APP_Framework/Framework/connection/bluetooth/hc08/Kconfig index 6e1f3f0fe..f7c0e5ec8 100644 --- a/APP_Framework/Framework/connection/bluetooth/hc08/Kconfig +++ b/APP_Framework/Framework/connection/bluetooth/hc08/Kconfig @@ -55,9 +55,30 @@ if ADD_NUTTX_FETURES endif if ADD_RTTHREAD_FETURES - config ADAPTER_HC08_DRIVER - string "HC08 device uart driver path" - default "/dev/uart4" + config ADAPTER_HC08_RECV_BUFFER_SIZE + int "HC08 recv data buffer size" + default "128" + config ADAPTER_HC08_WORK_ROLE string "HC08 work role M(MASTER) or S(SLAVER)" + default "M" + + config ADAPTER_HC08_DRIVER_EXTUART + bool "Using extra uart to support bluetooth" + default n + + config ADAPTER_HC08_DRIVER + string "HC08 device uart driver path" + default "/dev/dev2" + depends on !ADAPTER_HC08_DRIVER_EXTUART + + if ADAPTER_HC08_DRIVER_EXTUART + config ADAPTER_HC08_DRIVER + string "HC08 device extra uart driver path" + default "/dev/dev2" + + config ADAPTER_HC08_DRIVER_EXT_PORT + int "if HC08 device using extuart, choose port" + default "2" + endif endif From b5783ca4c5d9df8c0d722ada949a5ed3473fc1d9 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Mon, 15 Aug 2022 14:04:39 +0800 Subject: [PATCH 13/16] xiuos\APP_Framework\Framework\connection\bluetooth: 1.add code like setting Tuuid and Suuid --- .../connection/bluetooth/hc08/hc08.c | 63 ++++++++++++++++--- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c b/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c index f261d3ba5..bc9e60eab 100644 --- a/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c +++ b/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c @@ -189,6 +189,30 @@ static int Hc08AtConfigure(ATAgentType agent, enum Hc08AtCmd hc08_at_cmd, void * AtSetReplyCharNum(agent, 13); ATOrderSend(agent, REPLY_TIME_OUT, reply, cmd_str); reply_ok_flag = 0; + break; + case HC08_AT_CMD_GET_SUUID: + AtSetReplyCharNum(agent, 13); + ATOrderSend(agent, REPLY_TIME_OUT, reply, HC08_GET_SUUID_CMD); + reply_ok_flag = 0; + break; + case HC08_AT_CMD_SET_SUUID: + luuid = *(unsigned int *)param; + sprintf(cmd_str, HC08_SET_SUUID_CMD, luuid); + AtSetReplyCharNum(agent, 13); + ATOrderSend(agent, REPLY_TIME_OUT, reply, cmd_str); + reply_ok_flag = 0; + break; + case HC08_AT_CMD_GET_TUUID: + AtSetReplyCharNum(agent, 13); + ATOrderSend(agent, REPLY_TIME_OUT, reply, HC08_GET_TUUID_CMD); + reply_ok_flag = 0; + break; + case HC08_AT_CMD_SET_TUUID: + luuid = *(unsigned int *)param; + sprintf(cmd_str, HC08_SET_TUUID_CMD, luuid); + AtSetReplyCharNum(agent, 13); + ATOrderSend(agent, REPLY_TIME_OUT, reply, cmd_str); + reply_ok_flag = 0; break; default: printf("hc08 do not support no.%d cmd\n", hc08_at_cmd); @@ -309,7 +333,8 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) return 0; } -#else + +#else static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) { if (OPE_INT != cmd) { @@ -360,15 +385,19 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) } PrivTaskDelay(500); - + #ifdef ADD_RTTHREAD_FETURES //Step3 : show hc08 device info, hc08_get send "AT+RX" response device info - // char device_info[HC08_RESP_DEFAULT_SIZE * 2] = {0}; - // if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_DEVICE_INFO, NULL, device_info) < 0) { - // return -1; - // } - + char device_info[HC08_RESP_DEFAULT_SIZE * 2] = {0}; + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_DEVICE_INFO, NULL, device_info) < 0) { + return -1; + } + #endif //Step4 : set LUUID、SUUID、TUUID, slave and master need to have same uuid param - luuid = 1234; + #ifdef ADD_RTTHREAD_FETURES + luuid = 1233; + #else + luuid = 1234; + #endif if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_LUUID, &luuid, NULL) < 0) { return -1; } @@ -376,11 +405,29 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_LUUID, NULL, NULL) < 0) { return -1; } + #ifdef ADD_RTTHREAD_FETURES + uint32_t suuid=1233; + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_SUUID, &luuid, NULL) < 0) { + return -1; + } + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_SUUID, NULL, NULL) < 0) { + return -1; + } + uint32_t tuuid=1233; + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_TUUID, &tuuid, NULL) < 0) { + return -1; + } + + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_TUUID, NULL, NULL) < 0) { + return -1; + } + #endif ADAPTER_DEBUG("Hc08 ioctl done\n"); return 0; } + #endif static int Hc08SetAddr(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask) From 48199d551cca3a6cab41285c0db4d3e148aa7573 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Mon, 15 Aug 2022 14:05:40 +0800 Subject: [PATCH 14/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\bluetooth=EF=BC=9A=201.add=20rt-thread=20msh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Framework/connection/bluetooth/adapter_bluetooth.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c b/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c index 03d116376..2f72ba2e2 100644 --- a/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c +++ b/APP_Framework/Framework/connection/bluetooth/adapter_bluetooth.c @@ -82,7 +82,7 @@ int AdapterBlueToothInit(void) int AdapterBlueToothTest(void) { const char *bluetooth_msg = "BT Adapter Test"; - char bluetooth_recv_msg[128]; + char bluetooth_recv_msg[128]={0}; int len; int baud_rate = BAUD_RATE_9600; @@ -92,7 +92,7 @@ int AdapterBlueToothTest(void) AdapterDeviceOpen(adapter); //if bluetooth master and slave have already match, no need to AdapterDeviceControl and AdapterDeviceConnect - AdapterDeviceControl(adapter, OPE_INT, &baud_rate); + AdapterDeviceControl(adapter, OPE_INT, &baud_rate); //AdapterDeviceConnect(adapter, adapter->net_role, NULL, NULL, 0); len = strlen(bluetooth_msg); @@ -100,6 +100,7 @@ int AdapterBlueToothTest(void) while (1) { AdapterDeviceRecv(adapter, bluetooth_recv_msg, 8); printf("bluetooth_recv_msg %s\n", bluetooth_recv_msg); + AdapterDeviceSend(adapter, bluetooth_msg, len); printf("send %s after recv\n", bluetooth_msg); PrivTaskDelay(1000); From 8ccf8875ee489d721a88a3a4d89e23b8309dd128 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Mon, 15 Aug 2022 14:06:59 +0800 Subject: [PATCH 15/16] =?UTF-8?q?xiuos\Ubiquitous\RT-Thread=5FFusion=5FXiU?= =?UTF-8?q?OS\aiit=5Fboard\xidatong-arm32\test=5Fphoto\Bluetooth=EF=BC=9A?= =?UTF-8?q?=201.add=20test=20photo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test_photo/Bluetooth/从机蓝牙初始化成功.PNG | Bin 0 -> 22196 bytes .../Bluetooth/从机蓝牙发送数据成功.PNG | Bin 0 -> 13743 bytes .../Bluetooth/从机蓝牙成功接收数据.PNG | Bin 0 -> 20162 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙初始化成功.PNG create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙发送数据成功.PNG create mode 100644 Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙成功接收数据.PNG diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙初始化成功.PNG b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙初始化成功.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e7adbfa06c96bae11c1b88ab59282442f4820106 GIT binary patch literal 22196 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 F{|{P1uVDZH literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙发送数据成功.PNG b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙发送数据成功.PNG new file mode 100644 index 0000000000000000000000000000000000000000..976075d98533f8f05956e6ea9d2daac674c3f93d GIT binary patch literal 13743 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 CIXGni literal 0 HcmV?d00001 diff --git a/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙成功接收数据.PNG b/Ubiquitous/RT-Thread_Fusion_XiUOS/aiit_board/xidatong-arm32/test_photo/Bluetooth/从机蓝牙成功接收数据.PNG new file mode 100644 index 0000000000000000000000000000000000000000..0f2d0dd94e84012d756f6ab58ec0cb08990bdaff GIT binary patch literal 20162 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 literal 0 HcmV?d00001 From 125a1d1c613169f2453b865e330560956d15fbc2 Mon Sep 17 00:00:00 2001 From: zhujiarui666 Date: Mon, 15 Aug 2022 18:02:59 +0800 Subject: [PATCH 16/16] =?UTF-8?q?xiuos\APP=5FFramework\Framework\connectio?= =?UTF-8?q?n\bluetooth\hc08=EF=BC=9A=201.modify=20uuid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Framework/connection/bluetooth/hc08/hc08.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c b/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c index bc9e60eab..d8cb9a4d5 100644 --- a/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c +++ b/APP_Framework/Framework/connection/bluetooth/hc08/hc08.c @@ -393,12 +393,8 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) } #endif //Step4 : set LUUID、SUUID、TUUID, slave and master need to have same uuid param - #ifdef ADD_RTTHREAD_FETURES - luuid = 1233; - #else - luuid = 1234; - #endif - if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_LUUID, &luuid, NULL) < 0) { + luuid = 1234; + if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_LUUID, &luuid, NULL) < 0) { return -1; } @@ -406,7 +402,7 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) return -1; } #ifdef ADD_RTTHREAD_FETURES - uint32_t suuid=1233; + uint32_t suuid=1234; if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_SUUID, &luuid, NULL) < 0) { return -1; } @@ -414,7 +410,7 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args) if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_SUUID, NULL, NULL) < 0) { return -1; } - uint32_t tuuid=1233; + uint32_t tuuid=1234; if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_TUUID, &tuuid, NULL) < 0) { return -1; }