KT25-0812_82A-UART/apps/soundbox/smartbox/smartbox_rcsp_manage.c
2025-08-12 18:09:23 +08:00

219 lines
5.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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"
#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"
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);
}
extern u8 check_le_pakcet_sent_finish_flag(void);
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;
#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;
#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;
}
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];
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 (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;
}
break;
case BLE_ST_DISCONN:
#if RCSP_UPDATE_EN
bt_ble_adv_enable(0);
#endif
break;
case BT_3TH_EVENT_COMMON_SPP_STATUS:
spp_status = data[0];
switch (spp_status) {
case 0:
break;
case 1:
#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 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;
}
break;
case BT_3TH_EVENT_RCSP_DEV_SELECT:
#if RCSP_UPDATE_EN
set_jl_update_flag(0);
#endif
break;
}
}
#endif