259 lines
10 KiB
C++
259 lines
10 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 "string.h"
|
||
|
#include "app_tws_ibrt_trace.h"
|
||
|
#include "app_tws_ctrl_thread.h"
|
||
|
#include "app_tws_ibrt_cmd_handler.h"
|
||
|
#include "app_ibrt_customif_cmd.h"
|
||
|
#include "app_tws_if.h"
|
||
|
#include "app_dip.h"
|
||
|
#ifdef BISTO_ENABLED
|
||
|
#include "gsound_custom.h"
|
||
|
#endif
|
||
|
#ifdef __DUAL_MIC_RECORDING__
|
||
|
#include "ai_control.h"
|
||
|
#include "app_recording_handle.h"
|
||
|
#endif
|
||
|
#include "apps.h"
|
||
|
#if defined(IBRT)
|
||
|
/*
|
||
|
* custom cmd handler add here, this is just a example
|
||
|
*/
|
||
|
|
||
|
#define app_ibrt_custom_cmd_rsp_timeout_handler_null (0)
|
||
|
#define app_ibrt_custom_cmd_rsp_handler_null (0)
|
||
|
#define app_ibrt_custom_cmd_rx_handler_null (0)
|
||
|
|
||
|
#ifdef BISTO_ENABLED
|
||
|
static void app_ibrt_bisto_dip_sync(uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_bisto_dip_sync_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
#endif
|
||
|
#ifdef __DUAL_MIC_RECORDING__
|
||
|
static void app_ibrt_customif_audio_send(uint8_t* p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_audio_send_done(uint16_t cmdcode, uint16_t rsp_seq, uint8_t *ptrParam, uint16_t paramLen);
|
||
|
static void app_ibrt_customif_audio_send_handler(uint16_t rsp_seq, uint8_t* p_buff, uint16_t length);
|
||
|
#endif
|
||
|
void app_ibrt_customif_test1_cmd_send(uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_test1_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
|
||
|
static void app_ibrt_customif_test2_cmd_send(uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_test2_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_test2_cmd_send_rsp_timeout_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_test2_cmd_send_rsp_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
static void app_ibrt_customif_test3_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
|
||
|
static void app_ibrt_customif_test4_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length);
|
||
|
static const app_tws_cmd_instance_t g_ibrt_custom_cmd_handler_table[]=
|
||
|
{
|
||
|
#ifdef GFPS_ENABLED
|
||
|
{
|
||
|
APP_TWS_CMD_SHARE_FASTPAIR_INFO, "SHARE_FASTPAIR_INFO",
|
||
|
app_ibrt_share_fastpair_info,
|
||
|
app_ibrt_shared_fastpair_info_received_handler, 0,
|
||
|
app_ibrt_custom_cmd_rsp_timeout_handler_null, app_ibrt_custom_cmd_rsp_handler_null
|
||
|
},
|
||
|
#endif
|
||
|
|
||
|
#ifdef BISTO_ENABLED
|
||
|
{
|
||
|
APP_TWS_CMD_BISTO_DIP_SYNC, "BISTO_DIP_SYNC",
|
||
|
app_ibrt_bisto_dip_sync,
|
||
|
app_ibrt_bisto_dip_sync_handler, 0,
|
||
|
app_ibrt_cmd_rsp_timeout_handler_null, app_ibrt_cmd_rsp_handler_null
|
||
|
},
|
||
|
#endif
|
||
|
#ifdef __DUAL_MIC_RECORDING__
|
||
|
{
|
||
|
APP_IBRT_CUSTOM_CMD_DMA_AUDIO, "TWS_CMD_DMA_AUDIO",
|
||
|
app_ibrt_customif_audio_send,
|
||
|
app_ibrt_customif_audio_send_handler, 0,
|
||
|
app_ibrt_custom_cmd_rsp_timeout_handler_null, app_ibrt_custom_cmd_rsp_handler_null,
|
||
|
app_ibrt_customif_audio_send_done,
|
||
|
},
|
||
|
#endif
|
||
|
{
|
||
|
APP_IBRT_CUSTOM_CMD_TEST1, "TWS_CMD_TEST1",
|
||
|
app_ibrt_customif_test1_cmd_send,
|
||
|
app_ibrt_customif_test1_cmd_send_handler, 0,
|
||
|
app_ibrt_custom_cmd_rsp_timeout_handler_null, app_ibrt_custom_cmd_rsp_handler_null
|
||
|
},
|
||
|
{
|
||
|
APP_IBRT_CUSTOM_CMD_TEST2, "TWS_CMD_TEST2",
|
||
|
app_ibrt_customif_test2_cmd_send,
|
||
|
app_ibrt_customif_test2_cmd_send_handler, RSP_TIMEOUT_DEFAULT,
|
||
|
app_ibrt_customif_test2_cmd_send_rsp_timeout_handler, app_ibrt_customif_test2_cmd_send_rsp_handler
|
||
|
},
|
||
|
{
|
||
|
APP_IBRT_CUSTOM_CMD_TEST3, "TWS_CMD_TEST3",
|
||
|
app_ibrt_customif_test3_cmd_send,
|
||
|
app_ibrt_customif_test3_cmd_send_handler, 0,
|
||
|
app_ibrt_custom_cmd_rsp_timeout_handler_null, app_ibrt_custom_cmd_rsp_handler_null
|
||
|
},
|
||
|
{
|
||
|
APP_IBRT_CUSTOM_CMD_TEST4, "TWS_CMD_TEST4",
|
||
|
app_ibrt_customif_test4_cmd_send,
|
||
|
app_ibrt_customif_test4_cmd_send_handler, 0,
|
||
|
app_ibrt_custom_cmd_rsp_timeout_handler_null, app_ibrt_custom_cmd_rsp_handler_null
|
||
|
},
|
||
|
};
|
||
|
|
||
|
int app_ibrt_customif_cmd_table_get(void **cmd_tbl, uint16_t *cmd_size)
|
||
|
{
|
||
|
*cmd_tbl = (void *)&g_ibrt_custom_cmd_handler_table;
|
||
|
*cmd_size = ARRAY_SIZE(g_ibrt_custom_cmd_handler_table);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
#ifdef BISTO_ENABLED
|
||
|
static void app_ibrt_bisto_dip_sync(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
app_ibrt_send_cmd_without_rsp(APP_TWS_CMD_BISTO_DIP_SYNC, p_buff, length);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_bisto_dip_sync_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
gsound_mobile_type_get_callback(*(MOBILE_CONN_TYPE_E *)p_buff);
|
||
|
}
|
||
|
#endif
|
||
|
#ifdef __DUAL_MIC_RECORDING__
|
||
|
static void app_ibrt_customif_audio_send(uint8_t* p_buff, uint16_t length) {
|
||
|
TRACE(1, "%s", __func__);
|
||
|
app_recording_send_data_to_master();
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_audio_send_handler(uint16_t rsp_seq, uint8_t* p_buff, uint16_t length) {
|
||
|
ai_function_handle(CALLBACK_STORE_SLAVE_DATA, (void*)p_buff, length);
|
||
|
//TRACE(1, "%s", __func__);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_audio_send_done(uint16_t cmdcode, uint16_t rsp_seq, uint8_t* ptrParam,
|
||
|
uint16_t paramLen) {
|
||
|
TRACE(1, "%s", __func__);
|
||
|
app_recording_audio_send_done();
|
||
|
}
|
||
|
#endif
|
||
|
void app_ibrt_customif_cmd_test(ibrt_custom_cmd_test_t *cmd_test)
|
||
|
{
|
||
|
tws_ctrl_send_cmd(APP_IBRT_CUSTOM_CMD_TEST1, (uint8_t*)cmd_test, sizeof(ibrt_custom_cmd_test_t));
|
||
|
tws_ctrl_send_cmd(APP_IBRT_CUSTOM_CMD_TEST2, (uint8_t*)cmd_test, sizeof(ibrt_custom_cmd_test_t));
|
||
|
tws_ctrl_send_cmd(APP_IBRT_CUSTOM_CMD_TEST3, (uint8_t*)cmd_test, sizeof(ibrt_custom_cmd_test_t));
|
||
|
}
|
||
|
|
||
|
void app_ibrt_customif_test1_cmd_send(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
app_ibrt_send_cmd_without_rsp(APP_IBRT_CUSTOM_CMD_TEST1, p_buff, length);
|
||
|
TRACE(1,"%s", __func__);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_test1_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(1,"%s", __func__);
|
||
|
app_ibrt_search_ui_handle_key((APP_KEY_STATUS *)p_buff, NULL);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_test2_cmd_send(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(1,"%s", __func__);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_test2_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
tws_ctrl_send_rsp(APP_IBRT_CUSTOM_CMD_TEST2, rsp_seq, NULL, 0);
|
||
|
TRACE(1,"%s", __func__);
|
||
|
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_test2_cmd_send_rsp_timeout_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(1,"%s", __func__);
|
||
|
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_customif_test2_cmd_send_rsp_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(1,"%s", __func__);
|
||
|
}
|
||
|
|
||
|
void app_ibrt_customif_test3_cmd_send(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
app_ibrt_send_cmd_without_rsp(APP_IBRT_CUSTOM_CMD_TEST3, p_buff, length);
|
||
|
TRACE(1,"%s", __func__);
|
||
|
}
|
||
|
|
||
|
extern void app_ibrt_ui_test_mtu_change_sync_notify(void);
|
||
|
static void app_ibrt_customif_test3_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
/*TRACE(3,"%s,latency_mode_is_open = %d", __func__,latency_mode_is_open);
|
||
|
if(*p_buff == latency_mode_is_open)return;
|
||
|
if(*p_buff == 0)
|
||
|
latency_mode_is_open = 1;
|
||
|
else if(*p_buff == 1)
|
||
|
latency_mode_is_open = 0;
|
||
|
app_ibrt_ui_test_mtu_change_sync_notify();*/
|
||
|
}
|
||
|
|
||
|
void app_ibrt_customif_test4_cmd_send(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(3,"%s", __func__);
|
||
|
app_ibrt_send_cmd_without_rsp(APP_IBRT_CUSTOM_CMD_TEST4, p_buff, length);
|
||
|
}
|
||
|
extern void app_ibrt_sync_volume_info();
|
||
|
static void app_ibrt_customif_test4_cmd_send_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
TRACE(3,"!!!!app_ibrt_customif_test4_cmd_send_handler");
|
||
|
app_ibrt_sync_volume_info();
|
||
|
}
|
||
|
|
||
|
#ifdef CUSTOM_BITRATE
|
||
|
//#include "product_config.h"
|
||
|
#include "nvrecord_extension.h"
|
||
|
extern void a2dp_avdtpcodec_aac_user_configure(uint32_t bitrate,uint8_t user_configure);
|
||
|
extern void a2dp_avdtpcodec_sbc_user_configure(uint32_t bitpool,uint8_t user_configure);
|
||
|
extern void app_audio_dynamic_update_dest_packet_mtu(uint8_t codec_index, uint8_t packet_mtu, uint8_t user_configure);
|
||
|
|
||
|
void app_ibrt_user_a2dp_info_sync_tws_share_cmd_send(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
tws_ctrl_send_cmd(APP_TWS_CMD_A2DP_CONFIG_SYNC, p_buff, length);
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_user_a2dp_info_sync(uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
if((app_tws_ibrt_mobile_link_connected())){
|
||
|
app_ibrt_send_cmd_without_rsp(APP_TWS_CMD_A2DP_CONFIG_SYNC, p_buff, length);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void app_ibrt_user_a2dp_info_sync_handler(uint16_t rsp_seq, uint8_t *p_buff, uint16_t length)
|
||
|
{
|
||
|
ibrt_custome_codec_t *a2dp_user_config_ptr=(ibrt_custome_codec_t *)p_buff;
|
||
|
TRACE(4,"%s %d %d %d",__func__,a2dp_user_config_ptr->aac_bitrate,a2dp_user_config_ptr->sbc_bitpool,a2dp_user_config_ptr->audio_latentcy);
|
||
|
if((app_tws_ibrt_slave_ibrt_link_connected())){
|
||
|
a2dp_avdtpcodec_sbc_user_configure(a2dp_user_config_ptr->sbc_bitpool, true);
|
||
|
a2dp_avdtpcodec_aac_user_configure(a2dp_user_config_ptr->aac_bitrate, true);
|
||
|
app_audio_dynamic_update_dest_packet_mtu(0, (a2dp_user_config_ptr->audio_latentcy-USER_CONFIG_AUDIO_LATENCY_ERROR)/3, true);//sbc
|
||
|
app_audio_dynamic_update_dest_packet_mtu(1, (a2dp_user_config_ptr->audio_latentcy-USER_CONFIG_AUDIO_LATENCY_ERROR)/23, true);//aac
|
||
|
uint32_t lock = nv_record_pre_write_operation();
|
||
|
nv_record_get_extension_entry_ptr()->a2dp_user_info.aac_bitrate = a2dp_user_config_ptr->aac_bitrate;
|
||
|
nv_record_get_extension_entry_ptr()->a2dp_user_info.sbc_bitpool = a2dp_user_config_ptr->sbc_bitpool;
|
||
|
nv_record_get_extension_entry_ptr()->a2dp_user_info.audio_latentcy = a2dp_user_config_ptr->audio_latentcy;
|
||
|
nv_record_post_write_operation(lock);
|
||
|
nv_record_flash_flush();
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
#endif
|