• 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_DDK_REQUEST_H
17 #define USB_DDK_REQUEST_H
18 
19 #include "usb_ddk_device.h"
20 #include "usb_ddk_interface.h"
21 #include "usb_raw_api.h"
22 
23 typedef enum {
24     /* select a configuration for the device */
25     USB_REQUEST_SELECT_CONFIGURATION,
26     /* select an alternate setting for an interface */
27     USB_REQUEST_SELECT_INTERFACE,
28     /* get the device descriptor from a specific USB device/interface/endpoint */
29     USB_REQUEST_GET_DESCRIPTOR,
30     /* set descriptor on a device/interface/endpoint */
31     USB_REQUEST_SET_DESCRIPTOR,
32     /* set a feature on a device/interface/endpoint/other */
33     USB_REQUEST_SET_FEATURE,
34     /* clear a USB-defined feature on a device/interface/endpoint/other */
35     USB_REQUEST_CLEAR_FEATURE,
36     /* get status form a USB device/interface/endpoint/other */
37     USB_REQUEST_GET_STATUS,
38     /* get the current configuration on a USB device */
39     USB_REQUEST_GET_CONFIGURATION = 0x08,
40     /* get the current setting for an interface */
41     USB_REQUEST_GET_INTERFACE,
42 } UsbStandardRequest;
43 
44 typedef enum {
45     USB_REQUEST_TYPE_CONTROL = 0U,
46     USB_REQUEST_TYPE_ISOCHRONOUS = 1U,
47     USB_REQUEST_TYPE_BULK = 2U,
48     USB_REQUEST_TYPE_INTERRUPT = 3U,
49 } UsbRequestType;
50 
51 struct UsbIsoPacketDesc {
52     unsigned int length;
53     unsigned int actualLength;
54     unsigned int status;
55 };
56 
57 struct UsbAdapterUrb {
58     unsigned char type;
59     unsigned char endPoint;
60     int32_t status;
61     unsigned int flags;
62     void *buffer;
63     int32_t bufferLength;
64     int32_t actualLength;
65     int32_t startFrame;
66     int32_t numberOfPackets;
67     int32_t errorCount;
68     unsigned int signr;
69     void *userContext;
70     struct UsbIsoPacketDesc isoFrameDesc[0];
71 };
72 
73 /* Note:The first five fields of the definition must be consistent with the UsbRawRequest structure definition. */
74 struct UsbHostRequest {
75     /* the address of data buffer */
76     unsigned char *buffer;
77     /* the length of data buffer */
78     uint32_t length;
79     /* the actual length of the requested data */
80     int32_t actualLength;
81     /* the status of the request */
82     UsbRequestStatus status;
83     /* private user data */
84     void *userData;
85 
86     /* the following fields are not visible to user */
87     struct HdfSListNode entry;
88     struct DListHead list;
89     struct UsbDeviceHandle *devHandle;
90     UsbRawRequestCallback callback;
91     UsbRequestCallback userCallback;
92     /* the length of data buffer */
93     int32_t bufLen;
94     struct OsalSem sem;
95     unsigned char endPoint;
96     unsigned int timeout;
97     unsigned char requestType;
98     void *bulkUrb;
99     union {
100         void *urbs;
101         void **isoUrbs;
102     };
103     int32_t numUrbs;
104     int32_t numRetired;
105     UsbRequestStatus reqStatus;
106     int32_t isoPacketOffset;
107     struct OsalMutex lock;
108     void *privateObj;
109     int32_t numIsoPackets;
110     /* isopacketdesc ptr */
111     struct UsbIsoPacketDesc isoPacketDesc[0];
112 }__attribute__((aligned(4)));
113 
114 /* Note:The first seven fields of this definition must be consistent with the UsbRawFillRequestData
115   * structure definition.
116   */
117 struct UsbFillRequestData {
118     unsigned char endPoint;
119     unsigned char *buffer;
120     uint32_t length;
121     int32_t numIsoPackets;
122     UsbRawRequestCallback callback;
123     void *userData;
124     unsigned int timeout;
125     UsbRequestCallback userCallback;
126 };
127 
128 #ifndef MIN
MIN(int32_t a,int32_t b)129 static inline int32_t MIN(int32_t a, int32_t b)
130 {
131     return ((a) < (b) ? (a) : (b));
132 }
133 #endif
134 
135 #ifndef MAX
MAX(int32_t a,int32_t b)136 static inline int32_t MAX(int32_t a, int32_t b)
137 {
138     return ((a) > (b) ? (a) : (b));
139 }
140 #endif
141 
142 #endif /* USB_DDK_REQUEST_H */
143