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
config ADAPTER_E22
bool "Using lora adapter device E22-400T33D"
bool "Using lora adapter device E22-400T30s"
default n
choice

View File

@ -1,11 +1,7 @@
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
@ -16,13 +12,23 @@ if ADD_NUTTX_FETURES
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"
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
if ADD_RTTHREAD_FETURES
endif

View File

@ -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);