• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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 #include "vibrator_hdi_connection.h"
16 
17 #ifdef HIVIEWDFX_HITRACE_ENABLE
18 #include "hitrace_meter.h"
19 #endif // HIVIEWDFX_HITRACE_ENABLE
20 
21 #ifdef BUILD_VARIANT_ENG
22 #include "compatible_connection.h"
23 #endif // BUILD_VARIANT_ENG
24 #include "hdi_connection.h"
25 #include "sensors_errors.h"
26 
27 #undef LOG_TAG
28 #define LOG_TAG "VibratorHdiConnection"
29 
30 namespace OHOS {
31 namespace Sensors {
32 
ConnectHdi()33 int32_t VibratorHdiConnection::ConnectHdi()
34 {
35 #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR
36     iVibratorHdiConnection_ = std::make_unique<HdiConnection>();
37 #endif // HDF_DRIVERS_INTERFACE_VIBRATOR
38     int32_t ret = iVibratorHdiConnection_->ConnectHdi();
39 #ifdef BUILD_VARIANT_ENG
40     if (ret != ERR_OK) {
41         MISC_HILOGE("Hdi direct failed");
42         iVibratorHdiConnection_ = std::make_unique<CompatibleConnection>();
43         ret = iVibratorHdiConnection_->ConnectHdi();
44     }
45     if (ret != ERR_OK) {
46         MISC_HILOGE("Hdi connection failed");
47         return VIBRATOR_HDF_CONNECT_ERR;
48     }
49 #endif // BUILD_VARIANT_ENG
50     return ret;
51 }
52 
StartOnce(const VibratorIdentifierIPC & identifier,uint32_t duration)53 int32_t VibratorHdiConnection::StartOnce(const VibratorIdentifierIPC &identifier, uint32_t duration)
54 {
55     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
56 #ifdef HIVIEWDFX_HITRACE_ENABLE
57     StartTrace(HITRACE_TAG_SENSORS, "StartOnce");
58 #endif // HIVIEWDFX_HITRACE_ENABLE
59     int32_t ret = iVibratorHdiConnection_->StartOnce(identifier, duration);
60 #ifdef HIVIEWDFX_HITRACE_ENABLE
61     FinishTrace(HITRACE_TAG_SENSORS);
62 #endif // HIVIEWDFX_HITRACE_ENABLE
63     if (ret != 0) {
64         MISC_HILOGE("StartOnce failed");
65         return VIBRATOR_ON_ERR;
66     }
67     return ERR_OK;
68 }
69 
Start(const VibratorIdentifierIPC & identifier,const std::string & effectType)70 int32_t VibratorHdiConnection::Start(const VibratorIdentifierIPC &identifier, const std::string &effectType)
71 {
72     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
73 #ifdef HIVIEWDFX_HITRACE_ENABLE
74     StartTrace(HITRACE_TAG_SENSORS, "Start");
75 #endif // HIVIEWDFX_HITRACE_ENABLE
76     int32_t ret = iVibratorHdiConnection_->Start(identifier, effectType);
77 #ifdef HIVIEWDFX_HITRACE_ENABLE
78     FinishTrace(HITRACE_TAG_SENSORS);
79 #endif // HIVIEWDFX_HITRACE_ENABLE
80     if (ret != 0) {
81         MISC_HILOGE("Start failed");
82         return VIBRATOR_ON_ERR;
83     }
84     return ERR_OK;
85 }
86 
87 #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR
88 #ifdef OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM
EnableCompositeEffect(const VibratorIdentifierIPC & identifier,const HdfCompositeEffect & hdfCompositeEffect)89 int32_t VibratorHdiConnection::EnableCompositeEffect(const VibratorIdentifierIPC &identifier,
90     const HdfCompositeEffect &hdfCompositeEffect)
91 {
92     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
93 #ifdef HIVIEWDFX_HITRACE_ENABLE
94     StartTrace(HITRACE_TAG_SENSORS, "EnableCompositeEffect");
95 #endif // HIVIEWDFX_HITRACE_ENABLE
96     int32_t ret = iVibratorHdiConnection_->EnableCompositeEffect(identifier, hdfCompositeEffect);
97 #ifdef HIVIEWDFX_HITRACE_ENABLE
98     FinishTrace(HITRACE_TAG_SENSORS);
99 #endif // HIVIEWDFX_HITRACE_ENABLE
100     if (ret != 0) {
101         MISC_HILOGE("EnableCompositeEffect failed");
102         return VIBRATOR_ON_ERR;
103     }
104     return ERR_OK;
105 }
106 
IsVibratorRunning(const VibratorIdentifierIPC & identifier)107 bool VibratorHdiConnection::IsVibratorRunning(const VibratorIdentifierIPC &identifier)
108 {
109     CHKPR(iVibratorHdiConnection_, false);
110     return iVibratorHdiConnection_->IsVibratorRunning(identifier);
111 }
112 #endif // OHOS_BUILD_ENABLE_VIBRATOR_CUSTOM
113 
GetEffectInfo(const VibratorIdentifierIPC & identifier,const std::string & effect)114 std::optional<HdfEffectInfo> VibratorHdiConnection::GetEffectInfo(const VibratorIdentifierIPC &identifier,
115     const std::string &effect)
116 {
117     if (iVibratorHdiConnection_ == nullptr) {
118         MISC_HILOGE("Connect hdi failed");
119         return std::nullopt;
120     }
121 #ifdef HIVIEWDFX_HITRACE_ENABLE
122     StartTrace(HITRACE_TAG_SENSORS, "GetEffectInfo");
123 #endif // HIVIEWDFX_HITRACE_ENABLE
124     std::optional<HdfEffectInfo> ret = iVibratorHdiConnection_->GetEffectInfo(identifier, effect);
125 #ifdef HIVIEWDFX_HITRACE_ENABLE
126     FinishTrace(HITRACE_TAG_SENSORS);
127 #endif // HIVIEWDFX_HITRACE_ENABLE
128     return ret;
129 }
130 
Stop(const VibratorIdentifierIPC & identifier,HdfVibratorMode mode)131 int32_t VibratorHdiConnection::Stop(const VibratorIdentifierIPC &identifier, HdfVibratorMode mode)
132 {
133     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
134 #ifdef HIVIEWDFX_HITRACE_ENABLE
135     StartTrace(HITRACE_TAG_SENSORS, "Stop");
136 #endif // HIVIEWDFX_HITRACE_ENABLE
137     int32_t ret = iVibratorHdiConnection_->Stop(identifier, mode);
138 #ifdef HIVIEWDFX_HITRACE_ENABLE
139     FinishTrace(HITRACE_TAG_SENSORS);
140 #endif // HIVIEWDFX_HITRACE_ENABLE
141     if (ret != 0) {
142         MISC_HILOGE("Stop failed");
143         return VIBRATOR_OFF_ERR;
144     }
145     return ERR_OK;
146 }
147 #endif // HDF_DRIVERS_INTERFACE_VIBRATOR
148 
GetDelayTime(const VibratorIdentifierIPC & identifier,int32_t mode,int32_t & delayTime)149 int32_t VibratorHdiConnection::GetDelayTime(const VibratorIdentifierIPC &identifier, int32_t mode, int32_t &delayTime)
150 {
151     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
152     return iVibratorHdiConnection_->GetDelayTime(identifier, mode, delayTime);
153 }
154 
GetVibratorCapacity(const VibratorIdentifierIPC & identifier,VibratorCapacity & capacity)155 int32_t VibratorHdiConnection::GetVibratorCapacity(const VibratorIdentifierIPC &identifier, VibratorCapacity &capacity)
156 {
157     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
158     return iVibratorHdiConnection_->GetVibratorCapacity(identifier, capacity);
159 }
160 
PlayPattern(const VibratorIdentifierIPC & identifier,const VibratePattern & pattern)161 int32_t VibratorHdiConnection::PlayPattern(const VibratorIdentifierIPC &identifier, const VibratePattern &pattern)
162 {
163     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
164     return iVibratorHdiConnection_->PlayPattern(identifier, pattern);
165 }
166 
PlayPatternBySessionId(const VibratorIdentifierIPC & identifier,uint32_t sessionId,const VibratePattern & pattern)167 int32_t VibratorHdiConnection::PlayPatternBySessionId(const VibratorIdentifierIPC &identifier, uint32_t sessionId,
168     const VibratePattern &pattern)
169 {
170     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
171     return iVibratorHdiConnection_->PlayPatternBySessionId(identifier, sessionId, pattern);
172 }
173 
PlayPackageBySessionId(const VibratorIdentifierIPC & identifier,uint32_t sessionId,const VibratePackageIPC & package)174 int32_t VibratorHdiConnection::PlayPackageBySessionId(const VibratorIdentifierIPC &identifier, uint32_t sessionId,
175     const VibratePackageIPC &package)
176 {
177     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
178     return iVibratorHdiConnection_->PlayPackageBySessionId(identifier, sessionId, package);
179 }
180 
StopVibrateBySessionId(const VibratorIdentifierIPC & identifier,uint32_t sessionId)181 int32_t VibratorHdiConnection::StopVibrateBySessionId(const VibratorIdentifierIPC &identifier, uint32_t sessionId)
182 {
183     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
184     return iVibratorHdiConnection_->StopVibrateBySessionId(identifier, sessionId);
185 }
186 
DestroyHdiConnection()187 int32_t VibratorHdiConnection::DestroyHdiConnection()
188 {
189     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
190     int32_t ret = iVibratorHdiConnection_->DestroyHdiConnection();
191     if (ret != 0) {
192         MISC_HILOGE("DestroyHdiConnection failed");
193         return VIBRATOR_HDF_CONNECT_ERR;
194     }
195     return ERR_OK;
196 }
197 
StartByIntensity(const VibratorIdentifierIPC & identifier,const std::string & effect,int32_t intensity)198 int32_t VibratorHdiConnection::StartByIntensity(const VibratorIdentifierIPC &identifier, const std::string &effect,
199     int32_t intensity)
200 {
201     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
202 #ifdef HIVIEWDFX_HITRACE_ENABLE
203     StartTrace(HITRACE_TAG_SENSORS, "StartByIntensity");
204 #endif // HIVIEWDFX_HITRACE_ENABLE
205     int32_t ret = iVibratorHdiConnection_->StartByIntensity(identifier, effect, intensity);
206 #ifdef HIVIEWDFX_HITRACE_ENABLE
207     FinishTrace(HITRACE_TAG_SENSORS);
208 #endif // HIVIEWDFX_HITRACE_ENABLE
209     if (ret != 0) {
210         MISC_HILOGE("StartByIntensity failed");
211         return VIBRATOR_ON_ERR;
212     }
213     return ERR_OK;
214 }
215 
216 #ifdef HDF_DRIVERS_INTERFACE_VIBRATOR
GetVibratorInfo(std::vector<HdfVibratorInfo> & hdfVibratorInfo)217 int32_t VibratorHdiConnection::GetVibratorInfo(std::vector<HdfVibratorInfo> &hdfVibratorInfo)
218 {
219     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
220     return iVibratorHdiConnection_->GetVibratorInfo(hdfVibratorInfo);
221 }
222 
GetAllWaveInfo(const VibratorIdentifierIPC & identifier,std::vector<HdfWaveInformation> & waveInfos)223 int32_t VibratorHdiConnection::GetAllWaveInfo(const VibratorIdentifierIPC &identifier,
224     std::vector<HdfWaveInformation> &waveInfos)
225 {
226     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
227     return iVibratorHdiConnection_->GetAllWaveInfo(identifier, waveInfos);
228 }
229 
GetVibratorList(const VibratorIdentifierIPC & identifier,std::vector<HdfVibratorInfo> & vibratorInfo)230 int32_t VibratorHdiConnection::GetVibratorList(const VibratorIdentifierIPC &identifier,
231     std::vector<HdfVibratorInfo> &vibratorInfo)
232 {
233     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
234     return iVibratorHdiConnection_->GetVibratorList(identifier, vibratorInfo);
235 }
236 
GetEffectInfo(const VibratorIdentifierIPC & identifier,const std::string & effectType,HdfEffectInfo & effectInfo)237 int32_t VibratorHdiConnection::GetEffectInfo(const VibratorIdentifierIPC &identifier, const std::string &effectType,
238     HdfEffectInfo &effectInfo)
239 {
240     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
241     return iVibratorHdiConnection_->GetEffectInfo(identifier, effectType, effectInfo);
242 }
243 #endif // HDF_DRIVERS_INTERFACE_VIBRATOR
244 
RegisterVibratorPlugCallback(DevicePlugCallback cb)245 int32_t VibratorHdiConnection::RegisterVibratorPlugCallback(DevicePlugCallback cb)
246 {
247     CHKPR(iVibratorHdiConnection_, VIBRATOR_HDF_CONNECT_ERR);
248 #ifdef HIVIEWDFX_HITRACE_ENABLE
249     StartTrace(HITRACE_TAG_SENSORS, "RegisterVibratorPlugCallback");
250 #endif // HIVIEWDFX_HITRACE_ENABLE
251     int32_t ret = iVibratorHdiConnection_->RegisterVibratorPlugCallback(cb);
252 #ifdef HIVIEWDFX_HITRACE_ENABLE
253     FinishTrace(HITRACE_TAG_SENSORS);
254 #endif // HIVIEWDFX_HITRACE_ENABLE
255     if (ret != 0) {
256         MISC_HILOGE("RegisterVibratorPlugCallback failed");
257         return VIBRATOR_ON_ERR;
258     }
259     return ERR_OK;
260 }
261 
GetVibratorPlugCb()262 DevicePlugCallback VibratorHdiConnection::GetVibratorPlugCb()
263 {
264     CHKPP(iVibratorHdiConnection_);
265     return NULL;
266 }
267 }  // namespace Sensors
268 }  // namespace OHOS
269