fix i2c errors and add sensor interface.

This commit is contained in:
TXuian
2022-09-01 03:02:37 -07:00
1520 changed files with 403842 additions and 25537 deletions

View File

@@ -32,6 +32,7 @@ extern int Ps5308Pm1_0Init(void);
extern int Ps5308Pm2_5Init(void);
extern int Ps5308Pm10Init(void);
extern int Zg09Co2Init(void);
extern int G8sCo2Init(void);
extern int As830Ch4Init(void);
extern int Tb600bIaq10IaqInit(void);
extern int Tb600bTvoc10TvocInit(void);
@@ -106,6 +107,10 @@ static struct InitDesc sensor_desc[] =
{ "zg09_co2", Zg09Co2Init },
#endif
#ifdef SENSOR_G8S
{ "g8s_co2", G8sCo2Init },
#endif
#ifdef SENSOR_QS_FX
{ "qs_fx_wind_direction", QsFxWindDirectionInit },
#endif

View File

@@ -22,6 +22,11 @@ ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
ifeq ($(CONFIG_APPLICATION_SENSOR_CO2_ZG09), y)
CSRCS += co2_zg09.c
endif
ifeq ($(CONFIG_APPLICATION_SENSOR_CO2_G8S), y)
CSRCS += co2_g8s.c
endif
ifeq ($(CONFIG_APPLICATION_SENSOR_PM1_0_PS5308), y)
CSRCS += pm1_0_ps5308.c

View File

