gapm_cmp_evt_handler中的bug ?

15个职位/ 0个新职位
最后发表
achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
gapm_cmp_evt_handler中的bug ?

sdk5

我的意思是,如何从扫描完成中获取结果?
案例Gapm_scan_active:
案例GAPM_SCAN_PASSIVE:
{
EXECUTE_CALLBACK_VOID (app_on_scanning_completed);
}

设备:
joe.brackman
离线
最后看到:4年9个月前
加入:2015-05-29 18:47
你读过里维埃拉吗

你读过Riviera Waves GAP规范(RW-BLE-GAP-IS.pdf)吗?复制和粘贴:

4.2通用界面
通用GAP Manager提供了一组命令,使用以下命令完成事件来完成这些命令
消息。
4.2.1 GAPM_CMP_EVT准备
参数:
类型参数描述
GAPM操作代码(见表23)
uint8_t操作状态状态(见表39)
描述:
这是GAP操作的通用完整事件。操作时所有操作都触发此事件
完成的
-----------------------------------------------------------------

因此,GAPM_CMP_EVT消息有两个参数:操作和状态。操作参数是什么命令刚刚完成,状态是如何/为什么它完成。

状态码:

值错误描述
0x00 GAP_ERR_NO_ERROR无错误
0x40 GAP_ERR_INVALID_PARAM无效的参数集
0x41 GAP_ERR_PROTOCOL_PROBLEM协议交换问题,得到意外响应
0x42 GAP_ERR_NOT_SUPPORTED请求软件配置不支持
0x43当前状态不允许GAP_ERR_COMMAND_DISALLOWED请求
0x44 GAP_ERR_CANCELED请求操作被取消。
0x45 GAP_ERR_TIMEOUT请求操作超时。
0x46 GAP_ERR_DISCONCONCONCETTICTED在操作期间丢失的链接连接。
0x47 GAP_ERR_NOT_FOUND搜索算法结束,但没有找到结果
0x48 GAP_ERR_REJECTED请求被对端设备拒绝
0x49 GAP_ERR_PRIVACY_CFG_PB隐私配置问题
0x4a gap_err_add_data_invalid复制或无效的广告数据
表39:GAP错误码

除此之外,GAPM_CMP_EVT消息没有提供任何更多的信息。

如果您对已收到的广告活动感兴趣,那就是GapM_Adv_Report_ind。

你的问题有点含糊;也许你可以解释一下你所说的“取回结果…”是什么意思。什么结果?

谢谢。

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
谢谢你的回复。

谢谢你的回复。
扫描后,我想获得一个被找到的设备列表,此外,获得设备名称,rssi,地址等。
顺便说一下,我在gapm_adv_report_ind中设置了一个断点,但没有看到它被达到。

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
请注意,扫描的是

请注意,扫描是观察者模式。
味精- >模式= GAP_OBSERVER_MODE;/ / GAP_GEN_DISCOVERY
味精- > op。代码= GAPM_SCAN_ACTIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
msg-> filter_duplic = scan_filt_duplic_en;

MT_dialog
离线
最后看到:3个月4天前
工作人员
加入:2015-06-08 34
嗨achao1104,

嗨achao1104,

将您的断点放在app_task.c文件中的gapm_adv_report_ind_handler()上,您将能够提取adv_report结构的成员。如果您仍然没有得到指示,那么您可以使用DSPS主机实现(进行所需的更改)并在相同的函数上放置一个断点,这只是为了确保您成功配置了主机应用程序。

由于MT_dialog

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
实际上,我写了a

实际上,我在app_task.c文件中的gapm_adv_report_ind_handler()中放置了一个断点,但是没有到达它。顺便说一下,我正在使用最新的sdk5,你可以给我指出“DSPS主机实现”(文件夹路径),只是确保我们是在谈论相同的事情。

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
我下载了dsps

我下载了dsps,不同的是,我使用最新的sd5,和**msg->模式= GAP_OBSERVER_MODE**模式,我没有看到断点达到。请帮助。

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
我也从GAP换了角色

