143 lines
3.6 KiB
C++
143 lines
3.6 KiB
C++
|
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#include "btif_sys_config.h"
|
||
|
|
||
|
#ifdef BTIF_DIP_DEVICE
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include "cmsis_os.h"
|
||
|
#include "hal_trace.h"
|
||
|
#include "dip_api.h"
|
||
|
#include "plat_types.h"
|
||
|
#include "app_bt.h"
|
||
|
#include "app_dip.h"
|
||
|
#include "nvrecord_bt.h"
|
||
|
|
||
|
#if defined(ENHANCED_STACK)
|
||
|
#include "sdp_api.h"
|
||
|
#include "me_api.h"
|
||
|
#endif
|
||
|
|
||
|
#if defined(IBRT)
|
||
|
#include "app_tws_ibrt_cmd_handler.h"
|
||
|
#include "app_tws_ctrl_thread.h"
|
||
|
#include "app_ibrt_peripheral_manager.h"
|
||
|
#include "app_ibrt_if.h"
|
||
|
#include "app_tws_if.h"
|
||
|
#endif
|
||
|
|
||
|
#if defined(__AI_VOICE__) || defined(BISTO_ENABLED)
|
||
|
#include "app_ai_if.h"
|
||
|
#endif
|
||
|
|
||
|
#if defined(__AI_VOICE__)
|
||
|
#include "ai_thread.h"
|
||
|
#endif
|
||
|
|
||
|
void app_dip_sync_dip_info(void);
|
||
|
|
||
|
static void app_dip_callback(bt_bdaddr_t *_addr, bool ios_flag)
|
||
|
{
|
||
|
btif_remote_device_t *p_remote_dev = btif_me_get_remote_device_by_bdaddr(_addr);
|
||
|
|
||
|
TRACE(2,"%s dev %p addr :", __func__, p_remote_dev);
|
||
|
DUMP8("%x ", _addr->address, 6);
|
||
|
|
||
|
#if defined(IBRT)
|
||
|
if (TWS_LINK == app_tws_ibrt_get_remote_link_type(p_remote_dev))
|
||
|
{
|
||
|
TRACE(1,"%s connect type is TWS", __func__);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
app_dip_sync_dip_info();
|
||
|
#endif
|
||
|
|
||
|
#if defined(__AI_VOICE__) || defined(BISTO_ENABLED)
|
||
|
app_ai_if_mobile_connect_handle(_addr);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
#if defined(IBRT)
|
||
|
void app_dip_sync_info_prepare_handler(uint8_t *buf, uint16_t *length)
|
||
|
{
|
||
|
uint32_t offset = 0;
|
||
|
ibrt_ctrl_t *p_g_ibrt_ctrl = app_tws_ibrt_get_bt_ctrl_ctx();
|
||
|
bt_bdaddr_t *mobile_addr = &p_g_ibrt_ctrl->mobile_addr;
|
||
|
uint16_t vend_id = 0;
|
||
|
uint16_t vend_id_source = 0;
|
||
|
|
||
|
btif_dip_get_record_vend_id_and_source(mobile_addr, &vend_id, &vend_id_source);
|
||
|
memcpy(buf, mobile_addr->address, 6);
|
||
|
offset += 6;
|
||
|
memcpy(buf+offset, (uint8_t *)&vend_id, 2);
|
||
|
offset += 2;
|
||
|
memcpy(buf+offset, (uint8_t *)&vend_id_source, 2);
|
||
|
offset += 2;
|
||
|
|
||
|
*length = offset;
|
||
|
}
|
||
|
|
||
|
void app_dip_sync_info_received_handler(uint8_t *buf, uint16_t length)
|
||
|
{
|
||
|
bt_bdaddr_t mobile_addr;
|
||
|
uint16_t vend_id = 0;
|
||
|
uint16_t vend_id_source = 0;
|
||
|
uint32_t offset = 0;
|
||
|
nvrec_btdevicerecord *record = NULL;
|
||
|
|
||
|
memcpy(mobile_addr.address, buf, 6);
|
||
|
offset += 6;
|
||
|
memcpy((uint8_t *)&vend_id, buf+offset, 2);
|
||
|
offset += 2;
|
||
|
memcpy((uint8_t *)&vend_id_source, buf+offset, 2);
|
||
|
offset += 2;
|
||
|
TRACE(2, "%s vend_id 0x%x vend_id_source 0x%x addr:", __func__, vend_id, vend_id_source);
|
||
|
DUMP8("0x%x ", mobile_addr.address, 6);
|
||
|
|
||
|
if (vend_id && !nv_record_btdevicerecord_find(&mobile_addr, &record))
|
||
|
{
|
||
|
nv_record_btdevicerecord_set_vend_id_and_source(record, vend_id, vend_id_source);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void app_dip_sync_init(void)
|
||
|
{
|
||
|
TWS_SYNC_USER_T user_app_dip_t = {
|
||
|
app_dip_sync_info_prepare_handler,
|
||
|
app_dip_sync_info_received_handler,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
};
|
||
|
|
||
|
app_tws_if_register_sync_user(TWS_SYNC_USER_DIP, &user_app_dip_t);
|
||
|
}
|
||
|
|
||
|
void app_dip_sync_dip_info(void)
|
||
|
{
|
||
|
app_tws_if_sync_info(TWS_SYNC_USER_DIP);
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
void app_dip_init(void)
|
||
|
{
|
||
|
btif_dip_init(app_dip_callback);
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|