1 /*
2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "devicestatus_agent.h"
17
18 #include "devicestatus_define.h"
19 #include "fi_log.h"
20 #include "stationary_callback.h"
21 #include "stationary_manager.h"
22
23 #undef LOG_TAG
24 #define LOG_TAG "DeviceStatusAgent"
25
26 namespace OHOS {
27 namespace Msdp {
28 namespace DeviceStatus {
29
OnDeviceStatusChanged(const Data & devicestatusData)30 void DeviceStatusAgent::DeviceStatusAgentCallback::OnDeviceStatusChanged(
31 const Data &devicestatusData)
32 {
33 FI_HILOGI("type:%{public}d, value:%{public}d", static_cast<Type>(devicestatusData.type),
34 static_cast<OnChangedValue>(devicestatusData.value));
35 std::shared_ptr<DeviceStatusAgent> agent = agent_.lock();
36 CHKPV(agent);
37 CHKPV(agent->agentEvent_);
38 agent->agentEvent_->OnEventResult(devicestatusData);
39 }
40
SubscribeAgentEvent(Type type,ActivityEvent event,ReportLatencyNs latency,std::shared_ptr<DeviceStatusAgent::DeviceStatusAgentEvent> agentEvent)41 int32_t DeviceStatusAgent::SubscribeAgentEvent(Type type,
42 ActivityEvent event,
43 ReportLatencyNs latency,
44 std::shared_ptr<DeviceStatusAgent::DeviceStatusAgentEvent> agentEvent)
45 {
46 CALL_DEBUG_ENTER;
47 CHKPR(agentEvent, ERR_INVALID_VALUE);
48 if (!(type > Type::TYPE_INVALID && type <= Type::TYPE_LID_OPEN) ||
49 !(event > ActivityEvent::EVENT_INVALID && event <= ActivityEvent::ENTER_EXIT)) {
50 FI_HILOGE("Subscription agent event failed");
51 return ERR_INVALID_VALUE;
52 }
53 RegisterServiceEvent(type, event, latency);
54 agentEvent_ = agentEvent;
55 return RET_OK;
56 }
57
UnsubscribeAgentEvent(Type type,ActivityEvent event)58 int32_t DeviceStatusAgent::UnsubscribeAgentEvent(Type type, ActivityEvent event)
59 {
60 if (type > Type::TYPE_INVALID && type <= Type::TYPE_LID_OPEN && event > ActivityEvent::EVENT_INVALID
61 && event <= ActivityEvent::ENTER_EXIT) {
62 UnRegisterServiceEvent(type, event);
63 return RET_OK;
64 }
65 FI_HILOGE("Unsubscription agent event failed");
66 return ERR_INVALID_VALUE;
67 }
68
RegisterServiceEvent(Type type,ActivityEvent event,ReportLatencyNs latency)69 void DeviceStatusAgent::RegisterServiceEvent(Type type, ActivityEvent event, ReportLatencyNs latency)
70 {
71 CALL_DEBUG_ENTER;
72 callback_ = new (std::nothrow) DeviceStatusAgentCallback(shared_from_this());
73 CHKPV(callback_);
74 StationaryManager::GetInstance()->SubscribeCallback(type, event, latency, callback_);
75 }
76
UnRegisterServiceEvent(Type type,ActivityEvent event)77 void DeviceStatusAgent::UnRegisterServiceEvent(Type type, ActivityEvent event)
78 {
79 CALL_DEBUG_ENTER;
80 StationaryManager::GetInstance()->UnsubscribeCallback(type, event, callback_);
81 }
82 } // namespace DeviceStatus
83 } // namespace Msdp
84 } // namespace OHOS
85