add e22 support for edu-riscv64 on nuttx

This commit is contained in:
wgzAIIT 2022-12-19 18:05:01 +08:00
parent d8795bb244
commit a5231d5f43
4 changed files with 82 additions and 38 deletions

View File

@ -7,7 +7,7 @@ config ADAPTER_E220
default n default n
config ADAPTER_E22 config ADAPTER_E22
bool "Using lora adapter device E22-400T33D" bool "Using lora adapter device E22-400T30s"
default n default n
choice choice

View File

@ -1,11 +1,7 @@
config ADAPTER_LORA_E22 config ADAPTER_LORA_E22
string "E22-400T33D adapter name" string "E22-400T30S adapter name"
default "e22" default "e22"
if ADD_XIZI_FETURES
endif
if ADD_NUTTX_FETURES if ADD_NUTTX_FETURES
config ADAPTER_E22_M0_PATH config ADAPTER_E22_M0_PATH
@ -16,13 +12,23 @@ if ADD_NUTTX_FETURES
string "E22 M1 pin device" string "E22 M1 pin device"
default "/dev/gpio1" default "/dev/gpio1"
config ADAPTER_E22_DRIVER_EXTUART
bool "Using extra uart to support lora"
default n
config ADAPTER_E22_DRIVER config ADAPTER_E22_DRIVER
string "E22 device uart driver path" string "E22 device uart driver path"
default "/dev/ttyS3" 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
if ADD_RTTHREAD_FETURES
endif endif

View File

@ -49,6 +49,7 @@ enum E22LoraMode
static void E22LoraModeConfig(enum E22LoraMode mode) static void E22LoraModeConfig(enum E22LoraMode mode)
{ {
int m0_fd, m1_fd; int m0_fd, m1_fd;
char value0, value1;
//delay 1s , wait AUX ready //delay 1s , wait AUX ready
PrivTaskDelay(1000); PrivTaskDelay(1000);
@ -68,23 +69,31 @@ static void E22LoraModeConfig(enum E22LoraMode mode)
switch (mode) switch (mode)
{ {
case DATA_TRANSFER_MODE: case DATA_TRANSFER_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); value1 = '0';
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); value0 = '0';
PrivWrite(m1_fd, &value1, 1);
PrivWrite(m0_fd, &value0, 1);
break; break;
case WOR_SEND_MODE: case WOR_SEND_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW); value1 = '0';
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); value0 = '1';
PrivWrite(m1_fd, &value1, 1);
PrivWrite(m0_fd, &value0, 1);
break; break;
case CONFIGURE_MODE: case CONFIGURE_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); value1 = '1';
PrivIoctl(m0_fd, GPIOC_WRITE,(unsigned long)GPIO_LOW); value0 = '0';
PrivWrite(m1_fd, &value1, 1);
PrivWrite(m0_fd, &value0, 1);
break; break;
case SLEEP_MODE: case SLEEP_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); value1 = '1';
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH); value0 = '1';
PrivWrite(m1_fd, &value1, 1);
PrivWrite(m0_fd, &value0, 1);
break; break;
default: default:
@ -246,8 +255,6 @@ static int E22GetRegisterParam(uint8 *buf)
*/ */
static int E22Open(struct Adapter *adapter) static int E22Open(struct Adapter *adapter)
{ {
int ret = 0;
struct termios cfg;
/*step1: open e22 uart port*/ /*step1: open e22 uart port*/
adapter->fd = PrivOpen(ADAPTER_E22_DRIVER, O_RDWR); adapter->fd = PrivOpen(ADAPTER_E22_DRIVER, O_RDWR);
if (adapter->fd < 0) { if (adapter->fd < 0) {
@ -255,22 +262,53 @@ static int E22Open(struct Adapter *adapter)
return -1; return -1;
} }
tcgetattr(adapter->fd, &cfg); struct SerialDataCfg cfg;
cfsetspeed(&cfg, BAUD_RATE_9600); memset(&cfg, 0 ,sizeof(struct SerialDataCfg));
tcsetattr(adapter->fd, TCSANOW, &cfg);
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); 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); PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg);
tcsetattr(adapter->fd, TCSANOW, &cfg);
ADAPTER_DEBUG("E22Open done\n"); ADAPTER_DEBUG("E22Open done\n");
return 0; return 0;
} }
/** /**
* @description: Close E22 uart function * @description: Close E22 uart function
* @param adapter - Lora device pointer * @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) 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); uint8 *recv_buf = PrivMalloc(len);