• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 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 "dscreen_sink_service.h"
17 
18 #include "if_system_ability_manager.h"
19 #include "ipc_skeleton.h"
20 #include "ipc_types.h"
21 #include "iservice_registry.h"
22 #include "string_ex.h"
23 #include "system_ability_definition.h"
24 
25 #include "dscreen_constants.h"
26 #include "dscreen_errcode.h"
27 #include "dscreen_log.h"
28 #include "dscreen_sa_process_state.h"
29 #include "dscreen_util.h"
30 
31 namespace OHOS {
32 namespace DistributedHardware {
33 REGISTER_SYSTEM_ABILITY_BY_ID(DScreenSinkService, DISTRIBUTED_HARDWARE_SCREEN_SINK_SA_ID, true);
34 
DScreenSinkService(int32_t saId,bool runOnCreate)35 DScreenSinkService::DScreenSinkService(int32_t saId, bool runOnCreate) : SystemAbility(saId, runOnCreate)
36 {
37     DHLOGI("DScreenSinkService construct.");
38 }
39 
OnStart()40 void DScreenSinkService::OnStart()
41 {
42     DHLOGI("dscreen sink service start.");
43     if (!Init()) {
44         DHLOGE("DScreenSinkService init failed.");
45         return;
46     }
47     DHLOGI("DScreenSinkService start success.");
48 }
49 
OnStop()50 void DScreenSinkService::OnStop()
51 {
52     DHLOGI("dscreen sink service stop.");
53     registerToService_ = false;
54 }
55 
Init()56 bool DScreenSinkService::Init()
57 {
58     DHLOGI("dscreen sink service start init.");
59     if (!registerToService_) {
60         bool ret = Publish(this);
61         if (!ret) {
62             DHLOGE("dscreen sink publish service failed.");
63             return false;
64         }
65         registerToService_ = true;
66     }
67     DHLOGI("dscreenService init success.");
68     return true;
69 }
70 
InitSink(const std::string & params)71 int32_t DScreenSinkService::InitSink(const std::string &params)
72 {
73     DHLOGI("InitSink");
74     (void)params;
75     return DH_SUCCESS;
76 }
77 
ReleaseSink()78 int32_t DScreenSinkService::ReleaseSink()
79 {
80     DHLOGI("ReleaseSink");
81     ScreenRegionManager::GetInstance().ReleaseAllRegions();
82     DHLOGI("exit sink sa process");
83     SetSinkProcessExit();
84     return DH_SUCCESS;
85 }
86 
SubscribeLocalHardware(const std::string & dhId,const std::string & param)87 int32_t DScreenSinkService::SubscribeLocalHardware(const std::string &dhId, const std::string &param)
88 {
89     DHLOGI("SubscribeLocalHardware");
90     (void)dhId;
91     (void)param;
92     return DH_SUCCESS;
93 }
94 
UnsubscribeLocalHardware(const std::string & dhId)95 int32_t DScreenSinkService::UnsubscribeLocalHardware(const std::string &dhId)
96 {
97     DHLOGI("UnsubscribeLocalHardware");
98     (void)dhId;
99     return DH_SUCCESS;
100 }
101 
DScreenNotify(const std::string & devId,int32_t eventCode,const std::string & eventContent)102 void DScreenSinkService::DScreenNotify(const std::string &devId, int32_t eventCode, const std::string &eventContent)
103 {
104     DHLOGI("DScreenNotify, devId:%s, eventCode: %d, eventContent:%s", GetAnonyString(devId).c_str(),
105         eventCode, eventContent.c_str());
106     ScreenRegionManager::GetInstance().HandleDScreenNotify(devId, eventCode, eventContent);
107 }
108 
Dump(int32_t fd,const std::vector<std::u16string> & args)109 int32_t DScreenSinkService::Dump(int32_t fd, const std::vector<std::u16string>& args)
110 {
111     DHLOGI("DScreenSinkService  Dump.");
112     (void)args;
113     std::string result;
114     ScreenRegionManager::GetInstance().GetScreenDumpInfo(result);
115     int ret = dprintf(fd, "%s\n", result.c_str());
116     if (ret < 0) {
117         DHLOGE("dprintf error");
118         return ERR_DH_SCREEN_SA_HIDUMPER_ERROR;
119     }
120 
121     return ERR_OK;
122 }
123 } // namespace DistributedHardware
124 } // namespace OHOS