/******************************************************************************* ** ** Function btm_gen_non_resolve_paddr_cmpl ** ** Description This is the callback function when non-resolvable private ** function is generated and write to controller. ** ** Returns void ** *******************************************************************************/ static void btm_gen_non_resolve_paddr_cmpl(tBTM_RAND_ENC *p) { tBTM_LE_RANDOM_CB *p_cb = &btm_cb.ble_ctr_cb.addr_mgnt_cb; tBTM_BLE_ADDR_CBACK *p_cback = p_cb->p_generate_cback; void *p_data = p_cb->p; UINT8 *pp; BD_ADDR static_random; BTM_TRACE_EVENT ("btm_gen_non_resolve_paddr_cmpl"); p_cb->p_generate_cback = NULL; if (p) { pp = p->param_buf; STREAM_TO_BDADDR(static_random, pp); /* mask off the 2 MSB */ static_random[0] &= BLE_STATIC_PRIVATE_MSB_MASK; /* report complete */ if (p_cback) (* p_cback)(static_random, p_data); } else { BTM_TRACE_DEBUG("btm_gen_non_resolvable_private_addr failed"); if (p_cback) (* p_cback)(NULL, p_data); } }
/******************************************************************************* ** ** Function btm_ble_batchscan_filter_track_adv_vse_cback ** ** Description VSE callback for batch scan, filter, and tracking events. ** ** Returns None ** *******************************************************************************/ void btm_ble_batchscan_filter_track_adv_vse_cback(UINT8 len, UINT8 *p) { UINT8 sub_event = 0, filt_index = 0, addr_type = 0, adv_state = 0; BD_ADDR bd_addr; STREAM_TO_UINT8(sub_event, p); BTM_TRACE_EVENT("btm_ble_batchscan_filter_track_adv_vse_cback called with event:%x", sub_event); if (HCI_VSE_SUBCODE_BLE_THRESHOLD_SUB_EVT == sub_event && NULL != ble_batchscan_cb.p_thres_cback) { ble_batchscan_cb.p_thres_cback(ble_batchscan_cb.ref_value); return; } if (HCI_VSE_SUBCODE_BLE_TRACKING_SUB_EVT == sub_event && NULL != ble_advtrack_cb.p_track_cback) { if (len < 10) return; STREAM_TO_UINT8(filt_index, p); STREAM_TO_UINT8(addr_type, p); STREAM_TO_BDADDR(bd_addr, p); STREAM_TO_UINT8(adv_state, p); BTM_TRACE_EVENT("track_adv_vse_cback called: %d, %d, %d", filt_index, addr_type, adv_state); ble_advtrack_cb.p_track_cback(filt_index, addr_type, bd_addr, adv_state, ble_advtrack_cb.ref_value); return; } }
int RTKBT_AUTOPAIR_CheckMSD(UINT8 * p, UINT8 len, UINT32 * p_rcuid, UINT8 * p_classic_supported,bt_bdaddr_t * p_classic_addr) //MSD: Manufacturer Specific Data { UINT32 cmd,vendor,rcu_id,classic_supported; UINT8 val,type,left; left = len; STREAM_TO_UINT16(vendor,p); BTIF_TRACE_ERROR1("AutoPairing:ITEM:vendor %04x\n",vendor); left -= 2; if((vendor == 0x7966)||(vendor == 0x6679)) { *p_rcuid = 2; *p_classic_supported = 0; BTIF_TRACE_ERROR2("AutoPairing: IflyTek Vendor %04x ==> RcuID:%d\n",vendor,*p_rcuid); return 0; } if(vendor == BLUETOOTH_RTK_AUTOPAIR_VENDOR) { if(left<2) return -4; STREAM_TO_UINT16(cmd, p); BTIF_TRACE_ERROR1("AutoPairing:ITEM:cmd %04x\n",cmd); left -= 2; if(cmd == BLUETOOTH_RTK_AUTOPAIR_CMDID) { *p_rcuid = 2; *p_classic_supported = 0; BTIF_TRACE_ERROR2("AutoPairing: IflyTek Vendor %04x ==> RcuID:%d\n",vendor,*p_rcuid); return 0; if(left<1) return -5; STREAM_TO_UINT8(val, p); left--; rcu_id = val<<8; if(left<1) return -6; STREAM_TO_UINT8(val, p); left--; rcu_id |= val; /* if(rcu_id&0x8000) { rcu_id = rcu_id<<8; if(left<1) return -7; STREAM_TO_UINT8(val, p); left--; rcu_id |= val; } */ BTIF_TRACE_ERROR1("AutoPairing:ITEM:rcu_id %08x\n",rcu_id); if(left>=6) { STREAM_TO_BDADDR(p_classic_addr->address, p); BTIF_TRACE_ERROR6("AutoPairing:ITEM:addr %02x:%02x:%02x:%02x:%02x:%02x\n", \ p_classic_addr->address[0], p_classic_addr->address[1], p_classic_addr->address[2], p_classic_addr->address[3], p_classic_addr->address[4], p_classic_addr->address[5]); #ifdef DUMMY_CLASSIC_INQUIRY_RESULT bluetooth_rtk_AutoPair_SendClassicInquiryResults(p_classic_addr); #endif classic_supported = 1; left -= 6; }else{ classic_supported = 0; memset(p_classic_addr, 0 , sizeof(bt_bdaddr_t)); } if(remote_controller_id == rcu_id){ *p_rcuid = rcu_id; } else *p_rcuid = 0; *p_classic_supported = classic_supported; return 0; } } return 0; }