@@ -17,8 +17,10 @@
* @author AIIT XUOS Lab
* @date 2021.12.23
*/
#include <user_api.h>
//
#ifdef ADD_XIZI_FETURES
# include <user_api.h>
#endif
#include <sensor.h>
/**

View File

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

View File

@@ -3,13 +3,19 @@ config ADAPTER_4G_EC200T
default "ec200t"
if ADD_XIZI_FETURES
config ADAPTER_EC200T_PWRKEY
int "EC200T PWRKEY pin number"
default "97"
config ADAPTER_EC200T_USING_PWRKEY
bool "EC200T using PWRKEY pin number"
default n
config ADAPTER_EC200T_PIN_DRIVER
string "EC200T device pin driver path"
default "/dev/pin_dev"
if ADAPTER_EC200T_USING_PWRKEY
config ADAPTER_EC200T_PWRKEY
int "EC200T PWRKEY pin number"
default "97"
config ADAPTER_EC200T_PIN_DRIVER
string "EC200T device pin driver path"
default "/dev/pin_dev"
endif
config ADAPTER_EC200T_DRIVER_EXTUART
bool "Using extra uart to support 4G"
@@ -35,7 +41,6 @@ if ADD_NUTTX_FETURES
config ADAPTER_EC200T_DRIVER
string "EC200T device uart driver path"
default "/dev/ttyS8"
endif
if ADD_RTTHREAD_FETURES

View File

@@ -38,14 +38,9 @@
#define TRY_TIMES 10
#ifdef ADD_NUTTX_FETURES
static void Ec200tPowerSet(void){ return; }
#else
#ifdef ADD_RTTHREAD_FETURES
static void Ec200tPowerSet(void){ return; }
#else
static void Ec200tPowerSet(void)
{
static void Ec200tPowerSet(void)
{
#ifdef ADAPTER_EC200T_USING_PWRKEY
int pin_fd;
pin_fd = PrivOpen(ADAPTER_EC200T_PIN_DRIVER, O_RDWR);
if (pin_fd < 0) {
@@ -76,9 +71,8 @@ static void Ec200tPowerSet(void){ return; }
PrivClose(pin_fd);
PrivTaskDelay(10000);
}
#endif
#endif
}
static int Ec200tOpen(struct Adapter *adapter)
{
@@ -148,7 +142,6 @@ out:
return ret;
}
#ifdef ADD_NUTTX_FETURES
static int Ec200tIoctl(struct Adapter *adapter, int cmd, void *args){ return 0;}
#else
@@ -174,6 +167,7 @@ static int Ec200tIoctl(struct Adapter *adapter, int cmd, void *args)
serial_cfg.serial_bit_order = STOP_BITS_1;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_EC200T_DRIVER_EXT_PORT
serial_cfg.is_ext_uart = 1;
serial_cfg.ext_uart_no = ADAPTER_EC200T_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -183,7 +177,6 @@ static int Ec200tIoctl(struct Adapter *adapter, int cmd, void *args)
ioctl_cfg.args = &serial_cfg;
PrivIoctl(adapter->fd, OPE_INT, &ioctl_cfg);
Ec200tPowerSet();
return 0;

View File

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

View File

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

View File

@@ -21,32 +21,32 @@
#include <adapter.h>
#include <at_agent.h>
#define HC08_DETECT_CMD "AT"
#define HC08_DEFAULT_CMD "AT+DEFAULT"
#define HC08_RESET_CMD "AT+RESET"
#define HC08_CLEAR_CMD "AT+CLEAR"
#define HC08_DETECT_CMD "AT"
#define HC08_DEFAULT_CMD "AT+DEFAULT"
#define HC08_RESET_CMD "AT+RESET"
#define HC08_CLEAR_CMD "AT+CLEAR"
#define HC08_GET_DEVICE_INFO "AT+RX"
#define HC08_GET_BAUDRATE_CMD "AT+BAUD=?"
#define HC08_SET_BAUDRATE_CMD "AT+BAUD=%u"
#define HC08_GET_BAUDRATE_CMD "AT+BAUD=?"
#define HC08_SET_BAUDRATE_CMD "AT+BAUD=%u"
#define HC08_GET_CONNECTABLE "AT+CONT=?"
#define HC08_SET_CONNECTABLE "AT+CONT=%s"
#define HC08_GET_ROLE_CMD "AT+ROLE=?"
#define HC08_SET_ROLE_CMD "AT+ROLE=%s"
#define HC08_GET_ADDR_CMD "AT+ADDR=?"
#define HC08_SET_ADDR_CMD "AT+ADDR=%s"
#define HC08_GET_NAME_CMD "AT+NAME=%s"
#define HC08_SET_NAME_CMD "AT+NAME=?"
#define HC08_GET_LUUID_CMD "AT+LUUID=?"
#define HC08_SET_LUUID_CMD "AT+LUUID=%u"
#define HC08_GET_SUUID_CMD "AT+SUUID=?"
#define HC08_SET_SUUID_CMD "AT+SUUID=%u"
#define HC08_GET_TUUID_CMD "AT+TUUID=?"
#define HC08_SET_TUUID_CMD "AT+TUUID=%u"
#define HC08_GET_ROLE_CMD "AT+ROLE=?"
#define HC08_SET_ROLE_CMD "AT+ROLE=%s"
#define HC08_GET_ADDR_CMD "AT+ADDR=?"
#define HC08_SET_ADDR_CMD "AT+ADDR=%s"
#define HC08_GET_NAME_CMD "AT+NAME=%s"
#define HC08_SET_NAME_CMD "AT+NAME=?"
#define HC08_GET_LUUID_CMD "AT+LUUID=?"
#define HC08_SET_LUUID_CMD "AT+LUUID=%u"
#define HC08_GET_SUUID_CMD "AT+SUUID=?"
#define HC08_SET_SUUID_CMD "AT+SUUID=%u"
#define HC08_GET_TUUID_CMD "AT+TUUID=?"
#define HC08_SET_TUUID_CMD "AT+TUUID=%u"
#define HC08_OK_RESP "OK"
#define HC08_OK_RESP "OK"
#define HC08_CMD_STR_DEFAULT_SIZE 64
#define HC08_CMD_STR_DEFAULT_SIZE 64
#define HC08_RESP_DEFAULT_SIZE 64
enum Hc08AtCmd
@@ -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);
@@ -239,6 +263,7 @@ static int Hc08Open(struct Adapter *adapter)
serial_cfg.serial_bit_order = STOP_BITS_1;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_HC08_DRIVER_EXT_PORT
serial_cfg.is_ext_uart = 1;
serial_cfg.ext_uart_no = ADAPTER_HC08_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -309,7 +334,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) {
@@ -330,6 +356,7 @@ static int Hc08Ioctl(struct Adapter *adapter, int cmd, void *args)
serial_cfg.serial_bit_order = STOP_BITS_1;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_HC08_DRIVER_EXT_PORT
serial_cfg.is_ext_uart = 1;
serial_cfg.ext_uart_no = ADAPTER_HC08_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -360,27 +387,45 @@ 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;
if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_LUUID, &luuid, NULL) < 0) {
if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_SET_LUUID, &luuid, NULL) < 0) {
return -1;
}
if (Hc08AtConfigure(adapter->agent, HC08_AT_CMD_GET_LUUID, NULL, NULL) < 0) {
return -1;
}
#ifdef ADD_RTTHREAD_FETURES
uint32_t suuid=1234;
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=1234;
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)

View File

@@ -402,6 +402,7 @@ static int Hfa21EthernetIoctl(struct Adapter *adapter, int cmd, void *args)
serial_cfg.serial_bit_order = BIT_ORDER_LSB;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_HFA21_DRIVER_EXT_PORT
serial_cfg.is_ext_uart = 1;
serial_cfg.ext_uart_no = ADAPTER_HFA21_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -6,6 +6,10 @@ config ADAPTER_E220
bool "Using lora adapter device E220-400T22S"
default n
config ADAPTER_E22
bool "Using lora adapter device E22-400T33D"
default n
choice
prompt "Lora device adapter select net role type "
default AS_LORA_CLIENT_ROLE
@@ -39,4 +43,8 @@ endif
if ADAPTER_E220
source "$APP_DIR/Framework/connection/lora/e220/Kconfig"
endif
if ADAPTER_E22
source "$APP_DIR/Framework/connection/lora/e22/Kconfig"
endif

View File

@@ -28,6 +28,10 @@ extern AdapterProductInfoType Sx1278Attach(struct Adapter *adapter);
extern AdapterProductInfoType E220Attach(struct Adapter *adapter);
#endif
#ifdef ADAPTER_E22
extern AdapterProductInfoType E22Attach(struct Adapter *adapter);
#endif
//#define CLIENT_UPDATE_MODE
#define GATEWAY_CMD_MODE
@@ -887,6 +891,19 @@ int AdapterLoraInit(void)
adapter->done = product_info->model_done;
#endif
#ifdef ADAPTER_E22
AdapterProductInfoType product_info = E22Attach(adapter);
if (!product_info) {
printf("AdapterLoraInit e22 attach error\n");
PrivFree(adapter);
return -1;
}
adapter->product_info_flag = 1;
adapter->info = product_info;
adapter->done = product_info->model_done;
#endif
PrivSemaphoreCreate(&adapter->sem, 0, 0);
PrivSemaphoreCreate(&gateway_recv_data_sem, 0, 0);
@@ -907,8 +924,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 +979,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

View File

@@ -0,0 +1,28 @@
config ADAPTER_LORA_E22
string "E22-400T33D adapter name"
default "e22"
if ADD_XIZI_FETURES
endif
if ADD_NUTTX_FETURES
config ADAPTER_E22_M0_PATH
string "E22 M0 pin device"
default "/dev/gpio0"
config ADAPTER_E22_M1_PATH
string "E22 M1 pin device"
default "/dev/gpio1"
config ADAPTER_E22_DRIVER
string "E22 device uart driver path"
default "/dev/ttyS3"
endif
if ADD_RTTHREAD_FETURES
endif

View File

@@ -0,0 +1,6 @@
############################################################################
# APP_Framework/Framework/connection/lora/e22/Make.defs
############################################################################
ifneq ($(CONFIG_ADAPTER_E22),)
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/connection/lora/e22
endif

View File

@@ -0,0 +1,7 @@
include $(KERNEL_ROOT)/.config
ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
include $(APPDIR)/Make.defs
CSRCS += e22.c
include $(APPDIR)/Application.mk
endif

View File

@@ -0,0 +1,509 @@
/*
* Copyright (c) 2020 AIIT XUOS Lab
* XiUOS 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 e22.c
* @brief Implement the connection E22-400T22S lora adapter function
* @version 2.0
* @author AIIT XUOS Lab
* @date 2022.4.20
*/
#include <adapter.h>
#define E22_GATEWAY_ADDRESS 0xFFFF
#define E22_CHANNEL 0x05
#ifdef AS_LORA_GATEWAY_ROLE
#define E22_ADDRESS E22_GATEWAY_ADDRESS
#endif
#ifdef AS_LORA_CLIENT_ROLE
#define E22_ADDRESS ADAPTER_LORA_NET_ROLE_ID
#endif
#define E22_UART_BAUD_RATE 115200
enum E22LoraMode
{
DATA_TRANSFER_MODE = 0, //M1 : M0 = 0 : 0
WOR_SEND_MODE, //M1 : M0 = 0 : 1
CONFIGURE_MODE, //M1 : M0 = 1 : 0
SLEEP_MODE, //M1 : M0 = 1 : 1
};
/**
* @description: Config E22 work mode by set M1/M0 pin
* @param mode Lora working mode
* @return NULL
*/
static void E22LoraModeConfig(enum E22LoraMode mode)
{
int m0_fd, m1_fd;
//delay 1s , wait AUX ready
PrivTaskDelay(1000);
m0_fd = PrivOpen(ADAPTER_E22_M0_PATH, O_RDWR);
if (m0_fd < 0) {
printf("open %s error\n", ADAPTER_E22_M0_PATH);
return;
}
m1_fd = PrivOpen(ADAPTER_E22_M1_PATH, O_RDWR);
if (m1_fd < 0) {
printf("open %s error\n", ADAPTER_E22_M1_PATH);
return;
}
//Both M0 and M1 GPIO are outputs mode, set M0 and M1 high or low
switch (mode)
{
case DATA_TRANSFER_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW);
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW);
break;
case WOR_SEND_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_LOW);
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH);
break;
case CONFIGURE_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH);
PrivIoctl(m0_fd, GPIOC_WRITE,(unsigned long)GPIO_LOW);
break;
case SLEEP_MODE:
PrivIoctl(m1_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH);
PrivIoctl(m0_fd, GPIOC_WRITE, (unsigned long)GPIO_HIGH);
break;
default:
break;
}
PrivClose(m0_fd);
PrivClose(m1_fd);
//delay 20ms , wait mode switch done
PrivTaskDelay(20);
}
/**
* @description: Switch baud rate to register bit
* @param baud_rate - baud_rate
* @return baud_rate_bit
*/
static uint8 E22BaudRateSwitch(uint32 baud_rate)
{
uint8 baud_rate_bit;
switch (baud_rate)
{
case 1200:
baud_rate_bit = 0x0;
break;
case 2400:
baud_rate_bit = 0x1;
break;
case 4800:
baud_rate_bit = 0x2;
break;
case 9600:
baud_rate_bit = 0x3;
break;
case 19200:
baud_rate_bit = 0x4;
break;
case 38400:
baud_rate_bit = 0x5;
break;
case 57600:
baud_rate_bit = 0x6;
break;
case 115200:
baud_rate_bit = 0x7;
break;
default:
break;
}
return baud_rate_bit;
}
/**
* @description: Set E22 register, such as address、channel、baud rate...
* @param adapter - lora adapter
* @param address - address
* @param channel - channel
* @param baud_rate - baud_rate
* @return success: 0, failure: -1
*/
static int E22SetRegisterParam(struct Adapter *adapter, uint16 address, uint8 channel, uint32 baud_rate)
{
int ret;
uint8 buffer[50] = {0};
uint8 baud_rate_bit = E22BaudRateSwitch(baud_rate);
E22LoraModeConfig(CONFIGURE_MODE);
PrivTaskDelay(30);
buffer[0] = 0xC0; //write register order
buffer[1] = 0x00; //register start-address
buffer[2] = 0x09; //register length
buffer[3] = (address >> 8) & 0xFF; //high address
buffer[4] = address & 0xFF; //low adderss
buffer[5] = 0x00; //net id
buffer[6] = ((baud_rate_bit << 5) & 0xE0) | 0x04; // baud、stop bits、air rate
buffer[7] = 0x00;
buffer[8] = channel; //channel
buffer[9] = 0x03;
buffer[10] = 0; //high-cipher
buffer[11] = 0; //low-cipher
ret = PrivWrite(adapter->fd, (void *)buffer, 12);
if(ret < 0){
printf("E22SetRegisterParam send failed %d!\n", ret);
}
PrivTaskDelay(1000);
ret = PrivRead(adapter->fd, buffer, 19);
if(ret < 0){
printf("E22 RegisterParam get failed %d!\n", ret);
}
E22LoraModeConfig(DATA_TRANSFER_MODE);
PrivTaskDelay(1000);
return 0;
}
/**
* @description: Get E22 register, such as address、channel、baud rate...
* @param buf - data buf
* @return success: 0, failure: -1
*/
static int E22GetRegisterParam(uint8 *buf)
{
int ret;
uint8 buffer[20] = {0};
struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME);
if (NULL == adapter) {
printf("E22GetRegisterParam find lora adapter error\n");
return -1;
}
E22LoraModeConfig(CONFIGURE_MODE);
PrivTaskDelay(30);
buffer[0] = 0xC1; //read register order
buffer[1] = 0x00; //register start-address
buffer[2] = 0x09; //register length
ret = PrivWrite(adapter->fd, (void *)buffer, 3);
if(ret < 0){
printf("E22GetRegisterParam send failed %d!\n", ret);
}
PrivTaskDelay(1000);
ret = PrivRead(adapter->fd, buf, 19);
if(ret < 0){
printf("E22 RegisterParam get failed %d!\n", ret);
}
E22LoraModeConfig(DATA_TRANSFER_MODE);
PrivTaskDelay(1000);
return 0;
}
/**
* @description: Open E22 uart function
* @param adapter - Lora device pointer
* @return success: 0, failure: -1
*/
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) {
printf("E22Open get uart %s fd error\n", ADAPTER_E22_DRIVER);
return -1;
}
tcgetattr(adapter->fd, &cfg);
cfsetspeed(&cfg, BAUD_RATE_9600);
tcsetattr(adapter->fd, TCSANOW, &cfg);
E22SetRegisterParam(adapter, E22_ADDRESS, E22_CHANNEL, E22_UART_BAUD_RATE);
cfsetspeed(&cfg, E22_UART_BAUD_RATE);
tcsetattr(adapter->fd, TCSANOW, &cfg);
ADAPTER_DEBUG("E22Open done\n");
return 0;
}
/**
* @description: Close E22 uart function
* @param adapter - Lora device pointer
* @return success: 0, failure: -1
*/
static int E22Close(struct Adapter *adapter)
{
/*step1: close e22 uart port*/
int ret;
ret = PrivClose(adapter->fd);
if(ret < 0) {
printf("E22 close failed: %d!\n", ret);
return -1;
}
ADAPTER_DEBUG("E22 Close done\n");
return 0;
}
/**
* @description: E22 ioctl function
* @param adapter - Lora device pointer
* @param cmd - ioctl cmd
* @param args - iotl params
* @return success: 0, failure: -1
*/
static int E22Ioctl(struct Adapter *adapter, int cmd, void *args)
{
/*to do*/
return 0;
}
/**
* @description: E22 join lora net group function
* @param adapter - Lora device pointer
* @param priv_net_group - priv_net_group params
* @return success: 0, failure: -1
*/
static int E22Join(struct Adapter *adapter, unsigned char *priv_net_group)
{
int ret;
struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group;
ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len);
if(ret < 0) {
printf("E22 Join net group failed: %d!\n", ret);
}
return ret;
}
/**
* @description: E22 send data function
* @param adapter - Lora device pointer
* @param buf - data buffers
* @param len - data len
* @return success: 0, failure: -1
*/
static int E22Send(struct Adapter *adapter, const void *buf, size_t len)
{
int ret;
ret = PrivWrite(adapter->fd, (void *)buf, len);
if(ret < 0){
printf("send failed %d!\n", ret);
}
return ret;
}
/**
* @description: E22 receive data function
* @param adapter - Lora device pointer
* @param buf - data buffers
* @param len - data len
* @return success: 0, failure: -1
*/
static int E22Recv(struct Adapter *adapter, void *buf, size_t len)
{
int recv_len, recv_len_continue;
uint8 *recv_buf = PrivMalloc(len);
recv_len = PrivRead(adapter->fd, recv_buf, len);
if (recv_len) {
while (recv_len < len) {
recv_len_continue = PrivRead(adapter->fd, recv_buf + recv_len, len - recv_len);
if (recv_len_continue) {
recv_len += recv_len_continue;
} else {
recv_len = 0;
break;
}
}
memcpy(buf, recv_buf, len);
}
PrivFree(recv_buf);
return recv_len;
}
/**
* @description: E22 quit lora net group function
* @param adapter - Lora device pointer
* @param priv_net_group - priv_net_group params
* @return success: 0, failure: -1
*/
static int E22Quit(struct Adapter *adapter, unsigned char *priv_net_group)
{
int ret;
struct AdapterData *priv_net_group_data = (struct AdapterData *)priv_net_group;
ret = PrivWrite(adapter->fd, (void *)priv_net_group_data->buffer, priv_net_group_data->len);
if(ret < 0){
printf("E22 quit net group failed %d!\n", ret);
}
return ret;
}
static const struct PrivProtocolDone e22_done =
{
.open = E22Open,
.close = E22Close,
.ioctl = E22Ioctl,
.setup = NULL,
.setdown = NULL,
.setaddr = NULL,
.setdns = NULL,
.setdhcp = NULL,
.ping = NULL,
.netstat = NULL,
.join = E22Join,
.send = E22Send,
.recv = E22Recv,
.quit = E22Quit,
};
AdapterProductInfoType E22Attach(struct Adapter *adapter)
{
struct AdapterProductInfo *product_info = malloc(sizeof(struct AdapterProductInfo));
if (!product_info) {
printf("E22Attach malloc product_info error\n");
return NULL;
}
strncpy(product_info->model_name, ADAPTER_LORA_E22,sizeof(product_info->model_name));
product_info->model_done = (void *)&e22_done;
return product_info;
}
//###################TEST####################
static void LoraOpen(void)
{
struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME);
if (NULL == adapter) {
printf("LoraReceive find lora adapter error\n");
return;
}
E22Open(adapter);
}
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 = E22Recv(adapter, buffer, 256);
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 ++;
E22Send(adapter, &cnt, 1);
}
}
}
void E22LoraReceive(void)
{
int ret;
pthread_t thread;
pthread_attr_t attr = PTHREAD_ATTR_INITIALIZER;
attr.priority = 80;
attr.stacksize = 2048;
LoraOpen();
ret = PrivTaskCreate(&thread, &attr, (void*)LoraRead, NULL);
if (ret < 0) {
printf("task lora read create failed, status=%d\n", ret);
return;
}
}
void E22LoraSend(int argc, char *argv[])
{
struct Adapter *adapter = AdapterDeviceFindByName(ADAPTER_LORA_NAME);
if (NULL == adapter) {
printf("LoraRead find lora adapter error\n");
return;
}
if (argc == 2) {
char Msg[256] = {0};
strncpy(Msg, argv[1], 256);
E22Open(adapter);
E22Send(adapter, Msg, strlen(Msg));
E22Close(adapter);
}
}

