repair wait time for 'ATOrderSend',optimize bc28 api

This commit is contained in:
Wang_Weigen 2021-10-18 18:04:46 +08:00
parent a4f24a29fc
commit 267528408e
8 changed files with 156 additions and 137 deletions

View File

@ -17,6 +17,7 @@ extern int SensorFrameworkInit(void);
extern int AdapterFrameworkInit(void); extern int AdapterFrameworkInit(void);
extern int Adapter4GInit(void); extern int Adapter4GInit(void);
extern int AdapterNbiotInit(void);
extern int AdapterBlueToothInit(void); extern int AdapterBlueToothInit(void);
extern int AdapterWifiInit(void); extern int AdapterWifiInit(void);
extern int AdapterZigbeeInit(void); extern int AdapterZigbeeInit(void);
@ -94,6 +95,9 @@ static struct InitDesc connection_desc[] =
#ifdef CONNECTION_ADAPTER_4G #ifdef CONNECTION_ADAPTER_4G
{ "4G adpter", Adapter4GInit}, { "4G adpter", Adapter4GInit},
#endif #endif
#ifdef CONNECTION_ADAPTER_NB
{ "NB adpter", AdapterNbiotInit},
#endif
#ifdef CONNECTION_ADAPTER_ZIGBEE #ifdef CONNECTION_ADAPTER_ZIGBEE
{ "zigbee adpter", AdapterZigbeeInit}, { "zigbee adpter", AdapterZigbeeInit},
#endif #endif

View File

@ -81,6 +81,6 @@ int ParseATReply(char* str, const char *format, ...);
void DeleteATReply(ATReplyType reply); void DeleteATReply(ATReplyType reply);
int ATOrderSend(ATAgentType agent, uint32 timeout_s, ATReplyType reply, const char *cmd_expr, ...); int ATOrderSend(ATAgentType agent, uint32 timeout_s, ATReplyType reply, const char *cmd_expr, ...);
#define REPLY_TIME_OUT 3000 #define REPLY_TIME_OUT 3
#endif #endif

View File

