gapm_cmp_evt_handler中的一个错误?

15个帖子/ 0新
最后发表
achao1104
离线
最后看到:5年3个月前
主
加入: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年7个月前
加入:2015-05-29 18:47
你读过里维埃拉吗?

你读过里维埃拉波浪的GAP规范(RW-BLE-GAP-IS.pdf)吗?复制和粘贴:

4.2通用接口
Generic Gap Manager提供了一组完成的命令,其中包含以下命令完成的事件
信息。
4.2.1 GAPM_CMP_EVT准备
参数:
类型参数描述
UINT8_T操作GAPM操作代码(见表23)
uint8_t操作的状态状态(见表39)
描述:
这是GAP操作通用完成事件。所有操作触发该事件时,如果操作
完成的
-------------------------------------- SNIP --------------------------------------

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

状态代码:

值错误描述
0x00 GAP_ERR_NO_ERROR无错误
0x40的GAP_ERR_INVALID_PARAM无效参数集
0x41 GAP_ERR_PROTOCOL_PROBLAB与协议交换的问题,获取意外响应
的0x42 GAP_ERR_NOT_SUPPORTED请求不通过软件配置支持
0x43间隙_erm_command_disallowed请求在当前状态下不允许。
请求的操作被取消。
0x45 GAP_ERR_TIMEOUT请求的操作超时。
操作过程中0×46 GAP_ERR_DISCONNECTED Link连接丢失。
0x47 GAP_ERR_NOT_FOUND搜索算法完成,但没有发现结果
0x48 GAP_ERR_REJECTED对端设备拒绝的请求
0x49 GAP_ERR_PRIVACY_CFG_PB具有隐私配置的问题
0x4A GAP_ERR_ADV_DATA_INVALID重复或无效的广告数据
表39:间隙错误代码

除此之外,GAPM_CMP_EVT消息不会提供更多信息。

如果您有兴趣接收的广告活动,这是GAPM_ADV_REPORT_IND。

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

谢谢。

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

谢谢您的回复。
扫描后,我想获得找到的设备列表,此外,获取设备名称,RSSI,地址等。
顺便说一下,我设置GAPM_ADV_REPORT_IND断点,但没有看到它为止。

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

请注意,扫描是观察者模式。
味精- >模式= GAP_OBSERVER_MODE;// gap_gen_discovery.
msg-> op.code = gapm_scan_active;
味精- > op。addr_src = GAPM_PUBLIC_ADDR;
MSG-> filter_duplic = SCAN_FILT_DUPLIC_EN;

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

嗨achao1104,

将休息点放在App_Task.c文件中的GapM_Adv_Report_ind_Handler()处,您将能够提取Adv_Report Struct的成员。如果您仍然没有进行指示,您可以使用DSP主机实现(使您需要的更改)并将断点放在相同的函数中,只是为了确保您成功配置了主机应用程序。

由于MT_dialog

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

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

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

我下载了DSP,区别在于我使用最新的SD5,而** msg-> mode = gap_observer_mode **模式,我没有看到达到断点。请帮忙。

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

