mirror of
https://github.com/azure-rtos/usbx.git
synced 2025-01-14 06:43:05 +08:00
299 lines
16 KiB
C
299 lines
16 KiB
C
/**************************************************************************/
|
|
/* */
|
|
/* Copyright (c) Microsoft Corporation. All rights reserved. */
|
|
/* */
|
|
/* This software is licensed under the Microsoft Software License */
|
|
/* Terms for Microsoft Azure RTOS. Full text of the license can be */
|
|
/* found in the LICENSE file at https://aka.ms/AzureRTOS_EULA */
|
|
/* and in the root directory of this software. */
|
|
/* */
|
|
/**************************************************************************/
|
|
|
|
|
|
/**************************************************************************/
|
|
/**************************************************************************/
|
|
/** */
|
|
/** USBX Component */
|
|
/** */
|
|
/** PROLIFIC Class */
|
|
/** */
|
|
/**************************************************************************/
|
|
/**************************************************************************/
|
|
|
|
|
|
/**************************************************************************/
|
|
/* */
|
|
/* COMPONENT DEFINITION RELEASE */
|
|
/* */
|
|
/* ux_host_class_prolific.h PORTABLE C */
|
|
/* 6.1 */
|
|
/* AUTHOR */
|
|
/* */
|
|
/* Chaoqiong Xiao, Microsoft Corporation */
|
|
/* */
|
|
/* DESCRIPTION */
|
|
/* */
|
|
/* This file contains all the header and extern functions used by the */
|
|
/* USBX PROLIFIC class. */
|
|
/* */
|
|
/* RELEASE HISTORY */
|
|
/* */
|
|
/* DATE NAME DESCRIPTION */
|
|
/* */
|
|
/* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */
|
|
/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */
|
|
/* used UX prefix to refer to */
|
|
/* TX symbols instead of using */
|
|
/* them directly, */
|
|
/* resulting in version 6.1 */
|
|
/* */
|
|
/**************************************************************************/
|
|
|
|
#ifndef UX_HOST_CLASS_PROLIFIC_H
|
|
#define UX_HOST_CLASS_PROLIFIC_H
|
|
|
|
/* 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. */
|
|
|
|
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_RATE 19200
|
|
#define UX_HOST_CLASS_PROLIFIC_LINE_CODING_DEFAULT_DATA_BIT 8
|
|
|
|
/* 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);
|
|
|
|
/* Define Prolific Class API prototypes. */
|
|
|
|
#define ux_host_class_prolific_entry _ux_host_class_prolific_entry
|
|
#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
|
|
#define ux_host_class_prolific_setup _ux_host_class_prolific_setup
|
|
|
|
#endif
|