1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2024. All rights reserved.
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 "usb_accessory_manager.h"
16
17 #include <iostream>
18 #include <functional>
19 #include <chrono>
20 #include <sstream>
21 #include <iomanip>
22 #include <hdf_base.h>
23
24 #include "common_event_data.h"
25 #include "common_event_manager.h"
26 #include "common_event_support.h"
27 #include "hisysevent.h"
28 #include "usb_errors.h"
29 #include "usb_srv_support.h"
30 #include "usbd_type.h"
31 #include "cJSON.h"
32 using namespace OHOS::AAFwk;
33 using namespace OHOS::EventFwk;
34 using namespace OHOS::HiviewDFX;
35 using namespace OHOS::HDI::Usb::V1_0;
36 using namespace OHOS::HDI::Usb::V1_2;
37
38 namespace OHOS {
39 namespace USB {
40 constexpr int32_t ACCESSORY_INFO_SIZE = 5;
41 constexpr uint32_t ACCESSORY_EXTRA_INDEX = 5;
42 constexpr uint32_t FUN_ACCESSORY = 1 << 11;
43 constexpr int32_t NUM_OF_SERAIL_BIT = 16;
44 constexpr uint32_t DELAY_ACC_INTERVAL = 10 * 1000;
45 constexpr uint32_t ANTI_SHAKE_INTERVAL = 1 * 1000;
46 constexpr int32_t ACCESSORY_IS_BUSY = -16;
47 const int INDEX_FIRST = 0;
48 const int INDEX_SECOND = 1;
49 const int INDEX_THIRD = 2;
50 const int INDEX_FORTH = 3;
51 const int INDEX_FIFTH = 4;
52 const uint32_t OFFSET2 = 2;
53 const uint32_t OFFSET4 = 4;
54 const uint32_t OFFSET6 = 6;
55 const std::string BASE_64_CHARS =
56 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
57 "abcdefghijklmnopqrstuvwxyz"
58 "0123456789+/";
59 const char *ACCESSORY_DRIVER_PATH = "/dev/usb_accessory";
60
61 // LCOV_EXCL_START
UsbAccessoryManager()62 UsbAccessoryManager::UsbAccessoryManager()
63 {
64 USB_HILOGI(MODULE_USB_SERVICE, "UsbAccessoryManager::Init start");
65 #ifndef USB_MANAGER_V2_0
66 usbdImpl_ = OHOS::HDI::Usb::V1_2::IUsbInterface::Get();
67 if (usbdImpl_ == nullptr) {
68 USB_HILOGE(MODULE_USB_SERVICE, "UsbDeviceManager::Get inteface failed");
69 }
70 #endif // USB_MANAGER_V2_0
71 }
72
73 #ifdef USB_MANAGER_V2_0
InitUsbAccessoryInterface()74 bool UsbAccessoryManager::InitUsbAccessoryInterface()
75 {
76 USB_HILOGI(MODULE_USB_SERVICE, "UsbAccessoryManager::InitUsbAccessoryInterface start");
77 usbDeviceInterface_ = HDI::Usb::V2_0::IUsbDeviceInterface::Get();
78 if (usbDeviceInterface_ == nullptr) {
79 USB_HILOGE(MODULE_USB_SERVICE, "UsbAccessoryManager:: Get inteface failed");
80 return false;
81 }
82 return true;
83 }
84 #endif // USB_MANAGER_V2_0
85
GetAccessoryInfo(std::vector<std::string> & accessorys)86 void UsbAccessoryManager::GetAccessoryInfo(std::vector<std::string> &accessorys)
87 {
88 #ifdef USB_MANAGER_V2_0
89 if (usbDeviceInterface_ == nullptr) {
90 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbDeviceInterface_ is nullptr.");
91 return;
92 }
93 usbDeviceInterface_->GetAccessoryInfo(accessorys);
94 #else
95 if (usbdImpl_ == nullptr) {
96 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbdImpl_ is nullptr.");
97 return;
98 }
99 usbdImpl_->GetAccessoryInfo(accessorys);
100 #endif // USB_MANAGER_V2_0
101 }
102
SetCurrentFunctions(int32_t funcs)103 int32_t UsbAccessoryManager::SetCurrentFunctions(int32_t funcs)
104 {
105 #ifdef USB_MANAGER_V2_0
106 if (usbDeviceInterface_ == nullptr) {
107 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbDeviceInterface_ is nullptr.");
108 return UEC_SERVICE_INVALID_VALUE;
109 }
110 return usbDeviceInterface_->SetCurrentFunctions(funcs);
111 #else
112 if (usbdImpl_ == nullptr) {
113 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbdImpl_ is nullptr.");
114 return UEC_SERVICE_INVALID_VALUE;
115 }
116 return usbdImpl_->SetCurrentFunctions(funcs);
117 #endif // USB_MANAGER_V2_0
118 }
119
GetCurrentFunctions(int32_t & funcs)120 int32_t UsbAccessoryManager::GetCurrentFunctions(int32_t &funcs)
121 {
122 #ifdef USB_MANAGER_V2_0
123 if (usbDeviceInterface_ == nullptr) {
124 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbDeviceInterface_ is nullptr.");
125 return UEC_SERVICE_INVALID_VALUE;
126 }
127 return usbDeviceInterface_->GetCurrentFunctions(funcs);
128 #else
129 if (usbdImpl_ == nullptr) {
130 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbdImpl_ is nullptr.");
131 return UEC_SERVICE_INVALID_VALUE;
132 }
133 return usbdImpl_->GetCurrentFunctions(funcs);
134 #endif // USB_MANAGER_V2_0
135 }
136
SetUsbd(const sptr<OHOS::HDI::Usb::V1_2::IUsbInterface> usbd)137 int32_t UsbAccessoryManager::SetUsbd(const sptr<OHOS::HDI::Usb::V1_2::IUsbInterface> usbd)
138 {
139 if (usbd == nullptr) {
140 USB_HILOGE(MODULE_USB_SERVICE, "UsbAccessoryManager usbd is nullptr");
141 return UEC_SERVICE_INVALID_VALUE;
142 }
143 usbdImpl_ = usbd;
144 return UEC_OK;
145 }
146
GetAccessoryList(const std::string & bundleName,std::vector<USBAccessory> & accessoryList)147 void UsbAccessoryManager::GetAccessoryList(const std::string &bundleName,
148 std::vector<USBAccessory> &accessoryList)
149 {
150 if (accStatus_ == ACC_START) {
151 USBAccessory access = this->accessory;
152 access.SetSerialNumber(bundleName + this->accessory.GetSerialNumber());
153 accessoryList.push_back(access);
154 }
155 return;
156 }
157
OpenAccessory(int32_t & fd)158 int32_t UsbAccessoryManager::OpenAccessory(int32_t &fd)
159 {
160 int32_t ret = UEC_INTERFACE_INVALID_VALUE;
161 #ifdef USB_MANAGER_V2_0
162 if (usbDeviceInterface_ == nullptr) {
163 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbDeviceInterface_ is nullptr.");
164 return UEC_SERVICE_INVALID_VALUE;
165 }
166 ret = usbDeviceInterface_->OpenAccessory(fd);
167 #else
168 if (usbdImpl_ == nullptr) {
169 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbdImpl_ is nullptr.");
170 return UEC_SERVICE_INVALID_VALUE;
171 }
172 ret = usbdImpl_->OpenAccessory(fd);
173 #endif // USB_MANAGER_V2_0
174 if (ret == UEC_OK) {
175 accFd_ = fd;
176 return ret;
177 } else if (ret == ACCESSORY_IS_BUSY) {
178 return UEC_SERVICE_ACCESSORY_REOPEN;
179 }
180 return UEC_SERVICE_ACCESSORY_OPEN_NATIVE_NODE_FAILED;
181 }
182
CloseAccessory(int32_t fd)183 int32_t UsbAccessoryManager::CloseAccessory(int32_t fd)
184 {
185 int32_t ret = UEC_INTERFACE_INVALID_VALUE;
186 #ifdef USB_MANAGER_V2_0
187 if (usbDeviceInterface_ == nullptr) {
188 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbDeviceInterface_ is nullptr.");
189 return UEC_SERVICE_INVALID_VALUE;
190 }
191 int32_t newFd = open(ACCESSORY_DRIVER_PATH, O_RDWR);
192 ret = usbDeviceInterface_->CloseAccessory(newFd);
193 close(newFd);
194 #else
195 if (usbdImpl_ == nullptr) {
196 USB_HILOGE(MODULE_USB_INNERKIT, "UsbAccessoryManager usbdImpl_ is nullptr.");
197 return UEC_SERVICE_INVALID_VALUE;
198 }
199 ret = usbdImpl_->CloseAccessory(accFd_);
200 #endif // USB_MANAGER_V2_0
201 if (ret != UEC_OK) {
202 USB_HILOGE(MODULE_USB_INNERKIT, "%{public}s, close ret: %{public}d, fd: %{public}d.", __func__, ret, fd);
203 return ret;
204 }
205 accFd_ = 0;
206 return ret;
207 }
208
ProcessAccessoryStart(int32_t curFunc,int32_t curAccStatus)209 int32_t UsbAccessoryManager::ProcessAccessoryStart(int32_t curFunc, int32_t curAccStatus)
210 {
211 uint32_t curFuncUint = static_cast<uint32_t>(curFunc);
212 if ((curFuncUint & FUN_ACCESSORY) != 0 && accStatus_ != ACC_START) {
213 this->accStatus_ = ACC_START;
214 std::vector<std::string> accessorys;
215 GetAccessoryInfo(accessorys);
216 this->accessory.SetAccessory(accessorys);
217 std::string hashSerial = SerialValueHash(this->accessory.GetSerialNumber());
218 this->accessory.SetSerialNumber(hashSerial);
219 Want want;
220 want.SetAction(CommonEventSupport::COMMON_EVENT_USB_ACCESSORY_ATTACHED);
221 CommonEventData data(want);
222 data.SetData(this->accessory.GetJsonString().c_str());
223 CommonEventPublishInfo publishInfo;
224 USB_HILOGI(MODULE_SERVICE, "send accessory attached broadcast device:%{public}s",
225 this->accessory.GetJsonString().c_str());
226 return CommonEventManager::PublishCommonEvent(data, publishInfo);
227 } else if ((curFuncUint & FUN_ACCESSORY) == 0 && curAccStatus == ACC_CONFIGURING) {
228 int32_t ret = SetCurrentFunctions(FUN_ACCESSORY);
229 if (ret != UEC_OK) {
230 USB_HILOGE(MODULE_SERVICE, "curFunc %{public}d curAccStatus:%{public}u, set func ret: %{public}d",
231 curFuncUint, curAccStatus, ret);
232 return ret;
233 }
234 lastDeviceFunc_ = static_cast<int32_t>(curFuncUint);
235 auto task = [&]() {
236 this->accStatus_ = ACC_STOP;
237 int32_t ret = SetCurrentFunctions(this->lastDeviceFunc_);
238 if (ret != UEC_OK) {
239 USB_HILOGW(MODULE_SERVICE, "set old func: %{public}d ret: %{public}d", this->lastDeviceFunc_, ret);
240 }
241 return;
242 };
243 accDelayTimerId_ = UsbTimerWrapper::GetInstance()->Register(task, DELAY_ACC_INTERVAL, true);
244 this->accStatus_ = ACC_CONFIGURING;
245 } else {
246 USB_HILOGD(MODULE_SERVICE, "curFunc %{public}u curAccStatus:%{public}d not necessary",
247 curFuncUint, curAccStatus);
248 }
249 return UEC_OK;
250 }
251
ProcessAccessoryStop(int32_t curFunc,int32_t curAccStatus)252 int32_t UsbAccessoryManager::ProcessAccessoryStop(int32_t curFunc, int32_t curAccStatus)
253 {
254 uint32_t curFuncUint = static_cast<uint32_t>(curFunc);
255 if ((curFuncUint & FUN_ACCESSORY) != 0 && accStatus_ == ACC_START) {
256 accStatus_ = ACC_STOP;
257 int32_t ret = SetCurrentFunctions(lastDeviceFunc_);
258 if (ret != UEC_OK) {
259 USB_HILOGW(MODULE_SERVICE, "setFunc %{public}d curAccStatus:%{public}d, set func ret: %{public}d",
260 lastDeviceFunc_, curAccStatus, ret);
261 }
262 curDeviceFunc_ = lastDeviceFunc_;
263 Want want;
264 want.SetAction(CommonEventSupport::COMMON_EVENT_USB_ACCESSORY_DETACHED);
265 CommonEventData data(want);
266 data.SetData(this->accessory.GetJsonString().c_str());
267 CommonEventPublishInfo publishInfo;
268 USB_HILOGI(MODULE_SERVICE, "send accessory detached broadcast device:%{public}s",
269 this->accessory.GetJsonString().c_str());
270 return CommonEventManager::PublishCommonEvent(data, publishInfo);
271 } else {
272 USB_HILOGD(MODULE_SERVICE, "curFunc %{public}u curAccStatus:%{public}d not necessary",
273 curFuncUint, curAccStatus);
274 }
275 return UEC_OK;
276 }
277
ProcessAccessorySend()278 int32_t UsbAccessoryManager::ProcessAccessorySend()
279 {
280 this->accStatus_ = ACC_SEND;
281 std::vector<std::string> accessorys;
282 GetAccessoryInfo(accessorys);
283 this->accessory.SetAccessory(accessorys);
284 std::string extraInfo;
285 if (accessorys.size() > ACCESSORY_INFO_SIZE &&
286 ACCESSORY_EXTRA_INDEX < accessorys.size() && !accessorys[ACCESSORY_EXTRA_INDEX].empty()) {
287 if (base64Map_.empty()) {
288 InitBase64Map();
289 }
290 std::string extraEcode = accessorys[ACCESSORY_EXTRA_INDEX];
291 USB_HILOGE(MODULE_USB_SERVICE, "extraEcode, length: %{public}zu, extraData: %{public}s",
292 extraEcode.length(), extraEcode.c_str());
293 std::vector<uint8_t> extraData = Base64Decode(extraEcode);
294 cJSON *root = cJSON_CreateArray();
295 for (uint8_t value : extraData) {
296 cJSON_AddItemToArray(root, cJSON_CreateNumber(value));
297 }
298 char *pExtraJson = cJSON_PrintUnformatted(root);
299 cJSON_Delete(root);
300 if (!pExtraJson) {
301 USB_HILOGE(MODULE_USB_SERVICE, "print json error.");
302 return UEC_SERVICE_INVALID_VALUE;
303 }
304 extraInfo = pExtraJson;
305 cJSON_free(pExtraJson);
306 pExtraJson = nullptr;
307 }
308
309 USBAccessory extraAcces;
310 extraAcces.SetDescription(extraInfo);
311 Want want;
312 want.SetAction(CommonEventSupport::COMMON_EVENT_USB_ACCESSORY_ATTACHED);
313 CommonEventData data(want);
314 data.SetData(extraAcces.GetJsonString().c_str());
315 CommonEventPublishInfo publishInfo;
316 USB_HILOGI(MODULE_SERVICE, "send accessory attached broadcast device:%{public}s",
317 extraAcces.GetJsonString().c_str());
318 CommonEventManager::PublishCommonEvent(data, publishInfo);
319 return UEC_OK;
320 }
321
HandleEvent(int32_t status,bool delayProcess)322 void UsbAccessoryManager::HandleEvent(int32_t status, bool delayProcess)
323 {
324 #ifdef USB_MANAGER_V2_0
325 if (usbDeviceInterface_ == nullptr) {
326 USB_HILOGE(MODULE_USB_SERVICE, "UsbAccessoryManager::usbDeviceInterface_ is nullptr");
327 return;
328 }
329 #else
330 if (usbdImpl_ == nullptr) {
331 USB_HILOGE(MODULE_USB_SERVICE, "UsbAccessoryManager::usbdImpl_ is nullptr");
332 return;
333 }
334 #endif // USB_MANAGER_V2_0
335 std::lock_guard<std::mutex> guard(mutexHandleEvent_);
336 eventStatus_ = status;
337 if (delayProcess) {
338 UsbTimerWrapper::GetInstance()->Unregister(antiShakeDelayTimerId_);
339 }
340 if ((status == ACT_UPDEVICE || status == ACT_DOWNDEVICE) && delayProcess) {
341 auto task = [&]() {
342 this->HandleEvent(this->eventStatus_, false);
343 return;
344 };
345 antiShakeDelayTimerId_ = UsbTimerWrapper::GetInstance()->Register(task, ANTI_SHAKE_INTERVAL, true);
346 return;
347 }
348 int32_t curAccStatus = ACC_NONE;
349 switch (status) {
350 case ACT_UPDEVICE: {
351 if (accStatus_ == ACC_CONFIGURING) {
352 curAccStatus = ACC_START;
353 }
354 break;
355 }
356 case ACT_ACCESSORYUP: {
357 curAccStatus = ACC_CONFIGURING;
358 break;
359 }
360 case ACT_DOWNDEVICE:
361 case ACT_ACCESSORYDOWN: {
362 curAccStatus = ACC_STOP;
363 break;
364 }
365 case ACT_ACCESSORYSEND: {
366 curAccStatus = ACC_SEND;
367 break;
368 }
369 default:
370 USB_HILOGE(MODULE_USB_SERVICE, "invalid status %{public}d", status);
371 }
372 ProcessHandle(curAccStatus);
373 }
374
ProcessHandle(int32_t curAccStatus)375 void UsbAccessoryManager::ProcessHandle(int32_t curAccStatus)
376 {
377 int32_t ret = UEC_INTERFACE_INVALID_VALUE;
378 if ((curAccStatus == ACC_CONFIGURING || curAccStatus == ACC_START)) {
379 UsbTimerWrapper::GetInstance()->Unregister(accDelayTimerId_);
380 int32_t curFunc = 0;
381 ret = GetCurrentFunctions(curFunc);
382 if (ret != UEC_OK) {
383 USB_HILOGE(MODULE_USB_SERVICE, "GetCurrentFunctions ret: %{public}d", ret);
384 return;
385 }
386 this->curDeviceFunc_ = curFunc;
387 ret = ProcessAccessoryStart(curFunc, curAccStatus);
388 if (ret != UEC_OK) {
389 USB_HILOGE(MODULE_USB_SERVICE, "ProcessAccessoryStart ret: %{public}d", ret);
390 return;
391 }
392 } else if (curAccStatus == ACC_STOP && accStatus_ != ACC_CONFIGURING) {
393 ret = ProcessAccessoryStop(curDeviceFunc_, curAccStatus);
394 if (ret != UEC_OK) {
395 USB_HILOGE(MODULE_USB_SERVICE, "ProcessAccessoryStop ret: %{public}d", ret);
396 return;
397 }
398 } else if (curAccStatus == ACC_SEND) {
399 ProcessAccessorySend();
400 }
401 return;
402 }
403
SerialValueHash(const std::string & serialValue)404 std::string UsbAccessoryManager::SerialValueHash(const std::string&serialValue)
405 {
406 uint64_t timestamp = 0;
407 auto now = std::chrono::system_clock::now();
408 auto duration = now.time_since_epoch();
409 auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();
410 timestamp = static_cast<uint64_t>(millis);
411
412 std::hash<std::string> string_hash;
413 std::hash<uint64_t> int_hash;
414
415 uint32_t hashValue = (string_hash(serialValue) ^ (int_hash(timestamp) << 1));
416
417 std::stringstream ss;
418 ss << std::hex << std::setw(NUM_OF_SERAIL_BIT) << std::setfill('0') << hashValue;
419 return ss.str();
420 }
421
InitBase64Map()422 void UsbAccessoryManager::InitBase64Map()
423 {
424 for (size_t i = 0; i < BASE_64_CHARS.size(); ++i) {
425 base64Map_[BASE_64_CHARS[i]] = static_cast<int>(i);
426 }
427 }
428
IsBase64(unsigned char c)429 bool IsBase64(unsigned char c)
430 {
431 return (isalnum(c) || (c == '+') || (c == '/'));
432 }
433
Base64Decode(const std::string & basicString)434 std::vector<uint8_t> UsbAccessoryManager::Base64Decode(const std::string& basicString)
435 {
436 std::string decoded_data;
437 uint32_t i = 0;
438 int index = 0;
439 int len = static_cast<int>(basicString.size());
440 unsigned char charArray3[INDEX_FORTH];
441 unsigned char charArray4[INDEX_FIFTH];
442
443 while (len-- && (basicString[index] != '=') && IsBase64(basicString[index])) {
444 charArray4[i++] = basicString[index];
445 index++;
446 if (i == sizeof(charArray4)) {
447 for (i = 0; i < sizeof(charArray4); i++) {
448 charArray4[i] = BASE_64_CHARS.find(charArray4[i]);
449 }
450 charArray3[INDEX_FIRST] = (charArray4[INDEX_FIRST] << OFFSET2) +
451 ((charArray4[INDEX_SECOND] & 0x30) >> OFFSET4);
452 charArray3[INDEX_SECOND] = ((charArray4[INDEX_SECOND] & 0xf) << OFFSET4) +
453 ((charArray4[INDEX_THIRD] & 0x3c) >> OFFSET2);
454 charArray3[INDEX_THIRD] = ((charArray4[INDEX_THIRD] & 0x3) << OFFSET6) + charArray4[INDEX_FORTH];
455 for (i = 0; i < sizeof(charArray3); i++) {
456 decoded_data += charArray3[i];
457 }
458 i = 0;
459 }
460 }
461
462 if (i) {
463 uint32_t j = 0;
464 for (j = i; j < sizeof(charArray4); j++) {
465 charArray4[j] = 0;
466 }
467 for (j = 0; j < sizeof(charArray4); j++) {
468 charArray4[j] = BASE_64_CHARS.find(charArray4[j]);
469 }
470 charArray3[INDEX_FIRST] = (charArray4[INDEX_FIRST] << OFFSET2) +
471 ((charArray4[INDEX_SECOND] & 0x30) >> OFFSET4);
472 charArray3[INDEX_SECOND] = ((charArray4[INDEX_SECOND] & 0xf) << OFFSET4) +
473 ((charArray4[INDEX_THIRD] & 0x3c) >> OFFSET2);
474 charArray3[INDEX_THIRD] = ((charArray4[INDEX_THIRD] & 0x3) << OFFSET6) + charArray4[INDEX_FORTH];
475 for (j = 0; j < i - 1; j++) {
476 decoded_data += charArray3[j];
477 }
478 }
479
480 std::vector<uint8_t> ret;
481 for (char c : decoded_data) {
482 ret.push_back(static_cast<uint8_t>(c));
483 }
484
485 return ret;
486 }
487
compare(const std::string & s1,const std::string & s2)488 bool UsbAccessoryManager::compare(const std::string &s1, const std::string &s2)
489 {
490 if (s1.empty())
491 return (s2.empty());
492 return s1 == s2;
493 }
494
GetAccessorySerialNumber(const USBAccessory & access,const std::string & bundleName,std::string & serialValue)495 int32_t UsbAccessoryManager::GetAccessorySerialNumber(const USBAccessory &access,
496 const std::string &bundleName, std::string &serialValue)
497 {
498 USB_HILOGD(MODULE_USB_SERVICE, "%{public}s, bundleName: %{public}s, serial: %{public}s",
499 __func__, bundleName.c_str(), this->accessory.GetSerialNumber().c_str());
500 if (accStatus_ != ACC_START) {
501 USB_HILOGE(MODULE_USB_SERVICE, "invalid status %{public}d", accStatus_);
502 return UEC_SERVICE_ACCESSORY_NOT_MATCH;
503 } else if (compare(this->accessory.GetManufacturer(), access.GetManufacturer()) &&
504 (compare(this->accessory.GetProduct(), access.GetProduct())) &&
505 compare(this->accessory.GetDescription(), access.GetDescription()) &&
506 compare(this->accessory.GetManufacturer(), access.GetManufacturer()) &&
507 compare(this->accessory.GetVersion(), access.GetVersion()) &&
508 (compare(this->accessory.GetSerialNumber(), access.GetSerialNumber()) ||
509 compare(bundleName + this->accessory.GetSerialNumber(), access.GetSerialNumber()))) {
510 serialValue = access.GetManufacturer() + access.GetProduct() + access.GetVersion() + access.GetSerialNumber();
511 return UEC_OK;
512 }
513 return UEC_SERVICE_ACCESSORY_NOT_MATCH;
514 }
515 // LCOV_EXCL_STOP
516
517 } // USB
518 } // OHOS
519