14个帖子/ 0新
最后一篇文章
卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
蓝牙断开连接

你好!
我参考的是官方例程prox_报告

1.请问DA14580如何主动断开连接,调用那个函数?调用断开连接时的默认应用(空)似乎不对。

2.请问DA14580和手机APK连接之后,人为关闭手机蓝牙,使手机APK和DA14580异常断开,DA14580一直没收到断开消息,没有广播,无法再次
和DA14580连接,只有断电重启才能连接,请问该如何处理?

关键词:
设备:
赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

首先,确保prox_reporter工程销有做过任何。以下是功能的实现

1.外设端主动断开蓝牙

// 1. 在 用户_proxr.c中,创建一个用户层连接成功的回调函数,把链路索引保存下来uint8\u t connect\u idx;空白user_app_on_connection(uint8_t connection_idx,结构gapc连接要求标识const*param){connect_idx=connection_idx;默认的连接(连接idx,参数);}// 2. 在 用户_proxr.h中声明空白user_app_on_connection(uint8_t connection_idx,结构gapc连接要求标识const* param);// 3.把连接成成像函到呼叫列表,在user_callback_config.h中:.app_on_connection=用户_app_on_connection// 4. 调用美国石油学会实现主动断开app_easy_gap_disconnect(connect_idx);

2.系统蓝牙链路开后,会用:

用户\u应用程序\u打开\u断开连接

2.

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好,性感

你好,性感

我在prox_报告做了如下修改:

加加支持arch_printf.
修改广播参数:
用户\u默认\u hnd\u配置参数修改如下
.adv_scenario=DEF_adv_FOREVER,.adv_period=MS_TO_TIMERUNITS(18000),
user_adv_conf参修改下:
.intv_min = 160,.intv_max = 160,
关闭BLE_SPOTA_接收器//定义BLE_SPOTA_接收器1
关键词BLE_PROX_REPORTER #DEFINE USE_PUSH_BUTTON 0 /////////#define ble_prox_reporter 1

我需要在连接断开后一直广播,在人为关闭手机蓝牙后,DA14580会调用 用户应用程序在断开连接时然后广播。但是

在更多次打开关的关键字蓝牙后,da14580广播有时断断续续,我如上修改广播数是否正常,还需要修改别的吗?

户外有一击请提供,da14580支持硬延时吗,我用来iic oighers,oigs indieds overnumn:

void sensor_init(void)

{

传感器复位()//必须延迟3ms,下一个传感器待机()

ADC_USDELAY(3000);

sensor_standby();//必须延迟2ms,下一个设置sensor_control();

adc_usDelay(2000年);

传感器控制1();

adc_usDelay(2000年);

传感器控制2();

adc_usDelay(2000年);

}

请问我应该如何处理延时?延时时间多,似乎使系统不稳定,请问我该如何处理?传感器_init();应该在何处调用?

如果使用 应用程序\u轻松\u计时器延时最低单位是10毫秒,因为延时次数较多,有没有更好的方法?

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

你广播跑数量没,如果程序没做任何修改的,不合会,你所说的。出现这个现象,是:

1.硬件问题,有频偏或者天线没设计好或者晶振的参数不符合数据表的要求

2.软件问题,SDK是一套消息机制,程序里不能有阻塞

传感器初始化等硬件的初始化可放 应用程序初始化上的用户回调函数里,可在 用户\u回调\u conifg.h中找到该接口。

你可以通过(i--)的方面来实现时

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好,请问 应用程序初始化上的用户

你好,请问 应用程序初始化上的用户和系统初始化先后顺序是那个?测试发现应用程序初始化上的用户似乎在系统初始化前调用。

如果传感器 传感器初始化放在应用程序初始化上的用户但是i2c_init放在系统初始化中的周界函数中。

没有先i2c_init,才能传感器init。我us ust_on_app_init似乎是初始析一定是数量,也能初始化器材是吧?

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

