1,相关参数定义
#define SCAN_INTERVAL 0x0140 //200ms 最小单位:0.625ms
#define SCAN_WINDOW 0x00A0 //100ms 最小单位:0.625ms
#define SCAN_DURATION 0x0258 //6s 最小单位:10ms ,当设置为0,一直扫描
注意:当设置周期扫描时,一定要设置 SCAN_INTERVAL >= 2x SCAN_WINDOW ,不然容易造成死机的问题
2,相关服务初始化
ble_stack_init();
gatt_init();
3,开始扫描
scan_start();
4,如果扫描到蓝牙信标
static void ble_evt_handler(ble_evt_t const *p_ble_evt, void *p_context)
{
ret_code_t err_code;
uint8_t i;
// For readability.
ble_gap_evt_t const *p_gap_evt = &p_ble_evt->evt.gap_evt;
switch (p_ble_evt->header.evt_id)
{
// Upon connection, check which peripheral has connected (HR or RSC), initiate DB
// discovery, update LEDs status and resume scanning if necessary. */
case BLE_GAP_EVT_ADV_REPORT:
{
// Advertising data received
const ble_gap_evt_adv_report_t *p_adv = &p_ble_evt->evt.gap_evt.params.adv_report;
if(p_adv->data.p_data[0] == 0x02 && p_adv->data.p_data[1] == 0x01)
{
uint8_t i;
uint8_t *uuid;
uuid = p_adv->data.p_data + 9;
if(!strncmp(uuid, ProximityUUID, 8)) //CHG
{
uint16_t major;
uint16_t minor;
int rssi;
static uint8_t imei[4];
uint8_t k = 0;
major = uuid[16] * 0x100 + uuid[17];
minor = uuid[18] * 0x100 + uuid[19];
rssi = p_adv->rssi;
for(k = 0; k < 4; k++)
{
ime