View File

@@ -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"
@@ -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

View File

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

View File

@@ -21,7 +21,11 @@
#include <adapter.h>
#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 +35,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 +273,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,9 +348,10 @@ static int E220Open(struct Adapter *adapter)
return 0;
}
#else
#ifdef ADD_RTTHREAD_FETURES
static int E220Open(struct Adapter *adapter)
{
/*step1: open e220 uart port*/
/*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);
@@ -368,6 +380,59 @@ static int E220Open(struct Adapter *adapter)
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*/
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.is_ext_uart = 1;
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;
@@ -391,6 +456,7 @@ static int E220Open(struct Adapter *adapter)
return 0;
}
#endif
#endif
/**
* @description: Close E220 uart function
@@ -472,7 +538,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 +624,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 +699,8 @@ static void LoraRead(void *parameter)
}
}
}
#endif
#ifdef ADD_XIZI_FETURES
static void LoraTest(void)
@@ -667,3 +774,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

View File

@@ -59,6 +59,7 @@ static int BC28UartOpen(struct Adapter *adapter)
/*aiit board use ch438, so it needs more serial configuration*/
#ifdef ADAPTER_BC28_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = ADAPTER_BC28_DRIVER_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -82,6 +82,7 @@ static int Esp07sUartOpen(struct Adapter *adapter)
cfg.serial_buffer_size = SERIAL_RB_BUFSZ;
#ifdef ADAPTER_ESP07S_DRIVER_EXT_PORT
cfg.is_ext_uart = 1;
cfg.ext_uart_no = ADAPTER_ESP07S_DRIVER_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -512,6 +513,7 @@ static int Esp07sWifiIoctl(struct Adapter *adapter, int cmd, void *args)
cfg.serial_buffer_size = SERIAL_RB_BUFSZ;
#ifdef ADAPTER_ESP07S_DRIVER_EXT_PORT
cfg.is_ext_uart = 1;
cfg.ext_uart_no = ADAPTER_ESP07S_DRIVER_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -474,6 +474,7 @@ static int Hfa21WifiIoctl(struct Adapter *adapter, int cmd, void *args)
serial_cfg.serial_bit_order = BIT_ORDER_LSB;
serial_cfg.serial_invert_mode = NRZ_NORMAL;
#ifdef ADAPTER_HFA21_DRIVER_EXT_PORT
serial_cfg.is_ext_uart = 1;
serial_cfg.ext_uart_no = ADAPTER_HFA21_DRIVER_EXT_PORT;
serial_cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -47,29 +47,25 @@ if ADD_XIZI_FETURES
endif
if ADD_NUTTX_FETURES
config ADAPTER_E18_MODEPIN
int "E18 MODE pin number"
default "61"
config ADAPTER_E18_MODE_PATH
string "E18 MODE pin device"
default "/dev/gpio2"
config ADAPTER_E18_PIN_DRIVER
string "E18 device pin driver path"
default "/dev/pin_dev"
config ADAPTER_E18_DRIVER_EXTUART
bool "Using extra uart to support zigbee"
default y
config ADAPTER_E18_DRIVER
string "E18 device uart driver path"
default "/dev/ttyS1"
depends on !ADAPTER_E18_DRIVER_EXTUART
---help---
If USART1 is selected, then fill in /dev/ttyS1 here.
config ADAPTER_E18_DRIVER
string "E18 device uart driver path"
default "/dev/ttyS1"
depends on !ADAPTER_E18_DRIVER_EXTUART
---help---
If USART1 is selected, then fill in /dev/ttyS1 here.
if ADAPTER_E18_DRIVER_EXTUART
config ADAPTER_E18_DRIVER
string "E18 device extra uart driver path"
default "/dev/extuart_dev1"
config ADAPTER_E18_DRIVER_EXT_PORT
int "if E18 device using extuart, choose port"
default "1"
if ADAPTER_E18_DRIVER_EXTUART
config ADAPTER_E18_DRIVER
string "E18 device extra uart driver path"
default "/dev/extuart_dev1"
endif
endif