@ -355,7 +355,7 @@ static int Hc08Send(struct Adapter *adapter, const void *buf, size_t len)
static int Hc08Recv(struct Adapter *adapter, void *buf, size_t len) static int Hc08Recv(struct Adapter *adapter, void *buf, size_t len)
{ {
if (adapter->agent) { if (adapter->agent) {
return EntmRecv(adapter->agent, (char *)buf, len, 40000); return EntmRecv(adapter->agent, (char *)buf, len, 40);
} else { } else {
printf("Hc08Recv can not find agent\n"); printf("Hc08Recv can not find agent\n");
} }

View File

@ -3,8 +3,8 @@ config ADAPTER_NBIOT_BC28
default "bc28" default "bc28"
if ADD_XIUOS_FETURES if ADD_XIUOS_FETURES
config ADAPTER_BC28_PWRKEY config ADAPTER_BC28_RESETPIN
int "BC28 PWRKEY pin number" int "BC28 RESET pin number"
default "100" default "100"
config ADAPTER_BC28_PIN_DRIVER config ADAPTER_BC28_PIN_DRIVER
@ -23,11 +23,11 @@ if ADD_XIUOS_FETURES
if ADAPTER_BC28_DRIVER_EXTUART if ADAPTER_BC28_DRIVER_EXTUART
config ADAPTER_BC28_DRIVER config ADAPTER_BC28_DRIVER
string "BC28 device extra uart driver path" string "BC28 device extra uart driver path"
default "/dev/extuart_dev0" default "/dev/extuart_dev5"
config ADAPTER_BC28_DRIVER_EXT_PORT config ADAPTER_BC28_DRIVER_EXT_PORT
int "if BC28 device using extuart, choose port" int "if BC28 device using extuart, choose port"
default "0" default "5"
endif endif
endif endif

View File

@ -30,6 +30,38 @@
#define SOCKET_INVALID_ID (-1) #define SOCKET_INVALID_ID (-1)
static int AtCmdConfigAndCheck(ATAgentType agent, char *cmd, char *check)
{
char *result = NULL;
if (NULL == agent || NULL == cmd || NULL == check ) {
return -1;
}
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("%s %d at_create_resp failed!\n",__func__,__LINE__);
return -1;
}
ATOrderSend(agent, REPLY_TIME_OUT, reply, cmd);
PrivTaskDelay(300);
result = GetReplyText(reply);
if (!result) {
printf("%s %n get reply failed.\n",__func__,__LINE__);
goto __exit;
}
if(0 != strncmp(result, check, strlen(check))) {
printf("%s %d check[%s] reply[%s] failed.\n",__func__,__LINE__,check,result);
goto __exit;
}
return 0;
__exit:
DeleteATReply(reply);
return -1;
}
static int BC28UartOpen(struct Adapter *adapter) static int BC28UartOpen(struct Adapter *adapter)
{ {
if (NULL == adapter) { if (NULL == adapter) {
@ -80,7 +112,7 @@ static void BC28PowerSet(void)
struct PinParam pin_param; struct PinParam pin_param;
pin_param.cmd = GPIO_CONFIG_MODE; pin_param.cmd = GPIO_CONFIG_MODE;
pin_param.mode = GPIO_CFG_OUTPUT; pin_param.mode = GPIO_CFG_OUTPUT;
pin_param.pin = ADAPTER_BC28_PWRKEY; pin_param.pin = ADAPTER_BC28_RESETPIN;
struct PrivIoctlCfg ioctl_cfg; struct PrivIoctlCfg ioctl_cfg;
ioctl_cfg.ioctl_driver_type = PIN_TYPE; ioctl_cfg.ioctl_driver_type = PIN_TYPE;
@ -88,7 +120,7 @@ static void BC28PowerSet(void)
PrivIoctl(pin_fd, OPE_CFG, &ioctl_cfg); PrivIoctl(pin_fd, OPE_CFG, &ioctl_cfg);
struct PinStat pin_stat; struct PinStat pin_stat;
pin_stat.pin = ADAPTER_BC28_PWRKEY; pin_stat.pin = ADAPTER_BC28_RESETPIN;
pin_stat.val = GPIO_HIGH; pin_stat.val = GPIO_HIGH;
PrivWrite(pin_fd, &pin_stat, 1); PrivWrite(pin_fd, &pin_stat, 1);
@ -115,22 +147,15 @@ int NBIoTSocketCreate(struct Adapter *adapter, struct Socket *socket )
return -1; return -1;
} }
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("at create failed ! \n");
result = -1;
goto __exit;
}
if ( socket->af_type == NET_TYPE_AF_INET6 ) { if ( socket->af_type == NET_TYPE_AF_INET6 ) {
printf("IPv6 not surport !\n"); printf("IPv6 not surport !\n");
result = -1; result = -1;
goto __exit; goto out;
} }
char *str_af_type = "AF_INET"; char *str_af_type = "AF_INET";
char *str_type; char *str_type;
char str_fd[3] = {0}; char str_fd[3] = {1};
char *str_protocol ; char *str_protocol ;
char at_cmd[64] = {0}; char at_cmd[64] = {0};
char listen_port[] = {0}; char listen_port[] = {0};
@ -141,7 +166,7 @@ int NBIoTSocketCreate(struct Adapter *adapter, struct Socket *socket )
} else { } else {
printf("surport max 0-6, socket_id = [%d] is error!\n",socket->socket_id); printf("surport max 0-6, socket_id = [%d] is error!\n",socket->socket_id);
result = -1; result = -1;
goto __exit; goto out;
} }
if( socket->listen_port >= 0 && socket->listen_port <= 65535){ if( socket->listen_port >= 0 && socket->listen_port <= 65535){
@ -154,18 +179,18 @@ int NBIoTSocketCreate(struct Adapter *adapter, struct Socket *socket )
adapter->socket.protocal = SOCKET_PROTOCOL_TCP; adapter->socket.protocal = SOCKET_PROTOCOL_TCP;
adapter->socket.type = SOCKET_TYPE_STREAM; adapter->socket.type = SOCKET_TYPE_STREAM;
str_type = "STREAM"; str_type = "STREAM";
char *str_protocol = "6"; str_protocol = "6";
} else if ( socket->type == SOCKET_TYPE_DGRAM ){ //udp } else if ( socket->type == SOCKET_TYPE_DGRAM ){ //udp
adapter->socket.type = SOCKET_TYPE_DGRAM; adapter->socket.type = SOCKET_TYPE_DGRAM;
adapter->socket.protocal = SOCKET_PROTOCOL_UDP; adapter->socket.protocal = SOCKET_PROTOCOL_UDP;
str_type = "DGRAM"; str_type = "DGRAM";
char *str_protocol = "17"; str_protocol = "17";
} else { } else {
printf("error socket type \n"); printf("error socket type \n");
result = -1; result = -1;
goto __exit; goto out;
} }
memcpy(at_cmd, "AT+NSOCR=", 9); memcpy(at_cmd, "AT+NSOCR=", 9);
@ -181,18 +206,13 @@ int NBIoTSocketCreate(struct Adapter *adapter, struct Socket *socket )
strcat(at_cmd, "\n"); strcat(at_cmd, "\n");
printf("cmd : %s\n", at_cmd); printf("cmd : %s\n", at_cmd);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, at_cmd); result = AtCmdConfigAndCheck(adapter->agent, at_cmd, "OK");
PrivTaskDelay(3000); if(result < 0) {
printf("bak : "); printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,at_cmd);
for(int i = 0; i < strlen(reply->reply_buffer); i++) result = -1;
printf(" 0x%02x", reply->reply_buffer[i]);
printf("\n");
__exit:
if (reply) {
DeleteATReply(reply);
} }
out:
return result; return result;
} }
@ -204,23 +224,14 @@ __exit:
*/ */
int NBIoTSocketDelete(struct Adapter *adapter ) int NBIoTSocketDelete(struct Adapter *adapter )
{ {
int result = 0;
if (!adapter){ if (!adapter) {
return -1; return -1;
} }
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("at create failed ! \n");
result = -1;
goto __exit;
}
if (adapter->socket.socket_id >= 7) { if (adapter->socket.socket_id >= 7) {
printf("socket fd error \n"); printf("socket fd error \n");
result = -1; return -1;
goto __exit;
} }
char str_fd[2] = {0}; char str_fd[2] = {0};
@ -232,17 +243,12 @@ int NBIoTSocketDelete(struct Adapter *adapter )
strcat(at_cmd, "\n"); strcat(at_cmd, "\n");
printf("cmd : %s\n", at_cmd); printf("cmd : %s\n", at_cmd);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, at_cmd); ATOrderSend(adapter->agent, REPLY_TIME_OUT, NULL, at_cmd);
PrivTaskDelay(300); PrivTaskDelay(300);
adapter->socket.socket_id = SOCKET_INVALID_ID; adapter->socket.socket_id = SOCKET_INVALID_ID;
__exit: return 0;
if (reply) {
DeleteATReply(reply);
}
return result;
} }
static int BC28Open(struct Adapter *adapter) static int BC28Open(struct Adapter *adapter)
@ -322,13 +328,6 @@ static int BC28Connect(struct Adapter *adapter, enum NetRoleType net_role, const
{ {
int result = 0; int result = 0;
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("at create failed ! \n");
result = -1;
goto __exit;
}
if (adapter->socket.socket_id > 6) { if (adapter->socket.socket_id > 6) {
printf("socket fd error \n"); printf("socket fd error \n");
result = -1; result = -1;
@ -337,6 +336,8 @@ static int BC28Connect(struct Adapter *adapter, enum NetRoleType net_role, const
if ( ip_type != SOCKET_TYPE_STREAM) { if ( ip_type != SOCKET_TYPE_STREAM) {
printf("socket type error \n"); printf("socket type error \n");
result = -1;
goto __exit;
} }
char at_cmd[64] = {0}; char at_cmd[64] = {0};
@ -353,32 +354,25 @@ static int BC28Connect(struct Adapter *adapter, enum NetRoleType net_role, const
strcat(at_cmd, "\n"); strcat(at_cmd, "\n");
printf("cmd : %s\n", at_cmd); printf("cmd : %s\n", at_cmd);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, at_cmd); result = AtCmdConfigAndCheck(adapter->agent, at_cmd, "OK");
PrivTaskDelay(300); if(result < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,at_cmd);
__exit: result = -1;
if (reply) {
DeleteATReply(reply);
} }
__exit:
return result; return result;
} }
static int BC28Send(struct Adapter *adapter, const void *buf, size_t len) static int BC28Send(struct Adapter *adapter, const void *buf, size_t len)
{ {
uint32_t result = 0; uint32_t result = 0;
char at_cmd[64] = {0};
char str_fd[2] = {0};
ATReplyType reply = CreateATReply(64);
if (NULL == reply) {
printf("at create failed ! \n");
result = -ERROR;
goto __exit;
}
if (adapter->socket.type == SOCKET_TYPE_STREAM ) { if (adapter->socket.type == SOCKET_TYPE_STREAM ) {
char at_cmd[64] = {0};
char str_fd[2] = {0};
char size[2] = {0}; char size[2] = {0};
itoa(adapter->socket.socket_id, str_fd, 10); itoa(adapter->socket.socket_id, str_fd, 10);
@ -392,13 +386,8 @@ static int BC28Send(struct Adapter *adapter, const void *buf, size_t len)
strcat(at_cmd, buf); strcat(at_cmd, buf);
strcat(at_cmd, "\n"); strcat(at_cmd, "\n");
printf("cmd : %s\n", at_cmd);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, at_cmd);
PrivTaskDelay(300);
} else if(adapter->socket.type == SOCKET_TYPE_DGRAM ) { } else if(adapter->socket.type == SOCKET_TYPE_DGRAM ) {
char at_cmd[64] = {0};
char str_fd[2] = {0};
char listen_port[] = {0}; char listen_port[] = {0};
itoa(adapter->socket.socket_id, str_fd, 10); itoa(adapter->socket.socket_id, str_fd, 10);
@ -415,14 +404,13 @@ static int BC28Send(struct Adapter *adapter, const void *buf, size_t len)
strcat(at_cmd, buf); strcat(at_cmd, buf);
strcat(at_cmd, "\n"); strcat(at_cmd, "\n");
printf("cmd : %s\n", at_cmd);
ATOrderSend(adapter->agent, REPLY_TIME_OUT, reply, at_cmd);
PrivTaskDelay(300);
} }
__exit: printf("cmd : %s\n", at_cmd);
if (reply) { result = AtCmdConfigAndCheck(adapter->agent, at_cmd, "OK");
DeleteATReply(reply); if(result < 0) {
printf("%s %d cmd[%s] config failed!\n",__func__,__LINE__,at_cmd);
result = -1;
} }
return result; return result;

View File

@ -79,66 +79,93 @@ int AdapterNbiotInit(void)
} }
/******************TEST*********************/ /******************TEST*********************/
// int openzigbee(void) int opennb(void)
// { {
// int ret = 0; int ret = 0;
// struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_ZIGBEE_NAME); struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_NBIOT_NAME);
// #ifdef ADAPTER_E18 #ifdef ADAPTER_BC28
// ret = AdapterDeviceOpen(adapter); ret = AdapterDeviceOpen(adapter);
// if(ret < 0){ if(ret < 0){
// printf("open adapter failed\n"); printf("open adapter failed\n");
// return -1; return -1;
// } }
// adapter->info->work_mode = 1; #endif
// ret = AdapterDeviceControl(adapter, CONFIG_ZIGBEE_NET_MODE,NULL);
// if(ret < 0){
// printf("control adapter failed\n");
// return -1;
// }
// ret = AdapterDeviceJoin(adapter, NULL);
// if(ret < 0){
// printf("join adapter failed\n");
// return -1;
// }
// #endif
// return 0; 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, openzigbee, openzigbee, show adapter zigbee information); SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, opennb, opennb, show adapter nb information);
int closenb(void)
{
int ret = 0;
// int sendzigbee(int argc, char *argv[]) struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_NBIOT_NAME);
// {
// const char *send_msg = argv[1];
// int ret = 0;
// struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_ZIGBEE_NAME); #ifdef ADAPTER_BC28
ret = AdapterDeviceClose(adapter);
if(ret < 0){
printf("open adapter failed\n");
return -1;
}
// printf("send argv1 %s\n",argv[1]); #endif
// ret = AdapterDeviceSend(adapter, send_msg, strlen(send_msg));
// if(ret < 0){ return 0;
// printf(" adapter send failed\n"); }
// return -1; SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, closenb, closenb, show adapter nb information);
// }
// printf("zigbee send msg %s\n", send_msg); int connectnb(int argc, char *argv[])
{
const char *send_msg = argv[1];
int ret = 0;
struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_NBIOT_NAME);
ret = AdapterDeviceConnect(adapter, 1, "192.168.131.20","3333",1);
if(ret < 0){
printf(" adapter send failed\n");
return -1;
}
// return 0;
// }
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN)|SHELL_CMD_PARAM_NUM(2)|SHELL_CMD_DISABLE_RETURN, sendzigbee, sendzigbee, show adapter zigbee information);
// int recvzigbee(void) return 0;
// { }
// char recv_msg[128]; SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN)|SHELL_CMD_PARAM_NUM(2)|SHELL_CMD_DISABLE_RETURN, connectnb, connectnb, show adapter nb information);
// struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_ZIGBEE_NAME);
// memset(recv_msg,0,128); int sendnb(int argc, char *argv[])
// AdapterDeviceRecv(adapter, recv_msg, 128); {
// PrivTaskDelay(2000); const char *send_msg = argv[1];
// printf("zigbee recv msg %s\n", recv_msg); int ret = 0;
// return 0; struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_NBIOT_NAME);
// }
// SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0)|SHELL_CMD_DISABLE_RETURN, recvzigbee, recvzigbee, show adapter zigbee information); printf("send argv1 %s\n",argv[1]);
ret = AdapterDeviceSend(adapter, send_msg, strlen(send_msg));
if(ret < 0){
printf(" adapter send failed\n");
return -1;
}
printf("nb send msg %s\n", send_msg);
return 0;
}
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN)|SHELL_CMD_PARAM_NUM(2)|SHELL_CMD_DISABLE_RETURN, sendnb, sendnb, show adapter nb information);
int recvnb(void)
{
char recv_msg[128];
struct Adapter* adapter = AdapterDeviceFindByName(ADAPTER_NBIOT_NAME);
memset(recv_msg,0,128);
AdapterDeviceRecv(adapter, recv_msg, 128);
PrivTaskDelay(2000);
printf("nb recv msg %s\n", recv_msg);
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, recvnb, recvnb, show adapter nb information);

View File

@ -116,7 +116,7 @@ static int Hfa21Receive(struct Adapter *adapter, void *rev_buffer, size_t buffer
printf("hfa21 receive waiting ... \n"); printf("hfa21 receive waiting ... \n");
if (adapter->agent) { if (adapter->agent) {
return EntmRecv(adapter->agent, (char *)rev_buffer, buffer_len, 40000); return EntmRecv(adapter->agent, (char *)rev_buffer, buffer_len, 40);
} else { } else {
printf("Can not find agent \n"); printf("Can not find agent \n");
} }

View File

@ -388,7 +388,7 @@ static int E18Recv(struct Adapter *adapter, void *buf, size_t len)
if(!adapter->agent){ if(!adapter->agent){
PrivRead(adapter->fd, buf, len); PrivRead(adapter->fd, buf, len);
} else { } else {
EntmRecv(adapter->agent, buf, len, 3000);/* wait timeout 3000ms*/ EntmRecv(adapter->agent, buf, len, 3);/* wait timeout 3000ms*/
} }
break; break;
case STT_MODE2: case STT_MODE2: