/*******************************************************************************
**
** 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;
    }
}
Example #3
0
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;
}