• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 #ifndef USB_COMMON_H
17 #define USB_COMMON_H
18 
19 #include <cstdint>
20 #include <utility>
21 
22 #include "hilog_wrapper.h"
23 namespace OHOS {
24 namespace USB {
25 /**
26  * Invalid usb int value
27  */
28 constexpr int32_t INVALID_USB_INT_VALUE = -1;
29 
30 /**
31  * Bitmask used for extracting the USBEndpoint type from it's address
32  */
33 constexpr uint32_t USB_ENDPOINT_XFERTYPE_MASK = 0x03;
34 
35 /**
36  * Control USBEndpoint type
37  */
38 constexpr int32_t USB_ENDPOINT_XFER_CONTROL = 0;
39 
40 /**
41  * Isochronous USBEndpoint type
42  */
43 constexpr int32_t USB_ENDPOINT_XFER_ISOC = 1;
44 
45 /**
46  * Bulk USBEndpoint type
47  */
48 constexpr int32_t USB_ENDPOINT_XFER_BULK = 2;
49 
50 /**
51  * Interrupt USBEndpoint type
52  */
53 constexpr int32_t USB_ENDPOINT_XFER_INT = 3;
54 
55 /**
56  * Bitmask used for extracting the USBEndpoint number from it's address
57  */
58 constexpr uint32_t USB_ENDPOINT_NUMBER_MASK = 0x0f;
59 
60 /**
61  * Bitmask used for extracting the USBEndpoint direction from it's address
62  */
63 constexpr uint32_t USB_ENDPOINT_DIR_MASK = 0x80;
64 
65 /**
66  * Used to signify direction of data for USBEndpoint is OUT, host to device
67  */
68 constexpr uint32_t USB_ENDPOINT_DIR_OUT = 0;
69 
70 /**
71  * Used to signify direction of data for USBEndpoint is IN, device to host
72  */
73 constexpr uint32_t USB_ENDPOINT_DIR_IN = 0x80;
74 
75 /**
76  * Bitmask for self power in the USBConfig
77  */
78 constexpr uint32_t USB_CFG_SELF_POWERED = 0x80;
79 
80 /**
81  * Bitmask for remote wakeup in the USBConfig
82  */
83 constexpr uint32_t USB_CFG_REMOTE_WAKEUP = 0x20;
84 
85 #define INVALID_STRING_VALUE ("")
86 #define RETURN_IF_WITH_RET(cond, retval) \
87     if (cond) {                          \
88         return (retval);                 \
89     }
90 #define RETURN_IF(cond) \
91     if (cond) {         \
92         return;         \
93     }
94 #define RETURN_IF_WITH_LOG(cond, loginfo)                                    \
95     do {                                                                     \
96         if (cond) {                                                          \
97             USB_HILOGE(MODULE_COMMON, "%{public}s " #loginfo " ", __func__); \
98             return;                                                          \
99         }                                                                    \
100     } while (0)
101 
102 #define READ_PARCEL_NO_RET(parcel, type, out)                                       \
103     do {                                                                            \
104         if (!(parcel).Read##type(out)) {                                            \
105             USB_HILOGE(MODULE_COMMON, "%{public}s read " #out " failed", __func__); \
106             return;                                                                 \
107         }                                                                           \
108     } while (0)
109 
110 #define WRITE_PARCEL_NO_RET(parcel, type, data)                                       \
111     do {                                                                              \
112         if (!(parcel).Write##type(data)) {                                            \
113             USB_HILOGE(MODULE_COMMON, "%{public}s write " #data " failed", __func__); \
114             return;                                                                   \
115         }                                                                             \
116     } while (0)
117 
118 #define READ_PARCEL_WITH_RET(parcel, type, out, retval)                             \
119     do {                                                                            \
120         if (!(parcel).Read##type(out)) {                                            \
121             USB_HILOGE(MODULE_COMMON, "%{public}s read " #out " failed", __func__); \
122             return (retval);                                                        \
123         }                                                                           \
124     } while (0)
125 
126 #define WRITE_PARCEL_WITH_RET(parcel, type, data, retval)                             \
127     do {                                                                              \
128         if (!(parcel).Write##type(data)) {                                            \
129             USB_HILOGE(MODULE_COMMON, "%{public}s write " #data " failed", __func__); \
130             return (retval);                                                          \
131         }                                                                             \
132     } while (0)
133 
134 template <typename E>
ToUnderlying(E e)135 constexpr auto ToUnderlying(E e) noexcept
136 {
137     return static_cast<std::underlying_type_t<E>>(e);
138 }
139 } // namespace USB
140 } // namespace OHOS
141 
142 #endif // USB_COMMON_H
143