我还改变角色从GAP_OBSERVER_SCA到GAP_CENTRAL_MST和向后,但仍然不能工作。请帮帮我,这花了我好几天了,请帮帮我。
static const结构gapm_configuration user_gapm_conf = {
/ /。= GAP_OBSERVER_SCA角色,
.role = GAP_CENTRAL_MST,
.irk = {0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00},
///设备外观(0x0000 -未知外观)
//填表https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
.appearance_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
/// maximal mtu.
.max_mtu = 23日

这是发送:
scan_cb app_easy_timer (300);
struct gapm_start_scan_cmd * msg =(struct gapm_start_scan_cmd *)ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);
//最大的对等连接
//msg->mode = GAP_GEN_DISCOVERY;//
msg->mode = GAP_OBSERVER_MODE;
味精- > op。代码= GAPM_SCAN_PASSIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
msg-> filter_duplic = scan_filt_duplic_en;
msg->间隔= 100;
msg->窗口= 5000;
ke_msg_send(味精);

空白scan_cb(空白)
{
struct gapm_cancel_cmd *cmd =(struct gapm_cancel_cmd *) KE_MSG_ALLOC(gapm_cancel_cmd, TASK_GAPM, TASK_APP, gapm_cancel_cmd);
cmd - >操作= GAPM_SCAN_PASSIVE;/ /设置GAPM_SCAN_PASSIVE
KE_MSG_SEND(CMD); //发送消息

}

static const struct app_callbacks user_app_callbacks = {
.app_on_connection = null,
.app_on_disconnect =零,
.app_on_update_params_rejected =零,
.app_on_update_params_complete =零,
.app_on_set_dev_config_complete = default_app_on_set_dev_config_complete,
.app_on_adv_undirect_complete = null,
.app_on_adv_direct_complete =零,
.app_on_db_init_complete = default_app_on_db_init_complete,
.app_on_scanning_completed = user_scanning_completed,
.app_on_adv_report_ind = user_adv_report_ind,
#如果(BLE_APP_SEC)
.app_on_pairing_request =零,
.app_on_tk_exch_nomitm =零,
.app_on_irk_exch = null,
.app_on_csrk_exch =零,
.app_on_ltk_exch = null,
.app_on_pairing_succeded =零,
.app_on_encrypt_ind =零,
.app_on_mitm_passcode_req =零,
.app_on_encrypt_req_ind =零,
# endif / / (BLE_APP_SEC)
};

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
在宣传方面:

在宣传方面:

//---------------------------------------------------------------------
//------------- non-connectable & undirected advertise related common -
///广告服务数据
///广告AD类型标志,不得在广告中设置数据
#定义USER_ADVERTISE_DATA \“\ x03”
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
avad_uuid_device_information_service.

///广告数据长度 - 最多28个字节,保留3个字节以设置
#定义USER_ADVERTISE_DATA_LEN (sizeof (USER_ADVERTISE_DATA) 1)
///广告名称
#定义USER_DEVICE_NAME(“”)
///广告名称长度
#定义USER_DEVICE_NAME_LEN (sizeof (USER_DEVICE_NAME) 1)
///扫描响应数据
#定义USER_ADVERTISE_SCAN_RESPONSE_DATA”“
///扫描响应数据长度-最大31字节
#定义USER_ADVERTISE_SCAN_RESPONSE_DATA_LEN (sizeof (USER_ADVERTISE_SCAN_RESPONSE_DATA) 1)

//---------------------------------------------------------------------
//------------- 直接通知,相关 ----------------------------

static const struct advertis_configuration user_directed_advertise_conf = {
///发布操作类型。
.Advertise_operation = Adv_Direct,
///自己的BD地址源:
.address_src = GAPM_PUBLIC_ADDR,
///广告频道地图
.channel_map = 0 x7,
};

静态const struct directed_advertise_configuration user_directed_advertise_target_address_conf={
///设备的BD地址
.addr = {0 0 x1, x2, x3, 0 x4, 0 x5, 0 x6},
///设备的地址类型0=public/1=private random
.addr_type = 0.
};

//---------------------------------------------------------------------
//--------------------- 参数更新,相关 --------------------------

静态const struct connection_param_configuration user_connection_param_conf = {
///连接间隔最小测量ble双插槽(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.intv_min = MS_TO_DOUBLESLOTS (10),
///连接间隔最大测量ble双插槽(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.intv_max = ms_to_doubleslots(20),
///连接事件中测量的延迟
.latency = 0,
///监控超时时间(10ms)
///使用宏MS_TO_TIMERUNITS从毫秒(ms)转换为定时器单位
.time_out = MS_TO_TIMERUNITS (1250),
///最小连接事件持续时间(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.ce_len_min = MS_TO_DOUBLESLOTS (0)
///最大连接事件持续时间(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.ce_len_max = MS_TO_DOUBLESLOTS (0)
};