应用程序初始化上的用户在 系统初始化中调用:

如果(用户\u app\u main\u循环\u callbacks.app\u在\u init上=空)
user_app_main_loop_回调。app_on_init();

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好,你的描述是能够主断开连接,请问断开着

你好,根据你的描述是能够主动断开连接,请问断开连接后,发现ke_state_get(TASK_APP)=APP_CONNECTED请问这正常吗,断开连接,停止广播ke_state_get(任务应用程序)不应该是可连接的应用程序吗?

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
不正常。

不正常。

断开后,正常应该会调用开启广播的函数。然后把 应用程序任务的状态设置为:

ke_状态_集(任务_应用程序,应用程序可连接);

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好

你好

蓝牙主动词的时代,蓝牙断开连接,加上一间标志,使得在进入睡眠前,断开连接,不用使用次数。

问题:现阶段,蓝牙蓝牙,唤醒,传感传感都能正式工作。和手机连接后,蓝牙也能主断开进入模式,但在测试通信距离时钟,

手机和蓝牙大厦10米多时尚,手机和机器备用开放,蓝牙料准备机,项目也添加乐看门,请问为主手机?我应该如何去排查问题。

(远距离断开连接后死机概率大概2/3)

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

请问你的问题是:断开蓝牙后,设备会有几率死机;还是:在不同情况下断开(主动断开或拉远距离断开),设备有几率死机?

我比较倾向于前者,因为对于设备固件来说,无论如何断开,固件都会回调 断开连接函数,区别只是断开原因不同。

假设是,在这么大厦率断开放机的情况情况下,原因很可以在你的在你身上的诗程在所在你设备的休眠程梦啊

// 1.制备上电,依次依次行硬件锰矿化,协议协议化,内内初矿化,蓝牙蓝牙初始核过程,上述初始始过程,上游完成之道,回调:void default_app_on_db_init_complete(void){execute_default_operation_void(default_operation_adv);//完成初始化工作,发出广播,若想上电不发电广播,则将1点中的广播语句屏蔽可} // 2.假设别是通行一象按来使系统在“休眠”和“唤醒”之间的,并且休眠时,蓝牙不行,唤醒时,蓝牙有广播。静音静音睡眠睡眠_en = true;静态bool需要_enter_sleep = false;静态void app_button_press_cb(void){if(getbits16(sys_stat_reg,per_is_down)){periph_init();}如果(!Sleep_en)//当前不在休眠休眠,需要进入休眠{cercer_enter_sleep = true;if(user_connected_idx!= gap_invalid_conidx){app_easy_gap_disconnect(user_connected_idx);} else {app_easy_gap_advertise_stop();}} else //当前属于休眠模式,需要退出休眠{cercer_enter_sleep = false;sleep_en = false;user_app_adv_start(); } } void user_app_connection(uint8_t connection_idx, struct gapc_connection_req_ind const *param) { if (app_env[connection_idx].conidx != GAP_INVALID_CONIDX) { user_connected_idx = connection_idx; } } void user_app_disconnect(struct gapc_disconnect_ind const *param) { uint8_t state = ke_state_get(TASK_APP); if ((state == APP_SECURITY) || (state == APP_CONNECTED) || (state == APP_PARAM_UPD)) { if (need_enter_sleep) { need_enter_sleep = false; sleep_en = true; } else { sleep_en = false; user_app_adv_start(); } } else { // We are not in a Connected State ASSERT_ERR(0); } } void user_app_adv_undirect_complete(const uint8_t status) { if (status == GAP_ERR_CANCELED) { sleep_en = true; need_enter_sleep = false; } }

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好

你好

感谢回复,我会再检讨下。

主动断开没发现问题,死机都是在拉远距离会发生,通过日志看调用 断开连接然后死机

