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 #ifndef USB_INTERFACE_TYPE_H 17 #define USB_INTERFACE_TYPE_H 18 #include "usb_common.h" 19 #include "message_parcel.h" 20 21 namespace OHOS { 22 namespace USB { 23 enum InterfaceType { 24 TYPE_INTERFACE, 25 TYPE_STORAGE, 26 TYPE_AUDIO, 27 TYPE_HID, 28 TYPE_PHYSICAL, 29 TYPE_IMAGE, 30 TYPE_PRINTER, 31 TYPE_COMMUNICATION, 32 TYPE_FULL_SPEED_HUB, 33 TYPE_FULL_SPEED_HUB_S, 34 TYPE_FULL_SPEED_HUB_M, 35 TYPE_CDC_DATA, 36 TYPE_SMART_CARD, 37 TYPE_CONTENT_SECURTIY, 38 TYPE_VIDEO, 39 TYPE_PERSONAL_HEALTHCARE, 40 TYPE_AVCONTROL, 41 TYPE_AVV_STREAMING, 42 TYPE_AVA_STREAMING, 43 TYPE_BILLBOARD, 44 TYPE_TYPEC_BRIDGE, 45 TYPE_BDP, 46 TYPE_MCTP_MANA_1, 47 TYPE_MCTP_MANA_2, 48 TYPE_MCTP_HOST_1, 49 TYPE_MCTP_HOST_2, 50 TYPE_I3C, 51 TYPE_DIAGNOSTIC_1, 52 TYPE_DIAGNOSTIC_2, 53 TYPE_DIAGNOSTIC_3, 54 TYPE_DIAGNOSTIC_4, 55 TYPE_DIAGNOSTIC_5, 56 TYPE_DIAGNOSTIC_6, 57 TYPE_DIAGNOSTIC_7, 58 TYPE_DIAGNOSTIC_8, 59 TYPE_DIAGNOSTIC_9, 60 TYPE_DIAGNOSTIC_10, 61 TYPE_DIAGNOSTIC_11, 62 TYPE_DIAGNOSTIC_12, 63 TYPE_DIAGNOSTIC_13, 64 TYPE_DIAGNOSTIC_14, 65 TYPE_WIRLESS_CONTROLLER_1, 66 TYPE_WIRLESS_CONTROLLER_2, 67 TYPE_WIRLESS_CONTROLLER_3, 68 TYPE_WIRLESS_CONTROLLER_4, 69 TYPE_WIRLESS_CONTROLLER_5, 70 TYPE_WIRLESS_CONTROLLER_6, 71 TYPE_WIRLESS_CONTROLLER_7, 72 TYPE_MISCELLANEOUS_1, 73 TYPE_MISCELLANEOUS_2, 74 TYPE_MISCELLANEOUS_3, 75 TYPE_MISCELLANEOUS_4, 76 TYPE_MISCELLANEOUS_5, 77 TYPE_MISCELLANEOUS_6, 78 TYPE_MISCELLANEOUS_7, 79 TYPE_MISCELLANEOUS_8, 80 TYPE_MISCELLANEOUS_9, 81 TYPE_MISCELLANEOUS_10, 82 TYPE_MISCELLANEOUS_11, 83 TYPE_MISCELLANEOUS_12, 84 TYPE_MISCELLANEOUS_13, 85 TYPE_MISCELLANEOUS_14, 86 TYPE_MISCELLANEOUS_15, 87 TYPE_MISCELLANEOUS_16, 88 TYPE_MISCELLANEOUS_17, 89 TYPE_MISCELLANEOUS_18, 90 TYPE_MISCELLANEOUS_19, 91 TYPE_APPLICATION_SPE_1, 92 TYPE_APPLICATION_SPE_2, 93 TYPE_APPLICATION_SPE_3, 94 TYPE_APPLICATION_SPE_4, 95 TYPE_VENDOR_SPECIFIC, 96 }; 97 98 struct UsbDeviceType { 99 int32_t baseClass; 100 int32_t subClass; 101 int32_t protocol; 102 bool isDeviceType; 103 bool operator<(const UsbDeviceType &other) const 104 { 105 if (baseClass != other.baseClass) { 106 return baseClass < other.baseClass; 107 } else if (subClass != other.subClass) { 108 return subClass < other.subClass; 109 } else { 110 return protocol < other.protocol; 111 } 112 } 113 bool operator == (const UsbDeviceType &other) const 114 { 115 return (baseClass == other.baseClass) && (subClass == other.subClass) && (protocol == other.protocol) && 116 (isDeviceType == other.isDeviceType); 117 } UsbDeviceTypeUsbDeviceType118 UsbDeviceType (int32_t deviceBaseClass, int32_t sub, int32_t prot, bool deviceType) 119 : baseClass(deviceBaseClass), subClass(sub), protocol(prot), isDeviceType(deviceType) {}; UsbDeviceTypeUsbDeviceType120 UsbDeviceType (): baseClass(0), subClass(0), protocol(0), isDeviceType(0) {}; 121 bool Marshalling(MessageParcel &parcel) const; 122 static bool Unmarshalling(MessageParcel &parcel, UsbDeviceType &usbDeviceType); 123 bool ReadFromParcel(MessageParcel &parcel); 124 }; 125 126 struct UsbDeviceId { 127 int32_t productId; 128 int32_t vendorId; 129 }; 130 131 const std::unordered_map<InterfaceType, std::vector<int32_t>> d_typeMap = { 132 {InterfaceType::TYPE_INTERFACE, {0, 0, 0}}, 133 {InterfaceType::TYPE_COMMUNICATION, {2, -1, -1}}, 134 {InterfaceType::TYPE_FULL_SPEED_HUB, {9, 0, 0}}, 135 {InterfaceType::TYPE_FULL_SPEED_HUB_S, {9, 0, 1}}, 136 {InterfaceType::TYPE_FULL_SPEED_HUB_M, {9, 0, 2}}, 137 {InterfaceType::TYPE_BILLBOARD, {17, 0, 0}}, 138 {InterfaceType::TYPE_DIAGNOSTIC_1, {220, 1, 1}}, 139 {InterfaceType::TYPE_DIAGNOSTIC_2, {220, 2, 0}}, 140 {InterfaceType::TYPE_DIAGNOSTIC_3, {220, 2, 1}}, 141 {InterfaceType::TYPE_DIAGNOSTIC_4, {220, 3, 0}}, 142 {InterfaceType::TYPE_DIAGNOSTIC_5, {220, 3, 1}}, 143 {InterfaceType::TYPE_DIAGNOSTIC_6, {220, 4, 0}}, 144 {InterfaceType::TYPE_DIAGNOSTIC_7, {220, 4, 1}}, 145 {InterfaceType::TYPE_DIAGNOSTIC_8, {220, 5, 0}}, 146 {InterfaceType::TYPE_DIAGNOSTIC_9, {220, 5, 1}}, 147 {InterfaceType::TYPE_DIAGNOSTIC_10, {220, 6, 0}}, 148 {InterfaceType::TYPE_DIAGNOSTIC_11, {220, 6, 1}}, 149 {InterfaceType::TYPE_DIAGNOSTIC_12, {220, 7, 0}}, 150 {InterfaceType::TYPE_DIAGNOSTIC_13, {220, 7, 1}}, 151 {InterfaceType::TYPE_DIAGNOSTIC_14, {220, 8, 0}}, 152 {InterfaceType::TYPE_MISCELLANEOUS_1, {239, 1, 1}}, 153 {InterfaceType::TYPE_MISCELLANEOUS_2, {239, 1, 2}}, 154 {InterfaceType::TYPE_MISCELLANEOUS_3, {239, 2, 1}}, 155 {InterfaceType::TYPE_MISCELLANEOUS_4, {239, 2, 2}}, 156 {InterfaceType::TYPE_VENDOR_SPECIFIC, {255, -1, -1}} 157 }; 158 159 const std::unordered_map<InterfaceType, std::vector<int32_t>> g_typeMap = { 160 {InterfaceType::TYPE_AUDIO, {1, -1, -1}}, 161 {InterfaceType::TYPE_COMMUNICATION, {2, -1, -1}}, 162 {InterfaceType::TYPE_HID, {3, -1, -1}}, 163 {InterfaceType::TYPE_PHYSICAL, {5, -1, -1}}, 164 {InterfaceType::TYPE_IMAGE, {6, 1, 1}}, 165 {InterfaceType::TYPE_PRINTER, {7, -1, -1}}, 166 {InterfaceType::TYPE_STORAGE, {8, -1, -1}}, 167 {InterfaceType::TYPE_CDC_DATA, {10, -1, -1}}, 168 {InterfaceType::TYPE_SMART_CARD, {11, -1, -1}}, 169 {InterfaceType::TYPE_CONTENT_SECURTIY, {13, 0, 0}}, 170 {InterfaceType::TYPE_VIDEO, {14, -1, -1}}, 171 {InterfaceType::TYPE_PERSONAL_HEALTHCARE, {15, -1, -1}}, 172 {InterfaceType::TYPE_AVCONTROL, {16, 1, 0}}, 173 {InterfaceType::TYPE_AVV_STREAMING, {16, 2, 0}}, 174 {InterfaceType::TYPE_AVA_STREAMING, {16, 3, 0}}, 175 {InterfaceType::TYPE_TYPEC_BRIDGE, {18, 0, 0}}, 176 {InterfaceType::TYPE_BDP, {19, 0, 0}}, 177 {InterfaceType::TYPE_MCTP_MANA_1, {20, 0, 1}}, 178 {InterfaceType::TYPE_MCTP_MANA_2, {20, 0, 2}}, 179 {InterfaceType::TYPE_MCTP_HOST_1, {20, 1, 1}}, 180 {InterfaceType::TYPE_MCTP_HOST_2, {20, 1, 2}}, 181 {InterfaceType::TYPE_I3C, {60, 0, 0}}, 182 {InterfaceType::TYPE_DIAGNOSTIC_1, {220, 1, 1}}, 183 {InterfaceType::TYPE_DIAGNOSTIC_2, {220, 2, 0}}, 184 {InterfaceType::TYPE_DIAGNOSTIC_3, {220, 2, 1}}, 185 {InterfaceType::TYPE_DIAGNOSTIC_4, {220, 3, 0}}, 186 {InterfaceType::TYPE_DIAGNOSTIC_5, {220, 3, 1}}, 187 {InterfaceType::TYPE_DIAGNOSTIC_6, {220, 4, 0}}, 188 {InterfaceType::TYPE_DIAGNOSTIC_7, {220, 4, 1}}, 189 {InterfaceType::TYPE_DIAGNOSTIC_8, {220, 5, 0}}, 190 {InterfaceType::TYPE_DIAGNOSTIC_9, {220, 5, 1}}, 191 {InterfaceType::TYPE_DIAGNOSTIC_10, {220, 6, 0}}, 192 {InterfaceType::TYPE_DIAGNOSTIC_11, {220, 6, 1}}, 193 {InterfaceType::TYPE_DIAGNOSTIC_12, {220, 7, 0}}, 194 {InterfaceType::TYPE_DIAGNOSTIC_13, {220, 7, 1}}, 195 {InterfaceType::TYPE_DIAGNOSTIC_14, {220, 8, 0}}, 196 {InterfaceType::TYPE_WIRLESS_CONTROLLER_1, {224, 1, 1}}, 197 {InterfaceType::TYPE_WIRLESS_CONTROLLER_2, {224, 1, 2}}, 198 {InterfaceType::TYPE_WIRLESS_CONTROLLER_3, {224, 1, 3}}, 199 {InterfaceType::TYPE_WIRLESS_CONTROLLER_4, {224, 1, 4}}, 200 {InterfaceType::TYPE_WIRLESS_CONTROLLER_5, {224, 2, 1}}, 201 {InterfaceType::TYPE_WIRLESS_CONTROLLER_6, {224, 2, 2}}, 202 {InterfaceType::TYPE_WIRLESS_CONTROLLER_7, {224, 2, 3}}, 203 {InterfaceType::TYPE_MISCELLANEOUS_1, {239, 1, 1}}, 204 {InterfaceType::TYPE_MISCELLANEOUS_2, {239, 1, 2}}, 205 {InterfaceType::TYPE_MISCELLANEOUS_5, {239, 3, 1}}, 206 {InterfaceType::TYPE_MISCELLANEOUS_6, {239, 4, 1}}, 207 {InterfaceType::TYPE_MISCELLANEOUS_7, {239, 4, 2}}, 208 {InterfaceType::TYPE_MISCELLANEOUS_8, {239, 4, 3}}, 209 {InterfaceType::TYPE_MISCELLANEOUS_9, {239, 4, 4}}, 210 {InterfaceType::TYPE_MISCELLANEOUS_10, {239, 4, 5}}, 211 {InterfaceType::TYPE_MISCELLANEOUS_11, {239, 4, 6}}, 212 {InterfaceType::TYPE_MISCELLANEOUS_12, {239, 4, 7}}, 213 {InterfaceType::TYPE_MISCELLANEOUS_13, {239, 5, 0}}, 214 {InterfaceType::TYPE_MISCELLANEOUS_14, {239, 5, 1}}, 215 {InterfaceType::TYPE_MISCELLANEOUS_15, {239, 5, 2}}, 216 {InterfaceType::TYPE_MISCELLANEOUS_16, {239, 6, 1}}, 217 {InterfaceType::TYPE_MISCELLANEOUS_17, {239, 6, 2}}, 218 {InterfaceType::TYPE_MISCELLANEOUS_18, {239, 7, 1}}, 219 {InterfaceType::TYPE_MISCELLANEOUS_19, {239, 7, 2}}, 220 {InterfaceType::TYPE_APPLICATION_SPE_1, {254, 1, 1}}, 221 {InterfaceType::TYPE_APPLICATION_SPE_2, {254, 2, 0}}, 222 {InterfaceType::TYPE_APPLICATION_SPE_3, {254, 3, 0}}, 223 {InterfaceType::TYPE_APPLICATION_SPE_4, {254, 3, 1}}, 224 }; 225 } // namespace USB 226 } // namespace OHOS 227 #endif // USB_INTERFACE_TYPE_H 228