WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "null pointer\n");\r
return;\r
}\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "test get play status songlen:%u, songpos:%u, playstatus:%u:",\r
- status->song_length, status->song_position, status->play_status);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtGetPlayStatusCallback] songlen:%u, songpos:%u, playstatus:%u:",\r
+ status->song_length, status->song_position, status->play_status);\r
}\r
\r
static void BtAvrcpCtHdlNotifyVolumeRspCbk(avrcp_ct_notification_value_cb_t *notification)\r
{\r
- WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Set local volume: 0x%x\n", notification->volume); /* 注册事件后通知的音量 */\r
+ WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyVolumeRspCbk] volume: 0x%x\n", \r
+ notification->volume); /* 注册事件后通知的音量 */\r
BtAvrcpTgNotifyVolumeChangedProc((uint8_t)notification->volume);\r
}\r
\r
+static void BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(avrcp_ct_notification_value_cb_t *notification)\r
+{\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk] playback status changed :%u\n",\r
+ notification->play_status);\r
+ if(notification->play_status == AVRCP_PLAY_STATUS_PLAYING) { //AVRCP媒体playing状态\r
+ PlayersModel::GetInstance()->set_player_state(true); //更新UI显示\r
+ } else {\r
+ PlayersModel::GetInstance()->set_player_state(false);\r
+ }\r
+ return;\r
+}\r
//收到来自TG返回的Notification时回调函数\r
static void BtAvrcpCtNotificationCallback(\r
const bd_addr_t *bd_addr, avrcp_notify_event_t event_id, avrcp_ct_notification_value_cb_t *notification)\r
return;\r
}\r
\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ct notification cbk event_id:0x%x\n", event_id);\r
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ct notification cbk event_id:0x%x\n", event_id);\r
bool notify_flag = true;\r
switch (event_id) {\r
- case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED:\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "tg notify ct playback status changed :%u\n",\r
- notification->play_status);\r
+ case AVRCP_NOTIFY_EVENT_PLAYBACK_STATUS_CHANGED: //播放状态变更事件,从播放变为暂停、停止等状态,会触发这个事件\r
+ BtAvrcpCtHdlNotifyPlaybackStatusChangedRspCbk(notification);\r
break;\r
- case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED:\r
- BtAvrcpCtHdlNotifyVolumeRspCbk(notification);\r
+ case AVRCP_NOTIFY_EVENT_TRACK_CHANGED: //track状态变更事件,切换到下一首、上一首歌曲等情况,会触发此事件\r
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id);\r
break;\r
- case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED:\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "play conent changed event_id:0x%x\n", event_id);\r
+ case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END: //track结束事件,当前播放的曲目播放到末尾时,触发这个事件\r
break;\r
- case AVRCP_NOTIFY_EVENT_TRACK_CHANGED:\r
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "track changed event_id:0x%x\n", event_id);\r
+ case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START: //track开始事件,当曲目开始播放时,触发这个事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED: //播放位置改变事件,当播放进度的位置发生变化时,比如快进、快退等操作导致播放位置改变,会触发此事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED: //电池状态变更事件,当蓝牙设备的电池状态发生变化时,电量降低、充电状态改变等,会触发这个事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED: //系统状态变更事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED: //播放器配置变更事件,如音效设置、播放模式设置等,会触发此事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_NOW_PLAYING_CONTENT_CHANGED: //播放内容变更事件,当 “正在播放” 列表中的内容发生变化时,比如添加了新的曲目、删除了曲目等情况,会触发这个事件。\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED: //可使用的播放器变更事件,当系统中可用于播放的播放器设备发生变化时,比如新的播放器设备连接到系统或者已有播放器设备断开连接,会触发此事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED: //播放地址变更事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_UIDS_CHANGED: //UID 变更事件\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_VOLUME_CHANGED: //TG 端音量变更事件\r
+ BtAvrcpCtHdlNotifyVolumeRspCbk(notification);\r
+ break;\r
+ case AVRCP_NOTIFY_EVENT_RESERVED: //保留\r
break;\r
- case AVRCP_NOTIFY_EVENT_TRACK_REACHED_END:\r
- case AVRCP_NOTIFY_EVENT_TRACK_REACHED_START:\r
- case AVRCP_NOTIFY_EVENT_PLAYBACK_POS_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_BATT_STATUS_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_SYSTEM_STATUS_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_PLAYER_APPLICATION_SETTING_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_AVAILABLE_PLAYERS_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_ADDRESSED_PLAYER_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_UIDS_CHANGED:\r
- case AVRCP_NOTIFY_EVENT_RESERVED:\r
default:\r
notify_flag = false;\r
WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "invalid event id event_id:0x%x\n", event_id);\r
void MainPresenterSample::SetCircleProgress()
{
+ #if 0
PlayersView *playersView = dynamic_cast<PlayersView *>(view_->GetViewById(MUSIC_PLAYER));
if (playersView == nullptr)
{
PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_);
PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_);
}
+ #endif
}
void MainPresenterSample::SetCompassRotate()
break;
case MUSIC_PLAYER:
- SetCircleProgress();
+ PlayersModel::GetInstance()->SetCircleProgress();
break;
case WATCH_FACE:
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-08-05 15:20:03
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-09-21 17:01:40
+ * @LastEditTime: 2024-09-23 16:04:25
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersModel.h
*/
void UpdateVolumeValue(void);
bool get_avrcp_ct_or_tg_is_connected(void);
void set_phone_music_play_state(avrcp_key_operation_t notify);
+ void set_player_state(bool value);
private:
bool musicSourceFlag{false};//音乐来源标志:false:默认为手表音乐,true:手机音乐
int64_t playerCurrentTime_{0};
* @Author: luozheng 1732036298@qq.com\r
* @Date: 2024-08-05 15:20:03\r
* @LastEditors: luozheng 1732036298@qq.com\r
- * @LastEditTime: 2024-09-23 15:07:25\r
+ * @LastEditTime: 2024-09-23 16:17:55\r
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/player/include/PlayersPresenter.h\r
*/\r
\r
void OnClickFailBack(void);\r
void SetPlaybackProgress(int64_t value);\r
void SetPlayerState(bool value);\r
+ void SetPhonePlayerState(bool value);\r
void PlayerbackReset(void);\r
void PlayerHeadsetReset(void);\r
private:\r
{
return;
}
- int32_t playerState;
- PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
- UICheckBox::UICheckBoxState state_ = playersView->GetPlayerButtonState();
- if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED))
+ if(PlayersModel::GetInstance()->GetMusicSource() == false) //如果当前为本地音乐
{
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
- }
- else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED))
- {
- playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
- }
- if (state_ == UICheckBox::UICheckBoxState::SELECTED)
- {
- PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_);
- PlayersModel::GetInstance()->GetDuration(playerMusicDuration_);
- if (playerMusicDuration_ != 0)
+ int32_t playerState;
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
+ UICheckBox::UICheckBoxState state_ = playersView->GetPlayerButtonState();
+ if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED))
+ {
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
+ }
+ else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED))
{
- playerProgressValue_ = (playerCurrentTime_ * 100) / playerMusicDuration_;
- WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_);
+ playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
}
- else
+ if (state_ == UICheckBox::UICheckBoxState::SELECTED)
{
- playerProgressValue_ = 0; // 100: max progress value
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_);
+ PlayersModel::GetInstance()->GetDuration(playerMusicDuration_);
+ if (playerMusicDuration_ != 0)
+ {
+ playerProgressValue_ = (playerCurrentTime_ * 100) / playerMusicDuration_;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_);
+ }
+ else
+ {
+ playerProgressValue_ = 0; // 100: max progress value
+ }
+ PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_);
+ PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_);
}
- PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_);
- PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_);
+ }
+ else //如果当前为手机音乐
+ {
+ //更新手机音乐的进度,暂时没实现
+ PlayersModel::GetInstance()->SetCircleProgress(0);
+ PlayersPresenter::GetInstance()->SetPlaybackProgress(0);
}
}
break;
}
}
+
+ //设置按钮播放状态
+ void PlayersModel::set_player_state(bool value)
+ {
+ PlayersPresenter *playersPresenter = PlayersPresenter::GetInstance();
+ if (playersPresenter != nullptr)
+ {
+ playersPresenter->SetPhonePlayerState(value);
+ }
+ }
}
#ifdef __cplusplus
}\r
}\r
\r
+void PlayersPresenter::SetPhonePlayerState(bool value)\r
+{\r
+ PlayersView *playersView = PlayersView::GetInstance();\r
+ if (playersView != nullptr) {\r
+ PlayersModel::GetInstance()->SetPlayButtonState(value);\r
+ playersView->SetPlayerButtonState(value ? UICheckBox::UICheckBoxState::SELECTED:UICheckBox::UICheckBoxState::UNSELECTED);\r
+ }\r
+ return;\r
+}\r
+\r
void PlayersPresenter::PlayerbackReset(void)\r
{\r
PlayersView *playersView = PlayersView::GetInstance();\r
// 设置播放或暂停按钮的状态\r
void PlayersView::SetPlayerButtonState(UICheckBox::UICheckBoxState state)\r
{\r
- if (play_or_pause_Button == nullptr)\r
+ if (play_or_pause_Button != nullptr)\r
{\r
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PlayersView::SetPlayerButtonState play_or_pause_Button NULL");\r
- return;\r
+ play_or_pause_Button->SetState(state);\r
+ play_or_pause_Button->Invalidate();\r
}\r
- return play_or_pause_Button->SetState(state);\r
}\r
\r
void PlayersView::SetPlayerCtrVolume(float leftVolume, float rightVolume)\r
// 停止当前正在播放的音乐\r
void PlayersView::StopCurPlayingMusic()\r
{\r
- uint8_t state = GetPlayerButtonState();\r
- if (state == UICheckBox::UICheckBoxState::SELECTED)\r
+ int32_t playerState;\r
+ PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);\r
+ if (playerState == PLAYER_STARTED || playerState == PLAYER_PAUSED) //如果当前是已经播放或播放暂停状态\r
{\r
PlayersModel::GetInstance()->PlayerStop();\r
PlayersModel::GetInstance()->ClearActivateAudioInterrupt();\r
/// @param phoneMusicConnectStatus 手机音乐连接状态\r
void PlayersView::SetMusicPlayerButtonIsTouchable(bool musicSourceType)\r
{\r
- // 1.如果为手机音乐且手机音乐已连接那么上一首,下一首,播放或暂停,声音等按钮设置为可点击.\r
- // 2.如果不为手机音乐按钮就可点击\r
- /* -------------------------------------------------------------------------- */\r
- if (play_or_pause_Button && preMusicButton && nextMusicButton && soundButton && playerModelButton)\r
+ if (playerModelButton)\r
{\r
bool touchableState = !musicSourceType;\r
- // play_or_pause_Button->SetTouchable(touchableState);\r
- // preMusicButton->SetTouchable(touchableState);\r
- // nextMusicButton->SetTouchable(touchableState);\r
- // soundButton->SetTouchable(touchableState);\r
playerModelButton->SetTouchable(touchableState); // 如果音乐来源为手机音乐,播放顺序按钮就不可用\r
/* -------------------------------------------------------------------------- */\r
if (musicSourceType) // 如果切換到手机音乐,且当前在放歌,就停止音乐\r