void user_on_connection(uint8_t connection_idx,struct gapc_connection_req_ind const*param){arch_printf(“user_on_connection\r\n”);save_connection_idx=connection_idx;默认的连接(连接idx,参数);}void user_on_disconnect(struct gapc_disconnect_ind const*param){if(disconnect_no_adv_flag==0){default_app_on_disconnect(param);}arch_printf(“用户在断开连接上\r\n”);}void将设备设置为睡眠(void){uint8\u t延迟时间=0x80;arch_printf(“将设备设置为睡眠\r\n”);如果(alg_定时器)=简易定时器(无效定时器){应用简易定时器(取消)(alg定时器);alg_timer_hnd=简单_timer_无效_timer;}如果(按键计时器)简易计时器\u无效计时器){app\u简易计时器\u取消(键\u计时器\u hnd);key\u timer\u hnd=EASY\u timer\u INVALID\u timer;}如果(ke_state_get(TASK_APP)=APP_CONNECTED){disconnect_no_adv_flag=1;应用程序\u轻松\u间隙\u断开(保存连接\u idx);arch_printf(“111ke_state_get(TASK_APP)=%d\r\n”,ke_state_get(TASK_APP));”GPIO_设置不活动(GPIO_LED 1_绿色_端口,GPIO_LED 1_绿色_引脚);GPIO_设置不活动(GPIO_LED 2_红色_端口,GPIO_LED 2_红色_引脚);GPIO_设置不活动(GPIO_LED 3_黄色_端口,GPIO_LED 3_黄色_引脚);而(延迟时间--);app_easy_gap_advertise_stop();arch_printf(“222ke_state_get(TASK_APP)=%d\r\n”,ke_state_get(TASK_APP));HSPAD042A_备用();hsactd_设置_为_sniff();拱门可外接唤醒开启();i2c_释放();app_accInt_wakeup_enable();arch_set_extended_sleep();}

由于调用应用程序\u轻松\u间隙\u断开(保存连接\u idx);会进入用户在断开连接时然后开始广播,所以添加断开\u no\u adv\u标志标志位控制不广播。

将设备设置为睡眠函数中ke_state_get(任务应用程序)两次都是5.这应该是不正常的,需要添加KEU状态集(任务应用程序)函数吗?

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

1.使用应用程序\u轻松\u间隙\u断开(保存连接\u idx);后,无需再次调用app_easy_gap_advertise_stop();

2.while(延迟时间--)的延时时间时多少?由于系统是基于消息机制的,所以一般情况下,任何消息回调中都不能有明显的阻塞

3.ARCH_BLE_EXT_WAKEUP_ON(); app_accint_wakeup_enable();这两行代码除了除了在断开状态外,还应该放在:

void user_app_adv_indirect_complete(const uint8_t status){if(status==GAP\u ERR\u cancelled){sleep\u en=true;需要输入睡眠=假;arch_ble_ext_wakeup_on();//设置一个标志位,使系统只能通过外部GPIO信号唤醒 app_accInt_wakeup_enable();//使能唤醒源 } }

卢尤克
离线
最后一次见到:2年前一周前
加入:2016-07-18 01:38
你好,在user_app_adv_undirecrect

你好,在用户\u应用\u adv\u无向\u完成添加拱门可外接唤醒开启();和app_accInt_wakeup_enable();每次都会死机。

请问arch_ble_ext_wakeup_on();//将BLE核心放在永久性睡眠中。只有外部事件可以唤醒它

是否调用arch_ble_ext_wakeup_on蓝牙内核立马进入睡眠模式?此时如果存在定时回调函数是否旧会出错?

赛宾
离线
最后一次见到:10个月3周前
工作人员
加入:2017-12-14 02:48
你好,

你好,

正常情况下,系统进入休眠之后,还是会因为一些事件定时的被唤醒,比如,蓝牙事件,定时器事件等

ARCH_BLE_EXT_WAKEUP_ON参数后,系统就只在一种情况下会被唤醒:外部中断。其它的,比如蓝牙事件,定时器事件,都会失效。