client 主机 广播包 扫描响应包 处理 ???

Advertising Data(广播包) 好像是 app_gap_dev_inq_req(GAP_GEN_INQ_TYPE, QN_ADDR_TYPE); int app_gap_dev_inq_cmp_handler(ke_msg_id_t const msgid,
struct gap_event_common_cmd_complete const *param,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
两个函数来处理的

Scan Response Data(扫描响应包)是怎么处理的啊 ??

首先,你要明白app_gap_dev_inq_req函数发送的是GAP_DEV_INQ_REQ这个消息请求,而这个消息请求的响应消息是GAP_DEV_INQ_RESULT_EVT,而GAP_DEV_INQ_RESULT_EVT这个响应消息的处理函数是app_gap_dev_inq_result_handler,而你想要的广播数据包和扫描响应数据包都在全局结构体变量app_env.adv_data和app_env.scanrsp_data中,我这样解释你应该明白了吧?

xiaolong_ba 发表于 2015-11-19 19:43
首先,你要明白app_gap_dev_inq_req函数发送的是GAP_DEV_INQ_REQ这个消息请求,而这个消息请求的响应消息是 …

struct app_env_tag
{
#if (BLE_PERIPHERAL || BLE_BROADCASTER)
// Service setup Flag
uint16_t srv_flag;
// Advertising data
uint8_t adv_data[ADV_DATA_LEN];
// Scan Response data
uint8_t scanrsp_data[SCAN_RSP_DATA_LEN];
#endif

    ..........

} 这个结构体在client中(BLE_PERIPHERAL || BLE_BROADCASTER)是等于0的
所以adv_data和scanrsp_data是没有定义的

xiaolong_ba 发表于 2015-11-19 19:43
首先,你要明白app_gap_dev_inq_req函数发送的是GAP_DEV_INQ_REQ这个消息请求,而这个消息请求的响应消息是 …

app_env.adv_data和app_env.scanrsp_data 这两个应该是作为从机广播时需要填入的广播数据, 而我现在需要的是主机扫描到从机广播的数据。

本帖最后由 xiaolong_ba 于 2015-11-20 09:20 编辑

k693277161 发表于 2015-11-20 09:08
app_env.adv_data和app_env.scanrsp_data 这两个应该是作为从机广播时需要填入的广播数据, 而我现在 …

你可以在主机程序的app_gap_dev_inq_result_handler函数中把看看。app_env是一个全局结构体变量,先试试没有问题的。今晚回去我看看

xiaolong_ba 发表于 2015-11-20 09:14
你可以在主机程序的app_gap_dev_inq_result_handler函数中把看看。app_env是一个全局结构体变量,先试试 …

我找到了广播包的结构体 应该是这个
///Advertising report structure
struct adv_report
{
///Event type: Ref bluetooth core spec 4.0 Volume 6 Part B Chapter 2.3 Table 2.1
uint8_t evt_type;
///Advertising address type: public/random
uint8_t adv_addr_type;
///Advertising address value
struct bd_addr adv_addr;
///Data length in advertising packet
uint8_t data_len;
///Data of advertising packet
uint8_t data[ADV_DATA_LEN];
///RSSI value for advertising packet
int8_t rssi;
};

扫描响应包的 ///Scan response data structure
struct scan_rsp_data
{
///Maximum length data bytes array
uint8_t data[SCAN_RSP_DATA_LEN];
}; 程序中没有找到这个是怎么处理的,好像是没有定义 没有处理啊

k693277161 发表于 2015-11-20 09:40
我找到了广播包的结构体 应该是这个
///Advertising report structure
struct adv_report

那这样就是没有了,或者没有把接口提供出来。:frowning:

在进行广播扫描之后,会得到响应消息:GAP_DEV_INQ_RESULT_EVT
其中,响应消息对应的函数为

int app_gap_dev_inq_result_handler(ke_msg_id_t const msgid,
                                   struct gap_dev_inq_result_evt const *param,
                                   ke_task_id_t const dest_id,
                                   ke_task_id_t const src_id)

可以看到在扫描响应后所带的param类型是 struct gap_dev_inq_result_evt
那么继续跟踪

/// Device discovery event result
struct gap_dev_inq_result_evt
{
    ///Number of responses
    uint8_t nb_resp;
    /// advertising report
    struct adv_report adv_rep;
};

继续深入

///Advertising report structure
struct adv_report
{
    ///Event type: Ref bluetooth core spec 4.0 Volume 6 Part B Chapter 2.3 Table 2.1
    uint8_t        evt_type;
    ///Advertising address type: public/random
    uint8_t        adv_addr_type;
    ///Advertising address value
    struct bd_addr adv_addr;
    ///Data length in advertising packet
    uint8_t        data_len;
    ///Data of advertising packet
    uint8_t        data[ADV_DATA_LEN];
    ///RSSI value for advertising packet
    int8_t        rssi;
};

我想走到这一步你应该已经找到你想要的广播信息了