• 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_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