取消从外围设备连接

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

大家好!

我正在一个应用程序,外围可以建立与中央设备的连接(移动电话)。当有数据(例如,温度变化),外周将开始广告,并建立与中央设备的连接。由于外围从电池供电,我想与中央装置连接期间实现从外围连接超时。具体地,建立之后的连接和数据交换,在5秒内的周边可以决定本身终止连接。你能请咨询我如何这个程序可以在SDK5.0.4完成。

谢谢!

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

嗨quangng,

首先,你将无法从外围发送连接请求,只有一个中心可以发送连接请求。所以,你可以在永久睡眠的设备并通过中断唤醒它,例如,当一个传感器的数据。设备应做起了广告,以使中央后定位装置。当中央轨道设备并发出连接请求user_app_connection()将被触发,该功能,您就可以启动一个内核计时器,将定义多久与外围的连接将持续以发送您的通知或作事您的应用程序会做(以从外围发送数据,你将不得不使用的通知,这意味着你将不得不从中央激​​活外设的通知)。当计时器经过的计时器回调将被调用,并从该点可以调用app_easy_gap_disconnect()将终止与中央的联系。断开的user_app_disconnect后()将被调用,并从那里你可以重新设置唤醒中断和后备睡觉。

谢谢mt_dialog.

quangng
离线
最后一次露面:1年1个月前
加入:2015年10月29日22:03
嗨MT_dialog,

嗨MT_dialog,

今天,我把它按照你的指令工作。谢谢!然而,还有一件事还有待提高。我周围的超时 - 中央连接为5秒。当中央断开在连接时间小于5s(例如,中央断开已建立的连接的2秒后的连接),该连接可以成功地完成。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.
离线
最后一次露面:6个月3周前
职员
加入:2015-06-08 11:34
嗨quangng,

嗨quangng,

该app_easy_timer()返回一个timer_id创建计时器时,所以在断开回调可以取消计时器,如果这个时间过去之前发生。另外,在计时器回调你没有取消计时器,由于计时器经过计时器消息已经离开了执行队列。

谢谢mt_dialog.