Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
AT
关于 static int ec20_socket_connect()函数的使用问题:
发布于 2018-10-31 19:20:59 浏览:2873
订阅该版
static int Sim7100_socket_connect(int socket, char *ip, int32_t port, enum at_socket_type type, rt_bool_t is_client) { int result = 0, event_result = 0; rt_bool_t retryed = RT_FALSE; RT_ASSERT(ip); RT_ASSERT(port >= 0); /* lock AT socket connect */ rt_mutex_take(at_event_lock, RT_WAITING_FOREVER); __retry: if (is_client) { switch (type) { case AT_SOCKET_TCP: /* send AT commands(AT+QIOPEN=
,
,"
","
/
",
,
,
) to connect TCP server */ /* contextID = 1 : use same contextID as AT+QICSGP & AT+QIACT */ /* local_port=0 : local port assigned automatically */ /* access_mode = 1 : Direct push mode */ if (at_exec_cmd(RT_NULL, "AT+CIPOPEN=%d,\"TCP\",\"%s\",%d
", socket, ip, port) < 0) { result = -RT_ERROR; goto __exit; } break; case AT_SOCKET_UDP: if (at_exec_cmd(RT_NULL, "AT+CIPOPEN=%d,\"UDP\",\"%s\",%d
", socket, ip, port) < 0) { result = -RT_ERROR; goto __exit; } break; default: rt_kprintf("Not supported connect type : %d.", type); return -RT_ERROR; } } /* 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 (at_socket_event_recv(SET_EVENT(socket, 0), rt_tick_from_millisecond(30 * 1000), RT_EVENT_FLAG_OR) < 0) { rt_kprintf("
socket (%d) connect failed, wait connect result timeout.
", socket); result = -RT_ETIMEOUT; goto __exit; } /* waiting OK or failed result */ if ((event_result = at_socket_event_recv(Sim7100_EVENT_CONN_OK | Sim7100_EVENT_CONN_FAIL, rt_tick_from_millisecond(1 * 1000), RT_EVENT_FLAG_OR)) < 0) { rt_kprintf("
socket (%d) connect failed, wait connect OK|FAIL timeout.
", socket); result = -RT_ETIMEOUT; goto __exit; } /* check result */ if (event_result & Sim7100_EVENT_CONN_FAIL) { if (!retryed) { rt_kprintf("socket (%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", socket); if (Sim7100_socket_close(socket) < 0) { goto __exit; } retryed = RT_TRUE; goto __retry; } rt_kprintf("socket (%d) connect failed, failed to establish a connection.", socket); result = -RT_ERROR; goto __exit; } __exit: /* unlock AT socket connect */ rt_mutex_release(at_event_lock); return result; } 是这个连接函数,我用了他之后,返回正确.ok, +CIPOPEN: 0,0.., 一般情况发送AT指令后返回这个就行了,我们这个函数后面有几个判断:于是他就再回复:socket (%d) connect failed, wait connect result timeout, 是因为什么?
查看更多
6
个回答
默认排序
按发布时间排序
w1019564793
2018-10-31
这家伙很懒,什么也没写!
不知我理解对不对,在 at_socket_device_init_ 中有个 注册函数 at_set_urc_table(urc_table, sizeof(urc_table) / sizeof(urc_table[0])); /* 添加多种 URC 数据至 URC 列表中,当接收到同时匹配 URC 前缀和后缀的数据,执行 URC 函数 */ 因此,当有返回结果时,如 +CIPOPEN: 0,0,他会调用发送事件函数,因此,到了 上面函数 at_socket_event_recv(SET_EVENT(socket, 0), rt_tick_from_millisecond(30 * 1000),。 我出现问题是因为 我没有改URC 的关键词,因此一直没有接受事件的发生,so........ 现在困扰我的是当 我接受 +CIPOPEN: 0,0 后,为什么 当接收到同时匹配 URC 前缀和后缀的数据,执行 URC 函数 这个匹配的动作程序里我还没找到。 也不知道我理解的对不对。
Cheney_Chen
2018-11-01
这家伙很懒,什么也没写!
楼上说的没错,at_socket_event_recv 函数在一直等待 Sokcet 连接成功的信号量发送,上面出现错误的情况就是没有等到信号量超时的问题。这里的信号量一般是 URC 匹配之后发送的,看来可能是匹配 URC 的时候没有匹配导致的,可以断点调试时候进入 URC 事件处理方式,或者开启 RAW 数据查看具体接收的数据流程,确定 URC 判断方式是否合理。
w1019564793
2018-11-01
这家伙很懒,什么也没写!
>楼上说的没错,at_socket_event_recv 函数在一直等待 Sokcet 连接成功的信号量发送,上面出现错误的情况就 ... --- 这个我改了,因为我用的是Sim7100,它们回复的不同。现在就是想知道服务器给我发数据,客户端的接收流程,我想打印出我接受的数据。我的断点调试是有问题,没法调试
Cheney_Chen
2018-11-02
这家伙很懒,什么也没写!
你可以开启 RAW 数据,会把服务器下发的数据和设备发送的数据的统一打印出来,可以很容易确定数据接收的流程,记得开启 RAW 数据后要把 shell 串口波特率调整为 921600
丰行王者
2020-02-27
这家伙很懒,什么也没写!
请问一下这个函数是怎么使用的呢
小小李sunny
2020-03-05
这家伙很懒,什么也没写!
>请问一下这个函数是怎么使用的呢 --- 同问,这个函数怎么使用的呢?你这边整明白没?
撰写答案
登录
注册新账号
关注者
0
被浏览
2.9k
关于作者
w1019564793
这家伙很懒,什么也没写!
提问
18
回答
37
被采纳
0
关注TA
发私信
相关问题
1
rt-thread 2g/3g/4g通信模块的教程有吗?
2
基于AT指令,用esp8266如何连接mqtt?
3
AT组件使用问题
4
官方AT客户端应用笔记的几个小tip
5
RTT的SAL能够判断使用LWIP或者AT?
6
rt_therad AT组件移植不成功(结贴)
7
AT组件在哪个版本的?
8
AT组件 连接 Onenet 连接失败
9
esp8266 AT指令 MQTT连接问题
10
AT组件使用问题之模块主动上报【已解决】
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
在用clangd开发RTT吗,快来试试如何简单获得清晰干净的工作区
2
GD32F450 片内 flash驱动适配
3
STM32H7R7运行CherryUSB
4
RT-Smart首次线下培训,锁定2024 RT-Thread开发者大会!
5
使用RC522软件包驱动FM1722
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
6
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部