From 6878d081c48a219751427ee578eb824928aa0160 Mon Sep 17 00:00:00 2001 From: hwwuhaobo Date: Sun, 5 May 2024 16:44:39 +0800 Subject: [PATCH] add new api stateListener&DataSyncTrigger implement Signed-off-by: hwwuhaobo --- .../callback/dcamera_source_callback.h | 11 +++ .../callback/dcamera_source_callback_stub.h | 2 + .../callback/idcamera_source_callback.h | 4 ++ .../src/callback/dcamera_source_callback.cpp | 67 +++++++++++++++++++ .../callback/dcamera_source_callback_stub.cpp | 22 ++++++ .../src/dcamera_source_handler.cpp | 10 ++- .../dcamera_service_state_listener.h | 2 + .../dcamera_source_callback_proxy.h | 3 + .../dcamerainterface/icamera_state_listener.h | 2 + .../dcamera_service_state_listener.cpp | 24 +++++++ .../dcamera_source_callback_proxy.cpp | 66 ++++++++++++++++++ .../mock_dcamera_source_state_listener.h | 10 +++ 12 files changed, 221 insertions(+), 2 deletions(-) diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback.h b/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback.h index 9a0fa129..dcdea06a 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback.h @@ -33,15 +33,26 @@ public: int32_t status, std::string& data) override; int32_t OnNotifyUnregResult(const std::string& devId, const std::string& dhId, const std::string& reqId, int32_t status, std::string& data) override; + int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) override; + int32_t OnDataSyncTrigger(const std::string &devId) override; void PushRegCallback(std::string& reqId, std::shared_ptr& callback); void PopRegCallback(std::string& reqId); void PushUnregCallback(std::string& reqId, std::shared_ptr& callback); void PopUnregCallback(std::string& reqId); + void RegisterStateListener(const std::shared_ptr listener); + void UnRegisterStateListener(); + void RegisterTriggerListener(const std::shared_ptr listener); + void UnRegisterTriggerListener(); private: std::map> regCallbacks_; std::map> unregCallbacks_; std::mutex mapMutex_; + std::mutex stateListenerMtx_; + std::shared_ptr stateListener_ = nullptr; + std::mutex triggerListenerMtx_; + std::shared_ptr triggerListener_ = nullptr; + const size_t DID_MAX_SIZE = 256; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback_stub.h b/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback_stub.h index 40ecb773..a631adc0 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback_stub.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/callback/dcamera_source_callback_stub.h @@ -36,6 +36,8 @@ public: private: int32_t NotifyRegResultInner(MessageParcel &data, MessageParcel &reply); int32_t NotifyUnregResultInner(MessageParcel &data, MessageParcel &reply); + int32_t OnHardwareStateChangedInner(MessageParcel &data, MessageParcel &reply); + int32_t OnDataSyncTriggerInner(MessageParcel &data, MessageParcel &reply); bool CheckParams(const std::string& devId, const std::string& dhId, const std::string& reqId, const std::string& result); diff --git a/interfaces/inner_kits/native_cpp/camera_source/include/callback/idcamera_source_callback.h b/interfaces/inner_kits/native_cpp/camera_source/include/callback/idcamera_source_callback.h index 02ffc914..e3c534c9 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/include/callback/idcamera_source_callback.h +++ b/interfaces/inner_kits/native_cpp/camera_source/include/callback/idcamera_source_callback.h @@ -26,6 +26,8 @@ public: enum { NOTIFY_REG_RESULT = 0, NOTIFY_UNREG_RESULT = 1, + NOTIFY_STATE_CHANGED = 2, + NOTIFY_DATASYNC_TRIGGER = 3, }; virtual ~IDCameraSourceCallback() {} @@ -33,6 +35,8 @@ public: int32_t status, std::string& data) = 0; virtual int32_t OnNotifyUnregResult(const std::string& devId, const std::string& dhId, const std::string& reqId, int32_t status, std::string& data) = 0; + virtual int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) = 0; + virtual int32_t OnDataSyncTrigger(const std::string &devId) = 0; }; } // namespace DistributedHardware } // namespace OHOS diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback.cpp index deada283..258d3fbb 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback.cpp @@ -69,6 +69,45 @@ int32_t DCameraSourceCallback::OnNotifyUnregResult(const std::string& devId, con return ret; } +int32_t DCameraSourceCallback::OnHardwareStateChanged(const std::string &devId, const std::string &dhId, + int32_t status) +{ + DHLOGI("On hardware state changed, devId: %{public}s, dhId: %{public}s, status: %{public}d", + GetAnonyString(devId).c_str(), dhId.c_str(), status); + std::lock_guard stateLck(stateListenerMtx_); + if (stateListener_ == nullptr) { + DHLOGE("State listener is null."); + return DCAMERA_BAD_VALUE; + } + if (devId.empty() || devId.size() > DID_MAX_SIZE || dhId.empty() || dhId.size() > DID_MAX_SIZE) { + DHLOGE("devId or dhId is invalid"); + return DCAMERA_BAD_VALUE; + } + if (status < 0) { + DHLOGE("status in invalid."); + return DCAMERA_BAD_VALUE; + } + BusinessState currentState = static_cast(status); + stateListener_->OnStateChanged(devId, dhId, currentState); + return DCAMERA_OK; +} + +int32_t DCameraSourceCallback::OnDataSyncTrigger(const std::string &devId) +{ + DHLOGI("On data sync trigger, devId: %{public}s", GetAnonyString(devId).c_str()); + std::lock_guard triggerLck(triggerListenerMtx_); + if (devId.empty() || devId.size() > DID_MAX_SIZE) { + DHLOGE("devId is invalid"); + return DCAMERA_BAD_VALUE; + } + if (triggerListener_ == nullptr) { + DHLOGE("Trigger listener is null."); + return DCAMERA_BAD_VALUE; + } + triggerListener_->OnDataSyncTrigger(devId); + return DCAMERA_OK; +} + void DCameraSourceCallback::PushRegCallback(std::string& reqId, std::shared_ptr& callback) { std::lock_guard lock(mapMutex_); @@ -92,5 +131,33 @@ void DCameraSourceCallback::PopUnregCallback(std::string& reqId) std::lock_guard lock(mapMutex_); unregCallbacks_.erase(reqId); } + +void DCameraSourceCallback::RegisterStateListener(const std::shared_ptr listener) +{ + DHLOGD("Register state listener."); + std::lock_guard stateLck(stateListenerMtx_); + stateListener_ = listener; +} + +void DCameraSourceCallback::UnRegisterStateListener() +{ + DHLOGD("UnRegister state listener."); + std::lock_guard stateLck(stateListenerMtx_); + stateListener_ = nullptr; +} + +void DCameraSourceCallback::RegisterTriggerListener(const std::shared_ptr listener) +{ + DHLOGD("Register trigger listener."); + std::lock_guard triggerLck(triggerListenerMtx_); + triggerListener_ = listener; +} + +void DCameraSourceCallback::UnRegisterTriggerListener() +{ + DHLOGD("UnRegister trigger listener."); + std::lock_guard triggerLck(triggerListenerMtx_); + triggerListener_ = nullptr; +} } // namespace DistributedHardware } // namespace OHOS diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback_stub.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback_stub.cpp index 4ee0e562..d7d5fa64 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback_stub.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/callback/dcamera_source_callback_stub.cpp @@ -27,6 +27,8 @@ DCameraSourceCallbackStub::DCameraSourceCallbackStub() : IRemoteStub(true) { memberFuncMap_[NOTIFY_REG_RESULT] = &DCameraSourceCallbackStub::NotifyRegResultInner; memberFuncMap_[NOTIFY_UNREG_RESULT] = &DCameraSourceCallbackStub::NotifyUnregResultInner; + memberFuncMap_[NOTIFY_STATE_CHANGED] = &DCameraSourceCallbackStub::OnHardwareStateChangedInner; + memberFuncMap_[NOTIFY_DATASYNC_TRIGGER] = &DCameraSourceCallbackStub::OnDataSyncTriggerInner; } DCameraSourceCallbackStub::~DCameraSourceCallbackStub() @@ -93,6 +95,26 @@ int32_t DCameraSourceCallbackStub::NotifyUnregResultInner(MessageParcel &data, M return DCAMERA_OK; } +int32_t DCameraSourceCallbackStub::OnHardwareStateChangedInner(MessageParcel &data, MessageParcel &reply) +{ + DHLOGI("DCameraSourceCallbackStub OnHardwareStateChangedInner"); + std::string devId = data.ReadString(); + std::string dhId = data.ReadString(); + int32_t status = data.ReadInt32(); + int32_t ret = OnHardwareStateChanged(devId, dhId, status); + reply.WriteInt32(ret); + return DCAMERA_OK; +} + +int32_t DCameraSourceCallbackStub::OnDataSyncTriggerInner(MessageParcel &data, MessageParcel &reply) +{ + DHLOGI("DCameraSourceCallbackStub OnDataSyncTriggerInner"); + std::string devId = data.ReadString(); + int32_t ret = OnDataSyncTrigger(devId); + reply.WriteInt32(ret); + return DCAMERA_OK; +} + bool DCameraSourceCallbackStub::CheckParams(const std::string& devId, const std::string& dhId, const std::string& reqId, const std::string& result) { diff --git a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp index 9c5adcb0..62540305 100644 --- a/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp +++ b/interfaces/inner_kits/native_cpp/camera_source/src/dcamera_source_handler.cpp @@ -183,20 +183,26 @@ int32_t DCameraSourceHandler::ConfigDistributedHardware(const std::string& devId void DCameraSourceHandler::RegisterDistributedHardwareStateListener( std::shared_ptr listener) { - (void)listener; + CHECK_AND_RETURN_LOG(callback_ == nullptr, "%{public}s", "ipc callback is null."); + callback_->RegisterStateListener(listener); } void DCameraSourceHandler::UnregisterDistributedHardwareStateListener() { + CHECK_AND_RETURN_LOG(callback_ == nullptr, "%{public}s", "ipc callback is null."); + callback_->UnRegisterStateListener(); } void DCameraSourceHandler::RegisterDataSyncTriggerListener(std::shared_ptr listener) { - (void)listener; + CHECK_AND_RETURN_LOG(callback_ == nullptr, "%{public}s", "ipc callback is null."); + callback_->RegisterTriggerListener(listener); } void DCameraSourceHandler::UnregisterDataSyncTriggerListener() { + CHECK_AND_RETURN_LOG(callback_ == nullptr, "%{public}s", "ipc callback is null."); + callback_->UnRegisterTriggerListener(); } void DCameraSourceHandler::SetSAState() diff --git a/services/cameraservice/sourceservice/include/distributedcamera/dcamera_service_state_listener.h b/services/cameraservice/sourceservice/include/distributedcamera/dcamera_service_state_listener.h index 88c23786..54e68558 100644 --- a/services/cameraservice/sourceservice/include/distributedcamera/dcamera_service_state_listener.h +++ b/services/cameraservice/sourceservice/include/distributedcamera/dcamera_service_state_listener.h @@ -32,6 +32,8 @@ public: int32_t status, std::string& data) override; int32_t OnUnregisterNotify(const std::string& devId, const std::string& dhId, const std::string& reqId, int32_t status, std::string& data) override; + int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) override; + int32_t OnDataSyncTrigger(const std::string &devId) override; void SetCallback(sptr callback) override; private: sptr callbackProxy_; diff --git a/services/cameraservice/sourceservice/include/distributedcamera/dcamera_source_callback_proxy.h b/services/cameraservice/sourceservice/include/distributedcamera/dcamera_source_callback_proxy.h index 1df2535f..7967203d 100644 --- a/services/cameraservice/sourceservice/include/distributedcamera/dcamera_source_callback_proxy.h +++ b/services/cameraservice/sourceservice/include/distributedcamera/dcamera_source_callback_proxy.h @@ -36,7 +36,10 @@ public: int32_t status, std::string& data) override; int32_t OnNotifyUnregResult(const std::string& devId, const std::string& dhId, const std::string& reqId, int32_t status, std::string& data) override; + int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) override; + int32_t OnDataSyncTrigger(const std::string &devId) override; private: + bool CheckParams(const std::string& devId, const std::string& dhId, int32_t status); bool CheckParams(const std::string& devId, const std::string& dhId, const std::string& reqId, std::string& data); diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_state_listener.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_state_listener.h index 08c8ceaa..d1172783 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_state_listener.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcamerainterface/icamera_state_listener.h @@ -30,6 +30,8 @@ public: int32_t status, std::string& data) = 0; virtual int32_t OnUnregisterNotify(const std::string& devId, const std::string& dhId, const std::string& reqId, int32_t status, std::string& data) = 0; + virtual int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) = 0; + virtual int32_t OnDataSyncTrigger(const std::string &devId) = 0; virtual void SetCallback(sptr callback) = 0; }; } // namespace DistributedHardware diff --git a/services/cameraservice/sourceservice/src/distributedcamera/dcamera_service_state_listener.cpp b/services/cameraservice/sourceservice/src/distributedcamera/dcamera_service_state_listener.cpp index 770b38eb..10d13511 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/dcamera_service_state_listener.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/dcamera_service_state_listener.cpp @@ -113,5 +113,29 @@ int32_t DCameraServiceStateListener::OnUnregisterNotify(const std::string& devId return DCAMERA_OK; } + +int32_t DCameraServiceStateListener::OnHardwareStateChanged(const std::string &devId, + const std::string &dhId, int32_t status) +{ + DHLOGI("OnHardwareStateChanged devId: %{public}s, dhId: %{public}s, status: %{public}d", + GetAnonyString(devId).c_str(), GetAnonyString(dhId).c_str(), status); + std::lock_guard autoLock(proxyMutex_); + if (callbackProxy_ == nullptr) { + DHLOGE("callbackProxy_ is nullptr"); + return DCAMERA_BAD_VALUE; + } + return callbackProxy_->OnHardwareStateChanged(devId, dhId, status); +} + +int32_t DCameraServiceStateListener::OnDataSyncTrigger(const std::string &devId) +{ + DHLOGI("OnDataSyncTrigger devId: %{public}s.", GetAnonyString(devId).c_str()); + std::lock_guard autoLock(proxyMutex_); + if (callbackProxy_ == nullptr) { + DHLOGE("callbackProxy_ is nullptr"); + return DCAMERA_BAD_VALUE; + } + return callbackProxy_->OnDataSyncTrigger(devId); +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/cameraservice/sourceservice/src/distributedcamera/dcamera_source_callback_proxy.cpp b/services/cameraservice/sourceservice/src/distributedcamera/dcamera_source_callback_proxy.cpp index b3605bf2..ab954946 100644 --- a/services/cameraservice/sourceservice/src/distributedcamera/dcamera_source_callback_proxy.cpp +++ b/services/cameraservice/sourceservice/src/distributedcamera/dcamera_source_callback_proxy.cpp @@ -83,6 +83,72 @@ int32_t DCameraSourceCallbackProxy::OnNotifyUnregResult(const std::string& devId return result; } +int32_t DCameraSourceCallbackProxy::OnHardwareStateChanged(const std::string &devId, + const std::string &dhId, int32_t status) +{ + if (!CheckParams(devId, dhId, status)) { + DHLOGE("input is invalid"); + return DCAMERA_BAD_VALUE; + } + sptr remote = Remote(); + if (remote == nullptr) { + DHLOGE("DCameraSourceCallbackProxy remote service null"); + return DCAMERA_BAD_VALUE; + } + + MessageParcel req; + MessageParcel reply; + MessageOption option; + if (!req.WriteInterfaceToken(DCameraSourceCallbackProxy::GetDescriptor())) { + DHLOGE("write token failed"); + return DCAMERA_BAD_VALUE; + } + if (!req.WriteString(devId) || !req.WriteString(dhId) || !req.WriteInt32(status)) { + return DCAMERA_BAD_VALUE; + } + remote->SendRequest(NOTIFY_STATE_CHANGED, req, reply, option); + return reply.ReadInt32(); +} + +int32_t DCameraSourceCallbackProxy::OnDataSyncTrigger(const std::string &devId) +{ + if (devId.empty() || devId.size() > DID_MAX_SIZE) { + DHLOGE("devId is invalid"); + return DCAMERA_BAD_VALUE; + } + sptr remote = Remote(); + if (remote == nullptr) { + DHLOGE("DCameraSourceCallbackProxy remote service null"); + return DCAMERA_BAD_VALUE; + } + + MessageParcel req; + MessageParcel reply; + MessageOption option; + if (!req.WriteInterfaceToken(DCameraSourceCallbackProxy::GetDescriptor())) { + DHLOGE("write token failed"); + return DCAMERA_BAD_VALUE; + } + if (!req.WriteString(devId)) { + return DCAMERA_BAD_VALUE; + } + remote->SendRequest(NOTIFY_DATASYNC_TRIGGER, req, reply, option); + return reply.ReadInt32(); +} + +bool DCameraSourceCallbackProxy::CheckParams(const std::string& devId, const std::string& dhId, int32_t status) +{ + if (devId.empty() || devId.size() > DID_MAX_SIZE || dhId.empty() || dhId.size() > DID_MAX_SIZE) { + DHLOGE("devId or dhId is invalid"); + return false; + } + if (status < 0) { + DHLOGE("status in invalid."); + return false; + } + return true; +} + bool DCameraSourceCallbackProxy::CheckParams(const std::string& devId, const std::string& dhId, const std::string& reqId, std::string& data) { diff --git a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_state_listener.h b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_state_listener.h index 593cf5a2..9265254f 100644 --- a/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_state_listener.h +++ b/services/cameraservice/sourceservice/test/unittest/common/distributedcameramgr/mock_dcamera_source_state_listener.h @@ -39,6 +39,16 @@ public: return DCAMERA_OK; } + int32_t OnHardwareStateChanged(const std::string &devId, const std::string &dhId, int32_t status) + { + return DCAMERA_OK; + } + + int32_t OnDataSyncTrigger(const std::string &devId) + { + return DCAMERA_OK; + } + void SetCallback(sptr callback) { } -- Gitee