From 8e2baf1ee30702ffb77399bb34fe20117f2883a4 Mon Sep 17 00:00:00 2001 From: zhuruohai <1132370844@qq.com> Date: Wed, 26 Feb 2025 09:42:17 +0800 Subject: [PATCH] Implemented adapter device for E22-400T30S --- .../Framework/connection/lora/Makefile | 5 + .../Framework/connection/lora/adapter_lora.c | 3 + .../Framework/connection/lora/e22/Kconfig | 33 +++++ .../Framework/connection/lora/e22/Makefile | 6 + .../Framework/connection/lora/e22/SConscript | 10 ++ .../Framework/connection/lora/e22/e22.c | 125 +++++++++++++++++- .../lora-radio-tester/lora-radio-tester.c | 2 - 7 files changed, 179 insertions(+), 5 deletions(-) create mode 100644 APP_Framework/Framework/connection/lora/e22/SConscript diff --git a/APP_Framework/Framework/connection/lora/Makefile b/APP_Framework/Framework/connection/lora/Makefile index d35c25340..c8f38bf4b 100644 --- a/APP_Framework/Framework/connection/lora/Makefile +++ b/APP_Framework/Framework/connection/lora/Makefile @@ -16,6 +16,11 @@ ifeq ($(CONFIG_ADD_XIZI_FEATURES),y) ifeq ($(CONFIG_ADAPTER_E220),y) SRC_DIR += e220 endif + + ifeq ($(CONFIG_ADAPTER_E22),y) + SRC_DIR += e22 + endif + include $(KERNEL_ROOT)/compiler.mk endif diff --git a/APP_Framework/Framework/connection/lora/adapter_lora.c b/APP_Framework/Framework/connection/lora/adapter_lora.c index c6166b9a1..1035244df 100644 --- a/APP_Framework/Framework/connection/lora/adapter_lora.c +++ b/APP_Framework/Framework/connection/lora/adapter_lora.c @@ -882,6 +882,7 @@ int AdapterLoraInit(void) #ifdef ADAPTER_SX1278 AdapterProductInfoType product_info = Sx1278Attach(adapter); + printf("AdapterLoraInit sx1278 success\n"); if (!product_info) { printf("AdapterLoraInit sx1278 attach error\n"); PrivFree(adapter); @@ -896,6 +897,7 @@ int AdapterLoraInit(void) #ifdef ADAPTER_E220 AdapterProductInfoType product_info = E220Attach(adapter); + printf("AdapterLoraInit e220 success\n"); if (!product_info) { printf("AdapterLoraInit e220 attach error\n"); PrivFree(adapter); @@ -909,6 +911,7 @@ int AdapterLoraInit(void) #ifdef ADAPTER_E22 AdapterProductInfoType product_info = E22Attach(adapter); + printf("AdapterLoraInit e22 success\n"); if (!product_info) { printf("AdapterLoraInit e22 attach error\n"); PrivFree(adapter); diff --git a/APP_Framework/Framework/connection/lora/e22/Kconfig b/APP_Framework/Framework/connection/lora/e22/Kconfig index 81e0cfc53..3d33f7b43 100644 --- a/APP_Framework/Framework/connection/lora/e22/Kconfig +++ b/APP_Framework/Framework/connection/lora/e22/Kconfig @@ -32,3 +32,36 @@ if ADD_NUTTX_FEATURES endif endif + +if ADD_XIZI_FEATURES + config ADAPTER_E22_M0 + int "E22 M0 pin number" + default "32" + + config ADAPTER_E22_M1 + int "E22 M1 pin number" + default "33" + + config ADAPTER_E22_PIN_DRIVER + string "E22 device pin driver path" + default "/dev/pin_dev" + + 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/uart2_dev2" + 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 aee122136..98dbcd3e2 100644 --- a/APP_Framework/Framework/connection/lora/e22/Makefile +++ b/APP_Framework/Framework/connection/lora/e22/Makefile @@ -5,3 +5,9 @@ ifeq ($(CONFIG_ADD_NUTTX_FEATURES),y) include $(APPDIR)/Application.mk endif + +ifeq ($(CONFIG_ADD_XIZI_FEATURES),y) + SRC_FILES := e22.c + include $(KERNEL_ROOT)/compiler.mk + +endif \ No newline at end of file diff --git a/APP_Framework/Framework/connection/lora/e22/SConscript b/APP_Framework/Framework/connection/lora/e22/SConscript new file mode 100644 index 000000000..f7a5c455b --- /dev/null +++ b/APP_Framework/Framework/connection/lora/e22/SConscript @@ -0,0 +1,10 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = [] +if GetDepend(['ADAPTER_E22']): + src += ['e22.c'] +group = DefineGroup('connection lora e22', src, depend = [], CPPPATH = [cwd]) + +Return('group') \ No newline at end of file diff --git a/APP_Framework/Framework/connection/lora/e22/e22.c b/APP_Framework/Framework/connection/lora/e22/e22.c index 4cf16f88f..0d307a588 100644 --- a/APP_Framework/Framework/connection/lora/e22/e22.c +++ b/APP_Framework/Framework/connection/lora/e22/e22.c @@ -46,6 +46,7 @@ enum E22LoraMode * @param mode Lora working mode * @return NULL */ +#ifdef ADD_NUTTX_FEATURES static void E22LoraModeConfig(enum E22LoraMode mode) { int m0_fd, m1_fd; @@ -106,7 +107,88 @@ static void E22LoraModeConfig(enum E22LoraMode mode) //delay 20ms , wait mode switch done PrivTaskDelay(20); } +#else +static void E22LoraModeConfig(enum E22LoraMode mode) +{ + //delay 1s , wait AUX ready + PrivTaskDelay(1000); + + int pin_fd; + pin_fd = PrivOpen(ADAPTER_E22_PIN_DRIVER, O_RDWR); + if (pin_fd < 0) { + printf("open %s error\n", ADAPTER_E22_PIN_DRIVER); + return; + } + //Step1: config M0 and M1 GPIO + struct PinParam pin_param; + pin_param.cmd = GPIO_CONFIG_MODE; + pin_param.mode = GPIO_CFG_OUTPUT; + pin_param.pin = ADAPTER_E22_M0; + + struct PrivIoctlCfg ioctl_cfg; + ioctl_cfg.ioctl_driver_type = PIN_TYPE; + ioctl_cfg.args = &pin_param; + PrivIoctl(pin_fd, OPE_CFG, &ioctl_cfg); + + pin_param.pin = ADAPTER_E22_M1; + ioctl_cfg.args = &pin_param; + PrivIoctl(pin_fd, OPE_CFG, &ioctl_cfg); + + //Step2 : set M0 and M1 high or low + struct PinStat pin_stat; + + switch (mode) + { + case DATA_TRANSFER_MODE: + pin_stat.pin = ADAPTER_E22_M1; + pin_stat.val = GPIO_LOW; + PrivWrite(pin_fd, &pin_stat, 1); + + pin_stat.pin = ADAPTER_E22_M0; + pin_stat.val = GPIO_LOW; + PrivWrite(pin_fd, &pin_stat, 1); + break; + + case WOR_SEND_MODE: + pin_stat.pin = ADAPTER_E22_M1; + pin_stat.val = GPIO_LOW; + PrivWrite(pin_fd, &pin_stat, 1); + + pin_stat.pin = ADAPTER_E22_M0; + pin_stat.val = GPIO_HIGH; + PrivWrite(pin_fd, &pin_stat, 1); + break; + + case CONFIGURE_MODE: + pin_stat.pin = ADAPTER_E22_M1; + pin_stat.val = GPIO_HIGH; + PrivWrite(pin_fd, &pin_stat, 1); + + pin_stat.pin = ADAPTER_E22_M0; + pin_stat.val = GPIO_LOW; + PrivWrite(pin_fd, &pin_stat, 1); + break; + + case SLEEP_MODE: + pin_stat.pin = ADAPTER_E22_M1; + pin_stat.val = GPIO_HIGH; + PrivWrite(pin_fd, &pin_stat, 1); + + pin_stat.pin = ADAPTER_E22_M0; + pin_stat.val = GPIO_HIGH; + PrivWrite(pin_fd, &pin_stat, 1); + break; + default: + break; + } + + PrivClose(pin_fd); + + //delay 20ms , wait mode switch done + PrivTaskDelay(20); +} +#endif /** * @description: Switch baud rate to register bit * @param baud_rate - baud_rate @@ -204,7 +286,6 @@ static int E22SetRegisterParam(struct Adapter *adapter, uint16 address, uint8 ch E22LoraModeConfig(DATA_TRANSFER_MODE); PrivTaskDelay(1000); - return 0; } @@ -255,6 +336,7 @@ static int E22GetRegisterParam(uint8 *buf) */ static int E22Open(struct Adapter *adapter) { + /*step1: open e22 uart port*/ adapter->fd = PrivOpen(ADAPTER_E22_DRIVER, O_RDWR); if (adapter->fd < 0) { @@ -295,13 +377,13 @@ static int E22Open(struct Adapter *adapter) 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; + ioctl_cfg.args = &cfg; PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg); @@ -513,6 +595,7 @@ static void LoraRead(void *parameter) } } +#ifdef ADD_NUTTX_FEATURES void E22LoraReceive(void) { int ret; @@ -546,3 +629,39 @@ void E22LoraSend(int argc, char *argv[]) E22Close(adapter); } } +#endif + +#ifdef ADD_XIZI_FEATURES +static void LoraTest(void) +{ + int ret; + + LoraOpen(); + + int task_lora_read = KTaskCreate("task_lora_read", LoraRead, NONE, 2048, 10); + ret = StartupKTask(task_lora_read); + if (ret != EOK) { + KPrintf("StartupKTask task_lora_read failed .\n"); + return; + } +} +// PRIV_SHELL_CMD_FUNCTION(LoraTest, a lora test init sample, PRIV_SHELL_CMD_MAIN_ATTR); + +static void LoraSend(int argc, char *argv[]) +{ + struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME); + if (NULL == adapter) { + printf("LoraRead find lora adapter error\n"); + return; + } + + char Msg[256] = {0}; + + if (argc == 2) { + strncpy(Msg, argv[1], 256); + + E22Send(adapter, Msg, strlen(Msg)); + } +} +// PRIV_SHELL_CMD_FUNCTION(LoraSend, a lora test send sample, PRIV_SHELL_CMD_MAIN_ATTR); +#endif diff --git a/APP_Framework/lib/lorawan/lora_radio_driver/samples/lora-radio-tester/lora-radio-tester.c b/APP_Framework/lib/lorawan/lora_radio_driver/samples/lora-radio-tester/lora-radio-tester.c index f169040f4..bc9cd50b5 100644 --- a/APP_Framework/lib/lorawan/lora_radio_driver/samples/lora-radio-tester/lora-radio-tester.c +++ b/APP_Framework/lib/lorawan/lora_radio_driver/samples/lora-radio-tester/lora-radio-tester.c @@ -371,8 +371,6 @@ static void radio_send() { false // CRC enabled or not ); - Radio.StartCad(); - Radio.SetTxConfig( MODEM_LORA, // Modem type (LoRa) lora_radio_test_paras.txpower, // Transmission power