summaryrefslogtreecommitdiff
path: root/common/usbx_host_classes/inc/ux_host_class_prolific.h
blob: eb6c9cbe749f53e4ce175860fae845cc5d50a517 (plain)
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
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
/***************************************************************************
 * 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                                                        */
/**                                                                       */
/**   PROLIFIC Class                                                      */
/**                                                                       */
/**************************************************************************/
/**************************************************************************/


/**************************************************************************/
/*                                                                        */
/*  COMPONENT DEFINITION                                   RELEASE        */
/*                                                                        */
/*    ux_host_class_prolific.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 PROLIFIC class.                                                */
/*                                                                        */
/**************************************************************************/

#ifndef UX_HOST_CLASS_PROLIFIC_H
#define UX_HOST_CLASS_PROLIFIC_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_PROLIFIC_ENABLE_ERROR_CHECKING)
#define UX_HOST_CLASS_PROLIFIC_ENABLE_ERROR_CHECKING
#endif


/* Define PROLIFIC Class constants.  */

#define UX_HOST_CLASS_PROLIFIC_DEVICE_INIT_DELAY                (1 * UX_PERIODIC_RATE)
#define UX_HOST_CLASS_PROLIFIC_CLASS_TRANSFER_TIMEOUT           300000
#define UX_HOST_CLASS_PROLIFIC_SETUP_BUFFER_SIZE                16
#define UX_HOST_CLASS_PROLIFIC_DEVICE_PRESENT                   1
#define UX_HOST_CLASS_PROLIFIC_DEVICE_NOT_PRESENT               0
#define UX_HOST_CLASS_PROLIFIC_DEVICE_STATE_OFFSET              8
#define UX_HOST_CLASS_PROLIFIC_DEVICE_STATE_MASK                0x7F
#define UX_HOST_CLASS_PROLIFIC_DEVICE_TYPE_0                    0
#define UX_HOST_CLASS_PROLIFIC_DEVICE_TYPE_1                    1
#define UX_HOST_CLASS_PROLIFIC_DEVICE_TYPE_HX                   2
#define UX_HOST_CLASS_PROLIFIC_VENDOR_READ_REQUEST              1
#define UX_HOST_CLASS_PROLIFIC_VENDOR_WRITE_REQUEST             1

/* Define PROLIFIC Class descriptor subtypes in functional descriptors.  */
#define UX_HOST_CLASS_PROLIFIC_HEADER_DESCRIPTOR                0X00
#define UX_HOST_CLASS_PROLIFIC_CALL_MANAGEMENT_DESCRIPTOR       0X01
#define UX_HOST_CLASS_PROLIFIC_ABSTRACT_CONTROL_MGT_DESCRIPTOR  0X02
#define UX_HOST_CLASS_PROLIFIC_DIRECT_LINE_MGT_DESCRIPTOR       0X03
#define UX_HOST_CLASS_PROLIFIC_TELEPHONE_RINGER_DESCRIPTOR      0X04
#define UX_HOST_CLASS_PROLIFIC_REPORT_CAPABILITY_DESCRIPTOR     0X05
#define UX_HOST_CLASS_PROLIFIC_UNION_DESCRIPTOR                 0X06
#define UX_HOST_CLASS_PROLIFIC_COUNTRY_SELECTION_DESCRIPTOR     0X07
#define UX_HOST_CLASS_PROLIFIC_TELEPHONE_OPERATIONAL_DESCRIPTOR 0X08
#define UX_HOST_CLASS_PROLIFIC_USB_TERMINAL_DESCRIPTOR          0X09

/* Define PROLIFIC Class call management descriptors.  */
#define UX_HOST_CLASS_PROLIFIC_CALL_MANAGEMENT_CAPABILITIES     0x03
#define UX_HOST_CLASS_PROLIFIC_CALL_MANAGEMENT_DCM              0x01
#define UX_HOST_CLASS_PROLIFIC_CALL_MANAGEMENT_DCI              0x02

/* Define PROLIFIC command request values.  */