//---------------------------------------------------------------------
//--------------------- GAPM——相关 ----------------------------------

static const结构gapm_configuration user_gapm_conf = {
.role = GAP_PERIPHERAL_SLV,
.irk = {0 x00 0 x00 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00, 0 x00},
///设备外观(0x0000 -未知外观)
//填表https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
.appearance_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
/// maximal mtu.
.max_mtu = 23日
/ / /外围 : *****************************************************************
///在ble double插槽中测量的最小连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.con_intv_min = ms_to_doubleslots(10),
///在ble双插槽中测量的最大连接间隔(1.25ms)
///使用宏观MS_TO_DOUBLESLOTS从毫秒(MS)转换为双插槽
.con_intv_max = MS_TO_DOUBLESLOTS (20),
/// Slave首选连接延迟。它是通过跳过连接事件来度量的
.con_latency = 0,
/// Slave首选链路监控超时,以计时器单位(10ms)为单位
///使用宏MS_TO_TIMERUNITS从毫秒(ms)转换为定时器单位
.superv_to = MS_TO_TIMERUNITS (1000),
///隐私设置位字段(0b1 =启用,0b0 =禁用)
/// - [bit 0]:隐私支持
/// - [位1]:多键支持(仅限外围设备);如果已启用,隐私标志是
/// 只读。
/// - [位2]:重新连接地址可见。
.flags = 0
};

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
请帮忙

请帮忙

MT_dialog
离线
最后看到:3个月4天前
工作人员
加入:2015-06-08 34
嗨achao,

嗨achao,

DSPS是在SDK 3中实现的,在SDK 5中没有扫描仪的实现,我已经改变了app_scan()函数在GAP_OBSEREVER_MODE下操作,我能够捕获广告指示。您可以将断点放在if语句的gapm_adv_report_ind_handler()中,然后再次检查。另外,请尝试禁用重复数据包过滤,以检查这是否给您带来任何麻烦。关于作为扫描器,除了设置你的扫描参数,你是否设置你的设备的配置(角色)作为一个中心?如果您不能捕捉到与DSPS应用程序的广告指示可能是错误的广告。请尝试运行一个简单的外设应用程序,并使用dsps主机应用程序捕获广告字符串。

这是我用SDK5模板测试的:

1)进入user_config.h,将。role修改为GAP_OBSERVER_SCA

2)在user_callback_config中使用自定义函数改变默认on_config_complete函数,该函数将开始扫描。

3)采用扫描功能直接从dsps应用。

4)我能够抓住广告迹象

您还可以使用Smart Spippets工具检查您的应用程序是否扫描。

由于MT_dialog

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
谢谢,你能把你的

谢谢,你能把你的密码发邮件给我吗?
bld2014@sohu.com

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
顺便说一下,我可以

顺便说一下,我可以通过使用嗅探工具得到广告消息,所以这应该不是广告的副作用问题,我会检查片段工具,周末愉快,谢谢

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
谢谢,最后,得到它的工作

谢谢,终于让它工作了。
还有一个问题:
如果我改变了“msg->窗口= 5;”(设置为5,工作)到“msg->窗口= 50;”或者“msg-> window = 500”,它没有捕获adv指示,但立即调用user_scanning_completed(在用户回调文件中定义),为什么?窗口在这里是什么意思?

scan_cb app_easy_timer (300);
struct gapm_start_scan_cmd * msg =(struct gapm_start_scan_cmd *)ke_msg_alloc(gapm_start_scan_cmd,task_gapm,task_app,gapm_start_scan_cmd);
//最大的对等连接
味精- >模式= GAP_OBSERVER_MODE;
味精- > op。代码= GAPM_SCAN_PASSIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
/ /味精- > filter_duplic = SCAN_FILT_DUPLIC_EN;
味精- > filter_duplic = SCAN_FILT_DUPLIC_DIS;
味精- >间隔= 10;
味精- >窗口= 5;
ke_msg_send(味精);

MT_dialog
离线
最后看到:3个月4天前
工作人员
加入:2015-06-08 34
嗨achao1104,

嗨achao1104,

窗口指示扫描仪将扫描多久,它必须小于间隔(你的设备将扫描的频率),如果你设置你的窗口大于你的间隔(间隔10,窗口50或500)不会得到任何东西。间隔是您的扫描窗口加上您的设备将保持空闲扫描不同的通道之间的时间。

由于MT_dialog