From e5f38667c25d665d94b23d157cf57f0efa854254 Mon Sep 17 00:00:00 2001 From: hwwuhaobo Date: Mon, 13 May 2024 16:53:49 +0800 Subject: [PATCH 1/3] modify hicollie bug Signed-off-by: hwwuhaobo --- .../audiohdiproxy/src/daudio_hdi_handler.cpp | 2 +- .../managersource/include/daudio_source_dev.h | 4 +-- .../include/daudio_source_manager.h | 2 +- .../managersource/src/daudio_source_dev.cpp | 34 ++----------------- .../src/daudio_source_manager.cpp | 10 +++--- .../src/daudio_source_dev_test.cpp | 1 - .../test_example/distributedaudiotest.cpp | 4 +-- 7 files changed, 11 insertions(+), 46 deletions(-) diff --git a/services/audiohdiproxy/src/daudio_hdi_handler.cpp b/services/audiohdiproxy/src/daudio_hdi_handler.cpp index 954defa5..49b46715 100644 --- a/services/audiohdiproxy/src/daudio_hdi_handler.cpp +++ b/services/audiohdiproxy/src/daudio_hdi_handler.cpp @@ -217,7 +217,7 @@ int32_t DAudioHdiHandler::NotifyEvent(const std::string &devId, const int32_t dh void DAudioHdiHandler::AudioHdiRecipient::OnRemoteDied(const wptr &remote) { - DHLOGE("Exit the current process."); + DHLOGE("Exit the current process remote died."); _Exit(0); } } // namespace DistributedHardware diff --git a/services/audiomanager/managersource/include/daudio_source_dev.h b/services/audiomanager/managersource/include/daudio_source_dev.h index 87e56b74..832735c9 100644 --- a/services/audiomanager/managersource/include/daudio_source_dev.h +++ b/services/audiomanager/managersource/include/daudio_source_dev.h @@ -47,8 +47,7 @@ public: int32_t EnableDAudio(const std::string &dhId, const std::string &attrs); int32_t DisableDAudio(const std::string &dhId); - int32_t RestoreThreadStatus(); - void SetThreadStatusFlag(); + void SetThreadStatusFlag(bool flag); bool GetThreadStatusFlag(); void NotifyEvent(const AudioEvent &event) override; @@ -163,7 +162,6 @@ private: void SpkMmapStopCallback(const AppExecFwk::InnerEvent::Pointer &event); void MicMmapStartCallback(const AppExecFwk::InnerEvent::Pointer &event); void MicMmapStopCallback(const AppExecFwk::InnerEvent::Pointer &event); - void SetThreadStatusFlagTrue(const AppExecFwk::InnerEvent::Pointer &event); int32_t GetEventParam(const AppExecFwk::InnerEvent::Pointer &event, std::string &eventParam); private: diff --git a/services/audiomanager/managersource/include/daudio_source_manager.h b/services/audiomanager/managersource/include/daudio_source_manager.h index 62901d04..2c86a6b1 100644 --- a/services/audiomanager/managersource/include/daudio_source_manager.h +++ b/services/audiomanager/managersource/include/daudio_source_manager.h @@ -93,7 +93,7 @@ private: IAVEngineProvider *rcvProviderPtr_ = nullptr; void *pSHandler_ = nullptr; void *pRHandler_ = nullptr; - std::atomic isHicollieRunning_ = false; + std::atomic isHicollieRunning_ = true; class SourceManagerHandler : public AppExecFwk::EventHandler { public: diff --git a/services/audiomanager/managersource/src/daudio_source_dev.cpp b/services/audiomanager/managersource/src/daudio_source_dev.cpp index a0125af5..6ab5319d 100644 --- a/services/audiomanager/managersource/src/daudio_source_dev.cpp +++ b/services/audiomanager/managersource/src/daudio_source_dev.cpp @@ -48,7 +48,6 @@ constexpr uint32_t EVENT_MMAP_MIC_START = 83; constexpr uint32_t EVENT_MMAP_MIC_STOP = 84; constexpr uint32_t EVENT_DAUDIO_ENABLE = 88; constexpr uint32_t EVENT_DAUDIO_DISABLE = 89; -constexpr uint32_t EVENT_SET_THREAD_STATUS = 90; } DAudioSourceDev::DAudioSourceDev(const std::string &devId, const std::shared_ptr &callback) @@ -196,34 +195,14 @@ int32_t DAudioSourceDev::DisableDAudio(const std::string &dhId) return DH_SUCCESS; } -int32_t DAudioSourceDev::RestoreThreadStatus() -{ - CHECK_NULL_RETURN(handler_, ERR_DH_AUDIO_NULLPTR); - cJSON *jParam = cJSON_CreateObject(); - CHECK_NULL_RETURN(jParam, ERR_DH_AUDIO_NULLPTR); - char *jsonString = cJSON_PrintUnformatted(jParam); - CHECK_NULL_FREE_RETURN(jsonString, ERR_DH_AUDIO_NULLPTR, jParam); - auto eventParam = std::make_shared(jsonString); - auto msgEvent = AppExecFwk::InnerEvent::Get(EVENT_SET_THREAD_STATUS, eventParam, 0); - if (!handler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE)) { - DHLOGE("Send event failed."); - cJSON_Delete(jParam); - cJSON_free(jsonString); - return ERR_DH_AUDIO_FAILED; - } - cJSON_Delete(jParam); - cJSON_free(jsonString); - return DH_SUCCESS; -} - bool DAudioSourceDev::GetThreadStatusFlag() { return threadStatusFlag_; } -void DAudioSourceDev::SetThreadStatusFlag() +void DAudioSourceDev::SetThreadStatusFlag(bool flag) { - threadStatusFlag_ = false; + threadStatusFlag_ = flag; } void DAudioSourceDev::NotifyEvent(const AudioEvent &event) @@ -1268,7 +1247,6 @@ DAudioSourceDev::SourceEventHandler::SourceEventHandler(const std::shared_ptrthreadStatusFlag_ = true; -} - int32_t DAudioSourceDev::SourceEventHandler::GetEventParam(const AppExecFwk::InnerEvent::Pointer &event, std::string &eventParam) { diff --git a/services/audiomanager/managersource/src/daudio_source_manager.cpp b/services/audiomanager/managersource/src/daudio_source_manager.cpp index 5612cdfa..74bd8298 100644 --- a/services/audiomanager/managersource/src/daudio_source_manager.cpp +++ b/services/audiomanager/managersource/src/daudio_source_manager.cpp @@ -466,7 +466,7 @@ void DAudioSourceManager::RestoreThreadStatus() if (!audioDevMap_.empty()) { for (auto &iter : audioDevMap_) { CHECK_NULL_VOID(iter.second.dev); - iter.second.dev->RestoreThreadStatus(); + iter.second.dev->SetThreadStatusFlag(true); } } } @@ -476,13 +476,11 @@ void DAudioSourceManager::ListenAudioDev() auto taskFunc = [this]() { std::lock_guard lock(devMapMtx_); for (auto &iter : audioDevMap_) { - if (iter.second.dev == nullptr) { - continue; - } + CHECK_NULL_VOID(iter.second.dev); if (iter.second.dev->GetThreadStatusFlag()) { - iter.second.dev->SetThreadStatusFlag(); + iter.second.dev->SetThreadStatusFlag(false); } else { - DHLOGE("Exit the current proces"); + DHLOGE("Exit the current process hicollie"); _Exit(0); } } diff --git a/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp b/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp index 9eb1df34..bcbb9f8e 100644 --- a/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp +++ b/services/audiomanager/test/unittest/sourcedevice/src/daudio_source_dev_test.cpp @@ -1178,7 +1178,6 @@ HWTEST_F(DAudioSourceDevTest, EnableDMic_003, TestSize.Level1) sourceDev_->handler_->SpkMmapStopCallback(msgEvent); sourceDev_->handler_->MicMmapStartCallback(msgEvent); sourceDev_->handler_->MicMmapStopCallback(msgEvent); - sourceDev_->handler_->SetThreadStatusFlagTrue(msgEvent); sourceDev_->SleepAudioDev(); EXPECT_EQ(ERR_DH_AUDIO_FAILED, sourceDev_->EnableDMic(dhId, ATTRS)); } diff --git a/services/test_example/distributedaudiotest.cpp b/services/test_example/distributedaudiotest.cpp index 29cd99df..f59a0a7d 100644 --- a/services/test_example/distributedaudiotest.cpp +++ b/services/test_example/distributedaudiotest.cpp @@ -156,13 +156,13 @@ static int32_t GetUserInput() int32_t res = -1; size_t count = 3; std::cout << ">>"; - std::cin >> res; + scanf("%d", &res); while (std::cin.fail() && count > 0) { std::cin.clear(); std::cin.ignore(); std::cout << "invalid input, not a number! Please retry with a number." << std::endl; std::cout << ">>"; - std::cin >> res; + scanf("%d", &res); count--; } return res; -- Gitee From 313abb671a125e4dbf5649031e4837cce86f1147 Mon Sep 17 00:00:00 2001 From: hwwuhaobo Date: Tue, 14 May 2024 11:19:21 +0800 Subject: [PATCH 2/3] modify notify ctrl result Signed-off-by: hwwuhaobo --- .../audio_sink/src/daudio_sink_handler.cpp | 4 +- .../audioclient/micclient/src/dmic_client.cpp | 4 +- .../spkclient/src/dspeaker_client.cpp | 3 +- .../managersink/include/daudio_sink_dev.h | 1 + .../managersink/include/daudio_sink_manager.h | 1 + .../managersink/src/daudio_sink_dev.cpp | 61 ++++++++++++------- .../managersink/src/daudio_sink_manager.cpp | 57 ++++++++++++++--- .../managersource/include/daudio_source_dev.h | 1 + .../managersource/src/daudio_source_dev.cpp | 44 ++++++++++--- .../src/daudio_source_manager.cpp | 1 + .../managersink/src/daudio_sink_dev_test.cpp | 17 ++++++ .../src/daudio_sink_manager_test.cpp | 13 ++++ .../test_example/distributedaudiotest.cpp | 4 +- 13 files changed, 163 insertions(+), 48 deletions(-) diff --git a/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp b/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp index deef82d5..11aff1ec 100644 --- a/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp +++ b/interfaces/inner_kits/native_cpp/audio_sink/src/daudio_sink_handler.cpp @@ -118,7 +118,7 @@ int32_t DAudioSinkHandler::UnsubscribeLocalHardware(const std::string &dhId) void DAudioSinkHandler::OnRemoteSinkSvrDied(const wptr &remote) { - DHLOGD("The daudio service of sink device died."); + DHLOGI("The daudio service of sink device died."); sptr remoteObject = remote.promote(); CHECK_NULL_VOID(remoteObject); @@ -131,7 +131,7 @@ void DAudioSinkHandler::OnRemoteSinkSvrDied(const wptr &remote) void DAudioSinkHandler::FinishStartSA(const std::string ¶m, const sptr &remoteObject) { - DHLOGD("Finish start SA."); + DHLOGI("Finish start SA."); std::lock_guard lock(sinkProxyMutex_); remoteObject->AddDeathRecipient(sinkSvrRecipient_); dAudioSinkProxy_ = iface_cast(remoteObject); diff --git a/services/audioclient/micclient/src/dmic_client.cpp b/services/audioclient/micclient/src/dmic_client.cpp index 77cc7283..941a0829 100644 --- a/services/audioclient/micclient/src/dmic_client.cpp +++ b/services/audioclient/micclient/src/dmic_client.cpp @@ -165,9 +165,11 @@ int32_t DMicClient::SendMessage(uint32_t type, std::string content, std::string { DHLOGI("Send message to remote."); if (type != static_cast(NOTIFY_OPEN_MIC_RESULT) && + type != static_cast(NOTIFY_OPEN_CTRL_RESULT) && type != static_cast(NOTIFY_CLOSE_MIC_RESULT) && type != static_cast(CLOSE_MIC)) { - DHLOGE("event type is not NOTIFY_OPEN_MIC or NOTIFY_CLOSE_MIC or CLOSE_MIC. type: %{public}u", type); + DHLOGE("event type is not NOTIFY_OPEN_MIC or NOTIFY_CLOSE_MIC or" + "CLOSE_MIC or OPEN_CTRL. type: %{public}u", type); return ERR_DH_AUDIO_NULLPTR; } CHECK_NULL_RETURN(micTrans_, ERR_DH_AUDIO_NULLPTR); diff --git a/services/audioclient/spkclient/src/dspeaker_client.cpp b/services/audioclient/spkclient/src/dspeaker_client.cpp index ca28d71c..90765131 100644 --- a/services/audioclient/spkclient/src/dspeaker_client.cpp +++ b/services/audioclient/spkclient/src/dspeaker_client.cpp @@ -615,11 +615,12 @@ int32_t DSpeakerClient::SendMessage(uint32_t type, std::string content, std::str { DHLOGI("Send message to remote."); if (type != static_cast(NOTIFY_OPEN_SPEAKER_RESULT) && + type != static_cast(NOTIFY_OPEN_CTRL_RESULT) && type != static_cast(NOTIFY_CLOSE_SPEAKER_RESULT) && type != static_cast(VOLUME_CHANGE) && type != static_cast(AUDIO_FOCUS_CHANGE) && type != static_cast(AUDIO_RENDER_STATE_CHANGE)) { - DHLOGE("event type is not NOTIFY_OPEN_SPK or NOTIFY_CLOSE_SPK. type:%{public}u", type); + DHLOGE("event type is not NOTIFY_OPEN_SPK or NOTIFY_CLOSE_SPK or OPEN_CTRL. type:%{public}u", type); return ERR_DH_AUDIO_NULLPTR; } CHECK_NULL_RETURN(speakerTrans_, ERR_DH_AUDIO_NULLPTR); diff --git a/services/audiomanager/managersink/include/daudio_sink_dev.h b/services/audiomanager/managersink/include/daudio_sink_dev.h index 6520ff5c..384fc5dd 100644 --- a/services/audiomanager/managersink/include/daudio_sink_dev.h +++ b/services/audiomanager/managersink/include/daudio_sink_dev.h @@ -81,6 +81,7 @@ private: int32_t GetParamValue(const cJSON *j, const char* key, int32_t &value); int32_t GetCJsonObjectItems(const cJSON *j, AudioParam &audioParam); int32_t ParseDhidFromEvent(std::string args); + int32_t ParseResultFromEvent(std::string args); int32_t ConvertString2Int(std::string val); private: diff --git a/services/audiomanager/managersink/include/daudio_sink_manager.h b/services/audiomanager/managersink/include/daudio_sink_manager.h index 9182ab13..7902e1d2 100644 --- a/services/audiomanager/managersink/include/daudio_sink_manager.h +++ b/services/audiomanager/managersink/include/daudio_sink_manager.h @@ -73,6 +73,7 @@ private: int32_t GetDeviceSecurityLevel(const std::string &udid); std::string GetUdidByNetworkId(const std::string &networkId); int32_t VerifySecurityLevel(const std::string &devId); + int32_t InitAudioDevice(std::shared_ptr dev, const std::string &devId, bool isSpkOrMic); private: static constexpr const char* DEVCLEAR_THREAD = "sinkClearTh"; diff --git a/services/audiomanager/managersink/src/daudio_sink_dev.cpp b/services/audiomanager/managersink/src/daudio_sink_dev.cpp index 1ffc9857..8c2a480e 100644 --- a/services/audiomanager/managersink/src/daudio_sink_dev.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_dev.cpp @@ -202,6 +202,29 @@ int32_t DAudioSinkDev::ParseDhidFromEvent(std::string args) return dhId; } +int32_t DAudioSinkDev::ParseResultFromEvent(std::string args) +{ + DHLOGI("ParseResultFrom args : %{public}s", args.c_str()); + cJSON *jParam = cJSON_Parse(args.c_str()); + CHECK_NULL_RETURN(jParam, ERR_DH_AUDIO_FAILED); + + if (!CJsonParamCheck(jParam, { KEY_RESULT })) { + DHLOGE("Not found the keys of result."); + cJSON_Delete(jParam); + return -1; + } + cJSON *retItem = cJSON_GetObjectItem(jParam, KEY_RESULT); + if (retItem == NULL || !cJSON_IsNumber(retItem)) { + DHLOGE("Not found the keys of result."); + cJSON_Delete(jParam); + return ERR_DH_AUDIO_FAILED; + } + int32_t ret = retItem->valueint; + cJSON_Delete(jParam); + DHLOGI("Parsed result is: %{public}d.", ret); + return ret; +} + int32_t DAudioSinkDev::TaskStartRender(const std::string &args) { int32_t dhId = ParseDhidFromEvent(args); @@ -440,6 +463,7 @@ void DAudioSinkDev::JudgeDeviceStatus() void DAudioSinkDev::SetDevLevelStatus(bool checkStatus) { + // todo 这里改为atomic isDevLevelStatus_ = checkStatus; } @@ -472,12 +496,7 @@ void DAudioSinkDev::NotifySourceDev(const AudioEventType type, const std::string cJSON_AddNumberToObject(jEvent, KEY_EVENT_TYPE, static_cast(type)); cJSON_AddStringToObject(jEvent, KEY_RANDOM_TASK_CODE, std::to_string(randomTaskCode).c_str()); - DHLOGD("Notify source dev, new engine, random task code:%{public}s", std::to_string(randomTaskCode).c_str()); - if (type == NOTIFY_OPEN_CTRL_RESULT || type == NOTIFY_CLOSE_CTRL_RESULT) { - DHLOGE("In new engine mode, ctrl is not allowed."); - cJSON_Delete(jEvent); - return; - } + DHLOGI("Notify source dev, new engine, random task code:%{public}s", std::to_string(randomTaskCode).c_str()); int32_t dhIdInt = ConvertString2Int(dhId); if (dhIdInt == -1) { DHLOGE("Parse dhId error."); @@ -606,13 +625,7 @@ void DAudioSinkDev::SinkEventHandler::ProcessEvent(const AppExecFwk::InnerEvent: void DAudioSinkDev::SinkEventHandler::NotifyCtrlOpened(const AppExecFwk::InnerEvent::Pointer &event) { - DHLOGI("Ctrl channel is opened."); - (void)event; -} - -void DAudioSinkDev::SinkEventHandler::NotifyCtrlClosed(const AppExecFwk::InnerEvent::Pointer &event) -{ - DHLOGI("Notify ctrl closed."); + DHLOGI("Ctrl channel is opened. begin to init dev, then to notify source dev."); std::string eventParam; if (GetEventParam(event, eventParam) != DH_SUCCESS) { DHLOGE("Failed to get event parameters."); @@ -620,15 +633,19 @@ void DAudioSinkDev::SinkEventHandler::NotifyCtrlClosed(const AppExecFwk::InnerEv } auto sinkDevObj = sinkDev_.lock(); CHECK_NULL_VOID(sinkDevObj); - if (sinkDevObj->TaskCloseDSpeaker(eventParam) != DH_SUCCESS) { - DHLOGE("Close speaker failed."); - return; - } - if (sinkDevObj->TaskCloseDMic(eventParam) != DH_SUCCESS) { - DHLOGE("Close mic failed."); - return; - } - sinkDevObj->JudgeDeviceStatus(); + + int32_t dhId = sinkDevObj->ParseDhidFromEvent(eventParam); + CHECK_AND_RETURN_LOG(dhId == -1, "%{public}s", "Parse dhId error."); + int32_t ret = sinkDevObj->ParseResultFromEvent(eventParam); + sinkDevObj->NotifySourceDev(NOTIFY_OPEN_CTRL_RESULT, std::to_string(dhId), ret); + DHLOGI("Init sink device task end, notify source ret %{public}d.", ret); + CHECK_AND_RETURN_LOG(ret != DH_SUCCESS, "%{public}s", "Init sink device failed."); +} + +void DAudioSinkDev::SinkEventHandler::NotifyCtrlClosed(const AppExecFwk::InnerEvent::Pointer &event) +{ + DHLOGI("Notify ctrl closed."); + (void)event; } void DAudioSinkDev::SinkEventHandler::NotifyOpenSpeaker(const AppExecFwk::InnerEvent::Pointer &event) diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index 375cdffa..be4c7574 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -173,25 +173,57 @@ int32_t DAudioSinkManager::CreateAudioDevice(const std::string &devId) dev = audioDevMap_[devId]; } else { dev = std::make_shared(devId, ipcSinkCallback_); - if (dev->AwakeAudioDev() != DH_SUCCESS) { - DHLOGE("Awake audio dev failed."); - return ERR_DH_AUDIO_FAILED; - } audioDevMap_.emplace(devId, dev); } } + int32_t dhId; + bool isSpkOrMic = false; + if (channelState_ == ChannelState::MIC_CONTROL_OPENED) { + dhId = PIN_IN_MIC; + isSpkOrMic = false; + } else if (channelState_ == ChannelState::SPK_CONTROL_OPENED) { + dhId = PIN_OUT_SPEAKER; + isSpkOrMic = true; + } else { + DHLOGE("Channel state error."); + return ERR_DH_AUDIO_NOT_SUPPORT; + } + int32_t ret = InitAudioDevice(dev, devId, isSpkOrMic); + cJSON *jParam = cJSON_CreateObject(); + CHECK_NULL_RETURN(jParam, ERR_DH_AUDIO_NULLPTR); + cJSON_AddStringToObject(jParam, KEY_DH_ID, std::to_string(dhId).c_str()); + cJSON_AddNumberToObject(jParam, KEY_RESULT, ret); + char *jsonData = cJSON_PrintUnformatted(jParam); + if (jsonData == nullptr) { + DHLOGE("Failed to create JSON data."); + cJSON_Delete(jParam); + return ERR_DH_AUDIO_NULLPTR; + } + std::string eventContent = std::string(jsonData); + cJSON_free(jsonData); + cJSON_Delete(jParam); + NotifyEvent(devId, CTRL_OPENED, eventContent); + return DH_SUCCESS; +} - int32_t ret = ERR_DH_AUDIO_FAILED; - if (channelState_ == ChannelState::SPK_CONTROL_OPENED) { - ret = dev->InitAVTransEngines(ChannelState::SPK_CONTROL_OPENED, rcvProviderPtr_); +int32_t DAudioSinkManager::InitAudioDevice(std::shared_ptr dev, const std::string &devId, + bool isSpkOrMic) +{ + DHLOGI("Init audio device."); + if (dev == nullptr) { + DHLOGE("dev is nullptr."); + return ERR_DH_AUDIO_NULLPTR; } - if (channelState_ == ChannelState::MIC_CONTROL_OPENED) { + int32_t ret; + if (isSpkOrMic) { + ret = dev->InitAVTransEngines(ChannelState::SPK_CONTROL_OPENED, rcvProviderPtr_); + } else { ret = VerifySecurityLevel(devId); if (ret != DH_SUCCESS) { DHLOGE("Verify security level failed."); return ERR_DH_AUDIO_FAILED; } - dev->SetDevLevelStatus(true); + SetDevLevelStatus(true); ret = dev->InitAVTransEngines(ChannelState::MIC_CONTROL_OPENED, sendProviderPtr_); } if (ret != DH_SUCCESS) { @@ -199,7 +231,12 @@ int32_t DAudioSinkManager::CreateAudioDevice(const std::string &devId) dev->JudgeDeviceStatus(); return ERR_DH_AUDIO_FAILED; } - return DH_SUCCESS; + ret = dev->AwakeAudioDev(); + if (ret != DH_SUCCESS) { + DHLOGE("Awake audio dev failed."); + return ERR_DH_AUDIO_FAILED; + } + return ret; } int32_t DAudioSinkManager::DAudioNotify(const std::string &devId, const std::string &dhId, const int32_t eventType, diff --git a/services/audiomanager/managersource/include/daudio_source_dev.h b/services/audiomanager/managersource/include/daudio_source_dev.h index 832735c9..fd804001 100644 --- a/services/audiomanager/managersource/include/daudio_source_dev.h +++ b/services/audiomanager/managersource/include/daudio_source_dev.h @@ -111,6 +111,7 @@ private: std::shared_ptr FindIoDevImpl(std::string args); int32_t ParseDhidFromEvent(std::string args); int32_t ConvertString2Int(std::string val); + int32_t CreateMicEngine(std::shared_ptr mic); private: static constexpr uint8_t RPC_WAIT_SECONDS = 10; diff --git a/services/audiomanager/managersource/src/daudio_source_dev.cpp b/services/audiomanager/managersource/src/daudio_source_dev.cpp index 6ab5319d..e443691e 100644 --- a/services/audiomanager/managersource/src/daudio_source_dev.cpp +++ b/services/audiomanager/managersource/src/daudio_source_dev.cpp @@ -703,7 +703,6 @@ int32_t DAudioSourceDev::TaskOpenDSpeaker(const std::string &args) } int32_t dhId = ParseDhidFromEvent(args); if (dhId < 0) { - DHLOGE("Failed to parse dhardware id."); return ERR_DH_AUDIO_FAILED; } auto speaker = FindIoDevImpl(args); @@ -719,6 +718,13 @@ int32_t DAudioSourceDev::TaskOpenDSpeaker(const std::string &args) return ret; } + ret = WaitForRPC(NOTIFY_OPEN_CTRL_RESULT); + if (ret != DH_SUCCESS) { + DHLOGE("Speaker init sender engine, create ctrl error."); + NotifyHDF(NOTIFY_OPEN_SPEAKER_RESULT, HDF_EVENT_INIT_ENGINE_FAILED, dhId); + return ret; + } + cJSON *jAudioParam = cJSON_CreateObject(); CHECK_NULL_RETURN(jAudioParam, ERR_DH_AUDIO_NULLPTR); to_json(jAudioParam, speaker->GetAudioParam()); @@ -845,6 +851,30 @@ int32_t DAudioSourceDev::TaskCloseDSpeaker(const std::string &args) return DH_SUCCESS; } +int32_t DAudioSourceDev::CreateMicEngine(std::shared_ptr mic) +{ + if (mic == nullptr) { + DHLOGE("Mic device not init"); + return ERR_DH_AUDIO_NULLPTR; + } + int32_t ret = mic->InitReceiverEngine(DAudioSourceManager::GetInstance().getReceiverProvider()); + if (ret != DH_SUCCESS) { + DHLOGE("Init receiver engine failed."); + return ret; + } + ret = WaitForRPC(NOTIFY_OPEN_CTRL_RESULT); + if (ret != DH_SUCCESS) { + DHLOGE("Mic init sender engine, create ctrl error."); + return ret; + } + ret = mic->SetUp(); + if (ret != DH_SUCCESS) { + DHLOGE("Mic setup failed."); + return ret; + } + return DH_SUCCESS; +} + int32_t DAudioSourceDev::TaskOpenDMic(const std::string &args) { DHLOGI("Task open mic, args: %{public}s.", args.c_str()); @@ -859,18 +889,12 @@ int32_t DAudioSourceDev::TaskOpenDMic(const std::string &args) NotifyHDF(NOTIFY_OPEN_MIC_RESULT, HDF_EVENT_RESULT_FAILED, dhId); return ERR_DH_AUDIO_NULLPTR; } - int32_t ret = mic->InitReceiverEngine(DAudioSourceManager::GetInstance().getReceiverProvider()); + int32_t ret = CreateMicEngine(mic); if (ret != DH_SUCCESS) { - DHLOGE("Init receiver engine failed."); + DHLOGE("Create mic engine failed."); NotifyHDF(NOTIFY_OPEN_MIC_RESULT, HDF_EVENT_INIT_ENGINE_FAILED, dhId); return ret; } - ret = mic->SetUp(); - if (ret != DH_SUCCESS) { - DHLOGE("Mic setup failed."); - NotifyHDF(NOTIFY_OPEN_MIC_RESULT, HDF_EVENT_TRANS_SETUP_FAILED, dhId); - return ret; - } cJSON *jAudioParam = cJSON_CreateObject(); CHECK_NULL_RETURN(jAudioParam, ERR_DH_AUDIO_NULLPTR); @@ -1144,7 +1168,7 @@ int32_t DAudioSourceDev::NotifySinkDev(const AudioEventType type, const cJSON *P cJSON *jParamCopy = cJSON_Duplicate(Param, 1); cJSON_AddItemToObject(jParam, KEY_AUDIO_PARAM, jParamCopy); cJSON_AddStringToObject(jParam, KEY_RANDOM_TASK_CODE, std::to_string(randomTaskCode).c_str()); - DHLOGD("Notify sink dev, new engine, random task code:%{public}s", std::to_string(randomTaskCode).c_str()); + DHLOGI("Notify sink dev, new engine, random task code:%{public}s", std::to_string(randomTaskCode).c_str()); std::lock_guard devLck(ioDevMtx_); int32_t dhIdInt = ConvertString2Int(dhId); diff --git a/services/audiomanager/managersource/src/daudio_source_manager.cpp b/services/audiomanager/managersource/src/daudio_source_manager.cpp index 74bd8298..692adcf6 100644 --- a/services/audiomanager/managersource/src/daudio_source_manager.cpp +++ b/services/audiomanager/managersource/src/daudio_source_manager.cpp @@ -463,6 +463,7 @@ void DAudioSourceManager::ClearAudioDev(const std::string &devId) void DAudioSourceManager::RestoreThreadStatus() { + std::lock_guard lock(devMapMtx_); if (!audioDevMap_.empty()) { for (auto &iter : audioDevMap_) { CHECK_NULL_VOID(iter.second.dev); diff --git a/services/audiomanager/test/unittest/managersink/src/daudio_sink_dev_test.cpp b/services/audiomanager/test/unittest/managersink/src/daudio_sink_dev_test.cpp index aae3b14c..2137073c 100644 --- a/services/audiomanager/test/unittest/managersink/src/daudio_sink_dev_test.cpp +++ b/services/audiomanager/test/unittest/managersink/src/daudio_sink_dev_test.cpp @@ -210,6 +210,23 @@ HWTEST_F(DAudioSinkDevTest, ParseDhidFromEvent_001, TestSize.Level1) EXPECT_NE(DH_SUCCESS, sinkDev_->ParseDhidFromEvent(dhIdArgs)); } +/** + * @tc.name: ParseResultFromEvent_001 + * @tc.desc: Verify the ParseResultFromEvent function. + * @tc.type: FUNC + * @tc.require: AR000H0E5F + */ +HWTEST_F(DAudioSinkDevTest, ParseResultFromEvent_001, TestSize.Level1) +{ + std::string args = "{\"result\":\"0\"}"; + EXPECT_EQ(DH_SUCCESS, sinkDev_->ParseResultFromEvent(args)); + args = "{\"result\":\"-40001\"}"; + EXPECT_EQ(-40001, sinkDev_->ParseResultFromEvent(args)); + std::string dhIdArgs = "{\"result\": 1 }"; + EXPECT_NE(DH_SUCCESS, sinkDev_->ParseResultFromEvent(dhIdArgs)); +} + + /** * @tc.name: TaskStartRender_001 * @tc.desc: Verify the TaskStartRender function. diff --git a/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp b/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp index 08c420c4..b94519eb 100644 --- a/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp +++ b/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp @@ -126,6 +126,19 @@ HWTEST_F(DAudioSinkManagerTest, CreateAudioDevice_001, TestSize.Level1) EXPECT_EQ(ERR_DH_AUDIO_FAILED, daudioSinkManager.CreateAudioDevice(devId)); } +/** + * @tc.name: InitAudioDevice_001 + * @tc.desc: Verify the InitAudioDevice function. + * @tc.type: FUNC + * @tc.require: AR000H0E5F + */ +HWTEST_F(DAudioSinkDevTest, InitAudioDevice_001, TestSize.Level1) +{ + std::string devId = "1"; + EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(devId, true)); + EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(devId, false)); +} + /** * @tc.name: LoadAVSenderEngineProvider_001 * @tc.desc: Verify the LoadAVSenderEngineProvider function. diff --git a/services/test_example/distributedaudiotest.cpp b/services/test_example/distributedaudiotest.cpp index f59a0a7d..4ff26a41 100644 --- a/services/test_example/distributedaudiotest.cpp +++ b/services/test_example/distributedaudiotest.cpp @@ -156,13 +156,13 @@ static int32_t GetUserInput() int32_t res = -1; size_t count = 3; std::cout << ">>"; - scanf("%d", &res); + scanf_s("%d", &res); while (std::cin.fail() && count > 0) { std::cin.clear(); std::cin.ignore(); std::cout << "invalid input, not a number! Please retry with a number." << std::endl; std::cout << ">>"; - scanf("%d", &res); + scanf_s("%d", &res); count--; } return res; -- Gitee From 8ae9d9054d5324c6cb8e02dddae65b28e31a6fa6 Mon Sep 17 00:00:00 2001 From: Bobie Date: Wed, 12 Jun 2024 14:41:59 +0800 Subject: [PATCH 3/3] fix codecheck Signed-off-by: Bobie --- services/audioclient/micclient/src/dmic_client.cpp | 2 +- .../audiomanager/managersink/src/daudio_sink_dev.cpp | 1 - .../managersink/src/daudio_sink_manager.cpp | 4 +++- .../managersource/include/daudio_source_dev.h | 2 +- .../managersource/src/daudio_source_dev.cpp | 2 +- .../managersink/src/daudio_sink_manager_test.cpp | 10 +++++++--- services/test_example/distributedaudiotest.cpp | 10 ++++++++-- 7 files changed, 21 insertions(+), 10 deletions(-) diff --git a/services/audioclient/micclient/src/dmic_client.cpp b/services/audioclient/micclient/src/dmic_client.cpp index 941a0829..8b41e3f8 100644 --- a/services/audioclient/micclient/src/dmic_client.cpp +++ b/services/audioclient/micclient/src/dmic_client.cpp @@ -169,7 +169,7 @@ int32_t DMicClient::SendMessage(uint32_t type, std::string content, std::string type != static_cast(NOTIFY_CLOSE_MIC_RESULT) && type != static_cast(CLOSE_MIC)) { DHLOGE("event type is not NOTIFY_OPEN_MIC or NOTIFY_CLOSE_MIC or" - "CLOSE_MIC or OPEN_CTRL. type: %{public}u", type); + "CLOSE_MIC or OPEN_CTRL. type: %{public}u", type); return ERR_DH_AUDIO_NULLPTR; } CHECK_NULL_RETURN(micTrans_, ERR_DH_AUDIO_NULLPTR); diff --git a/services/audiomanager/managersink/src/daudio_sink_dev.cpp b/services/audiomanager/managersink/src/daudio_sink_dev.cpp index 8c2a480e..d4c2b1d5 100644 --- a/services/audiomanager/managersink/src/daudio_sink_dev.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_dev.cpp @@ -463,7 +463,6 @@ void DAudioSinkDev::JudgeDeviceStatus() void DAudioSinkDev::SetDevLevelStatus(bool checkStatus) { - // todo 这里改为atomic isDevLevelStatus_ = checkStatus; } diff --git a/services/audiomanager/managersink/src/daudio_sink_manager.cpp b/services/audiomanager/managersink/src/daudio_sink_manager.cpp index be4c7574..08e4b9c7 100644 --- a/services/audiomanager/managersink/src/daudio_sink_manager.cpp +++ b/services/audiomanager/managersink/src/daudio_sink_manager.cpp @@ -202,6 +202,8 @@ int32_t DAudioSinkManager::CreateAudioDevice(const std::string &devId) std::string eventContent = std::string(jsonData); cJSON_free(jsonData); cJSON_Delete(jParam); + const int32_t SLEEP_TIME = 300; + std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME)); NotifyEvent(devId, CTRL_OPENED, eventContent); return DH_SUCCESS; } @@ -223,7 +225,7 @@ int32_t DAudioSinkManager::InitAudioDevice(std::shared_ptr dev, c DHLOGE("Verify security level failed."); return ERR_DH_AUDIO_FAILED; } - SetDevLevelStatus(true); + dev->SetDevLevelStatus(true); ret = dev->InitAVTransEngines(ChannelState::MIC_CONTROL_OPENED, sendProviderPtr_); } if (ret != DH_SUCCESS) { diff --git a/services/audiomanager/managersource/include/daudio_source_dev.h b/services/audiomanager/managersource/include/daudio_source_dev.h index fd804001..d434fb11 100644 --- a/services/audiomanager/managersource/include/daudio_source_dev.h +++ b/services/audiomanager/managersource/include/daudio_source_dev.h @@ -111,7 +111,7 @@ private: std::shared_ptr FindIoDevImpl(std::string args); int32_t ParseDhidFromEvent(std::string args); int32_t ConvertString2Int(std::string val); - int32_t CreateMicEngine(std::shared_ptr mic); + int32_t CreateMicEngine(std::shared_ptr mic); private: static constexpr uint8_t RPC_WAIT_SECONDS = 10; diff --git a/services/audiomanager/managersource/src/daudio_source_dev.cpp b/services/audiomanager/managersource/src/daudio_source_dev.cpp index e443691e..a914459c 100644 --- a/services/audiomanager/managersource/src/daudio_source_dev.cpp +++ b/services/audiomanager/managersource/src/daudio_source_dev.cpp @@ -851,7 +851,7 @@ int32_t DAudioSourceDev::TaskCloseDSpeaker(const std::string &args) return DH_SUCCESS; } -int32_t DAudioSourceDev::CreateMicEngine(std::shared_ptr mic) +int32_t DAudioSourceDev::CreateMicEngine(std::shared_ptr mic) { if (mic == nullptr) { DHLOGE("Mic device not init"); diff --git a/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp b/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp index b94519eb..cecadeb5 100644 --- a/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp +++ b/services/audiomanager/test/unittest/managersink/src/daudio_sink_manager_test.cpp @@ -132,11 +132,15 @@ HWTEST_F(DAudioSinkManagerTest, CreateAudioDevice_001, TestSize.Level1) * @tc.type: FUNC * @tc.require: AR000H0E5F */ -HWTEST_F(DAudioSinkDevTest, InitAudioDevice_001, TestSize.Level1) +HWTEST_F(DAudioSinkManagerTest, InitAudioDevice_001, TestSize.Level1) { std::string devId = "1"; - EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(devId, true)); - EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(devId, false)); + std::shared_ptr dev = nullptr; + EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(dev, devId, true)); + sptr callback = nullptr; + dev = std::make_shared(devId, callback); + EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(dev, devId, true)); + EXPECT_NE(DH_SUCCESS, daudioSinkManager.InitAudioDevice(dev, devId, false)); } /** diff --git a/services/test_example/distributedaudiotest.cpp b/services/test_example/distributedaudiotest.cpp index 4ff26a41..db1833c9 100644 --- a/services/test_example/distributedaudiotest.cpp +++ b/services/test_example/distributedaudiotest.cpp @@ -156,13 +156,19 @@ static int32_t GetUserInput() int32_t res = -1; size_t count = 3; std::cout << ">>"; - scanf_s("%d", &res); + int ret = scanf_s("%d", &res); + if (ret == -1) { + std::cout << "get input error" << std::endl; + } while (std::cin.fail() && count > 0) { std::cin.clear(); std::cin.ignore(); std::cout << "invalid input, not a number! Please retry with a number." << std::endl; std::cout << ">>"; - scanf_s("%d", &res); + ret = scanf_s("%d", &res); + if (ret == -1) { + std::cout << "get input error" << std::endl; + } count--; } return res; -- Gitee