从外围设备取消连接

4个帖子/ 0新
最后一篇
quangng.
离线
最后一次露面:9个月4周前
加入:2015-10-29 22:03
从外围设备取消连接

大家好!

我正在制作一个应用程序,其中外围可以建立与中央设备(移动电话)的连接。当存在数据(例如,温度变化)时,外围设备将开始广告并与中央设备建立连接。由于外围设备从电池供电,因此我希望在与中央设备连接期间从外设实现连接超时。特别是,在建立连接之后并且更换数据,在5秒内,外设可以决定自己终止连接。您能否建议我如何在SDK5.0.4中完成此过程。

谢谢!

设备:
mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨quangng,

嗨quangng,

首先,您不会从外设发送连接请求,只有一个中心可以发送连接请求。因此,您可以在永久睡眠中使用设备并通过中断唤醒它,例如当传感器具有数据时。之后,设备应开始广告,以便中央定位设备。当中央追踪设备并发出连接请求时,将触发user_app_connection(),并且在该函数中,您将能够启动内核定时器,这些内核计时器将定义与外围设备的连接持续多长时间才能发送通知或者无论您的应用程序都如何做(以便从外设发送数据,您必须使用通知,这意味着您必须从中中心激活外围设备的通知)。当计时器经过计时器的回调时,将被调用,并且从该点开始调用App_easy_gap_disconnect(),它将终止与中央的连接。断开连接后,将调用user_app_disconnect(),并从那里调用您可以再次设置唤醒中断和后退睡眠。

谢谢mt_dialog.

quangng.
离线
最后一次露面:9个月4周前
加入:2015-10-29 22:03
嗨mt_dialog,

嗨mt_dialog,

今天我通过遵循您的说明进行了工作。谢谢!但是,还有一件事要得到改善。我的外围 - 中央连接的超时是5s。当中央断开连接在少于5秒(例如,中央断开连接后2S的连接后的连接)时,可以成功完成连接。断开连接后3S,内核定时器触发了已在User_App_Connection()中已设置的回调函数。嗯......可以预期,因为我没有取消user_app_disconnect()中的内核计时器。如果我使用app_easy_timer_cancel()取消内核计时器时,当计时器已经过期时,应用程序将在App_easy_timer_Cancel()中以Assert_Warning(0)(SDK5.0.4中的第395行)挂起。如果我正确地理解,应用程序挂在那里,因为我取消了非活动内核计时器。那么有没有API调用来检查具有定时器ID(例如,CONN_TIMEOUT_ID)的内核定时器是否有效,以便我们可以正确取消?

mt_dialog.
离线
最后一次露面:2个月3周前
职员
加入:2015-06-08 11:34
嗨quangng,

嗨quangng,

App_easy_Timer()返回Timer_ID当创建定时器时,因此在断开连接回调时,如果在时间经过的时间之前,可以取消计时器。同样在计时器的回调中,您不必取消计时器,因为定时器已经过去了定时器消息留下了执行队列。

谢谢mt_dialog.