View File

@@ -42,6 +42,9 @@ char *cmd_set_ch = "AT+CH=11"; /*set channel as 11*/
static int E18HardwareModeGet()
{
#ifdef ADD_NUTTX_FETURES
return E18_AS_HEX_MODE;
#else
int ret = 0;
int pin_fd;
@@ -62,7 +65,8 @@ static int E18HardwareModeGet()
} else {
printf(" E18 as HEX mode\n");
return E18_AS_HEX_MODE;
}
}
#endif
}
#ifdef ADD_NUTTX_FETURES
@@ -104,6 +108,7 @@ static int E18UartOpen(struct Adapter *adapter)
/*aiit board use ch438, so it needs more serial configuration*/
#ifdef ADAPTER_E18_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = ADAPTER_E18_DRIVER_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -175,9 +180,15 @@ static int E18NetworkModeConfig(struct Adapter *adapter)
}
out:
if(E18_AS_AT_MODE == mode){
#ifdef ADD_NUTTX_FETURES
if(E18_AS_HEX_MODE == mode)
#else
if(E18_AS_AT_MODE == mode)
#endif
{
AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK");
}
return ret;
}
@@ -242,7 +253,12 @@ static int E18NetRoleConfig(struct Adapter *adapter)
}
out:
if(E18_AS_AT_MODE == mode) {
#ifdef ADD_NUTTX_FETURES
if(E18_AS_HEX_MODE == mode)
#else
if(E18_AS_AT_MODE == mode)
#endif
{
AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK");
}
@@ -384,7 +400,12 @@ static int E18Join(struct Adapter *adapter, unsigned char *priv_net_group)
// }
if(!ret){
if(E18_AS_AT_MODE == mode) {
#ifdef ADD_NUTTX_FETURES
if(E18_AS_HEX_MODE == mode)
#else
if(E18_AS_AT_MODE == mode)
#endif
{
ret = AtCmdConfigAndCheck(adapter->agent, cmd_exit, "+OK");
if(ret < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,cmd_exit);

View File

@@ -5,6 +5,6 @@ cwd = GetCurrentDir()
src = Glob('*.c')
group = DefineGroup('yolov2_json', src, depend = ['LIB_USING_CJSON'], CPPPATH = [cwd])
group = DefineGroup('yolov2_json', src, depend = ['LIB_USING_CJSON'] + ['USING_YOLOV2'], CPPPATH = [cwd])
Return('group')

View File

@@ -65,6 +65,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_AS830_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_AS830_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -64,6 +64,7 @@ config SENSOR_ZG09
endif
endif
config SENSOR_G8S
bool "Using g8-s"
default n
@@ -99,7 +100,11 @@ config SENSOR_G8S
endif
if ADD_NUTTX_FETURES
config SENSOR_DEVICE_G8S_DEV
string "CO2 device name"
default "/dev/ttyS3"
---help---
If USART1 is selected, then fill in /dev/ttyS1 here.
endif
if ADD_RTTHREAD_FETURES

View File

@@ -0,0 +1,6 @@
############################################################################
# APP_Framework/Framework/sensor/co2/g8s/Make.defs
############################################################################
ifneq ($(CONFIG_SENSOR_G8S),)
CONFIGURED_APPS += $(APPDIR)/../../../APP_Framework/Framework/sensor/co2/g8s
endif

View File

@@ -1,3 +1,13 @@
SRC_FILES := g8s.c
include $(KERNEL_ROOT)/.config
ifeq ($(CONFIG_ADD_NUTTX_FETURES),y)
include $(APPDIR)/Make.defs
CSRCS += g8s.c
include $(APPDIR)/Application.mk
endif
ifeq ($(CONFIG_ADD_XIZI_FETURES),y)
SRC_FILES := g8s.c
include $(KERNEL_ROOT)/compiler.mk
endif
include $(KERNEL_ROOT)/compiler.mk

View File

@@ -37,6 +37,7 @@ static struct SensorProductInfo info =
* @param sdev - sensor device pointer
* @return success: 1 , failure: other
*/
#ifdef ADD_NUTTX_FETURES
static int SensorDeviceOpen(struct SensorDevice *sdev)
{
int result = 0;
@@ -46,7 +47,20 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
printf("open %s error\n", SENSOR_DEVICE_G8S_DEV);
return -1;
}
}
#else
static int SensorDeviceOpen(struct SensorDevice *sdev)
{
int result = 0;
sdev->fd = PrivOpen(SENSOR_DEVICE_G8S_DEV, O_RDWR);
if (sdev->fd < 0) {
printf("open %s error\n", SENSOR_DEVICE_G8S_DEV);
return -1;
}
struct SerialDataCfg cfg;
cfg.serial_baud_rate = BAUD_RATE_9600;
cfg.serial_data_bits = DATA_BITS_8;
@@ -56,6 +70,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_G8S_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_G8S_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif
@@ -67,7 +82,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
return result;
}
#endif
/**
* @description: Read sensor device
* @param sdev - sensor device pointer
@@ -76,10 +91,9 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
*/
static int SensorDeviceRead(struct SensorDevice *sdev, size_t len)
{
uint8_t tmp = 0;
PrivWrite(sdev->fd, g8s_read_instruction, sizeof(g8s_read_instruction));
PrivTaskDelay(500);
if (PrivRead(sdev->fd, sdev->buffer, len) < 0)
return -1;
@@ -140,16 +154,26 @@ static int32_t QuantityRead(struct SensorQuantity *quant)
result_ascii[i] = quant->sdev->buffer[i];
}
if (8 == ascii_length) {
for (i = 0; i < ascii_length; i ++) {
result_hex[i] = result_ascii[i] - 0x30;
result += result_hex[i] * pow(10, ascii_length - 1 - i);
}
return result;
} else {
if (ascii_length == 0){
printf("This reading is wrong\n");
result = SENSOR_QUANTITY_VALUE_ERROR;
return result;
}else{
for (i = 0; i < ascii_length; i ++) {
result_hex[i] = result_ascii[i] - 0x30;
result += result_hex[i] * pow(10, ascii_length - 1 - i);
}
return result;
}
}
if (quant->sdev->status == SENSOR_DEVICE_ACTIVE) {

View File

@@ -76,6 +76,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_ZG09_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_ZG09_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -66,6 +66,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_TB600B_WQ_HCHO1OS_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_TB600B_WQ_HCHO1OS_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -73,6 +73,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_TB600B_IAQ10_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_TB600B_IAQ10_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -98,6 +98,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_PS5308_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_PS5308_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -66,6 +66,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_TB600B_TVOC10_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_TB600B_TVOC10_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -102,6 +102,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_D124_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_D124_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -66,6 +66,7 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_QS_FX_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_QS_FX_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -64,7 +64,8 @@ static int SensorDeviceOpen(struct SensorDevice *sdev)
cfg.serial_parity_mode = PARITY_NONE;
cfg.serial_bit_order = 0;
cfg.serial_invert_mode = 0;
#ifdef SENSOR_QS_FS_DRIVER_EXTUART
#ifdef SENSOR_QS_FS_DRIVER_EXTUART
cfg.is_ext_uart = 1;
cfg.ext_uart_no = SENSOR_DEVICE_QS_FS_DEV_EXT_PORT;
cfg.port_configure = PORT_CFG_INIT;
#endif

View File

@@ -142,7 +142,8 @@ struct SerialDataCfg
uint8_t serial_invert_mode;
uint16_t serial_buffer_size;
uint8 ext_uart_no;
uint8_t is_ext_uart;
uint8_t ext_uart_no;
enum ExtSerialPortConfigure port_configure;
};

View File

@@ -111,6 +111,36 @@ uint32_t PrivGetTickTime()
/*********************fs**************************/
/*********************message queue***********************************/
mqd_t PrivMqueueOpen(const char *name, int oflag)
{
return mq_open(name, oflag);
}
mqd_t PrivMqueueCreate(const char *name, int oflag, mode_t mode,struct mq_attr *attr)
{
return mq_open(name, oflag,mode,attr);
}
int PrivMqueueSend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio)
{
return mq_send(mqdes,msg_ptr,msg_len, msg_prio);
}
int PrivMqueueUnlink(const char *name)
{
return mq_unlink(name);
}
int PrivMqueueClose(mqd_t mqdes)
{
return mq_close(mqdes);
}
ssize_t PrivMqueueReceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio)
{
return mq_receive(mqdes, msg_ptr,msg_len, msg_prio);
}
/************************Driver Posix Transform***********************/
int PrivOpen(const char *path, int flags)
{

View File

@@ -32,6 +32,8 @@
#include <pthread.h>
#include <pthread_internal.h>
#include <semaphore.h>
#include <sys/signal.h>
#include <mqueue.h>
#include <sched.h>
#include <unistd.h>
#include <dfs_poll.h>
@@ -56,12 +58,15 @@
#include <dmac.h>
#include <dmalock.h>
#endif
#include <netdev_ipaddr.h>
#include <netdev.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef _STDBOOL_H
typedef signed char bool;
#endif
typedef signed char int8;
typedef signed short int16;
typedef signed int int32;
@@ -87,10 +92,10 @@ typedef unsigned long long uint64;
#define GPIO_HIGH 0x01
#define GPIO_CFG_OUTPUT 0x00
#define GPIO_CFG_INPUT 0x01
#define GPIO_CFG_INPUT_PULLUP 0x02
#define GPIO_CFG_INPUT_PULLDOWN 0x03
#define GPIO_CFG_OUTPUT_OD 0x04
#define GPIO_CFG_INPUT 0x01
#define GPIO_CFG_INPUT_PULLUP 0x02
#define GPIO_CFG_INPUT_PULLDOWN 0x03
#define GPIO_CFG_OUTPUT_OD 0x04
#define GPIO_CONFIG_MODE 0xffffffff
#ifndef SERIAL_RB_BUFSZ
@@ -140,6 +145,7 @@ struct SerialDataCfg
uint8_t serial_invert_mode;
uint16_t serial_buffer_size;
uint8_t is_ext_uart;
uint8_t ext_uart_no;
enum ExtSerialPortConfigure port_configure;
};
@@ -186,6 +192,14 @@ void PrivTaskQuit(void *value_ptr);
int PrivTaskDelay(int32_t ms);
uint32_t PrivGetTickTime();
/****************message queue***********************/
mqd_t PrivMqueueOpen(const char *name, int oflag);
mqd_t PrivMqueueCreate(const char *name, int oflag, mode_t mode,struct mq_attr *attr);
int PrivMqueueSend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);
int PrivMqueueUnlink(const char *name);
int PrivMqueueClose(mqd_t mqdes);
ssize_t PrivMqueueReceive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);
/*********************driver*************************/
int PrivOpen(const char *path, int flags);

View File

@@ -133,6 +133,7 @@ struct SerialDataCfg
uint16_t serial_buffer_size;
int32 serial_timeout;
uint8_t is_ext_uart;
uint8_t ext_uart_no;
enum ExtSerialPortConfigure port_configure;
};