817 lines
25 KiB
C
817 lines
25 KiB
C
#include "include.h"
|
||
#include "func.h"
|
||
#include "func_bt.h"
|
||
#include "app_variable.h"
|
||
#define TRACE_EN 0
|
||
|
||
#if TRACE_EN
|
||
#define TRACE(...) printf(__VA_ARGS__)
|
||
#else
|
||
#define TRACE(...)
|
||
#endif
|
||
#define TITLE_BUF_LEN 128 //歌词buuufer长度
|
||
#define ARTIST_BUF_LEN 128 //歌词buuufer长度
|
||
|
||
#define MOVE_OFFSET_X 35 // 图片icon可供水平移动的距离
|
||
#define MAX_MOVE_X 158 // 图片icon可供水平移动的距离
|
||
|
||
enum {
|
||
COMPO_ID_BTN_PREV = 1,
|
||
COMPO_ID_BTN_NEXT,
|
||
COMPO_ID_BTN_PLAY,
|
||
COMPO_ID_BTN_VOL_UP,
|
||
COMPO_ID_BTN_VOL_DOWN,
|
||
COMPO_ID_TXT_MUSIC_NAME,
|
||
COMPO_ID_TXT_MUSIC_LYRIC,
|
||
// COMPO_ID_PIC_MUSIC_VOL,
|
||
COMPO_ID_SHAPE_MUSIC_VOL,
|
||
COMPO_ID_SHAPE_MUSIC_VOL_CIR,
|
||
COMPO_ID_BTN_MUSIC_VOL,
|
||
COMPO_ID_BTN_MUSIC_LEFT,
|
||
COMPO_ID_BTN_MUSIC_RIGHT,
|
||
};
|
||
|
||
typedef struct f_bt_t_ {
|
||
bool ams_play_sta;
|
||
bool bt_play_sta;
|
||
u8 vol;
|
||
u8 ams_vol;
|
||
u16 move_vol_x;
|
||
u16 move_vol;
|
||
u8 title_buf[TITLE_BUF_LEN];
|
||
u8 artist_buf[ARTIST_BUF_LEN];
|
||
bool page_drag_flag; //按住标志
|
||
u32 start_x; //滑动开始的x坐标
|
||
u32 start_y; //滑动开始的y坐标
|
||
bool click_flag; // 点击标志位
|
||
u32 click_time; //记录点击时间
|
||
u16 last_x; //最后x停留的位置
|
||
} f_bt_t;
|
||
|
||
|
||
/*****************************************************************************
|
||
* 1.当BT连接时,优先同步id3信息,控制通道走BT
|
||
* 2.当只连接BLE时,IOS走AMS服务,安卓走私有协议
|
||
*****************************************************************************/
|
||
|
||
static void func_bt_music_title_refresh(void *buf);
|
||
static void func_bt_music_artist_refresh(void *buf);
|
||
static void func_bt_music_play_btnpic_refresh(u8 sta);
|
||
static void func_bt_music_vol_btnpic_refresh(u8 vol);
|
||
|
||
/*****************************************************************************
|
||
* BT or BLE interface
|
||
*****************************************************************************/
|
||
|
||
void func_bt_mp3_res_play(u32 addr, u32 len)
|
||
{
|
||
if (len == 0) {
|
||
return;
|
||
}
|
||
bt_cb.res_bt_bypass = true;
|
||
|
||
if (!sbc_is_bypass()) {
|
||
bt_audio_bypass();
|
||
}
|
||
mp3_res_play(addr, len);
|
||
}
|
||
|
||
void func_bt_mp3_play_restore(void)
|
||
{
|
||
if (bt_cb.res_bt_bypass) {
|
||
bt_cb.res_bt_bypass = false;
|
||
bt_audio_enable();
|
||
}
|
||
}
|
||
|
||
void func_bt_init(void)
|
||
{
|
||
if (!bt_cb.bt_is_inited) {
|
||
msg_queue_clear();
|
||
dis_auto_pwroff();
|
||
bsp_bt_init();
|
||
bt_redial_init();
|
||
bt_cb.bt_is_inited = 1;
|
||
}
|
||
}
|
||
|
||
void func_bt_chk_off(void)
|
||
{
|
||
if ((func_cb.sta != FUNC_BT) && (bt_cb.bt_is_inited)) {
|
||
bt_disconnect(1);
|
||
bt_off();
|
||
bt_cb.bt_is_inited = 0;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
//播放暂停控制
|
||
static void bt_control_play_pause(void)
|
||
{
|
||
//f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
|
||
if (bt_is_connected()) {
|
||
bt_music_play_pause();
|
||
bt_cb.music_playing = bt_cb.music_playing ? 0:1;
|
||
} else if (ble_ams_is_connected()) {
|
||
ble_ams_remote_ctrl(AMS_REMOTE_CMD_PLAY_PAUSE);
|
||
bt_cb.music_playing = bt_cb.music_playing ? 0:1;
|
||
}
|
||
else{
|
||
func_popup_new(POPUP_ID_BT_REMIND);
|
||
}
|
||
}
|
||
|
||
//切换上一曲
|
||
static void bt_control_prev(void)
|
||
{
|
||
if (bt_is_connected()) {
|
||
bt_music_prev();
|
||
} else if (ble_ams_is_connected()) {
|
||
ble_ams_remote_ctrl(AMS_REMOTE_CMD_PREV_TRACK);
|
||
}
|
||
else{
|
||
func_popup_new(POPUP_ID_BT_REMIND);
|
||
}
|
||
}
|
||
|
||
|
||
//切换下一曲
|
||
static void bt_control_next(void)
|
||
{
|
||
if (bt_is_connected()) {
|
||
bt_music_next();
|
||
} else if (ble_ams_is_connected()) {
|
||
ble_ams_remote_ctrl(AMS_REMOTE_CMD_NEXT_TRACK);
|
||
}
|
||
else{
|
||
func_popup_new(POPUP_ID_BT_REMIND);
|
||
}
|
||
}
|
||
|
||
//音量更新
|
||
static void bt_vol_update(void)
|
||
{
|
||
if (!bt_cb.bt_form_created) {
|
||
return ;
|
||
}
|
||
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
|
||
bool vol_uodate_flag = false;
|
||
|
||
if (bt_is_connected()) {
|
||
if (f_bt->vol != SysVariable.vol) {
|
||
f_bt->vol = SysVariable.vol;
|
||
vol_uodate_flag = true;
|
||
}
|
||
} else if (ble_ams_is_connected()) {
|
||
if (f_bt->vol != f_bt->ams_vol) {
|
||
f_bt->vol = f_bt->ams_vol;
|
||
vol_uodate_flag = true;
|
||
}
|
||
}
|
||
|
||
if (vol_uodate_flag) {
|
||
func_bt_music_vol_btnpic_refresh(f_bt->vol);
|
||
}
|
||
}
|
||
|
||
//音量控制+
|
||
static void bt_control_vol_up(void)
|
||
{
|
||
if (bt_is_connected()) {
|
||
bt_volume_up();
|
||
} else if (ble_ams_is_connected()) {
|
||
ble_ams_remote_ctrl(AMS_REMOTE_CMD_VOL_UP);
|
||
}
|
||
else{
|
||
func_popup_new(POPUP_ID_BT_REMIND);
|
||
}
|
||
bt_vol_update();
|
||
}
|
||
|
||
//音量控制-
|
||
static void bt_control_vol_down(void)
|
||
{
|
||
if (bt_is_connected()) {
|
||
bt_volume_down();
|
||
} else if (ble_ams_is_connected()) {
|
||
ble_ams_remote_ctrl(AMS_REMOTE_CMD_VOL_DOWN);
|
||
}
|
||
else{
|
||
func_popup_new(POPUP_ID_BT_REMIND);
|
||
}
|
||
bt_vol_update();
|
||
}
|
||
|
||
#if LE_AMS_CLIENT_EN
|
||
//AMS推送状态更新处理
|
||
static void ble_ams_sta_update_handle(u8 sta, void *p_data, u16 len)
|
||
{
|
||
if (bt_is_connected() || !ble_ams_is_connected() || !bt_cb.bt_form_created) {
|
||
return ;
|
||
}
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
|
||
switch (sta) {
|
||
case BLE_AMS_STA_UPDATE_PAUSE:
|
||
{
|
||
f_bt->ams_play_sta = false;
|
||
func_bt_music_play_btnpic_refresh(false);
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_PLAYING:
|
||
{
|
||
f_bt->ams_play_sta = true;
|
||
func_bt_music_play_btnpic_refresh(true);
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_VOLUME:
|
||
{
|
||
u32 volume = GET_LE32(p_data);
|
||
f_bt->ams_vol = volume / 625;
|
||
bt_vol_update();
|
||
TRACE("ams volume:%d, ams_vol:%d\n", volume, f_bt->ams_vol);
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_TITLE:
|
||
{
|
||
char *title = (char *)p_data;
|
||
if (strlen(title)) {
|
||
memcpy(f_bt->title_buf,title,TITLE_BUF_LEN - 1);
|
||
msg_enqueue(EVT_ID3_TITLE_UPDATE);
|
||
TRACE("ams title:%s\n",title);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_ALBUM:
|
||
{
|
||
char * album = (char *)p_data;
|
||
if (strlen(album)) {
|
||
memcpy(f_bt->artist_buf,album,ARTIST_BUF_LEN - 1);
|
||
msg_enqueue(EVT_ID3_ARTIST_UPDATE);
|
||
TRACE("ams album:%s\n",album);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_ARTIST:
|
||
{
|
||
char * artist = (char *)p_data;
|
||
if (strlen(artist)) {
|
||
memcpy(f_bt->artist_buf,artist,ARTIST_BUF_LEN - 1);
|
||
msg_enqueue(EVT_ID3_ARTIST_UPDATE);
|
||
TRACE("ams artist:%s\n",artist);
|
||
}
|
||
}
|
||
break;
|
||
|
||
case BLE_AMS_STA_UPDATE_APP_NAME:
|
||
{
|
||
char * app_name = (char *)p_data;
|
||
if (strlen(app_name)) {
|
||
compo_form_set_title(func_cb.frm_main, app_name);
|
||
TRACE("ams app name:%s\n",app_name);
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
#endif // LE_AMS_CLIENT_EN
|
||
|
||
#if BT_ID3_TAG_EN
|
||
//id3信息更新处理
|
||
static void bt_id3_tag_update_handle(u8 type, char *str)
|
||
{
|
||
if (BT_ID3_TAG_TITLE == type) {
|
||
memcpy(f_bt->title_buf,str,TITLE_BUF_LEN - 1);
|
||
msg_enqueue(EVT_ID3_TITLE_UPDATE);
|
||
} else if (BT_ID3_TAG_ARTIST == type) {
|
||
memcpy(f_bt->artist_buf,str,ARTIST_BUF_LEN - 1);
|
||
msg_enqueue(EVT_ID3_ARTIST_UPDATE);
|
||
}
|
||
}
|
||
#endif // BT_ID3_TAG_EN
|
||
|
||
|
||
/*****************************************************************************
|
||
* func_bt_music(UI)
|
||
*****************************************************************************/
|
||
//创建蓝牙音乐播放器窗体,创建窗体中不要使用功能结构体 func_cb.f_cb
|
||
compo_form_t *func_bt_form_create(void)
|
||
{
|
||
//新建窗体
|
||
compo_form_t *frm = compo_form_create(true);
|
||
|
||
//设置标题栏
|
||
compo_form_set_mode(frm, COMPO_FORM_MODE_SHOW_TITLE | COMPO_FORM_MODE_SHOW_TIME);
|
||
compo_form_set_title(frm, i18n[STR_MUSIC]);
|
||
|
||
//歌名
|
||
compo_textbox_t *name_txt = compo_textbox_create(frm, 50);
|
||
compo_textbox_set_location(name_txt, 2*GUI_SCREEN_WIDTH+5, GUI_SCREEN_CENTER_Y - 100, GUI_SCREEN_WIDTH, 50);
|
||
compo_setid(name_txt, COMPO_ID_TXT_MUSIC_NAME);
|
||
compo_textbox_set(name_txt, i18n[STR_UNKNOWN]);
|
||
|
||
//歌词
|
||
compo_textbox_t *lyric_txt = compo_textbox_create(frm, 50);
|
||
compo_textbox_set_location(lyric_txt, 2*GUI_SCREEN_WIDTH+5, GUI_SCREEN_CENTER_Y - 50, GUI_SCREEN_WIDTH, 50);
|
||
compo_setid(lyric_txt, COMPO_ID_TXT_MUSIC_LYRIC);
|
||
compo_textbox_set(lyric_txt, i18n[STR_UNKNOWN]);
|
||
|
||
//新建图片 大背景
|
||
compo_form_add_image(frm, UI_BUF_MUSIC_BG_BIN, GUI_SCREEN_CENTER_X, 108);
|
||
|
||
//新建按钮
|
||
compo_button_t *btn;
|
||
|
||
//播放或暂停按钮
|
||
if (bt_cb.music_playing) {
|
||
btn = compo_button_create_by_image(frm, UI_BUF_MUSIC_PAUSE_CLICK_BIN);
|
||
} else {
|
||
btn = compo_button_create_by_image(frm, UI_BUF_MUSIC_PAUSE_BIN);
|
||
}
|
||
compo_setid(btn, COMPO_ID_BTN_PLAY);
|
||
compo_button_set_pos(btn, GUI_SCREEN_CENTER_X, 108);
|
||
|
||
//上一曲 按钮
|
||
btn = compo_button_create_by_image(frm, UI_BUF_MUSIC_PREV_CLICK_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_PREV);
|
||
compo_button_set_pos(btn, 41, 209);
|
||
|
||
compo_shape_t *btn_black = compo_shape_create(frm,COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(btn_black, make_color(0xff, 0xff, 0xff));
|
||
compo_shape_set_location(btn_black, 197, 209, 60, 60);
|
||
|
||
//下一曲 按钮
|
||
btn = compo_button_create_by_image(frm, UI_BUF_MUSIC_NEXT_CLICK_BIN);
|
||
compo_setid(btn, COMPO_ID_BTN_NEXT);
|
||
compo_button_set_pos(btn, 197, 209);
|
||
|
||
//音量 减 图片加按钮
|
||
compo_form_add_image(frm, UI_BUF_MUSIC_VOLUME_DOWN_BIN, 25, 268);
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_VOL_DOWN);
|
||
compo_button_set_location(btn, 25, 268, 40, 40);
|
||
|
||
//音量 增 图片加按钮
|
||
compo_form_add_image(frm, UI_BUF_MUSIC_VOLUME_UP_BIN, 214, 268);
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_VOL_UP);
|
||
compo_button_set_location(btn, 214, 268,40,40);
|
||
|
||
// 创建灰色按钮
|
||
compo_shape_t *grey_shape ;
|
||
grey_shape = compo_shape_create(frm,COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(grey_shape, make_color(0x00, 0x00, 0x00));
|
||
compo_shape_set_location(grey_shape,41, 209,60,60);
|
||
compo_shape_set_alpha(grey_shape,200);
|
||
compo_setid(grey_shape, COMPO_ID_BTN_MUSIC_LEFT);
|
||
compo_shape_set_visible(grey_shape,false);
|
||
|
||
grey_shape = compo_shape_create(frm,COMPO_SHAPE_TYPE_RECTANGLE);
|
||
compo_shape_set_color(grey_shape, make_color(0x00, 0x00, 0x00));
|
||
compo_shape_set_location(grey_shape,197, 209,60,60);
|
||
compo_shape_set_alpha(grey_shape,200);
|
||
compo_setid(grey_shape, COMPO_ID_BTN_MUSIC_RIGHT);
|
||
compo_shape_set_visible(grey_shape,false);
|
||
|
||
//创建音乐 底部浅色 音量 进度条 底部背景
|
||
grey_shape = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE,1);
|
||
compo_shape_set_color(grey_shape, make_color(143, 143, 146));
|
||
compo_shape_set_location(grey_shape, GUI_SCREEN_CENTER_X, 268, MAX_MOVE_X, 4);
|
||
|
||
//创建音乐 音量 进度条
|
||
compo_shape_t *white_shape ;
|
||
white_shape = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE,1);
|
||
compo_shape_set_color(white_shape, COLOR_WHITE);
|
||
compo_shape_set_align_center(white_shape,false);//不居中了,居中后进度条长度不好算
|
||
compo_setid(white_shape, COMPO_ID_SHAPE_MUSIC_VOL);
|
||
compo_shape_set_location(white_shape, MOVE_OFFSET_X, 266, SysVariable.vol*MAX_MOVE_X/VOL_MAX, 4);
|
||
|
||
//创建音乐 音量 进度条上的圆圈
|
||
compo_shape_t *cir_shape ;
|
||
cir_shape = compo_radius_shape_create(frm, COMPO_SHAPE_TYPE_ROUNDED_RECTANGLE,6);
|
||
compo_shape_set_color(cir_shape, COLOR_WHITE);
|
||
compo_shape_set_align_center(cir_shape,false);//不居中了,居中后进度条长度不好算
|
||
compo_setid(cir_shape, COMPO_ID_SHAPE_MUSIC_VOL_CIR);
|
||
compo_shape_set_location(cir_shape, SysVariable.vol*MAX_MOVE_X/VOL_MAX+ MOVE_OFFSET_X, 261, 12, 12);
|
||
|
||
btn = compo_button_create(frm);
|
||
compo_setid(btn, COMPO_ID_BTN_MUSIC_VOL);
|
||
compo_button_set_location(btn, 120, 261,178,50);
|
||
|
||
// compo_picturebox_t *vol_pic = compo_picturebox_create(frm, UI_BUF_MUSIC_VOLUME1_BIN);
|
||
// compo_setid(vol_pic, COMPO_ID_PIC_MUSIC_VOL);
|
||
// compo_picturebox_set_pos(vol_pic, GUI_SCREEN_CENTER_X, 280);
|
||
// widget_set_align_center(vol_pic->img, false);
|
||
// compo_picturebox_set_visible(vol_pic, false);
|
||
|
||
return frm;
|
||
}
|
||
|
||
|
||
//音乐歌词刷新,没有中文暂时屏蔽
|
||
static void func_bt_music_title_refresh(void *buf)
|
||
{
|
||
if (bt_cb.bt_form_created) {
|
||
compo_textbox_t *tilte_txt = compo_getobj_byid(COMPO_ID_TXT_MUSIC_LYRIC);
|
||
compo_textbox_set(tilte_txt, buf);
|
||
}
|
||
}
|
||
|
||
//音乐 歌名刷新,没有中文暂时屏蔽
|
||
static void func_bt_music_artist_refresh(void *buf)
|
||
{
|
||
if (bt_cb.bt_form_created) {
|
||
compo_textbox_t *tilte_art_txt = compo_getobj_byid(COMPO_ID_TXT_MUSIC_NAME);
|
||
compo_textbox_set(tilte_art_txt, buf);
|
||
}
|
||
}
|
||
|
||
//音乐播放或暂停 按钮刷新
|
||
static void func_bt_music_play_btnpic_refresh(u8 sta)
|
||
{
|
||
if (!bt_cb.bt_form_created) {
|
||
return ;
|
||
}
|
||
compo_button_t *btn = compo_getobj_byid(COMPO_ID_BTN_PLAY);
|
||
|
||
if (sta) {
|
||
compo_button_set_bgimg(btn, UI_BUF_MUSIC_PAUSE_CLICK_BIN);
|
||
} else {
|
||
compo_button_set_bgimg(btn, UI_BUF_MUSIC_PAUSE_BIN);
|
||
}
|
||
}
|
||
|
||
static void func_bt_music_vol_btnpic_refresh(u8 vol)
|
||
{
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
|
||
compo_shape_t *vol_shape_line;
|
||
compo_shape_t *vol_shape_cir;
|
||
vol_shape_line = compo_getobj_byid(COMPO_ID_SHAPE_MUSIC_VOL);
|
||
vol_shape_cir = compo_getobj_byid(COMPO_ID_SHAPE_MUSIC_VOL_CIR);
|
||
|
||
f_bt->move_vol_x = vol*MAX_MOVE_X/VOL_MAX;
|
||
//进度条不可以不限制因为会被圆挡住,这里在圆超出两个像素的时候往回拉
|
||
if(f_bt->move_vol_x >MAX_MOVE_X){
|
||
f_bt->move_vol_x = MAX_MOVE_X;
|
||
}
|
||
printf("vol_shape_line move_vol_x = %d VOL_MAX = %d,vol = %d\n ",f_bt->move_vol_x,VOL_MAX,vol);
|
||
compo_shape_set_location(vol_shape_line, MOVE_OFFSET_X, 266, f_bt->move_vol_x, 4);
|
||
compo_shape_set_location(vol_shape_cir, MOVE_OFFSET_X + f_bt->move_vol_x, 261, 12, 12);
|
||
|
||
|
||
// switch(vol){
|
||
// case 0:
|
||
// compo_shape_set_location(vol_shape_line, 41, 266, 0, 4);
|
||
// compo_shape_set_location(vol_shape_cir, 35, 261, 12, 12);
|
||
// break;
|
||
|
||
// }
|
||
|
||
// compo_picturebox_t *vol_pic;
|
||
|
||
// vol_pic = compo_getobj_byid(COMPO_ID_PIC_MUSIC_VOL);
|
||
// switch (vol){
|
||
// case 0:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME1_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, false);
|
||
// break;
|
||
|
||
// case 1 ... 3:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME1_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, true);
|
||
// break;
|
||
|
||
// case 4 ... 6:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME2_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, true);
|
||
// break;
|
||
// case 7 ... 9:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME3_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, true);
|
||
// break;
|
||
// case 10 ... 11:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME4_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, true);
|
||
// break;
|
||
// case 12 ... 16:
|
||
// // compo_picturebox_set(vol_pic, UI_BUF_MUSIC_VOLUME5_BIN);
|
||
// // compo_picturebox_set_visible(vol_pic, true);
|
||
// break;
|
||
// }
|
||
}
|
||
|
||
//单击按钮
|
||
static void func_bt_button_click(void)
|
||
{
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
compo_shape_t *left_shape = compo_getobj_byid(COMPO_ID_BTN_MUSIC_LEFT);
|
||
compo_shape_t *right_shape = compo_getobj_byid(COMPO_ID_BTN_MUSIC_RIGHT);
|
||
int id = compo_get_button_id();
|
||
switch (id) {
|
||
case COMPO_ID_BTN_PREV:
|
||
/* 提醒媒体未打开 */
|
||
if (bt_a2dp_profile_completely_connected() == false)
|
||
{
|
||
func_popup_new(POPUP_ID_A2DP);
|
||
return;
|
||
}
|
||
bt_control_prev();
|
||
f_bt->click_flag=true;
|
||
f_bt->click_time=tick_get();
|
||
compo_shape_set_visible(left_shape,true);
|
||
compo_shape_set_visible(right_shape,false);
|
||
break;
|
||
|
||
case COMPO_ID_BTN_NEXT:
|
||
/* 提醒媒体未打开 */
|
||
if (bt_a2dp_profile_completely_connected() == false)
|
||
{
|
||
func_popup_new(POPUP_ID_A2DP);
|
||
return;
|
||
}
|
||
bt_control_next();
|
||
f_bt->click_flag=true;
|
||
f_bt->click_time=tick_get();
|
||
compo_shape_set_visible(left_shape,false);
|
||
compo_shape_set_visible(right_shape,true);
|
||
break;
|
||
|
||
case COMPO_ID_BTN_PLAY:
|
||
/* 提醒媒体未打开 */
|
||
if (bt_a2dp_profile_completely_connected() == false)
|
||
{
|
||
func_popup_new(POPUP_ID_A2DP);
|
||
return;
|
||
}
|
||
bt_control_play_pause();
|
||
break;
|
||
|
||
case COMPO_ID_BTN_VOL_UP:
|
||
bt_control_vol_up();
|
||
break;
|
||
|
||
case COMPO_ID_BTN_VOL_DOWN:
|
||
bt_control_vol_down();
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
|
||
//更改音量tp
|
||
static void func_bt_move_vol(void)
|
||
{
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
int id = compo_get_button_id();
|
||
switch (id) {
|
||
case COMPO_ID_BTN_MUSIC_VOL:
|
||
f_bt->page_drag_flag=true;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
}
|
||
void func_bt_sub_process(void)
|
||
{
|
||
bsp_bt_status();
|
||
}
|
||
|
||
void func_bt_process(void)
|
||
{
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
s32 dx,dy,x,y,new_time,sx,sy;
|
||
bool move;
|
||
static u32 ticks,ticks1;
|
||
|
||
compo_shape_t *vol_shape_line = compo_getobj_byid(COMPO_ID_SHAPE_MUSIC_VOL);
|
||
compo_shape_t *vol_shape_cir = compo_getobj_byid(COMPO_ID_SHAPE_MUSIC_VOL_CIR);
|
||
compo_shape_t *left_shape = compo_getobj_byid(COMPO_ID_BTN_MUSIC_LEFT);
|
||
compo_shape_t *right_shape = compo_getobj_byid(COMPO_ID_BTN_MUSIC_RIGHT);
|
||
|
||
|
||
/* 整体页面拖动事件, 列表拖动时页面不需要移动 */
|
||
if (f_bt->page_drag_flag)
|
||
{
|
||
s32 dx, dy;
|
||
|
||
s32 sx, sy, x, y;
|
||
f_bt->page_drag_flag = ctp_get_cur_point(&sx, &sy, &x, &y);
|
||
// printf("f_bt->page_drag_flag = %d\n",f_bt->page_drag_flag) ;
|
||
if (f_bt->page_drag_flag)
|
||
{
|
||
// 拖动页面
|
||
f_bt->move_vol_x = x;
|
||
if(f_bt->move_vol_x < 0)
|
||
{
|
||
f_bt->move_vol_x = 0;
|
||
}
|
||
else if(f_bt->move_vol_x > MAX_MOVE_X){
|
||
f_bt->move_vol_x = MAX_MOVE_X;
|
||
}
|
||
|
||
// printf("f_bt->move_vol_x = %d,x = %d,sx = %d\n",f_bt->move_vol_x,x,sx);
|
||
compo_shape_set_location(vol_shape_line, MOVE_OFFSET_X, 266, f_bt->move_vol_x, 4);
|
||
compo_shape_set_location(vol_shape_cir, MOVE_OFFSET_X + f_bt->move_vol_x, 261, 12, 12);
|
||
bt_volume_set(f_bt->move_vol_x*VOL_MAX/MAX_MOVE_X);
|
||
|
||
}
|
||
else
|
||
{
|
||
|
||
}
|
||
}
|
||
|
||
if(f_bt->click_flag==true)
|
||
{
|
||
new_time=tick_get();
|
||
if(new_time-f_bt->click_time>=100) {
|
||
f_bt->click_flag=false;
|
||
}
|
||
}
|
||
else{
|
||
compo_shape_set_visible(left_shape,false);
|
||
compo_shape_set_visible(right_shape,false);
|
||
}
|
||
func_process();
|
||
func_bt_sub_process();
|
||
}
|
||
|
||
//蓝牙音乐消息处理
|
||
static void func_bt_message(size_msg_t msg)
|
||
{
|
||
f_bt_t *f_bt = (f_bt_t *)func_cb.f_cb;
|
||
u32 sx,sy;
|
||
switch (msg) {
|
||
case MSG_CTP_TOUCH:
|
||
func_bt_move_vol();
|
||
break;
|
||
case MSG_CTP_CLICK:
|
||
func_bt_button_click(); //单击按钮
|
||
break;
|
||
case MSG_QDEC_FORWARD:
|
||
bt_control_vol_up();
|
||
break;
|
||
case MSG_QDEC_BACKWARD:
|
||
bt_control_vol_down();
|
||
break;
|
||
case EVT_ID3_TITLE_UPDATE:
|
||
func_bt_music_title_refresh(f_bt->title_buf);
|
||
break;
|
||
case EVT_ID3_ARTIST_UPDATE:
|
||
func_bt_music_artist_refresh(f_bt->artist_buf);
|
||
break;
|
||
case MSG_SYS_500MS:
|
||
if (bt_is_connected() && !sys_cb.gui_sleep_sta) {
|
||
#if BT_ID3_TAG_EN
|
||
bt_music_paly_status_info();
|
||
#endif
|
||
if (f_bt->bt_play_sta != bt_cb.music_playing) {
|
||
f_bt->bt_play_sta = bt_cb.music_playing;
|
||
func_bt_music_play_btnpic_refresh(bt_cb.music_playing);
|
||
}
|
||
bt_vol_update();
|
||
}
|
||
else if (!bt_is_connected())
|
||
{
|
||
bt_cb.music_playing = false;
|
||
if (f_bt->bt_play_sta != bt_cb.music_playing)
|
||
{
|
||
f_bt->bt_play_sta = bt_cb.music_playing;
|
||
func_bt_music_play_btnpic_refresh(bt_cb.music_playing);
|
||
}
|
||
}
|
||
break;
|
||
case MSG_CTP_SHORT_RIGHT:
|
||
case MSG_CTP_SHORT_LEFT:
|
||
//if(f_bt->move_flag==true||f_bt->start_x<=SysVariable.hfp_vol*10+15&&f_bt->start_x>=SysVariable.hfp_vol*10-15&&f_bt->start_y>=261-15)
|
||
if(f_bt->page_drag_flag==true)
|
||
{
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
func_message(msg);
|
||
}
|
||
break;
|
||
default:
|
||
func_message(msg);
|
||
break;
|
||
}
|
||
}
|
||
|
||
void func_bt_enter(void)
|
||
{
|
||
f_bt_t *f_bt;
|
||
func_cb.f_cb = func_zalloc(sizeof(f_bt_t));
|
||
func_cb.frm_main = func_bt_form_create();
|
||
f_bt = (f_bt_t *)func_cb.f_cb;
|
||
|
||
func_cb.mp3_res_play = func_bt_mp3_res_play;
|
||
bt_cb.bt_form_created = 1;
|
||
f_bt->bt_play_sta = bt_cb.music_playing;
|
||
f_bt->ams_play_sta = false;
|
||
f_bt->vol = 0;
|
||
f_bt->last_x=SysVariable.vol*MAX_MOVE_X/VOL_MAX+ MOVE_OFFSET_X;
|
||
func_bt_music_play_btnpic_refresh(bt_cb.music_playing);
|
||
#if LE_AMS_CLIENT_EN
|
||
if (ble_ams_is_connected()) {
|
||
if (ble_ams_cb.play_state) {
|
||
f_bt->ams_play_sta = true;
|
||
func_bt_music_play_btnpic_refresh(1);
|
||
}
|
||
f_bt->ams_vol = ble_ams_cb.vol;
|
||
func_bt_music_vol_btnpic_refresh(f_bt->ams_vol);
|
||
if (strlen(ble_ams_cb.app_name)) {
|
||
compo_form_set_title(func_cb.frm_main, ble_ams_cb.app_name);
|
||
}
|
||
}
|
||
ble_ams_sta_update_cb_reg(ble_ams_sta_update_handle);
|
||
#endif
|
||
bt_id3_tag_update_cb_reg(bt_id3_tag_update_handle);
|
||
|
||
#if !BT_BACKSTAGE_MUSIC_EN
|
||
func_bt_init();
|
||
bt_audio_enable();
|
||
#if DAC_DNR_EN
|
||
dac_dnr_set_sta(1);
|
||
sys_cb.dnr_sta = 1;
|
||
#endif
|
||
#endif // !BT_BACKSTAGE_MUSIC_EN
|
||
}
|
||
|
||
void func_bt_exit(void)
|
||
{
|
||
#if !BT_BACKSTAGE_MUSIC_EN
|
||
dac_fade_out();
|
||
#if DAC_DNR_EN
|
||
dac_dnr_set_sta(0);
|
||
sys_cb.dnr_sta = 0;
|
||
#endif
|
||
bt_audio_bypass();
|
||
|
||
#if !BT_BACKSTAGE_EN
|
||
bt_disconnect(1);
|
||
bt_off();
|
||
bt_cb.bt_is_inited = 0;
|
||
#else
|
||
if (bt_get_status() == BT_STA_PLAYING && !bt_is_testmode()) { //蓝牙退出停掉音乐
|
||
delay_5ms(10);
|
||
if(bt_get_status() == BT_STA_PLAYING) { //再次确认play状态
|
||
u32 timeout = 850; //8.5s
|
||
bt_music_pause();
|
||
while (bt_get_status() == BT_STA_PLAYING && timeout > 0) {
|
||
timeout--;
|
||
delay_5ms(2);
|
||
}
|
||
}
|
||
}
|
||
#endif // !BT_BACKSTAGE_EN
|
||
#endif // !BT_BACKSTAGE_MUSIC_EN
|
||
ble_ams_sta_update_cb_unreg();
|
||
bt_id3_tag_update_cb_unreg();
|
||
|
||
bt_cb.bt_form_created = 0;
|
||
bt_cb.rec_pause = 0;
|
||
func_cb.last = FUNC_BT;
|
||
}
|
||
|
||
void func_bt(void)
|
||
{
|
||
printf("%s\n", __func__);
|
||
func_bt_enter();
|
||
while (func_cb.sta == FUNC_BT) {
|
||
func_bt_process();
|
||
func_bt_message(msg_dequeue());
|
||
}
|
||
func_bt_exit();
|
||
}
|
||
|
||
TJD_BT_STATUS_E tjd_get_bt_connect_status(void)
|
||
{
|
||
TJD_BT_STATUS_E status;
|
||
|
||
if (ble_is_connected() && bt_is_connected()) {
|
||
status = TJD_BT_EDR_BLE_CONNECT;
|
||
} else if (bt_is_connected()) {
|
||
status = TJD_BT_EDR_CONNECT;
|
||
} else if (ble_is_connected() ) {
|
||
status = TJD_BT_BLE_CONNECT;
|
||
} else {
|
||
status = TJD_BT_NOT_CONNECT;
|
||
}
|
||
return status;
|
||
} |