#define UX_HOST_CLASS_PROLIFIC_REQ_SEND_ENCAPSULATED_COMMAND    0x00
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_ENCAPSULATED_COMMAND     0x01
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_COMM_FEATURE             0x02
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_COMM_FEATURE             0x03
#define UX_HOST_CLASS_PROLIFIC_REQ_CLEAR_COMM_FEATURE           0x04
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_AUX_LINE_STATE           0x10
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_HOOK_STATE               0x11
#define UX_HOST_CLASS_PROLIFIC_REQ_PULSE_SETUP                  0x12
#define UX_HOST_CLASS_PROLIFIC_REQ_SEND_PULSE                   0x13
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_PUSLE_TIME               0x14
#define UX_HOST_CLASS_PROLIFIC_REQ_RING_AUX_JACK                0x15
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_LINE_CODING              0x20
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_LINE_CODING              0x21
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_LINE_STATE               0x22
#define UX_HOST_CLASS_PROLIFIC_REQ_SEND_BREAK                   0x23
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_RINGER_PARMS             0x30
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_RINGER_PARMS             0x31
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_OPERATION_PARMS          0x32
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_OPERATION_PARMS          0x33
#define UX_HOST_CLASS_PROLIFIC_REQ_SET_LINE_PARMS               0x34
#define UX_HOST_CLASS_PROLIFIC_REQ_GET_LINE_PARMS               0x35

/* Define  PROLIFIC line output control values.  */

#define UX_HOST_CLASS_PROLIFIC_CTRL_DTR                         0x01
#define UX_HOST_CLASS_PROLIFIC_CTRL_RTS                         0x02

/* Define  PROLIFIC line input control values.  */

#define UX_HOST_CLASS_PROLIFIC_CTRL_DCD                         0x01
#define UX_HOST_CLASS_PROLIFIC_CTRL_DSR                         0x02
#define UX_HOST_CLASS_PROLIFIC_CTRL_BRK                         0x04
#define UX_HOST_CLASS_PROLIFIC_CTRL_RI                          0x08

#define UX_HOST_CLASS_PROLIFIC_CTRL_FRAMING                     0x10
#define UX_HOST_CLASS_PROLIFIC_CTRL_PARITY                      0x20
#define UX_HOST_CLASS_PROLIFIC_CTRL_OVERRUN                     0x40

#define    UX_HOST_CLASS_PROLIFIC_COMMAND_EEPROM_READ           0x8484
#define    UX_HOST_CLASS_PROLIFIC_COMMAND_EEPROM_WRITE          0x0404
#define    UX_HOST_CLASS_PROLIFIC_COMMAND_EEPROM_ADDRESS        0x8383
#define    UX_HOST_CLASS_PROLIFIC_COMMAND_REG_CONFIGURE         0x0002
#define    UX_HOST_CLASS_PROLIFIC_COMMAND_PIPE1_RESET           0x0008
#define    UX_HOST_CLASS_PROLIFIC_COMMAND_PIPE2_RESET           0x0009

/* Define  PROLIFIC Class packet equivalences.  */

#define UX_HOST_CLASS_PROLIFIC_PACKET_SIZE                      128

/* Define  PROLIFIC default values.  */

#ifndef UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_RATE
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_RATE         19200
#endif

#ifndef UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_STOP_BIT
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_STOP_BIT     0
#endif

#ifndef UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_PARITY
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_PARITY       0
#endif

#ifndef UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_DATA_BIT
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_DATA_BIT     8
#endif

/* Define  PROLIFIC line coding definitions.  */

#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_STOP_BIT_0           0
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_STOP_BIT_15          1
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_STOP_BIT_2           2

#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY_NONE          0
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY_ODD           1
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY_EVEN          2
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY_MARK          3
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY_SPACE         4

#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_LENGTH               7
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_RATE                 0
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_STOP_BIT             4
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_PARITY               5
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DATA_BIT             6

/* Define  PROLIFIC line state definitions.  */

#define UX_HOST_CLASS_PROLIFIC_LINE_STATE_STOP_BIT_0            0
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_STOP_BIT_15          1

/* Define  PROLIFIC IOCTL Functions. */

#define UX_HOST_CLASS_PROLIFIC_IOCTL_SET_LINE_CODING            0
#define UX_HOST_CLASS_PROLIFIC_IOCTL_GET_LINE_CODING            1
#define UX_HOST_CLASS_PROLIFIC_IOCTL_SET_LINE_STATE             2
#define UX_HOST_CLASS_PROLIFIC_IOCTL_SEND_BREAK                 3
#define UX_HOST_CLASS_PROLIFIC_IOCTL_PURGE                      4
#define UX_HOST_CLASS_PROLIFIC_IOCTL_ABORT_IN_PIPE              5
#define UX_HOST_CLASS_PROLIFIC_IOCTL_ABORT_OUT_PIPE             6
#define UX_HOST_CLASS_PROLIFIC_IOCTL_REPORT_DEVICE_STATUS_CHANGE 7
#define UX_HOST_CLASS_PROLIFIC_IOCTL_GET_DEVICE_STATUS          8

