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