嵌入式技术论坛
直播中

安德森大

8年用户 1215经验值
擅长:接口/总线/驱动
私信 关注
[问答]

AT-DEVICE接收应答无效如何解决

RAW看到已经回了0, CONNECT OK…
为什么还是sim0 device socket(0) wait connect result timeout
怎么设置接收事件

1.jpg

已经注册

static int sim800c_device_register(void)
{
return at_device_register(&(sim800c->device),
sim800c->device_name,
sim800c->client_name,
AT_DEVICE_CLASS_SIM800C,
(void *) sim800c);
}
INIT_APP_EXPORT(sim800c_device_register);
if(sim800c->device.sockets->ops->at_connect(sim800c->device.sockets, "47.96.147.99", 18085,AT_SOCKET_TCP,1)==RT_EOK)
{
rt_kprintf("Socket create ok.\n");
}
else{
rt_kprintf("Socket create failed.\n");
return -RT_ERROR;
}
我看sim800c_socket_connect里面是由SET_EVENT的

static int sim800c_socket_connect(...)
{
....
__retry:
/* clear socket connect event */
event = SET_EVENT(device_socket, SIM800C_EVENT_CONN_OK | SIM800C_EVENT_CONN_FAIL);
sim800c_socket_event_recv(device, event, 0, RT_EVENT_FLAG_OR);
}

回帖(4)

王燕

2022-8-19 11:51:13
SET_EVENT(device_socket, SIM800C_EVENT_CONN_OK | SIM800C_EVENT_CONN_FAIL)
无效吗
举报

张燕

2022-8-19 11:51:21
有效,这种用法很正确。
举报

张强

2022-8-19 11:51:40
这种现象是偶发还是必现呢?

我看到这个 Connect 操作中插入了一条 AT+CGREG?命令,这个命令是 TCP Connect 外的命令。

我怀疑是由于这条命令,导致接收超时了;后面看到了CONNECT OK的信息,可以尝试延时。

    /* waiting result event from AT URC, the device default connection timeout is 75 seconds, but it set to 10 seconds is convenient to use */
    if (sim800c_socket_event_recv(device, SET_EVENT(device_socket, 0), 10 * RT_TICK_PER_SECOND, RT_EVENT_FLAG_OR) < 0)
    {
        LOG_E("%s device socket(%d) wait connect result timeout.", device->name, device_socket);
        result = -RT_ETIMEOUT;
        goto __exit;
    }
    /* waiting result event from AT URC, the device default connection timeout is 75 seconds, but it set to 10 seconds is convenient to use */
举报

张强

2022-8-19 11:51:46
SET_EVENT(socket_number| event);

事件的高 16 位为 socket 的指代值,后 16 位为一些成功或者失败的事件。
可以参考 sim800 下的 at_socket_sim800c.c 文件
举报

更多回帖

发帖
×
20
完善资料,
赚取积分