1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
|
/***************************************************************************
* Copyright (c) 2024 Microsoft Corporation
* Copyright (c) 2026-present Eclipse ThreadX contributors
*
* This program and the accompanying materials are made available under the
* terms of the MIT License which is available at
* https://opensource.org/licenses/MIT.
*
* SPDX-License-Identifier: MIT
**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/** */
/** USBX Component */
/** */
/** Generic Serial Host module class */
/** */
/**************************************************************************/
/**************************************************************************/
/**************************************************************************/
/* */
/* COMPONENT DEFINITION RELEASE */
/* */
/* ux_host_class_gser.h PORTABLE C */
/* 6.1.8 */
/* AUTHOR */
/* */
/* Chaoqiong Xiao, Microsoft Corporation */
/* */
/* DESCRIPTION */
/* */
/* This file contains all the header and extern functions used by the */
/* USBX Generic Serial Class. */
/* */
/**************************************************************************/
#ifndef UX_HOST_CLASS_GSER_H
#define UX_HOST_CLASS_GSER_H
/* Determine if a C++ compiler is being used. If so, ensure that standard
C is used to process the API information. */
#ifdef __cplusplus
/* Yes, C++ compiler is present. Use standard C. */
extern "C" {
#endif
/* Internal option: enable the basic USBX error checking. This define is typically used
while debugging application. */
#if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_HOST_CLASS_GSER_ENABLE_ERROR_CHECKING)
#define UX_HOST_CLASS_GSER_ENABLE_ERROR_CHECKING
#endif
/* Define Sierra Wireless AR Class constants. */
#define UX_HOST_CLASS_GSER_CLASS_TRANSFER_TIMEOUT 300000
#ifndef UX_HOST_CLASS_GSER_VENDOR_ID
#define UX_HOST_CLASS_GSER_VENDOR_ID 0X05C6
#define UX_HOST_CLASS_GSER_PRODUCT_ID 0X9002
#endif
/* Define serial interfaces equivalences. */
#define UX_HOST_CLASS_GSER_INTERFACE_NUMBER 3
/* Define packet equivalences. */
#define UX_HOST_CLASS_GSER_PACKET_SIZE 128
/* Define Generic AR IOCTL functions. */
#define UX_HOST_CLASS_GSER_REQ_SEND_ENCAPSULATED_COMMAND 0x00
#define UX_HOST_CLASS_GSER_REQ_GET_ENCAPSULATED_COMMAND 0x01
#define UX_HOST_CLASS_GSER_REQ_SET_COMM_FEATURE 0x02
#define UX_HOST_CLASS_GSER_REQ_GET_COMM_FEATURE 0x03
#define UX_HOST_CLASS_GSER_REQ_CLEAR_COMM_FEATURE 0x04
#define UX_HOST_CLASS_GSER_REQ_SET_AUX_LINE_STATE 0x10
#define UX_HOST_CLASS_GSER_REQ_SET_HOOK_STATE 0x11
#define UX_HOST_CLASS_GSER_REQ_PULSE_SETUP 0x12
#define UX_HOST_CLASS_GSER_REQ_SEND_PULSE 0x13
#define UX_HOST_CLASS_GSER_REQ_SET_PUSLE_TIME 0x14
#define UX_HOST_CLASS_GSER_REQ_RING_AUX_JACK 0x15
#define UX_HOST_CLASS_GSER_REQ_SET_LINE_CODING 0x20
#define UX_HOST_CLASS_GSER_REQ_GET_LINE_CODING 0x21
#define UX_HOST_CLASS_GSER_REQ_SET_LINE_STATE 0x22
#define UX_HOST_CLASS_GSER_REQ_SEND_BREAK 0x23
#define UX_HOST_CLASS_GSER_REQ_SET_RINGER_PARMS 0x30
#define UX_HOST_CLASS_GSER_REQ_GET_RINGER_PARMS 0x31
#define UX_HOST_CLASS_GSER_REQ_SET_OPERATION_PARMS 0x32
#define UX_HOST_CLASS_GSER_REQ_GET_OPERATION_PARMS 0x33
#define UX_HOST_CLASS_GSER_REQ_SET_LINE_PARMS 0x34
#define UX_HOST_CLASS_GSER_REQ_GET_LINE_PARMS 0x35
/* Define CDC ACM line output control values. */
#define UX_HOST_CLASS_GSER_CTRL_DTR 0x01
#define UX_HOST_CLASS_GSER_CTRL_RTS 0x02
/* Define CDC ACM line input control values. */
#define UX_HOST_CLASS_GSER_CTRL_DCD 0x01
#define UX_HOST_CLASS_GSER_CTRL_DSR 0x02
#define UX_HOST_CLASS_GSER_CTRL_BRK 0x04
#define UX_HOST_CLASS_GSER_CTRL_RI 0x08
#define UX_HOST_CLASS_GSER_CTRL_FRAMING 0x10
#define UX_HOST_CLASS_GSER_CTRL_PARITY 0x20
#define UX_HOST_CLASS_GSER_CTRL_OVERRUN 0x40
/* Define CDC ACM default values. */
#ifndef UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_RATE
#define UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_RATE 9600
#endif
#ifndef UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_STOP_BIT
#define UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_STOP_BIT 0
#endif
#ifndef UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_PARITY
#define UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_PARITY 0
#endif
#ifndef UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_DATA_BIT
#define UX_HOST_CLASS_GSER_LINE_CODING_DEFAULT_DATA_BIT 8
#endif
/* Define CDC ACM line coding definitions. */
#define UX_HOST_CLASS_GSER_LINE_CODING_STOP_BIT_0 0
#define UX_HOST_CLASS_GSER_LINE_CODING_STOP_BIT_15 1
#define UX_HOST_CLASS_GSER_LINE_CODING_STOP_BIT_2 2
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY_NONE 0
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY_ODD 1
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY_EVEN 2
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY_MARK 3
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY_SPACE 4
#define UX_HOST_CLASS_GSER_LINE_CODING_LENGTH 7
#define UX_HOST_CLASS_GSER_LINE_CODING_RATE 0
#define UX_HOST_CLASS_GSER_LINE_CODING_STOP_BIT 4
#define UX_HOST_CLASS_GSER_LINE_CODING_PARITY 5
#define UX_HOST_CLASS_GSER_LINE_CODING_DATA_BIT 6
/* Define CDC ACM line state definitions. */
#define UX_HOST_CLASS_GSER_LINE_STATE_STOP_BIT_0 0
#define UX_HOST_CLASS_GSER_LINE_CODING_STOP_BIT_15 1
/* Define CDC ACM IOCTL Functions. */
#define UX_HOST_CLASS_GSER_IOCTL_SET_LINE_CODING 0
#define UX_HOST_CLASS_GSER_IOCTL_GET_LINE_CODING 1
#define UX_HOST_CLASS_GSER_IOCTL_SET_LINE_STATE 2
#define UX_HOST_CLASS_GSER_IOCTL_SEND_BREAK 3
#define UX_HOST_CLASS_GSER_IOCTL_ABORT_IN_PIPE 5
#define UX_HOST_CLASS_GSER_IOCTL_ABORT_OUT_PIPE 6
#define UX_HOST_CLASS_GSER_IOCTL_NOTIFICATION_CALLBACK 7
#define UX_HOST_CLASS_GSER_IOCTL_GET_DEVICE_STATUS 8
/* Define Reception States. */
#define UX_HOST_CLASS_GSER_RECEPTION_STATE_STOPPED 0
#define UX_HOST_CLASS_GSER_RECEPTION_STATE_STARTED 1
#define UX_HOST_CLASS_GSER_RECEPTION_STATE_IN_TRANSFER 2
/* Define the interface structures. */
typedef struct UX_HOST_CLASS_GSER_INTERFACE_STRUCT
{
UX_INTERFACE *ux_host_class_gser_interface;
UX_ENDPOINT *ux_host_class_gser_bulk_out_endpoint;
UX_ENDPOINT *ux_host_class_gser_bulk_in_endpoint;
UX_SEMAPHORE ux_host_class_gser_semaphore;
struct UX_HOST_CLASS_GSER_RECEPTION_STRUCT *ux_host_class_gser_reception;
ULONG ux_host_class_gser_notification_count;
} UX_HOST_CLASS_GSER_INTERFACE;
/* Define Generic Serial Class instance structure. */
typedef struct UX_HOST_CLASS_GSER_STRUCT
{
struct UX_HOST_CLASS_GSER_STRUCT *ux_host_class_gser_next_instance;
UX_HOST_CLASS *ux_host_class_gser_class;
UX_DEVICE *ux_host_class_gser_device;
UINT ux_host_class_gser_state;
struct UX_HOST_CLASS_GSER_INTERFACE_STRUCT ux_host_class_gser_interface_array[UX_HOST_CLASS_GSER_INTERFACE_NUMBER];
ULONG ux_host_class_gser_device_state;
VOID (*ux_host_class_gser_device_status_change_callback)(struct UX_HOST_CLASS_GSER_STRUCT *gser,
ULONG notification_type, ULONG notification_value);
} UX_HOST_CLASS_GSER;
/* Define generic serial class reception structure. */
typedef struct UX_HOST_CLASS_GSER_RECEPTION_STRUCT
{
ULONG ux_host_class_gser_reception_interface_index;
ULONG ux_host_class_gser_reception_state;
ULONG ux_host_class_gser_reception_block_size;
UCHAR *ux_host_class_gser_reception_data_buffer;
ULONG ux_host_class_gser_reception_data_buffer_size;
UCHAR *ux_host_class_gser_reception_data_head;
UCHAR *ux_host_class_gser_reception_data_tail;
VOID (*ux_host_class_gser_reception_callback)(struct UX_HOST_CLASS_GSER_STRUCT *gser,
UINT status,
UCHAR *reception_buffer,
ULONG reception_size);
} UX_HOST_CLASS_GSER_RECEPTION;
/* Define GSER Line Coding IOCTL structure. */
typedef struct UX_HOST_CLASS_GSER_LINE_CODING_STRUCT
{
ULONG ux_host_class_gser_line_coding_dter;
ULONG ux_host_class_gser_line_coding_stop_bit;
ULONG ux_host_class_gser_line_coding_parity;
ULONG ux_host_class_gser_line_coding_data_bits;
} UX_HOST_CLASS_GSER_LINE_CODING;
/* Define GSER Line State IOCTL structure. */
typedef struct UX_HOST_CLASS_GSER_LINE_STATE_STRUCT
{
ULONG ux_host_class_gser_line_state_rts;
ULONG ux_host_class_gser_line_state_dtr;
} UX_HOST_CLASS_GSER_LINE_STATE;
/* Define GSER Line break IOCTL structure. */
typedef struct UX_HOST_CLASS_GSER_LINE_BREAK_STRUCT
{
ULONG ux_host_class_gser_line_break;
} UX_HOST_CLASS_GSER_LINE_BREAK;
/* Define GSER Class function prototypes. */
UINT _ux_host_class_gser_activate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_gser_configure(UX_HOST_CLASS_GSER *gser);
UINT _ux_host_class_gser_deactivate(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_gser_endpoints_get(UX_HOST_CLASS_GSER *gser);
UINT _ux_host_class_gser_entry(UX_HOST_CLASS_COMMAND *command);
UINT _ux_host_class_gser_read (UX_HOST_CLASS_GSER *gser, ULONG interface_index,UCHAR *data_pointer,
ULONG requested_length, ULONG *actual_length);
UINT _ux_host_class_gser_write(UX_HOST_CLASS_GSER *gser, ULONG interface_index,UCHAR *data_pointer,
ULONG requested_length, ULONG *actual_length);
UINT _ux_host_class_gser_command(UX_HOST_CLASS_GSER *gser, ULONG interface_index, ULONG command,
ULONG value, UCHAR *data_buffer, ULONG data_length);
UINT _ux_host_class_gser_ioctl(UX_HOST_CLASS_GSER *gser, ULONG interface_index, ULONG ioctl_function,
VOID *parameter);
VOID _ux_host_class_gser_reception_callback (UX_TRANSFER *transfer_request);
UINT _ux_host_class_gser_reception_stop (UX_HOST_CLASS_GSER *gser,
UX_HOST_CLASS_GSER_RECEPTION *gser_reception);
UINT _ux_host_class_gser_reception_start (UX_HOST_CLASS_GSER *gser,
UX_HOST_CLASS_GSER_RECEPTION *gser_reception);
UINT _uxe_host_class_gser_read (UX_HOST_CLASS_GSER *gser, ULONG interface_index,UCHAR *data_pointer,
ULONG requested_length, ULONG *actual_length);
UINT _uxe_host_class_gser_write(UX_HOST_CLASS_GSER *gser, ULONG interface_index,UCHAR *data_pointer,
ULONG requested_length, ULONG *actual_length);
UINT _uxe_host_class_gser_command(UX_HOST_CLASS_GSER *gser, ULONG interface_index, ULONG command,
ULONG value, UCHAR *data_buffer, ULONG data_length);
UINT _uxe_host_class_gser_ioctl(UX_HOST_CLASS_GSER *gser, ULONG interface_index, ULONG ioctl_function,
VOID *parameter);
UINT _uxe_host_class_gser_reception_stop (UX_HOST_CLASS_GSER *gser,
UX_HOST_CLASS_GSER_RECEPTION *gser_reception);
UINT _uxe_host_class_gser_reception_start (UX_HOST_CLASS_GSER *gser,
UX_HOST_CLASS_GSER_RECEPTION *gser_reception);
/* Define GSER Class API prototypes. */
#define ux_host_class_gser_entry _ux_host_class_gser_entry
#if defined(UX_HOST_CLASS_GSER_ENABLE_ERROR_CHECKING)
#define ux_host_class_gser_read _uxe_host_class_gser_read
#define ux_host_class_gser_write _uxe_host_class_gser_write
#define ux_host_class_gser_ioctl _uxe_host_class_gser_ioctl
#define ux_host_class_gser_reception_start _uxe_host_class_gser_reception_start
#define ux_host_class_gser_reception_stop _uxe_host_class_gser_reception_stop
#else
#define ux_host_class_gser_read _ux_host_class_gser_read
#define ux_host_class_gser_write _ux_host_class_gser_write
#define ux_host_class_gser_ioctl _ux_host_class_gser_ioctl
#define ux_host_class_gser_reception_start _ux_host_class_gser_reception_start
#define ux_host_class_gser_reception_stop _ux_host_class_gser_reception_stop
#endif
/* Determine if a C++ compiler is being used. If so, complete the standard
C conditional started above. */
#ifdef __cplusplus
}
#endif
#endif
|