KT24-1110_65E-HA-651B/apps/soundbox/smartbox/smartbox_rcsp_manage.c

299 lines
7.7 KiB
C
Raw Normal View History

2024-11-10 10:44:17 +00:00
#include "smartbox/config.h"
#include "app_main.h"
#include "smartbox_update_tws.h"
#include "3th_profile_api.h"
#include "btstack/avctp_user.h"
#include "btstack/btstack_task.h"
#include "bt_tws.h"
#include "smartbox_rcsp_manage.h"
#include "le_smartbox_module.h"
#include "smartbox_setting_opt.h"
#include "smartbox_adv_bluetooth.h"
#include "smartbox/function.h"
#include "smartbox_music_info_setting.h"
#include "smartbox_update.h"
#include "JL_rcsp_protocol.h"
#include "file_transfer.h"
#if SMART_BOX_EN
#define LOG_TAG "[RCSP-ADV]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
/* #define LOG_DUMP_ENABLE */
#define LOG_CLI_ENABLE
#include "debug.h"
extern u8 check_le_pakcet_sent_finish_flag(void);
static void smartbox_user_state_handler(u8 *param, u8 param_len);
u8 get_rcsp_connect_status(void)
{
#if 1//RCSP_UPDATE_EN
if (RCSP_BLE == bt_3th_get_cur_bt_channel_sel()) {
if (bt_3th_get_jl_ble_status() == BLE_ST_CONNECT || bt_3th_get_jl_ble_status() == BLE_ST_NOTIFY_IDICATE) {
return 1;
} else {
return 0;
}
} else {
return bt_3th_get_jl_spp_status();
}
#else
return 0;
#endif
}
void JL_rcsp_event_to_user(u32 type, u8 event, u8 *msg, u8 size)
{
struct sys_event e;
e.type = SYS_DEVICE_EVENT;
if (size > sizeof(e.u.rcsp.args)) {
printf("rcsp event size overflow:%x %x\n", size, sizeof(e.u.rcsp.args));
}
e.arg = (void *)type;
e.u.rcsp.event = event;
if (size) {
memcpy(e.u.rcsp.args, msg, size);
}
e.u.rcsp.size = size;
sys_event_notify(&e);
}
static void wait_response_and_disconn_ble(void *priv)
{
JL_rcsp_event_to_user(DEVICE_EVENT_FROM_RCSP, MSG_JL_SWITCH_DEVICE, NULL, 0);
}
int JL_rcsp_event_handler(struct rcsp_event *rcsp)
{
int ret = 0;
switch (rcsp->event) {
case MSG_JL_ADV_SETTING_SYNC:
update_smartbox_setting(-1);
break;
case MSG_JL_ADV_SETTING_UPDATE:
update_info_from_vm_info();
break;
case MSG_JL_SWITCH_DEVICE:
printf("MSG_JL_SWITCH_DEVICE\n");
static u16 wait_response_timeout = 0;
static u8 wait_cnt = 0;
// ble切换spp前一个条件开始不满足之后满足; 后一个条件开始满足,之后不满足; 超时10次后自动断开ble
if (wait_response_timeout || (RCSP_BLE == bt_3th_get_cur_bt_channel_sel() && RCSP_SPP == rcsp->args[0])) {
if ((10 == wait_cnt) || (rcsp_send_list_is_empty() && check_le_pakcet_sent_finish_flag())) {
if (wait_response_timeout) {
sys_timeout_del(wait_response_timeout);
wait_response_timeout = 0;
}
wait_cnt = 0;
ble_app_disconnect();
} else {
wait_cnt++;
wait_response_timeout = sys_timeout_add(NULL, wait_response_and_disconn_ble, 100);
}
}
break;
case MSG_JL_USER_SPP_BLE_STATE:
smartbox_user_state_handler(rcsp->args, rcsp->size);
break;
#if RCSP_ADV_MUSIC_INFO_ENABLE
case MSG_JL_UPDATE_PLAYER_TIME:
if (JL_rcsp_get_auth_flag()) {
smartbox_function_update(BT_FUNCTION_MASK, 0x100);
}
break;
case MSG_JL_UPDATE_PLAYER_STATE:
if (JL_rcsp_get_auth_flag()) {
smartbox_function_update(BT_FUNCTION_MASK, 0x80);
}
break;
case MSG_JL_UPDATE_MUSIC_INFO:
if (JL_rcsp_get_auth_flag()) {
/* printf("rcsp type %x\n",rcsp->args[0]); */
smartbox_function_update(BT_FUNCTION_MASK, BIT(rcsp->args[0] - 1));
}
break;
case MSG_JL_UPDATE_MUSIC_PLAYER_TIME_TEMER:
if (JL_rcsp_get_auth_flag()) {
music_player_time_timer_deal(rcsp->args[0]);
}
break;
case MSG_JL_PLAYER_STATE_CHANGE:
music_player_status_change();
break;
case MSG_JL_AVRCP_CH_SYNC_MUSIC_INFO:
music_sync_info();
break;
#endif
default:
#if 1//RCSP_SMARTBOX_ADV_EN
if (0 == JL_smartbox_adv_event_handler(rcsp)) {
break;
}
#endif
#if RCSP_UPDATE_EN
if (0 == JL_rcsp_update_msg_deal(NULL, rcsp->event, rcsp->args)) {
break;
}
#endif
break;
}
return ret;
}
static void smartbox_rcsp_disconnect(void)
{
file_transfer_close();
}
static void smartbox_rcsp_connect(void)
{
}
static void smartbox_user_state_event(u8 opcode, u8 state)
{
u8 data[2] = {0};
data[0] = opcode;
data[1] = state;
JL_rcsp_event_to_user(DEVICE_EVENT_FROM_RCSP, MSG_JL_USER_SPP_BLE_STATE, data, sizeof(data));
}
static void rcsp_user_event_ble_handler(ble_state_e ble_status, u8 flag)
{
switch (ble_status) {
case BLE_ST_IDLE:
#if RCSP_UPDATE_EN
if (get_jl_update_flag()) {
JL_rcsp_event_to_user(DEVICE_EVENT_FROM_RCSP, MSG_JL_UPDATE_START, NULL, 0);
}
#endif
break;
case BLE_ST_CONNECT:
if (flag) {
smartbox_user_state_event(BT_3TH_EVENT_COMMON_BLE_STATUS, BLE_ST_CONNECT);
break;
}
smartbox_rcsp_connect();
#if (RCSP_ADV_FIND_DEVICE_ENABLE)
printf("smartbox_find_device_reset\n");
extern void smartbox_find_device_reset(void);
smartbox_find_device_reset();
#endif
#if (MUTIl_CHARGING_BOX_EN)
ble_app_disconnect();
#endif
break;
case BLE_ST_DISCONN:
if (flag) {
smartbox_user_state_event(BT_3TH_EVENT_COMMON_BLE_STATUS, BLE_ST_DISCONN);
break;
}
smartbox_rcsp_disconnect();
#if RCSP_UPDATE_EN
if (get_jl_update_flag()) {
bt_ble_adv_enable(0);
}
#endif
break;
}
}
static void rcsp_user_event_spp_handler(u8 spp_status, u8 flag)
{
switch (spp_status) {
case 0:
break;
case 1:
if (flag) {
smartbox_user_state_event(BT_3TH_EVENT_COMMON_SPP_STATUS, spp_status);
break;
}
smartbox_rcsp_connect();
#if (0 == BT_CONNECTION_VERIFY)
JL_rcsp_auth_reset();
#endif
#if (RCSP_ADV_FIND_DEVICE_ENABLE)
printf("smartbox_find_device_reset\n");
extern void smartbox_find_device_reset(void);
smartbox_find_device_reset();
#endif
break;
default:
if (flag) {
smartbox_user_state_event(BT_3TH_EVENT_COMMON_SPP_STATUS, spp_status);
break;
}
smartbox_rcsp_disconnect();
#if RCSP_ADV_MUSIC_INFO_ENABLE
stop_get_music_timer(1);
#endif
#if (0 == BT_CONNECTION_VERIFY)
JL_rcsp_auth_reset();
#endif
#if RCSP_UPDATE_EN
if (get_jl_update_flag()) {
JL_rcsp_event_to_user(DEVICE_EVENT_FROM_RCSP, MSG_JL_UPDATE_START, NULL, 0);
}
#endif //rcsp_update_en
break;
}
}
static void rcsp_user_event_select_handler(void)
{
#if RCSP_UPDATE_EN
set_jl_update_flag(0);
#endif
}
static void smartbox_user_state_handler(u8 *param, u8 param_len)
{
u8 opcode = param[0];
u8 state = param[1];
switch (opcode) {
case BT_3TH_EVENT_COMMON_BLE_STATUS:
rcsp_user_event_ble_handler((ble_state_e)state, 0);
break;
case BT_3TH_EVENT_COMMON_SPP_STATUS:
rcsp_user_event_spp_handler(state, 0);
break;
}
}
void rcsp_user_event_handler(u16 opcode, u8 *data, int size)
{
ble_state_e ble_status;
u8 spp_status;
switch (opcode) {
case BT_3TH_EVENT_COMMON_BLE_STATUS:
ble_status = data[0];
rcsp_user_event_ble_handler(ble_status, 1);
break;
case BT_3TH_EVENT_COMMON_SPP_STATUS:
spp_status = data[0];
rcsp_user_event_spp_handler(spp_status, 1);
break;
case BT_3TH_EVENT_RCSP_DEV_SELECT:
rcsp_user_event_select_handler();
break;
}
}
#endif