gapm_cmp_evt_handler中的错误?

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

sdk5

我的意思是如何从扫描完成中获取结果?
案例GAPM_SCAN_ACTIVE:
案例GAPM_SCAN_PASSIVE:

EXECUTE_CALLBACK_VOID (app_on_scanning_completed);

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

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

4.2通用接口
通用GAP管理器提供了一组命令,这些命令由以下命令完成事件完成
消息。
4.2.1 GAPM_CMP_EVT准备
参数:
类型参数说明
GAPM操作代码(见表23)
uint8_t status操作状态(见表39)
描述:
这是GAP操作的通用完整事件。当操作为时,所有操作都会触发此事件
完成了
-------------------------------------- 剪断 --------------------------------------

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

状态码:

数值错误描述
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_cancelled请求的操作已取消。
0x45 GAP_ERR_TIMEOUT请求操作超时。
0x46 GAP_ERR_DISCONNECTED操作过程中链路连接丢失
0x47 GAP_ERR_NOT_FOUND搜索算法已完成,但没有发现结果
0x48 GAP_ERR_REJECTED对端设备拒绝请求
0x49 GAP_ERR_PRIVACY_CFG_PB隐私配置问题
0x4A GAP_ERR_ADV_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
请注意,扫描是

请注意,扫描是观察者模式。
msg->mode = 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个月3天前
工作人员
加入: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
事实上,我已经放了一个

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

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

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

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

我还将角色从GAP_OBSERVER_SCA改为GAP_CENTRAL_MST和向后,但仍然不能工作。请帮帮我,我花了好几天时间,请帮帮我。
静态构造gapm_configuration user_gapm_conf = {
/ /。role = GAP_OBSERVER_SCA,
.role = GAP_CENTRAL_MST,
.irk = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
///设备外观(0x0000 -未知外观)
//根据https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
.appearance e_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
///最大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 ->interval = 100;
Msg ->window = 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->operation = GAPM_SCAN_PASSIVE;//设置GAPM_SCAN_PASSIVE
ke_msg_send(cmd)

静态const结构app_callbacks user_app_callbacks = {
.app_on_connection = NULL,
.app_on_disconnect = NULL,
.app_on_update_params_rejected = NULL,
.app_on_update_params_complete = NULL,
.app_on_set_dev_config_complete = default_app_on_set_dev_config_complete
.app_on_adv_undirect_complete = NULL,
.app_on_adv_direct_complete = NULL,
.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 = NULL,
.app_on_tk_exch_nomitm = NULL,
.app_on_irk_exch = NULL,
.app_on_csrk_exch = NULL,
.app_on_ltk_exch = NULL,
. app_on_pairing_succeeded = NULL,
.app_on_encrypt_ind = NULL,
.app_on_mitm_passcode_req = NULL,
.app_on_encrypt_req_ind = NULL,
#endif // (BLE_APP_SEC)
};

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

在广告方面:

//---------------------------------------------------------------------
//-------------非连接和无定向广告相关的常见——
///广告服务数据
///广告广告类型标志,不得在广告数据中设置
#定义user_advertisse_data "\x03
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
ADV_UUID_DEVICE_INFORMATION_SERVICE

///广告数据长度-最大28字节,保留3字节设置
定义USER_ADVERTISE_DATA (user_advertisse_data)-1
///广告名称
#定义用户名("a")
///广告名长度
定义用户名(USER_DEVICE_NAME)
///扫描响应数据
#定义user_adverse_scan_response_data "
///扫描响应数据长度-最大31字节
定义user_advertisse_scan_response_data_len (user_advertisse_scan_response_data)

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

Static const struct advertise_configuration user_directed_advertise_conf ={
///发布操作类型。
.advertise_operation = ADV_DIRECT,
///设备自有BD地址源:
.address_src = GAPM_PUBLIC_ADDR,
///广告通道图
.channel_map = 0x7,
};

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

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

user_connection_param_conf = {
///双槽连接间隔最小值为1.25ms
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双槽
.intv_min = MS_TO_DOUBLESLOTS(10),
///双槽最大连接间隔(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),
///在ble双插槽中测量的最小连接事件持续时间(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——相关 ----------------------------------

静态构造gapm_configuration user_gapm_conf = {
.role = GAP_PERIPHERAL_SLV,
.irk = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
///设备外观(0x0000 -未知外观)
//根据https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
.appearance e_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
///最大MTU
.max_mtu = 23,
/ / /外围 : *****************************************************************
/// Slave preferred在ble double slot中测量的最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双槽
.con_intv_min = MS_TO_DOUBLESLOTS(10),
/// Slave preferred双槽最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS将毫秒(ms)转换为双槽
.con_intv_max = MS_TO_DOUBLESLOTS(20),
/// Slave首选连接延迟。它是通过跳过的连接事件来衡量的
.con_latency = 0,
///链路监控超时时间(10ms)
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = MS_TO_TIMERUNITS(1000),
///隐私设置位字段(0b1 = enabled, 0b0 = disabled)
/// - [bit 0]:隐私支持
/// - [bit 1]:多个绑定支持(仅限外围设备);如果启用,隐私标志为
///只读。
/// - [bit 2]:重连接地址可见。
.flags = 0
};

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

请帮助

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

嗨achao,

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

这是我用SDK5模板测试的:

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

2)在user_callback_config中,将默认的on_config_complete函数更改为一个将开始扫描的自定义函数。

3)直接从dsps应用程序中获取扫描功能。

我能听懂广告的意思

您还可以使用智能片段工具来检查您的应用程序是否正在扫描。

由于MT_dialog

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

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

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

顺便说一下,我可以通过嗅探工具得到广告信息,所以不应该是广告侧的问题,我会检查snippet工具,周末快乐,谢谢

achao1104
离线
最后看到:5年4个月前
主
加入:2015-12-24 10:56
谢谢,终于成功了

谢谢,终于成功了。
还有一个问题:
如果我把" msg->window = 5;"(设置为5,工作)到“msg->窗口= 50;”或“msg->窗口= 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);
//最大对等体连接
msg->mode = GAP_OBSERVER_MODE;
味精- > op。代码= GAPM_SCAN_PASSIVE;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
//msg->filter_duplic = SCAN_FILT_DUPLIC_EN;
msg->filter_duplic = SCAN_FILT_DUPLIC_DIS;
Msg ->interval = 10;
Msg ->window = 5;
ke_msg_send(味精);

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

嗨achao1104,

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

由于MT_dialog