/* Define  PROLIFIC Reception States. */

#define UX_HOST_CLASS_PROLIFIC_RECEPTION_STATE_STOPPED          0
#define UX_HOST_CLASS_PROLIFIC_RECEPTION_STATE_STARTED          1
#define UX_HOST_CLASS_PROLIFIC_RECEPTION_STATE_IN_TRANSFER      2


/* Define  PROLIFIC Class instance structure.  */

typedef struct UX_HOST_CLASS_PROLIFIC_STRUCT
{
    struct UX_HOST_CLASS_PROLIFIC_STRUCT
                    *ux_host_class_prolific_next_instance;
    UX_HOST_CLASS   *ux_host_class_prolific_class;
    UX_DEVICE       *ux_host_class_prolific_device;
    UX_ENDPOINT     *ux_host_class_prolific_bulk_in_endpoint;
    UX_ENDPOINT     *ux_host_class_prolific_bulk_out_endpoint;
    UX_ENDPOINT     *ux_host_class_prolific_interrupt_endpoint;
    UX_INTERFACE    *ux_host_class_prolific_interface;
    UINT            ux_host_class_prolific_instance_status;
    UINT            ux_host_class_prolific_state;
    UX_SEMAPHORE    ux_host_class_prolific_semaphore;
    ULONG           ux_host_class_prolific_notification_count;
    ULONG           ux_host_class_prolific_device_state;
    VOID            (*ux_host_class_prolific_device_status_change_callback)(struct UX_HOST_CLASS_PROLIFIC_STRUCT *prolific,
                                                                ULONG  device_state);

    ULONG           ux_host_class_prolific_version;
    UCHAR           ux_host_class_prolific_device_type;
    struct UX_HOST_CLASS_PROLIFIC_RECEPTION_STRUCT
                    *ux_host_class_prolific_reception;

} UX_HOST_CLASS_PROLIFIC;


/* Define  PROLIFIC reception structure. */

typedef struct UX_HOST_CLASS_PROLIFIC_RECEPTION_STRUCT
{

    ULONG            ux_host_class_prolific_reception_state;
    ULONG            ux_host_class_prolific_reception_block_size;
    UCHAR            *ux_host_class_prolific_reception_data_buffer;
    ULONG            ux_host_class_prolific_reception_data_buffer_size;
    UCHAR            *ux_host_class_prolific_reception_data_head;
    UCHAR            *ux_host_class_prolific_reception_data_tail;
    VOID            (*ux_host_class_prolific_reception_callback)(struct UX_HOST_CLASS_PROLIFIC_STRUCT *prolific,
                                                                UINT  status,
                                                                UCHAR *reception_buffer,
                                                                ULONG reception_size);

} UX_HOST_CLASS_PROLIFIC_RECEPTION;

/* Define  PROLIFIC Line Coding IOCTL structure.  */

typedef struct UX_HOST_CLASS_PROLIFIC_LINE_CODING_STRUCT
{

    ULONG            ux_host_class_prolific_line_coding_dter;
    ULONG            ux_host_class_prolific_line_coding_stop_bit;
    ULONG            ux_host_class_prolific_line_coding_parity;
    ULONG            ux_host_class_prolific_line_coding_data_bits;

} UX_HOST_CLASS_PROLIFIC_LINE_CODING;

/* Define  PROLIFIC Line State IOCTL structure.  */

typedef struct UX_HOST_CLASS_PROLIFIC_LINE_STATE_STRUCT
{

    ULONG            ux_host_class_prolific_line_state_rts;
    ULONG            ux_host_class_prolific_line_state_dtr;

} UX_HOST_CLASS_PROLIFIC_LINE_STATE;

/* Define  PROLIFIC Line break IOCTL structure.  */

typedef struct UX_HOST_CLASS_PROLIFIC_LINE_BREAK_STRUCT
{

    ULONG            ux_host_class_prolific_line_break;

} UX_HOST_CLASS_PROLIFIC_LINE_BREAK;


/* Define Prolific Class function prototypes.  */

