1 /*
2 * Copyright (c) 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
16 #include "parameter.h"
17 #include "sysversion.h"
18 #include "device_info.h"
19 #ifdef DEPENDENT_APPEXECFWK_BASE
20 #include "bundlemgr/bundle_mgr_proxy.h"
21 #endif
22 #include "iservice_registry.h"
23 #include "if_system_ability_manager.h"
24 #include "system_ability_definition.h"
25 #include "beget_ext.h"
26 #include "init_error.h"
27 #include "securec.h"
28 #include "log.h"
29
30 #include <string>
31 #include <memory>
32 #include <threads.h>
33
34 namespace OHOS {
35 namespace CJSystemapi {
36 namespace DeviceInfo {
37
38 const int UDID_LEN = 65;
39 const int ODID_LEN = 37;
40
41 typedef enum {
42 DEV_INFO_OK,
43 DEV_INFO_ENULLPTR,
44 DEV_INFO_EGETODID,
45 DEV_INFO_ESTRCOPY
46 } DevInfoError;
47
CjGetHardwareProfile()48 const char* DeviceInfo::CjGetHardwareProfile()
49 {
50 return GetHardwareProfile();
51 }
52
CjGetOsFullName()53 const char* DeviceInfo::CjGetOsFullName()
54 {
55 return GetOSFullName();
56 }
57
CjGetProductModel()58 const char* DeviceInfo::CjGetProductModel()
59 {
60 return GetProductModel();
61 }
62
CjGetBrand()63 const char* DeviceInfo::CjGetBrand()
64 {
65 return GetBrand();
66 }
67
CjGetDeviceType()68 const char* DeviceInfo::CjGetDeviceType()
69 {
70 return GetDeviceType();
71 }
72
CjGetUdid()73 const char* DeviceInfo::CjGetUdid()
74 {
75 char* udid = static_cast<char*>(calloc(1, UDID_LEN));
76 if (udid == nullptr) {
77 return nullptr;
78 }
79 int res = AclGetDevUdid(udid, UDID_LEN);
80 if (res != 0) {
81 free(udid);
82 return nullptr;
83 }
84 return udid;
85 }
86
CjGetBuildRootHash()87 const char* DeviceInfo::CjGetBuildRootHash()
88 {
89 return GetBuildRootHash();
90 }
91
CjGetBuildTime()92 const char* DeviceInfo::CjGetBuildTime()
93 {
94 return GetBuildTime();
95 }
96
CjGetBuildHost()97 const char* DeviceInfo::CjGetBuildHost()
98 {
99 return GetBuildHost();
100 }
101
CjGetBuildUser()102 const char* DeviceInfo::CjGetBuildUser()
103 {
104 return GetBuildUser();
105 }
106
CjGetBuildType()107 const char* DeviceInfo::CjGetBuildType()
108 {
109 return GetBuildType();
110 }
111
CjGetVersionId()112 const char* DeviceInfo::CjGetVersionId()
113 {
114 return GetVersionId();
115 }
116
CjGetFirstApiVersion()117 int64_t DeviceInfo::CjGetFirstApiVersion()
118 {
119 return GetFirstApiVersion();
120 }
121
CjGetSdkApiVersion()122 int64_t DeviceInfo::CjGetSdkApiVersion()
123 {
124 return GetSdkApiVersion();
125 }
126
CjGetBuildVersion()127 int64_t DeviceInfo::CjGetBuildVersion()
128 {
129 return GetBuildVersion();
130 }
131
CjGetFeatureVersion()132 int64_t DeviceInfo::CjGetFeatureVersion()
133 {
134 return GetFeatureVersion();
135 }
136
CjGetSeniorVersion()137 int64_t DeviceInfo::CjGetSeniorVersion()
138 {
139 return GetSeniorVersion();
140 }
141
CjGetMajorVersion()142 int64_t DeviceInfo::CjGetMajorVersion()
143 {
144 return GetMajorVersion();
145 }
146
CjGetDisplayVersion()147 const char* DeviceInfo::CjGetDisplayVersion()
148 {
149 return GetDisplayVersion();
150 }
151
CjGetSerial()152 const char* DeviceInfo::CjGetSerial()
153 {
154 return AclGetSerial();
155 }
156
CjGetOsReleaseType()157 const char* DeviceInfo::CjGetOsReleaseType()
158 {
159 return GetOsReleaseType();
160 }
161
CjGetIncrementalVersion()162 const char* DeviceInfo::CjGetIncrementalVersion()
163 {
164 return GetIncrementalVersion();
165 }
166
CjGetSecurityPatchTag()167 const char* DeviceInfo::CjGetSecurityPatchTag()
168 {
169 return GetSecurityPatchTag();
170 }
171
CjGetAbiList()172 const char* DeviceInfo::CjGetAbiList()
173 {
174 return GetAbiList();
175 }
176
CjGetBootloaderVersion()177 const char* DeviceInfo::CjGetBootloaderVersion()
178 {
179 return GetBootloaderVersion();
180 }
181
CjGetHardwareModel()182 const char* DeviceInfo::CjGetHardwareModel()
183 {
184 return GetHardwareModel();
185 }
186
CjGetSoftwareModel()187 const char* DeviceInfo::CjGetSoftwareModel()
188 {
189 return GetSoftwareModel();
190 }
191
CjGetProductSeries()192 const char* DeviceInfo::CjGetProductSeries()
193 {
194 return GetProductSeries();
195 }
196
CjGetMarketName()197 const char* DeviceInfo::CjGetMarketName()
198 {
199 return GetMarketName();
200 }
201
CjGetManufacture()202 const char* DeviceInfo::CjGetManufacture()
203 {
204 return GetManufacture();
205 }
206
CjGetDistributionOSName()207 const char* DeviceInfo::CjGetDistributionOSName()
208 {
209 return GetDistributionOSName();
210 }
211
CjGetDistributionOSVersion()212 const char* DeviceInfo::CjGetDistributionOSVersion()
213 {
214 return GetDistributionOSVersion();
215 }
216
CjGetDistributionOSApiVersion()217 int64_t DeviceInfo::CjGetDistributionOSApiVersion()
218 {
219 return GetDistributionOSApiVersion();
220 }
221
CjGetDistributionOSReleaseType()222 const char* DeviceInfo::CjGetDistributionOSReleaseType()
223 {
224 return GetDistributionOSReleaseType();
225 }
226
CjAclGetDevOdid(char * odid,int size)227 static DevInfoError CjAclGetDevOdid(char *odid, int size)
228 {
229 DevInfoError ret = DEV_INFO_OK;
230 if (odid[0] != '\0') {
231 return DEV_INFO_OK;
232 }
233 auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
234 if (!systemAbilityManager) {
235 return DEV_INFO_ENULLPTR;
236 }
237
238 auto remoteObject = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID);
239 if (!remoteObject) {
240 return DEV_INFO_ENULLPTR;
241 }
242
243 #ifdef DEPENDENT_APPEXECFWK_BASE
244 auto bundleMgrProxy = OHOS::iface_cast<OHOS::AppExecFwk::BundleMgrProxy>(remoteObject);
245 if (!bundleMgrProxy) {
246 return DEV_INFO_ENULLPTR;
247 }
248
249 std::string odidStr;
250 if (bundleMgrProxy->GetOdid(odidStr) != 0) {
251 return DEV_INFO_EGETODID;
252 }
253
254 if (strcpy_s(odid, size, odidStr.c_str()) != EOK) {
255 return DEV_INFO_ESTRCOPY;
256 }
257 #else
258 LOGE("DEPENDENT_APPEXECFWK_BASE does not exist, The ODID could not be obtained");
259 ret = DEV_INFO_EGETODID;
260 #endif
261
262 return ret;
263 }
264
CjGetDevOdid()265 const char* DeviceInfo::CjGetDevOdid()
266 {
267 thread_local char odid[ODID_LEN] = {0};
268 DevInfoError ret = CjAclGetDevOdid(odid, ODID_LEN);
269 if (ret != DEV_INFO_OK) {
270 LOGE("GetDevOdid ret:%d", ret);
271 return "";
272 }
273 return odid;
274 }
275
CjGetDistributionOSApiName()276 const char* DeviceInfo::CjGetDistributionOSApiName()
277 {
278 return GetDistributionOSApiName();
279 }
280
281 } // DeviceInfo
282 } // CJSystemapi
283 } // OHOS
284