142103316Sopenharmony_ci/* 242103316Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 342103316Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 442103316Sopenharmony_ci * you may not use this file except in compliance with the License. 542103316Sopenharmony_ci * You may obtain a copy of the License at 642103316Sopenharmony_ci * 742103316Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 842103316Sopenharmony_ci * 942103316Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1042103316Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1142103316Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1242103316Sopenharmony_ci * See the License for the specific language governing permissions and 1342103316Sopenharmony_ci * limitations under the License. 1442103316Sopenharmony_ci */ 1542103316Sopenharmony_ci 1642103316Sopenharmony_ci#ifndef USB_COMMON_H 1742103316Sopenharmony_ci#define USB_COMMON_H 1842103316Sopenharmony_ci 1942103316Sopenharmony_ci#include <cstdint> 2042103316Sopenharmony_ci#include <utility> 2142103316Sopenharmony_ci 2242103316Sopenharmony_ci#include "hilog_wrapper.h" 2342103316Sopenharmony_cinamespace OHOS { 2442103316Sopenharmony_cinamespace USB { 2542103316Sopenharmony_ci/** 2642103316Sopenharmony_ci * Invalid usb int value 2742103316Sopenharmony_ci */ 2842103316Sopenharmony_ciconstexpr int32_t INVALID_USB_INT_VALUE = -1; 2942103316Sopenharmony_ci 3042103316Sopenharmony_ci/** 3142103316Sopenharmony_ci * Bitmask used for extracting the USBEndpoint type from it's address 3242103316Sopenharmony_ci */ 3342103316Sopenharmony_ciconstexpr uint32_t USB_ENDPOINT_XFERTYPE_MASK = 0x03; 3442103316Sopenharmony_ci 3542103316Sopenharmony_ci/** 3642103316Sopenharmony_ci * Control USBEndpoint type 3742103316Sopenharmony_ci */ 3842103316Sopenharmony_ciconstexpr int32_t USB_ENDPOINT_XFER_CONTROL = 0; 3942103316Sopenharmony_ci 4042103316Sopenharmony_ci/** 4142103316Sopenharmony_ci * Isochronous USBEndpoint type 4242103316Sopenharmony_ci */ 4342103316Sopenharmony_ciconstexpr int32_t USB_ENDPOINT_XFER_ISOC = 1; 4442103316Sopenharmony_ci 4542103316Sopenharmony_ci/** 4642103316Sopenharmony_ci * Bulk USBEndpoint type 4742103316Sopenharmony_ci */ 4842103316Sopenharmony_ciconstexpr int32_t USB_ENDPOINT_XFER_BULK = 2; 4942103316Sopenharmony_ci 5042103316Sopenharmony_ci/** 5142103316Sopenharmony_ci * Interrupt USBEndpoint type 5242103316Sopenharmony_ci */ 5342103316Sopenharmony_ciconstexpr int32_t USB_ENDPOINT_XFER_INT = 3; 5442103316Sopenharmony_ci 5542103316Sopenharmony_ci/** 5642103316Sopenharmony_ci * Bitmask used for extracting the USBEndpoint number from it's address 5742103316Sopenharmony_ci */ 5842103316Sopenharmony_ciconstexpr uint32_t USB_ENDPOINT_NUMBER_MASK = 0x0f; 5942103316Sopenharmony_ci 6042103316Sopenharmony_ci/** 6142103316Sopenharmony_ci * Bitmask used for extracting the USBEndpoint direction from it's address 6242103316Sopenharmony_ci */ 6342103316Sopenharmony_ciconstexpr uint32_t USB_ENDPOINT_DIR_MASK = 0x80; 6442103316Sopenharmony_ci 6542103316Sopenharmony_ci/** 6642103316Sopenharmony_ci * Used to signify direction of data for USBEndpoint is OUT, host to device 6742103316Sopenharmony_ci */ 6842103316Sopenharmony_ciconstexpr uint32_t USB_ENDPOINT_DIR_OUT = 0; 6942103316Sopenharmony_ci 7042103316Sopenharmony_ci/** 7142103316Sopenharmony_ci * Used to signify direction of data for USBEndpoint is IN, device to host 7242103316Sopenharmony_ci */ 7342103316Sopenharmony_ciconstexpr uint32_t USB_ENDPOINT_DIR_IN = 0x80; 7442103316Sopenharmony_ci 7542103316Sopenharmony_ci/** 7642103316Sopenharmony_ci * Bitmask for self power in the USBConfig 7742103316Sopenharmony_ci */ 7842103316Sopenharmony_ciconstexpr uint32_t USB_CFG_SELF_POWERED = 0x80; 7942103316Sopenharmony_ci 8042103316Sopenharmony_ci/** 8142103316Sopenharmony_ci * Bitmask for remote wakeup in the USBConfig 8242103316Sopenharmony_ci */ 8342103316Sopenharmony_ciconstexpr uint32_t USB_CFG_REMOTE_WAKEUP = 0x20; 8442103316Sopenharmony_ci 8542103316Sopenharmony_ci#define INVALID_STRING_VALUE ("") 8642103316Sopenharmony_ci#define RETURN_IF_WITH_RET(cond, retval) \ 8742103316Sopenharmony_ci if (cond) { \ 8842103316Sopenharmony_ci return (retval); \ 8942103316Sopenharmony_ci } 9042103316Sopenharmony_ci#define RETURN_IF(cond) \ 9142103316Sopenharmony_ci if (cond) { \ 9242103316Sopenharmony_ci return; \ 9342103316Sopenharmony_ci } 9442103316Sopenharmony_ci#define RETURN_IF_WITH_LOG(cond, loginfo) \ 9542103316Sopenharmony_ci do { \ 9642103316Sopenharmony_ci if (cond) { \ 9742103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s " #loginfo " ", __func__); \ 9842103316Sopenharmony_ci return; \ 9942103316Sopenharmony_ci } \ 10042103316Sopenharmony_ci } while (0) 10142103316Sopenharmony_ci 10242103316Sopenharmony_ci#define READ_PARCEL_NO_RET(parcel, type, out) \ 10342103316Sopenharmony_ci do { \ 10442103316Sopenharmony_ci if (!(parcel).Read##type(out)) { \ 10542103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s read " #out " failed", __func__); \ 10642103316Sopenharmony_ci return; \ 10742103316Sopenharmony_ci } \ 10842103316Sopenharmony_ci } while (0) 10942103316Sopenharmony_ci 11042103316Sopenharmony_ci#define WRITE_PARCEL_NO_RET(parcel, type, data) \ 11142103316Sopenharmony_ci do { \ 11242103316Sopenharmony_ci if (!(parcel).Write##type(data)) { \ 11342103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s write " #data " failed", __func__); \ 11442103316Sopenharmony_ci return; \ 11542103316Sopenharmony_ci } \ 11642103316Sopenharmony_ci } while (0) 11742103316Sopenharmony_ci 11842103316Sopenharmony_ci#define WRITE_PARCEL_AND_RETURN_FALSE_WHEN_FAIL(type, parcel, data) \ 11942103316Sopenharmony_ci do { \ 12042103316Sopenharmony_ci if (!(parcel).Write##type(data)) { \ 12142103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s write " #data " failed", __func__); \ 12242103316Sopenharmony_ci return false; \ 12342103316Sopenharmony_ci } \ 12442103316Sopenharmony_ci } while (0) 12542103316Sopenharmony_ci 12642103316Sopenharmony_ci#define READ_PARCEL_WITH_RET(parcel, type, out, retval) \ 12742103316Sopenharmony_ci do { \ 12842103316Sopenharmony_ci if (!(parcel).Read##type(out)) { \ 12942103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s read " #out " failed", __func__); \ 13042103316Sopenharmony_ci return (retval); \ 13142103316Sopenharmony_ci } \ 13242103316Sopenharmony_ci } while (0) 13342103316Sopenharmony_ci 13442103316Sopenharmony_ci#define WRITE_PARCEL_WITH_RET(parcel, type, data, retval) \ 13542103316Sopenharmony_ci do { \ 13642103316Sopenharmony_ci if (!(parcel).Write##type(data)) { \ 13742103316Sopenharmony_ci USB_HILOGE(MODULE_COMMON, "%{public}s write " #data " failed", __func__); \ 13842103316Sopenharmony_ci return (retval); \ 13942103316Sopenharmony_ci } \ 14042103316Sopenharmony_ci } while (0) 14142103316Sopenharmony_ci 14242103316Sopenharmony_citemplate <typename E> 14342103316Sopenharmony_ciconstexpr auto ToUnderlying(E e) noexcept 14442103316Sopenharmony_ci{ 14542103316Sopenharmony_ci return static_cast<std::underlying_type_t<E>>(e); 14642103316Sopenharmony_ci} 14742103316Sopenharmony_ci} // namespace USB 14842103316Sopenharmony_ci} // namespace OHOS 14942103316Sopenharmony_ci 15042103316Sopenharmony_ci#endif // USB_COMMON_H 151