299 lines
7.7 KiB
C
299 lines
7.7 KiB
C
#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
|