!9271 merge master into master

add start event

Created-by: hoperun_wangyupan
Commit-by: hoperun_wangyupan
Merged-by: openharmony_ci
Description: ### 相关的Issue
https://gitcode.com/openharmony/drivers_peripheral/issues/7385?ref=&did=4238273#tid-4238273

### 原因(目的、解决的问题等)


### 描述(做了什么,变更了什么)


### 测试用例(新增、改动、可能影响的功能)






See merge request: openharmony/drivers_peripheral!9271
This commit is contained in:
openharmony_ci
2026-08-14 20:54:52 +08:00
4 changed files with 92 additions and 27 deletions
@@ -111,6 +111,7 @@ private:
float GetFadeRate(uint32_t currentIndex, const uint32_t durationIndex);
int32_t FadeInProcess(const uint32_t durationFrame, int8_t* frameData, const size_t frameLength);
int32_t SetOffloadParamsChange(const std::string &offloadParams);
int32_t NotifyPlayStatusChange(const std::string &changeType);
#ifdef DAUDIO_SUPPORT_SHARED_BUFFER
int32_t CreateAshmem(int32_t ashmemLength);
int32_t WriteToShmem(const AudioData &data);
@@ -251,6 +251,37 @@ int32_t AudioRenderInterfaceImpl::IsSupportsDrain(bool &support)
return HDF_SUCCESS;
}
int32_t AudioRenderInterfaceImpl::NotifyPlayStatusChange(const std::string &changeType)
{
cJSON *jParam = cJSON_CreateObject();
if (jParam == nullptr) {
DHLOGE("Failed to create cJSON object.");
return HDF_FAILURE;
}
cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(devDesc_.pins).c_str());
cJSON_AddStringToObject(jParam, "ChangeType", changeType.c_str());
char *jsonData = cJSON_PrintUnformatted(jParam);
if (jsonData == nullptr) {
DHLOGE("Failed to create JSON data.");
cJSON_Delete(jParam);
return HDF_FAILURE;
}
std::string content(jsonData);
cJSON_Delete(jParam);
cJSON_free(jsonData);
DAudioEvent event = { HDF_AUDIO_EVENT_CHANGE_PLAY_STATUS, content };
if (audioExtCallback_ == nullptr) {
DHLOGE("Callback is nullptr.");
return HDF_FAILURE;
}
int32_t ret = audioExtCallback_->NotifyEvent(renderId_, event);
if (ret != HDF_SUCCESS) {
DHLOGE("Notify play status change failed, type: %{public}s.", changeType.c_str());
}
return HDF_SUCCESS;
}
int32_t AudioRenderInterfaceImpl::Start()
{
DHLOGI("Start render.");
@@ -258,35 +289,15 @@ int32_t AudioRenderInterfaceImpl::Start()
DHLOGI("Render status wrong, return false.");
return HDF_FAILURE;
}
std::string changeType = firstOpenFlag_ ? HDF_EVENT_START : HDF_EVENT_RESTART;
if (firstOpenFlag_) {
firstOpenFlag_ = false;
} else {
cJSON *jParam = cJSON_CreateObject();
if (jParam == nullptr) {
DHLOGE("Failed to create cJSON object.");
return HDF_FAILURE;
}
cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(devDesc_.pins).c_str());
cJSON_AddStringToObject(jParam, "ChangeType", HDF_EVENT_RESTART.c_str());
char *jsonData = cJSON_PrintUnformatted(jParam);
if (jsonData == nullptr) {
DHLOGE("Failed to create JSON data.");
cJSON_Delete(jParam);
return HDF_FAILURE;
}
std::string content(jsonData);
cJSON_Delete(jParam);
cJSON_free(jsonData);
DAudioEvent event = { HDF_AUDIO_EVENT_CHANGE_PLAY_STATUS, content};
if (audioExtCallback_ == nullptr) {
DHLOGE("Callback is nullptr.");
return HDF_FAILURE;
}
int32_t ret = audioExtCallback_->NotifyEvent(renderId_, event);
if (ret != HDF_SUCCESS) {
DHLOGE("Restart failed.");
}
}
if (NotifyPlayStatusChange(changeType) != HDF_SUCCESS) {
return HDF_FAILURE;
}
#ifdef DAUDIO_SUPPORT_SHARED_BUFFER
writeIndex_ = 0;
writeNum_ = 0;
@@ -352,7 +352,7 @@ HWTEST_F(AudioRenderInterfaceImplTest, Start_003, TestSize.Level1)
EXPECT_EQ(HDF_FAILURE, audioRenderInterfaceImpl_->Start());
audioRenderInterfaceImpl_->SetRenderStatus(RENDER_STATUS_OPEN);
audioRenderInterfaceImpl_->audioExtCallback_ = sptr<IDAudioCallback>(new MockRevertIDAudioCallback());
EXPECT_EQ(HDF_SUCCESS, audioRenderInterfaceImpl_->Start());
EXPECT_EQ(HDF_FAILURE, audioRenderInterfaceImpl_->Start());
}
/**
@@ -971,6 +971,58 @@ HWTEST_F(AudioRenderInterfaceImplTest, FadeInProcess_001, TestSize.Level1)
EXPECT_EQ(HDF_ERR_INVALID_PARAM, audioRenderInterfaceImpl_->FadeInProcess(durationFrame, frameData, errLength));
delete[] frameData;
}
/**
* @tc.name: NotifyPlayStatusChange_001
* @tc.desc: Verify the NotifyPlayStatusChange function when callback is nullptr.
* @tc.type: FUNC
* @tc.require: AR000H0E6H
*/
HWTEST_F(AudioRenderInterfaceImplTest, NotifyPlayStatusChange_001, TestSize.Level1)
{
ASSERT_NE(nullptr, audioRenderInterfaceImpl_);
audioRenderInterfaceImpl_->audioExtCallback_ = nullptr;
EXPECT_EQ(HDF_FAILURE, audioRenderInterfaceImpl_->NotifyPlayStatusChange(DistributedHardware::HDF_EVENT_START));
}
/**
* @tc.name: NotifyPlayStatusChange_002
* @tc.desc: Verify the NotifyPlayStatusChange function when NotifyEvent fails.
* @tc.type: FUNC
* @tc.require: AR000H0E6H
*/
HWTEST_F(AudioRenderInterfaceImplTest, NotifyPlayStatusChange_002, TestSize.Level1)
{
ASSERT_NE(nullptr, audioRenderInterfaceImpl_);
audioRenderInterfaceImpl_->audioExtCallback_ = sptr<IDAudioCallback>(new MockRevertIDAudioCallback());
EXPECT_EQ(HDF_SUCCESS, audioRenderInterfaceImpl_->NotifyPlayStatusChange(DistributedHardware::HDF_EVENT_START));
}
/**
* @tc.name: NotifyPlayStatusChange_003
* @tc.desc: Verify the NotifyPlayStatusChange function with HDF_EVENT_START.
* @tc.type: FUNC
* @tc.require: AR000H0E6H
*/
HWTEST_F(AudioRenderInterfaceImplTest, NotifyPlayStatusChange_003, TestSize.Level1)
{
ASSERT_NE(nullptr, audioRenderInterfaceImpl_);
audioRenderInterfaceImpl_->audioExtCallback_ = sptr<IDAudioCallback>(new MockIDAudioCallback());
EXPECT_EQ(HDF_SUCCESS, audioRenderInterfaceImpl_->NotifyPlayStatusChange(DistributedHardware::HDF_EVENT_START));
}
/**
* @tc.name: NotifyPlayStatusChange_004
* @tc.desc: Verify the NotifyPlayStatusChange function with HDF_EVENT_RESTART.
* @tc.type: FUNC
* @tc.require: AR000H0E6H
*/
HWTEST_F(AudioRenderInterfaceImplTest, NotifyPlayStatusChange_004, TestSize.Level1)
{
ASSERT_NE(nullptr, audioRenderInterfaceImpl_);
audioRenderInterfaceImpl_->audioExtCallback_ = sptr<IDAudioCallback>(new MockIDAudioCallback());
EXPECT_EQ(HDF_SUCCESS, audioRenderInterfaceImpl_->NotifyPlayStatusChange(DistributedHardware::HDF_EVENT_RESTART));
}
} // V2_0
} // Audio
} // Distributedaudio
@@ -53,6 +53,7 @@ const std::string HDF_EVENT_RESULT_FAILED = "DH_FAILED";
const std::string HDF_EVENT_RESTART = "restart";
const std::string HDF_EVENT_PAUSE = "pause";
const std::string HDF_EVENT_START = "start";
const std::string PRINT_SPK = "spk";
const std::string PRINT_MIC = "mic";