UINT  _ux_host_class_prolific_activate(UX_HOST_CLASS_COMMAND *command);
UINT  _ux_host_class_prolific_configure(UX_HOST_CLASS_PROLIFIC *prolific);
UINT  _ux_host_class_prolific_deactivate(UX_HOST_CLASS_COMMAND *command);
UINT  _ux_host_class_prolific_endpoints_get(UX_HOST_CLASS_PROLIFIC *prolific);
UINT  _ux_host_class_prolific_entry(UX_HOST_CLASS_COMMAND *command);
UINT  _ux_host_class_prolific_read (UX_HOST_CLASS_PROLIFIC *prolific, UCHAR *data_pointer,
                                  ULONG requested_length, ULONG *actual_length);
UINT  _ux_host_class_prolific_write(UX_HOST_CLASS_PROLIFIC *prolific, UCHAR *data_pointer,
                                  ULONG requested_length, ULONG *actual_length);
UINT  _ux_host_class_prolific_ioctl(UX_HOST_CLASS_PROLIFIC *prolific, ULONG request,
                                  VOID *parameter);
UINT  _ux_host_class_prolific_command(UX_HOST_CLASS_PROLIFIC *prolific, ULONG command,
                                    ULONG value, UCHAR *data_buffer, ULONG data_length);
VOID  _ux_host_class_prolific_transfer_request_completed(UX_TRANSFER *transfer_request);
UINT  _ux_host_class_prolific_reception_stop (UX_HOST_CLASS_PROLIFIC *prolific,
                                    UX_HOST_CLASS_PROLIFIC_RECEPTION *prolific_reception);
UINT  _ux_host_class_prolific_reception_start (UX_HOST_CLASS_PROLIFIC *prolific,
                                    UX_HOST_CLASS_PROLIFIC_RECEPTION *prolific_reception);

VOID  _ux_host_class_prolific_reception_callback (UX_TRANSFER *transfer_request);
UINT  _ux_host_class_prolific_setup(UX_HOST_CLASS_PROLIFIC *prolific);


UINT  _uxe_host_class_prolific_read (UX_HOST_CLASS_PROLIFIC *prolific, UCHAR *data_pointer,
                                  ULONG requested_length, ULONG *actual_length);
UINT  _uxe_host_class_prolific_write(UX_HOST_CLASS_PROLIFIC *prolific, UCHAR *data_pointer,
                                  ULONG requested_length, ULONG *actual_length);
UINT  _uxe_host_class_prolific_ioctl(UX_HOST_CLASS_PROLIFIC *prolific, ULONG request,
                                  VOID *parameter);
UINT  _uxe_host_class_prolific_command(UX_HOST_CLASS_PROLIFIC *prolific, ULONG command,
                                    ULONG value, UCHAR *data_buffer, ULONG data_length);
UINT  _uxe_host_class_prolific_reception_stop (UX_HOST_CLASS_PROLIFIC *prolific,
                                    UX_HOST_CLASS_PROLIFIC_RECEPTION *prolific_reception);
UINT  _uxe_host_class_prolific_reception_start (UX_HOST_CLASS_PROLIFIC *prolific,
                                    UX_HOST_CLASS_PROLIFIC_RECEPTION *prolific_reception);


/* Define Prolific Class API prototypes.  */

#define  ux_host_class_prolific_entry                           _ux_host_class_prolific_entry
#define  ux_host_class_prolific_setup                           _ux_host_class_prolific_setup

#if defined(UX_HOST_CLASS_PROLIFIC_ENABLE_ERROR_CHECKING)

#define  ux_host_class_prolific_read                            _uxe_host_class_prolific_read
#define  ux_host_class_prolific_write                           _uxe_host_class_prolific_write
#define  ux_host_class_prolific_ioctl                           _uxe_host_class_prolific_ioctl
#define  ux_host_class_prolific_command                         _uxe_host_class_prolific_command
#define  ux_host_class_prolific_reception_stop                  _uxe_host_class_prolific_reception_stop
#define  ux_host_class_prolific_reception_start                 _uxe_host_class_prolific_reception_start

#else

#define  ux_host_class_prolific_read                            _ux_host_class_prolific_read
#define  ux_host_class_prolific_write                           _ux_host_class_prolific_write
#define  ux_host_class_prolific_ioctl                           _ux_host_class_prolific_ioctl
#define  ux_host_class_prolific_command                         _ux_host_class_prolific_command
#define  ux_host_class_prolific_reception_stop                  _ux_host_class_prolific_reception_stop
#define  ux_host_class_prolific_reception_start                 _ux_host_class_prolific_reception_start

#endif

/* Determine if a C++ compiler is being used.  If so, complete the standard
   C conditional started above.  */
#ifdef __cplusplus
}
#endif

#endif