我也将角色从Gap_observer_sca更改为Gap_Central_mst和向后,但仍然不起作用。请帮忙,它带来了几天,请帮忙。
静态常量结构gapm_configuration user_gapm_conf = {
/ /。= GAP_OBSERVER_SCA角色,
。role = gap_central_mst,
.irk = {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_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
///最大MTU
.max_mtu = 23,

在这里发送:
app_easy_timer(300,scan_cb);
结构gapm_start_scan_cmd *味精=(结构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(MSG);

void scan_cb(void)

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); //发送消息

静态常量结构app_callbacks user_app_callbacks = {
.app_on_connection = NULL,
.app_on_disconnect = null,
.app_on_update_params_rejected = null,
.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 = 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 =零,
.app_on_tk_exch_nomitm =零,
.app_on_irk_exch = NULL,
.app_on_csrk_exch =零,
.app_on_ltk_exch = NULL,
.app_on_pairing_succeded = null,
.app_on_encrypt_ind = null,
.app_on_mitm_passcode_req =零,
.app_on_encrypt_req_ind = null,
#endif //(ble_app_sec)
};

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

在广告方面:

//---------------------------------------------------------------------
// -------------不可连接和无向广告相关常见 -
///广告服务数据
///广告广告类型标志,不得在广告数据中设置
#定义USER_ADVERTISE_DATA \“\ x03”
adv_type_complete_list_16bit_service_ids \
ADV_UUID_DEVICE_INFORMATION_SERVICE

///广告数据长度 - 最大28个字节,3个字节被保留到集
#define user_advertise_data_len(sizeof(user_advertise_data)-1)
///广告名称
#define user_device_name(“a”)
///广告名称长度
#define user_device_name_len(sizeof(user_device_name)-1)
///扫描响应数据
#define user_advertise_scan_response_data“”
///扫描响应数据长度 - 最多31个字节
#define user_advertise_scan_response_data_len(sizeof(user_advertise_scan_response_data)-1)

//---------------------------------------------------------------------
// ---------------------------------------------------

静态常量结构advertise_configuration user_directed_advertise_conf = {
///宣传操作类型。
.advertise_operation = ADV_DIRECT,
///自己的BD地址源:
.address_src = GAPM_PUBLIC_ADDR,
///广告频道地图
.channel_map = 0 x7,
};

Static 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
};

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

Static const struct connection_param_configuration 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),
///在BLE双槽(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},
///设备外观(0x0000 -未知外观)
//根据填写https://developer.bluetooth.org/gatt/characteristics/Pages/Characteristi..。
.appearance = 0,
.appearance_write_perm = GAPM_WRITE_DISABLE,
.name_write_perm = GAPM_WRITE_DISABLE,
///最大MTU
.max_mtu = 23,
/ / /外围 : *****************************************************************
在双槽中测量的最小连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS转换从毫秒(ms)到双时隙
.con_intv_min = MS_TO_DOUBLESLOTS(10),
在双槽中测量的最大连接间隔(1.25ms)
///使用宏MS_TO_DOUBLESLOTS转换从毫秒(ms)到双时隙
.con_intv_max = ms_to_doubleslots(20),
///从属喜欢连接延迟。它在跳过的连接事件中测量
.con_latency = 0,
///从机器单元(10 ms)测量的Slave优选链接监控超时
///使用宏MS_TO_TIMERUNITS将毫秒(ms)转换为计时器单位
.superv_to = ms_to_timerUnits(1000),
///隐私设置位字段(0B1 =启用,0B0 =禁用)
/// - [位0]:隐私支持
/// - [位1]:多键支持(外围只);如果启用,保密标志是
/// 只读。
/// - [位2]:重新连接地址可见的。
.flags = 0.
};

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

请帮忙

MT_dialog
离线
最后看到:2个月2个小时前
工作人员
加入:2015-06-08 11: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并将.thole更改为gap_observer_sca

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

3)直接从DSPS应用中拍摄扫描功能。

4)我能赶上广告指示

您还可以使用智能摘录工具来检查,如果您的应用程序进行扫描。

由于MT_dialog

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

谢谢,你能给我发电子邮件吗?
bld2014@sohu.com

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

顺便说一下,我可以使用嗅探器工具来获取广告消息,所以它不应该是宣传的侧面问题,我会检查赛段工具,周末愉快,谢谢

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

谢谢,终于成功了。
还有一个问题:
如果我改变“MSG->窗口= 5;”(设定为5,作品)为 “MSG->窗口= 50;”或“MSG->窗口= 500”,它没有赶上进阶指示,但拨打user_scanning_completed(在用户回调文件中定义)立即,为什么呢?什么是窗口在这里的含义是什么?

app_easy_timer(300,scan_cb);
结构gapm_start_scan_cmd *味精=(结构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;
// msg-> filter_duplic = scan_filt_duplic_en;
msg-> filter_duplic = scan_filt_duplic_dis;
味精- >间隔= 10;
msg->窗口= 5;
KE_MSG_SEND(MSG);

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

嗨achao1104,

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

由于MT_dialog