diff options
Diffstat (limited to 'common/usbx_device_classes')
152 files changed, 1188 insertions, 585 deletions
diff --git a/common/usbx_device_classes/inc/ux_device_class_audio.h b/common/usbx_device_classes/inc/ux_device_class_audio.h index 2ed7cfb..38acd0d 100644 --- a/common/usbx_device_classes/inc/ux_device_class_audio.h +++ b/common/usbx_device_classes/inc/ux_device_class_audio.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_audio.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,6 +41,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -333,7 +338,7 @@ typedef struct UX_DEVICE_CLASS_AUDIO_STREAM_STRUCT UX_DEVICE_CLASS_AUDIO_STREAM_CALLBACKS ux_device_class_audio_stream_callbacks; UCHAR *ux_device_class_audio_stream_thread_stack; - TX_THREAD ux_device_class_audio_stream_thread; + UX_THREAD ux_device_class_audio_stream_thread; UCHAR *ux_device_class_audio_stream_buffer; ULONG ux_device_class_audio_stream_buffer_size; diff --git a/common/usbx_device_classes/inc/ux_device_class_audio10.h b/common/usbx_device_classes/inc/ux_device_class_audio10.h index 4d3572e..add1f9e 100644 --- a/common/usbx_device_classes/inc/ux_device_class_audio10.h +++ b/common/usbx_device_classes/inc/ux_device_class_audio10.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_audio10.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,6 +41,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ diff --git a/common/usbx_device_classes/inc/ux_device_class_audio20.h b/common/usbx_device_classes/inc/ux_device_class_audio20.h index 6da1b1b..f55df76 100644 --- a/common/usbx_device_classes/inc/ux_device_class_audio20.h +++ b/common/usbx_device_classes/inc/ux_device_class_audio20.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_audio20.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,6 +41,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ diff --git a/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h b/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h index 43a6703..3934fc9 100644 --- a/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h +++ b/common/usbx_device_classes/inc/ux_device_class_cdc_acm.h @@ -24,7 +24,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_cdc_acm.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -39,6 +39,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -137,21 +142,21 @@ typedef struct UX_SLAVE_CLASS_CDC_ACM_STRUCT { UX_SLAVE_INTERFACE *ux_slave_class_cdc_acm_interface; UX_SLAVE_CLASS_CDC_ACM_PARAMETER ux_slave_class_cdc_acm_parameter; - TX_MUTEX ux_slave_class_cdc_acm_endpoint_in_mutex; - TX_MUTEX ux_slave_class_cdc_acm_endpoint_out_mutex; + UX_MUTEX ux_slave_class_cdc_acm_endpoint_in_mutex; + UX_MUTEX ux_slave_class_cdc_acm_endpoint_out_mutex; ULONG ux_slave_class_cdc_acm_baudrate; UCHAR ux_slave_class_cdc_acm_stop_bit; UCHAR ux_slave_class_cdc_acm_parity; UCHAR ux_slave_class_cdc_acm_data_bit; UCHAR ux_slave_class_cdc_acm_data_dtr_state; UCHAR ux_slave_class_cdc_acm_data_rts_state; - TX_THREAD ux_slave_class_cdc_acm_bulkin_thread; - TX_THREAD ux_slave_class_cdc_acm_bulkout_thread; + UX_THREAD ux_slave_class_cdc_acm_bulkin_thread; + UX_THREAD ux_slave_class_cdc_acm_bulkout_thread; UCHAR *ux_slave_class_cdc_acm_bulkin_thread_stack; UCHAR *ux_slave_class_cdc_acm_bulkout_thread_stack; UINT (*ux_device_class_cdc_acm_write_callback)(struct UX_SLAVE_CLASS_CDC_ACM_STRUCT *cdc_acm, UINT status, ULONG length); UINT (*ux_device_class_cdc_acm_read_callback)(struct UX_SLAVE_CLASS_CDC_ACM_STRUCT *cdc_acm, UINT status, UCHAR *data_pointer, ULONG length); - TX_EVENT_FLAGS_GROUP ux_slave_class_cdc_acm_event_flags_group; + UX_EVENT_FLAGS_GROUP ux_slave_class_cdc_acm_event_flags_group; ULONG ux_slave_class_cdc_acm_transmission_status; ULONG ux_slave_class_cdc_acm_scheduled_write; ULONG ux_slave_class_cdc_acm_callback_total_length; diff --git a/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h b/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h index df6dee3..fac6c1c 100644 --- a/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h +++ b/common/usbx_device_classes/inc/ux_device_class_cdc_ecm.h @@ -24,7 +24,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_cdc_ecm.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -39,6 +39,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -269,7 +274,7 @@ typedef struct UX_SLAVE_CLASS_CDC_ECM_STRUCT ULONG ux_slave_class_cdc_ecm_ethernet_multicast_filter; ULONG ux_slave_class_cdc_ecm_ethernet_power_management_filter; ULONG ux_slave_class_cdc_ecm_ethernet_packet_filter; - TX_EVENT_FLAGS_GROUP ux_slave_class_cdc_ecm_event_flags_group; + UX_EVENT_FLAGS_GROUP ux_slave_class_cdc_ecm_event_flags_group; UCHAR ux_slave_class_cdc_ecm_local_node_id[UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH]; UCHAR ux_slave_class_cdc_ecm_remote_node_id[UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH]; NX_IP *ux_slave_class_cdc_ecm_nx_ip; @@ -281,14 +286,14 @@ typedef struct UX_SLAVE_CLASS_CDC_ECM_STRUCT NX_PACKET *ux_slave_class_cdc_ecm_receive_queue; UCHAR *ux_slave_class_cdc_ecm_pool_memory; NX_PACKET_POOL ux_slave_class_cdc_ecm_packet_pool; - TX_THREAD ux_slave_class_cdc_ecm_bulkin_thread; - TX_THREAD ux_slave_class_cdc_ecm_bulkout_thread; - TX_THREAD ux_slave_class_cdc_ecm_interrupt_thread; + UX_THREAD ux_slave_class_cdc_ecm_bulkin_thread; + UX_THREAD ux_slave_class_cdc_ecm_bulkout_thread; + UX_THREAD ux_slave_class_cdc_ecm_interrupt_thread; UCHAR *ux_slave_class_cdc_ecm_bulkin_thread_stack; UCHAR *ux_slave_class_cdc_ecm_bulkout_thread_stack; UCHAR *ux_slave_class_cdc_ecm_interrupt_thread_stack; ULONG ux_slave_class_cdc_ecm_link_state; - TX_MUTEX ux_slave_class_cdc_ecm_mutex; + UX_MUTEX ux_slave_class_cdc_ecm_mutex; VOID *ux_slave_class_cdc_ecm_network_handle; } UX_SLAVE_CLASS_CDC_ECM; diff --git a/common/usbx_device_classes/inc/ux_device_class_dfu.h b/common/usbx_device_classes/inc/ux_device_class_dfu.h index 815aec0..10e3985 100644 --- a/common/usbx_device_classes/inc/ux_device_class_dfu.h +++ b/common/usbx_device_classes/inc/ux_device_class_dfu.h @@ -24,7 +24,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_dfu.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -39,6 +39,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -161,9 +166,9 @@ typedef struct UX_SLAVE_CLASS_DFU_STRUCT UINT (*ux_slave_class_dfu_notify)(VOID *dfu, ULONG notification); ULONG ux_slave_class_dfu_download_block_count; ULONG ux_slave_class_dfu_upload_block_count; - TX_THREAD ux_slave_class_dfu_thread; + UX_THREAD ux_slave_class_dfu_thread; UCHAR *ux_slave_class_dfu_thread_stack; - TX_EVENT_FLAGS_GROUP ux_slave_class_dfu_event_flags_group; + UX_EVENT_FLAGS_GROUP ux_slave_class_dfu_event_flags_group; } UX_SLAVE_CLASS_DFU; diff --git a/common/usbx_device_classes/inc/ux_device_class_hid.h b/common/usbx_device_classes/inc/ux_device_class_hid.h index f1b885b..05e3833 100644 --- a/common/usbx_device_classes/inc/ux_device_class_hid.h +++ b/common/usbx_device_classes/inc/ux_device_class_hid.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_hid.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,6 +41,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -122,7 +127,7 @@ typedef struct UX_SLAVE_CLASS_HID_STRUCT UCHAR *ux_device_class_hid_report_address; ULONG ux_device_class_hid_report_id; ULONG ux_device_class_hid_report_length; - TX_EVENT_FLAGS_GROUP ux_device_class_hid_event_flags_group; + UX_EVENT_FLAGS_GROUP ux_device_class_hid_event_flags_group; ULONG ux_device_class_hid_event_idle_rate; ULONG ux_device_class_hid_event_wait_timeout; UX_SLAVE_CLASS_HID_EVENT *ux_device_class_hid_event_array; diff --git a/common/usbx_device_classes/inc/ux_device_class_pima.h b/common/usbx_device_classes/inc/ux_device_class_pima.h index 5506927..36558ba 100644 --- a/common/usbx_device_classes/inc/ux_device_class_pima.h +++ b/common/usbx_device_classes/inc/ux_device_class_pima.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_pima.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,6 +41,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -785,10 +790,10 @@ typedef struct UX_SLAVE_CLASS_PIMA_STRUCT ULONG ux_device_class_pima_storage_free_space_image; UCHAR *ux_device_class_pima_storage_description; UCHAR *ux_device_class_pima_storage_volume_label; - TX_SEMAPHORE ux_device_class_pima_semaphore; - TX_THREAD ux_device_class_pima_interrupt_thread; + UX_SEMAPHORE ux_device_class_pima_semaphore; + UX_THREAD ux_device_class_pima_interrupt_thread; UCHAR *ux_device_class_pima_interrupt_thread_stack; - TX_SEMAPHORE ux_device_class_pima_interrupt_thread_semaphore; + UX_SEMAPHORE ux_device_class_pima_interrupt_thread_semaphore; UX_SLAVE_CLASS_PIMA_EVENT *ux_device_class_pima_event_array; UX_SLAVE_CLASS_PIMA_EVENT diff --git a/common/usbx_device_classes/inc/ux_device_class_rndis.h b/common/usbx_device_classes/inc/ux_device_class_rndis.h index c934b18..7142cf3 100644 --- a/common/usbx_device_classes/inc/ux_device_class_rndis.h +++ b/common/usbx_device_classes/inc/ux_device_class_rndis.h @@ -24,7 +24,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_rndis.h PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -39,6 +39,11 @@ /* 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 */ /* */ /**************************************************************************/ @@ -479,7 +484,7 @@ typedef struct UX_SLAVE_CLASS_RNDIS_STRUCT { UX_SLAVE_INTERFACE *ux_slave_class_rndis_interface; UX_SLAVE_CLASS_RNDIS_PARAMETER ux_slave_class_rndis_parameter; - TX_SEMAPHORE ux_slave_class_rndis_semaphore; + UX_SEMAPHORE ux_slave_class_rndis_semaphore; UX_SLAVE_ENDPOINT *ux_slave_class_rndis_interrupt_endpoint; UX_SLAVE_ENDPOINT *ux_slave_class_rndis_bulkin_endpoint; UX_SLAVE_ENDPOINT *ux_slave_class_rndis_bulkout_endpoint; @@ -498,7 +503,7 @@ typedef struct UX_SLAVE_CLASS_RNDIS_STRUCT ULONG ux_slave_class_rndis_statistics_rcv_error_alignment; ULONG ux_slave_class_rndis_statistics_xmit_one_collision; ULONG ux_slave_class_rndis_statistics_xmit_more_collisions; - TX_EVENT_FLAGS_GROUP ux_slave_class_rndis_event_flags_group; + UX_EVENT_FLAGS_GROUP ux_slave_class_rndis_event_flags_group; UCHAR ux_slave_class_rndis_local_node_id[UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH]; UCHAR ux_slave_class_rndis_remote_node_id[UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH]; NX_IP *ux_slave_class_rndis_nx_ip; @@ -509,14 +514,14 @@ typedef struct UX_SLAVE_CLASS_RNDIS_STRUCT NX_PACKET *ux_slave_class_rndis_receive_queue; UCHAR *ux_slave_class_rndis_pool_memory; NX_PACKET_POOL ux_slave_class_rndis_packet_pool; - TX_THREAD ux_slave_class_rndis_interrupt_thread; - TX_THREAD ux_slave_class_rndis_bulkin_thread; - TX_THREAD ux_slave_class_rndis_bulkout_thread; + UX_THREAD ux_slave_class_rndis_interrupt_thread; + UX_THREAD ux_slave_class_rndis_bulkin_thread; + UX_THREAD ux_slave_class_rndis_bulkout_thread; UCHAR *ux_slave_class_rndis_interrupt_thread_stack; UCHAR *ux_slave_class_rndis_bulkin_thread_stack; UCHAR *ux_slave_class_rndis_bulkout_thread_stack; ULONG ux_slave_class_rndis_link_state; - TX_MUTEX ux_slave_class_rndis_mutex; + UX_MUTEX ux_slave_class_rndis_mutex; VOID *ux_slave_class_rndis_network_handle; } UX_SLAVE_CLASS_RNDIS; diff --git a/common/usbx_device_classes/inc/ux_device_class_storage.h b/common/usbx_device_classes/inc/ux_device_class_storage.h index c2e7858..e658da8 100644 --- a/common/usbx_device_classes/inc/ux_device_class_storage.h +++ b/common/usbx_device_classes/inc/ux_device_class_storage.h @@ -26,7 +26,7 @@ /* COMPONENT DEFINITION RELEASE */ /* */ /* ux_device_class_storage.h PORTABLE C */ -/* 6.0.2 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -41,9 +41,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ -/* 08-14-2020 Chaoqiong Xiao Modified comment(s), */ -/* added mode related macros, */ -/* resulting in version 6.0.2 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ @@ -425,9 +425,7 @@ typedef struct UX_SLAVE_CLASS_STORAGE_LUN_STRUCT ULONG ux_slave_class_storage_media_read_only_flag; ULONG ux_slave_class_storage_media_id; ULONG ux_slave_class_storage_scsi_tag; - UCHAR ux_slave_class_storage_request_sense_key; - UCHAR ux_slave_class_storage_request_code; - UCHAR ux_slave_class_storage_request_code_qualifier; + ULONG ux_slave_class_storage_request_sense_status; ULONG ux_slave_class_storage_disk_status; ULONG ux_slave_class_storage_last_session_state; UINT (*ux_slave_class_storage_media_read)(VOID *storage, ULONG lun, UCHAR *data_pointer, ULONG number_blocks, ULONG lba, ULONG *media_status); @@ -437,6 +435,14 @@ typedef struct UX_SLAVE_CLASS_STORAGE_LUN_STRUCT UINT (*ux_slave_class_storage_media_notification)(VOID *storage, ULONG lun, ULONG media_id, ULONG notification_class, UCHAR **media_notification, ULONG *media_notification_length); } UX_SLAVE_CLASS_STORAGE_LUN; +/* Sense status value (key at bit0-7, code at bit8-15 and qualifier at bit16-23). */ + +#define UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(key,code,qualifier) (((key) & 0xFF)|(((code) & 0xFF) << 8)|(((qualifier) & 0xFF) << 16)) +#define UX_DEVICE_CLASS_STORAGE_SENSE_KEY(status) ((status) & 0xFF) +#define UX_DEVICE_CLASS_STORAGE_SENSE_CODE(status) (((status) >> 8) & 0xFF) +#define UX_DEVICE_CLASS_STORAGE_SENSE_QUALIFIER(status) (((status) >> 16) & 0xFF) + + /* Define Slave Storage Class structure. */ typedef struct UX_SLAVE_CLASS_STORAGE_STRUCT @@ -444,7 +450,7 @@ typedef struct UX_SLAVE_CLASS_STORAGE_STRUCT UX_SLAVE_INTERFACE *ux_slave_class_storage_interface; ULONG ux_slave_class_storage_number_lun; UX_SLAVE_CLASS_STORAGE_LUN ux_slave_class_storage_lun[UX_MAX_SLAVE_LUN]; - ULONG ux_slave_class_storage_phase_error; + ULONG ux_slave_class_storage_csw_status; VOID (*ux_slave_class_storage_instance_activate)(VOID *); VOID (*ux_slave_class_storage_instance_deactivate)(VOID *); UCHAR *ux_slave_class_storage_vendor_id; @@ -454,6 +460,9 @@ typedef struct UX_SLAVE_CLASS_STORAGE_STRUCT } UX_SLAVE_CLASS_STORAGE; +#define UX_DEVICE_CLASS_STORAGE_CSW_STATUS(p) (((UCHAR*)(p))[0]) +#define UX_DEVICE_CLASS_STORAGE_CSW_SKIP(p) (((UCHAR*)(p))[3]) + /* Define Slave Storage Class Calling Parameter structure */ typedef struct UX_SLAVE_CLASS_STORAGE_PARAMETER_STRUCT diff --git a/common/usbx_device_classes/src/ux_device_class_audio10_control_process.c b/common/usbx_device_classes/src/ux_device_class_audio10_control_process.c index d742db1..0e32334 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio10_control_process.c +++ b/common/usbx_device_classes/src/ux_device_class_audio10_control_process.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio10_control_process PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +73,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio10_control_process(UX_DEVICE_CLASS_AUDIO *audio, diff --git a/common/usbx_device_classes/src/ux_device_class_audio20_control_process.c b/common/usbx_device_classes/src/ux_device_class_audio20_control_process.c index 9474f87..a5b92f4 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio20_control_process.c +++ b/common/usbx_device_classes/src/ux_device_class_audio20_control_process.c @@ -34,8 +34,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_audio_control_request PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_audio20_control_process PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -74,6 +74,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio20_control_process(UX_DEVICE_CLASS_AUDIO *audio, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_activate.c b/common/usbx_device_classes/src/ux_device_class_audio_activate.c index 24e1ca1..9ef3669 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_change.c b/common/usbx_device_classes/src/ux_device_class_audio_change.c index 41051c9..827ee2a 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_change.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_change.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_change PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_change(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_control_request.c b/common/usbx_device_classes/src/ux_device_class_audio_control_request.c index da96385..7ee5bb9 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_control_request.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_control_request(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_deactivate.c b/common/usbx_device_classes/src/ux_device_class_audio_deactivate.c index 6e1eaf7..8c6460b 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_entry.c b/common/usbx_device_classes/src/ux_device_class_audio_entry.c index ccbd65d..39cd908 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_audio_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_audio_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_frame_write.c b/common/usbx_device_classes/src/ux_device_class_audio_frame_write.c index 8042209..1840670 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_frame_write.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_frame_write.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_frame_write PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_frame_write(UX_DEVICE_CLASS_AUDIO_STREAM *stream, UCHAR *frame, ULONG length) @@ -116,7 +120,7 @@ ULONG frame_buffer_size; next_frame_buffer = stream -> ux_device_class_audio_stream_buffer; /* Copy frame. */ - _ux_utility_memory_copy(stream -> ux_device_class_audio_stream_access_pos -> ux_device_class_audio_frame_data, frame, length); + _ux_utility_memory_copy(stream -> ux_device_class_audio_stream_access_pos -> ux_device_class_audio_frame_data, frame, length); /* Use case of memcpy is verified. */ stream -> ux_device_class_audio_stream_access_pos -> ux_device_class_audio_frame_length = length; /* Move frame position. */ diff --git a/common/usbx_device_classes/src/ux_device_class_audio_initialize.c b/common/usbx_device_classes/src/ux_device_class_audio_initialize.c index a085e28..904fb6a 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_initialize.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -178,7 +184,7 @@ ULONG i; stream_parameter -> ux_device_class_audio_stream_parameter_thread_entry, (ULONG)(ALIGN_TYPE)stream, (VOID *) stream -> ux_device_class_audio_stream_thread_stack, memory_size, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check for successful allocation. */ if (status != UX_SUCCESS) @@ -189,7 +195,7 @@ ULONG i; /* Save callbacks. */ _ux_utility_memory_copy(&stream -> ux_device_class_audio_stream_callbacks, &stream_parameter -> ux_device_class_audio_stream_parameter_callbacks, - sizeof(UX_DEVICE_CLASS_AUDIO_STREAM_CALLBACKS)); + sizeof(UX_DEVICE_CLASS_AUDIO_STREAM_CALLBACKS)); /* Use case of memcpy is verified. */ /* Save audio instance. */ stream -> ux_device_class_audio_stream_audio = audio; @@ -211,7 +217,7 @@ ULONG i; /* Save callbacks. */ _ux_utility_memory_copy(&audio -> ux_device_class_audio_callbacks, &audio_parameter -> ux_device_class_audio_parameter_callbacks, - sizeof(UX_DEVICE_CLASS_AUDIO_CALLBACKS)); + sizeof(UX_DEVICE_CLASS_AUDIO_CALLBACKS)); /* Use case of memcpy is verified. */ /* Return completion status. */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_audio_ioctl.c b/common/usbx_device_classes/src/ux_device_class_audio_ioctl.c index 99797de..d8bee50 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_ioctl.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_ioctl.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_ioctl PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_ioctl(UX_DEVICE_CLASS_AUDIO *audio, ULONG ioctl_function, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_read_frame_free.c b/common/usbx_device_classes/src/ux_device_class_audio_read_frame_free.c index b03a0fd..b2430b5 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_read_frame_free.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_read_frame_free.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_read_frame_free PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -64,6 +64,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_read_frame_free(UX_DEVICE_CLASS_AUDIO_STREAM *stream) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_read_frame_get.c b/common/usbx_device_classes/src/ux_device_class_audio_read_frame_get.c index d5ed96f..3cfd71a 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_read_frame_get.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_read_frame_get.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_read_frame_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_read_frame_get(UX_DEVICE_CLASS_AUDIO_STREAM *stream, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c index 7f668d4..b48a0db 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_read_thread_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_audio_read_thread PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_audio_read_thread_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_audio_read_thread_entry(ULONG audio_stream) @@ -137,7 +141,7 @@ ULONG actual_length; stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_pos = 0; _ux_utility_memory_copy(stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data, transfer -> ux_slave_transfer_request_data_pointer, - actual_length); + actual_length); /* Use case of memcpy is verified. */ /* For simple, do not advance the transfer position if there is overflow. */ next_pos = (UCHAR *)stream -> ux_device_class_audio_stream_transfer_pos; diff --git a/common/usbx_device_classes/src/ux_device_class_audio_reception_start.c b/common/usbx_device_classes/src/ux_device_class_audio_reception_start.c index 6a471fe..6be79e5 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_reception_start.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_reception_start.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_reception_start PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_reception_start(UX_DEVICE_CLASS_AUDIO_STREAM *stream) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_sample_read16.c b/common/usbx_device_classes/src/ux_device_class_audio_sample_read16.c index f218054..04dbd26 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_sample_read16.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_sample_read16.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_sample_read16 PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_sample_read16(UX_DEVICE_CLASS_AUDIO_STREAM *stream, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_sample_read24.c b/common/usbx_device_classes/src/ux_device_class_audio_sample_read24.c index 1ce43fd..cd53dd9 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_sample_read24.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_sample_read24.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_sample_read24 PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_sample_read24(UX_DEVICE_CLASS_AUDIO_STREAM *stream, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_sample_read32.c b/common/usbx_device_classes/src/ux_device_class_audio_sample_read32.c index e0ecc6d..0e53daa 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_sample_read32.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_sample_read32.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_sample_read32 PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_sample_read32(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG *buffer) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_sample_read8.c b/common/usbx_device_classes/src/ux_device_class_audio_sample_read8.c index 580d28c..2eab8e3 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_sample_read8.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_sample_read8.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_sample_read8 PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_sample_read8(UX_DEVICE_CLASS_AUDIO_STREAM *stream, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_stream_get.c b/common/usbx_device_classes/src/ux_device_class_audio_stream_get.c index 4072478..06bf94f 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_stream_get.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_stream_get.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_stream_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_stream_get(UX_DEVICE_CLASS_AUDIO *audio, diff --git a/common/usbx_device_classes/src/ux_device_class_audio_transmission_start.c b/common/usbx_device_classes/src/ux_device_class_audio_transmission_start.c index 31d8480..7b52f6b 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_transmission_start.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_transmission_start.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_transmission_start PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_transmission_start(UX_DEVICE_CLASS_AUDIO_STREAM *stream) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c b/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c index 28886dd..1cac54e 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_unitialize.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_uninitialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_uninitialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_write_frame_commit.c b/common/usbx_device_classes/src/ux_device_class_audio_write_frame_commit.c index f8efba5..655bd61 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_write_frame_commit.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_write_frame_commit.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_write_frame_commit PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_write_frame_commit(UX_DEVICE_CLASS_AUDIO_STREAM *stream, ULONG length) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_write_frame_get.c b/common/usbx_device_classes/src/ux_device_class_audio_write_frame_get.c index 5ad7945..ca95236 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_write_frame_get.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_write_frame_get.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_audio_write_frame_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_audio_write_frame_get(UX_DEVICE_CLASS_AUDIO_STREAM *stream, UCHAR **frame, ULONG *length) diff --git a/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c b/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c index a246cf1..7b204d6 100644 --- a/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_audio_write_thread_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_audio_write_thread PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_audio_write_thread_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_audio_write_thread_entry(ULONG audio_stream) @@ -110,7 +114,7 @@ ULONG actual_length; transfer_length = stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_length; if (transfer_length) _ux_utility_memory_copy(transfer -> ux_slave_transfer_request_data_pointer, - stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data, transfer_length); + stream -> ux_device_class_audio_stream_transfer_pos -> ux_device_class_audio_frame_data, transfer_length); /* Use case of memcpy is verified. */ /* Issue transfer request, thread blocked until transfer done. */ status = _ux_device_stack_transfer_request(transfer, transfer_length, transfer_length); diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_activate.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_activate.c index 58c5f4b..50791fd 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c index 9d0e4bc..b72f9be 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkin_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_bulkin_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_cdc_acm_bulkin_thread(ULONG cdc_acm_class) @@ -116,7 +122,7 @@ ULONG sent_length; /* Wait until we have a event sent by the application. */ status = _ux_utility_event_flags_get(&cdc_acm -> ux_slave_class_cdc_acm_event_flags_group, UX_DEVICE_CLASS_CDC_ACM_WRITE_EVENT, - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* Check the completion code. */ if (status == UX_SUCCESS) @@ -158,7 +164,7 @@ ULONG sent_length; /* Copy the payload locally. */ _ux_utility_memory_copy (transfer_request -> ux_slave_transfer_request_data_pointer, cdc_acm -> ux_slave_class_cdc_acm_callback_current_data_pointer, - transfer_length); + transfer_length); /* Use case of memcpy is verified. */ /* Send the acm payload to the host. */ status = _ux_device_stack_transfer_request(transfer_request, transfer_length, transfer_length); diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c index 5ca343f..4003f54 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_bulkout_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_bulkout_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_cdc_acm_bulkout_thread(ULONG cdc_acm_class) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_control_request.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_control_request.c index 8ae6921..5fd1d1c 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_control_request.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_control_request(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_deactivate.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_deactivate.c index dc132e1..eeafcb6 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_entry.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_entry.c index 1cf3e63..2e4f3a1 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_cdc_acm_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_cdc_acm_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c index e858c2c..ba7c9da 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_initialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c index 3aacab0..c1488be 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_ioctl.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_ioctl PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_ioctl(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, ULONG ioctl_function, @@ -286,7 +291,7 @@ UX_SLAVE_TRANSFER *transfer_request; _ux_device_class_cdc_acm_bulkin_thread, (ULONG) (ALIGN_TYPE) cdc_acm, (VOID *) cdc_acm -> ux_slave_class_cdc_acm_bulkin_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_AUTO_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_AUTO_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) @@ -311,7 +316,7 @@ UX_SLAVE_TRANSFER *transfer_request; _ux_device_class_cdc_acm_bulkout_thread, (ULONG) (ALIGN_TYPE) cdc_acm, (VOID *) cdc_acm -> ux_slave_class_cdc_acm_bulkout_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_AUTO_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_AUTO_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c index 2994e36..56caacd 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_read.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_read PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_read(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer, @@ -159,7 +163,7 @@ ULONG local_requested_length; /* We need to copy the buffer locally. */ _ux_utility_memory_copy(buffer, transfer_request -> ux_slave_transfer_request_data_pointer, - transfer_request -> ux_slave_transfer_request_actual_length); + transfer_request -> ux_slave_transfer_request_actual_length); /* Use case of memcpy is verified. */ /* Next buffer address. */ buffer += transfer_request -> ux_slave_transfer_request_actual_length; diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c index e73e162..fc7742c 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_unitialize.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_uninitialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_uninitialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c index 0014a11..461855b 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_write PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_write(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer, @@ -169,7 +173,7 @@ UINT status = 0; /* On a out, we copy the buffer to the caller. Not very efficient but it makes the API easier. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - buffer, local_requested_length); + buffer, local_requested_length); /* Use case of memcpy is verified. */ /* Send the request to the device controller. */ status = _ux_device_stack_transfer_request(transfer_request, local_requested_length, local_requested_length); diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c index 15d4824..3aba3d2 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_acm_write_with_callback.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_acm_write_with_callback PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_acm_write_with_callback(UX_SLAVE_CLASS_CDC_ACM *cdc_acm, UCHAR *buffer, @@ -123,7 +128,7 @@ UINT status; cdc_acm -> ux_slave_class_cdc_acm_scheduled_write = UX_TRUE; /* Invoke the bulkin thread by sending a flag . */ - status = _ux_utility_event_flags_set(&cdc_acm -> ux_slave_class_cdc_acm_event_flags_group, UX_DEVICE_CLASS_CDC_ACM_WRITE_EVENT, TX_OR); + status = _ux_utility_event_flags_set(&cdc_acm -> ux_slave_class_cdc_acm_event_flags_group, UX_DEVICE_CLASS_CDC_ACM_WRITE_EVENT, UX_OR); /* Simply return the last function result. When we leave this function, the deferred writing has been scheduled. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c index eca34ed..1ccac6e 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_activate(UX_SLAVE_CLASS_COMMAND *command) @@ -114,7 +120,7 @@ ULONG physical_address_lsw; /* Reset the endpoint buffers. */ _ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_interrupt_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ /* Resume the interrupt endpoint threads. */ _ux_utility_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_interrupt_thread); @@ -192,13 +198,13 @@ ULONG physical_address_lsw; cdc_ecm -> ux_slave_class_cdc_ecm_link_state = UX_DEVICE_CLASS_CDC_ECM_LINK_STATE_UP; /* Wake up the Interrupt thread and send a network notification to the host. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, UX_OR); /* Reset the endpoint buffers. */ _ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ _ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ /* Resume the endpoint threads. */ _ux_utility_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_thread); diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c index d1ed308..107ad53 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkin_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_bulkin_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_cdc_ecm_bulkin_thread(ULONG cdc_ecm_class) @@ -105,7 +111,7 @@ ULONG transfer_length; or until there has been a change in the device state (i.e. disconnection). */ _ux_utility_event_flags_get(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, (UX_DEVICE_CLASS_CDC_ECM_NEW_BULKIN_EVENT | UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT), - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* Check the completion code and the actual flags returned. */ if ((actual_flags & UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT) == 0) @@ -142,7 +148,7 @@ ULONG transfer_length; { /* Copy the packet in the transfer descriptor buffer. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, packet_header, current_packet -> nx_packet_length); + _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, packet_header, current_packet -> nx_packet_length); /* Use case of memcpy is verified. */ /* Calculate the transfer length. */ transfer_length = current_packet -> nx_packet_length; diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c index 958e7aa..3a70402 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_bulkout_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_bulkout_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* prefixed UX to MS_TO_TICK, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_cdc_ecm_bulkout_thread(ULONG cdc_ecm_class) @@ -102,7 +107,7 @@ ULONG ip_given_length; /* We can accept new reception. Get a NX Packet */ status = nx_packet_allocate(&cdc_ecm -> ux_slave_class_cdc_ecm_packet_pool, &packet, - NX_RECEIVE_PACKET, MS_TO_TICK(UX_DEVICE_CLASS_CDC_ECM_PACKET_POOL_WAIT)); + NX_RECEIVE_PACKET, UX_MS_TO_TICK(UX_DEVICE_CLASS_CDC_ECM_PACKET_POOL_WAIT)); if (status == NX_SUCCESS) { @@ -140,7 +145,7 @@ ULONG ip_given_length; packet -> nx_packet_append_ptr = packet -> nx_packet_prepend_ptr + transfer_request -> ux_slave_transfer_request_actual_length; /* Copy the received packet in the IP packet data area. */ - _ux_utility_memory_copy(packet -> nx_packet_prepend_ptr, transfer_request -> ux_slave_transfer_request_data_pointer, packet -> nx_packet_length); + _ux_utility_memory_copy(packet -> nx_packet_prepend_ptr, transfer_request -> ux_slave_transfer_request_data_pointer, packet -> nx_packet_length); /* Use case of memcpy is verified. */ /* Calculate the accurate packet length from ip header. */ if((*(packet -> nx_packet_prepend_ptr + 12) == 0x08) && diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c index 4306003..a8f59bb 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_change.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_change PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_change(UX_SLAVE_CLASS_COMMAND *command) @@ -139,16 +145,16 @@ UX_SLAVE_ENDPOINT *endpoint; /* Reset the endpoint buffers. */ _ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ _ux_utility_memory_set(cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ /* Resume the endpoint threads. */ _ux_utility_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_thread); _ux_utility_thread_resume(&cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_thread); /* Wake up the Interrupt thread and send a network notification to the host. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, UX_OR); /* If there is an activate function call it. */ if (cdc_ecm -> ux_slave_class_cdc_ecm_parameter.ux_slave_class_cdc_ecm_instance_activate != UX_NULL) @@ -173,10 +179,10 @@ UX_SLAVE_ENDPOINT *endpoint; /* Notify the thread waiting for network notification events. In this case, the event is that the link state has been switched to down. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, UX_OR); /* Wake up the bulk in thread so that it can clean up the xmit queue. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT, UX_OR); /* If there is a deactivate function call it. */ if (cdc_ecm -> ux_slave_class_cdc_ecm_parameter.ux_slave_class_cdc_ecm_instance_deactivate != UX_NULL) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_control_request.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_control_request.c index f4b4ce2..a42445b 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_control_request.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -64,6 +64,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_control_request(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_deactivate.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_deactivate.c index 30d5319..7f2a5f7 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_deactivate(UX_SLAVE_CLASS_COMMAND *command) @@ -115,7 +120,7 @@ UX_SLAVE_CLASS *class; _ux_device_stack_transfer_all_request_abort(cdc_ecm -> ux_slave_class_cdc_ecm_interrupt_endpoint, UX_TRANSFER_BUS_RESET); /* Wake up the bulk in thread so it will release the NetX resources used and suspend. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_DEVICE_STATE_CHANGE_EVENT, UX_OR); /* If there is a deactivate function call it. */ if (cdc_ecm -> ux_slave_class_cdc_ecm_parameter.ux_slave_class_cdc_ecm_instance_deactivate != UX_NULL) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_entry.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_entry.c index 802aaaa..1242155 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_cdc_ecm_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_cdc_ecm_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c index b446066..af9ed7d 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_initialize.c @@ -34,7 +34,7 @@ UX_DEVICE_CLASS_CDC_ECM_NX_ETHERNET_POOL_ALLOCSIZE_ASSERT /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +73,12 @@ UX_DEVICE_CLASS_CDC_ECM_NX_ETHERNET_POOL_ALLOCSIZE_ASSERT /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -164,7 +170,7 @@ UINT status; _ux_device_class_cdc_ecm_interrupt_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) cdc_ecm -> ux_slave_class_cdc_ecm_interrupt_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); if (status != UX_SUCCESS) status = (UX_THREAD_ERROR); } @@ -182,7 +188,7 @@ UINT status; _ux_device_class_cdc_ecm_bulkout_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) cdc_ecm -> ux_slave_class_cdc_ecm_bulkout_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); if (status != UX_SUCCESS) status = (UX_THREAD_ERROR); else @@ -197,7 +203,7 @@ UINT status; _ux_device_class_cdc_ecm_bulkin_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) cdc_ecm -> ux_slave_class_cdc_ecm_bulkin_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); if (status != UX_SUCCESS) status = (UX_THREAD_ERROR); else @@ -224,14 +230,14 @@ UINT status; /* Copy the local node ID. */ _ux_utility_memory_copy(cdc_ecm -> ux_slave_class_cdc_ecm_local_node_id, cdc_ecm_parameter -> ux_slave_class_cdc_ecm_parameter_local_node_id, - UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH); + UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH); /* Use case of memcpy is verified. */ /* Copy the remote node ID. */ _ux_utility_memory_copy(cdc_ecm -> ux_slave_class_cdc_ecm_remote_node_id, cdc_ecm_parameter -> ux_slave_class_cdc_ecm_parameter_remote_node_id, - UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH); + UX_DEVICE_CLASS_CDC_ECM_NODE_ID_LENGTH); /* Use case of memcpy is verified. */ /* Store the rest of the parameters as they are in the local instance. */ - _ux_utility_memory_copy(&cdc_ecm -> ux_slave_class_cdc_ecm_parameter, cdc_ecm_parameter, sizeof (UX_SLAVE_CLASS_CDC_ECM_PARAMETER)); + _ux_utility_memory_copy(&cdc_ecm -> ux_slave_class_cdc_ecm_parameter, cdc_ecm_parameter, sizeof (UX_SLAVE_CLASS_CDC_ECM_PARAMETER)); /* Use case of memcpy is verified. */ return(UX_SUCCESS); } diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_interrupt_thread.c index 8ca7bb8..2d80492 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_interrupt_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_interrupt_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_interrupt_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,11 @@ /* 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 */ /* */ /**************************************************************************/ VOID _ux_device_class_cdc_ecm_interrupt_thread(ULONG cdc_ecm_class) @@ -106,7 +111,7 @@ UCHAR *notification_buffer; on the interrupt pipe frequency or a change in the idle state forces us to send an empty report. */ _ux_utility_event_flags_get(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NETWORK_NOTIFICATION_EVENT, - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* Build the Network Notification response. */ notification_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c index 217b92b..a7e8b45 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_uninitialize.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_uninitialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_uninitialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_write.c b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_write.c index 4e2293a..c9bca45 100644 --- a/common/usbx_device_classes/src/ux_device_class_cdc_ecm_write.c +++ b/common/usbx_device_classes/src/ux_device_class_cdc_ecm_write.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_cdc_ecm_write PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_cdc_ecm_write(VOID *cdc_ecm_class, NX_PACKET *packet) @@ -107,7 +112,7 @@ UX_SLAVE_CLASS_CDC_ECM *cdc_ecm; _ux_utility_mutex_off(&cdc_ecm -> ux_slave_class_cdc_ecm_mutex); /* Set an event to wake up the bulkin thread. */ - _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_BULKIN_EVENT, TX_OR); + _ux_utility_event_flags_set(&cdc_ecm -> ux_slave_class_cdc_ecm_event_flags_group, UX_DEVICE_CLASS_CDC_ECM_NEW_BULKIN_EVENT, UX_OR); /* Packet successfully added. Return success. */ status = UX_SUCCESS; diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_activate.c b/common/usbx_device_classes/src/ux_device_class_dfu_activate.c index 1ac1c50..259a6a4 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_dfu_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_dfu_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_control_request.c b/common/usbx_device_classes/src/ux_device_class_dfu_control_request.c index ff5b8db..ebf023b 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_control_request.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_dfu_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_dfu_control_request(UX_SLAVE_CLASS_COMMAND *command) @@ -120,14 +125,14 @@ ULONG media_status; { /* Wake up the DFU thread and send a detach request.. */ - _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_DISCONNECT, TX_OR); + _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_DISCONNECT, UX_OR); } else { /* We expect the host to issue a reset. Arm a timer in the DFU thread. */ - _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_WAIT_RESET, TX_OR); + _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_WAIT_RESET, UX_OR); } @@ -541,7 +546,7 @@ ULONG media_status; { /* Wake up the DFU thread and send a detach request.. */ - _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_DISCONNECT, TX_OR); + _ux_utility_event_flags_set(&dfu -> ux_slave_class_dfu_event_flags_group, UX_DEVICE_CLASS_DFU_THREAD_EVENT_DISCONNECT, UX_OR); } diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_deactivate.c b/common/usbx_device_classes/src/ux_device_class_dfu_deactivate.c index f43f0a1..96132e2 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_dfu_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -64,6 +64,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_dfu_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_entry.c b/common/usbx_device_classes/src/ux_device_class_dfu_entry.c index 9e76da3..2dd1333 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_dfu_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_dfu_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_dfu_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c b/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c index f65148f..165fdf4 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_initialize.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_dfu_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_dfu_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -183,7 +188,7 @@ ULONG descriptor_length; _ux_device_class_dfu_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) dfu -> ux_slave_class_dfu_thread_stack, UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_AUTO_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_AUTO_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_dfu_thread.c b/common/usbx_device_classes/src/ux_device_class_dfu_thread.c index c6fbbfc..f18b524 100644 --- a/common/usbx_device_classes/src/ux_device_class_dfu_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_dfu_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_dfu_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,11 @@ /* 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 */ /* */ /**************************************************************************/ VOID _ux_device_class_dfu_thread(ULONG dfu_class) @@ -92,7 +97,7 @@ ULONG actual_flags; /* Wait until we have a event sent by the application. */ status = _ux_utility_event_flags_get(&dfu -> ux_slave_class_dfu_event_flags_group, (UX_DEVICE_CLASS_DFU_THREAD_EVENT_DISCONNECT | UX_DEVICE_CLASS_DFU_THREAD_EVENT_WAIT_RESET), - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* Check the completion code and the actual flags returned. */ if (status == UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_activate.c b/common/usbx_device_classes/src/ux_device_class_hid_activate.c index fcb560a..749b7de 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_control_request.c b/common/usbx_device_classes/src/ux_device_class_hid_control_request.c index 64d1b1f..8df4d84 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_control_request.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_hid_control_request PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_hid_control_request PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* prefixed UX to MS_TO_TICK, */ +/* used UX prefix to refer to */ +/* TX symbols instead of using */ +/* them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_control_request(UX_SLAVE_CLASS_COMMAND *command) @@ -154,20 +160,20 @@ UX_SLAVE_CLASS_HID *hid; { /* No need to repeat last report, no timeout. */ - hid -> ux_device_class_hid_event_wait_timeout = TX_WAIT_FOREVER; + hid -> ux_device_class_hid_event_wait_timeout = UX_WAIT_FOREVER; } else { /* Calculate the timeout value. Weighted as 4ms. */ - hid -> ux_device_class_hid_event_wait_timeout = MS_TO_TICK((ULONG)duration << 2u); + hid -> ux_device_class_hid_event_wait_timeout = UX_MS_TO_TICK((ULONG)duration << 2u); /* Be sure to have a timeout that is not zero. */ if (hid -> ux_device_class_hid_event_wait_timeout == 0) hid -> ux_device_class_hid_event_wait_timeout ++; /* Set an event to wake up the interrupt thread. */ - _ux_utility_event_flags_set(&hid -> ux_device_class_hid_event_flags_group, UX_DEVICE_CLASS_HID_NEW_IDLE_RATE, TX_OR); + _ux_utility_event_flags_set(&hid -> ux_device_class_hid_event_flags_group, UX_DEVICE_CLASS_HID_NEW_IDLE_RATE, UX_OR); } } } diff --git a/common/usbx_device_classes/src/ux_device_class_hid_deactivate.c b/common/usbx_device_classes/src/ux_device_class_hid_deactivate.c index 4f4892d..0e5a0af 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -64,6 +64,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_descriptor_send.c b/common/usbx_device_classes/src/ux_device_class_hid_descriptor_send.c index 61b41f9..c7fcc32 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_descriptor_send.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_descriptor_send.c @@ -32,10 +32,10 @@ /**************************************************************************/ /* */ -/* FUNCTION RELEASE */ +/* FUNCTION RELEASE */ /* */ -/* _ux_device_class_hid_descriptor_send PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_hid_descriptor_send PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_descriptor_send(UX_SLAVE_CLASS_HID *hid, ULONG descriptor_type, @@ -140,9 +144,24 @@ ULONG length; else length = host_length; + /* Check buffer length, since descriptor length may exceed buffer... */ + if (length > UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH) + { + + /* Error trap. */ + _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_MEMORY_INSUFFICIENT); + + /* If trace is enabled, insert this event into the trace buffer. */ + UX_TRACE_IN_LINE_INSERT(UX_TRACE_ERROR, UX_MEMORY_INSUFFICIENT, hid, 0, 0, UX_TRACE_ERRORS, 0, 0) + + /* Stall the endpoint. */ + status = dcd -> ux_slave_dcd_function(dcd, UX_DCD_STALL_ENDPOINT, endpoint); + break; + } + /* Copy the device descriptor into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - device_framework, length); + device_framework, length); /* Use case of memcpy is verified. */ /* We can return the configuration descriptor. */ status = _ux_device_stack_transfer_request(transfer_request, length, host_length); @@ -189,7 +208,7 @@ ULONG length; /* Copy the device descriptor into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - hid -> ux_device_class_hid_report_address, length); + hid -> ux_device_class_hid_report_address, length); /* Use case of memcpy is verified. */ /* We can return the report descriptor. */ status = _ux_device_stack_transfer_request(transfer_request, length, host_length); diff --git a/common/usbx_device_classes/src/ux_device_class_hid_entry.c b/common/usbx_device_classes/src/ux_device_class_hid_entry.c index 9a99766..384b8c2 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_hid_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_hid_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_event_get.c b/common/usbx_device_classes/src/ux_device_class_hid_event_get.c index ab1ce83..8d4308a 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_event_get.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_event_get.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_event_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_event_get(UX_SLAVE_CLASS_HID *hid, @@ -93,11 +97,15 @@ UX_SLAVE_DEVICE *device; /* There is an event to report, get the current pointer to the event. */ current_hid_event = hid -> ux_device_class_hid_event_array_tail; - + + /* Keep the event data length inside buffer area. */ + if (current_hid_event -> ux_device_class_hid_event_length > UX_DEVICE_CLASS_HID_EVENT_BUFFER_LENGTH) + current_hid_event -> ux_device_class_hid_event_length = UX_DEVICE_CLASS_HID_EVENT_BUFFER_LENGTH; + /* fill in the event structure from the user. */ hid_event -> ux_device_class_hid_event_length = current_hid_event -> ux_device_class_hid_event_length; _ux_utility_memory_copy(hid_event -> ux_device_class_hid_event_buffer, current_hid_event -> ux_device_class_hid_event_buffer, - current_hid_event -> ux_device_class_hid_event_length); + current_hid_event -> ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ /* Adjust the tail pointer. Check if we are at the end. */ if ((current_hid_event + 1) == hid -> ux_device_class_hid_event_array_end) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_event_set.c b/common/usbx_device_classes/src/ux_device_class_hid_event_set.c index ce83453..988a074 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_event_set.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_event_set.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_event_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_event_set(UX_SLAVE_CLASS_HID *hid, @@ -132,7 +138,7 @@ UX_SLAVE_CLASS_HID_EVENT *next_hid_event; /* Store the data itself. */ _ux_utility_memory_copy(current_hid_event -> ux_device_class_hid_event_buffer + 1, hid_event -> ux_device_class_hid_event_buffer, - hid_event -> ux_device_class_hid_event_length); + hid_event -> ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ /* fill in the event structure from the user. */ current_hid_event -> ux_device_class_hid_event_length = hid_event -> ux_device_class_hid_event_length + 1; @@ -142,14 +148,14 @@ UX_SLAVE_CLASS_HID_EVENT *next_hid_event; /* No report ID to consider. */ _ux_utility_memory_copy(current_hid_event -> ux_device_class_hid_event_buffer, hid_event -> ux_device_class_hid_event_buffer, - hid_event -> ux_device_class_hid_event_length); + hid_event -> ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ /* fill in the event structure from the user. */ current_hid_event -> ux_device_class_hid_event_length = hid_event -> ux_device_class_hid_event_length; } /* Set an event to wake up the interrupt thread. */ - _ux_utility_event_flags_set(&hid -> ux_device_class_hid_event_flags_group, UX_DEVICE_CLASS_HID_NEW_EVENT, TX_OR); + _ux_utility_event_flags_set(&hid -> ux_device_class_hid_event_flags_group, UX_DEVICE_CLASS_HID_NEW_EVENT, UX_OR); /* Return event status to the user. */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_hid_initialize.c b/common/usbx_device_classes/src/ux_device_class_hid_initialize.c index 9141a98..7296277 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_initialize.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -109,7 +114,7 @@ UINT status = UX_SUCCESS; _ux_device_class_hid_interrupt_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) class -> ux_slave_class_thread_stack, UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check the creation of this thread. */ if (status == UX_SUCCESS) @@ -147,7 +152,7 @@ UINT status = UX_SUCCESS; hid -> ux_slave_class_hid_instance_deactivate = hid_parameter -> ux_slave_class_hid_instance_deactivate; /* By default no event wait timeout. */ - hid -> ux_device_class_hid_event_wait_timeout = TX_WAIT_FOREVER; + hid -> ux_device_class_hid_event_wait_timeout = UX_WAIT_FOREVER; /* Create a event flag group for the hid class to synchronize with the event interrupt thread. */ status = _ux_utility_event_flags_create(&hid -> ux_device_class_hid_event_flags_group, "ux_device_class_hid_event_flag"); diff --git a/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c index 4274a06..cfc792d 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_interrupt_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_interrupt_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_hid_interrupt_thread(ULONG hid_class) @@ -107,11 +113,11 @@ ULONG actual_flags; /* Wait until we have a event sent by the application or a change in the idle state to send last or empty report. */ status = _ux_utility_event_flags_get(&hid -> ux_device_class_hid_event_flags_group, - UX_DEVICE_CLASS_HID_EVENTS_MASK, TX_OR_CLEAR, &actual_flags, + UX_DEVICE_CLASS_HID_EVENTS_MASK, UX_OR_CLEAR, &actual_flags, hid -> ux_device_class_hid_event_wait_timeout); /* If there is no event, check if we have timeout defined. */ - if (status == TX_NO_EVENTS) + if (status == UX_NO_EVENTS) { /* There is no event exists on timeout, insert last. */ @@ -122,14 +128,14 @@ ULONG actual_flags; hid_event.ux_device_class_hid_event_length = transfer_request_in -> ux_slave_transfer_request_requested_length; _ux_utility_memory_copy(hid_event.ux_device_class_hid_event_buffer, transfer_request_in -> ux_slave_transfer_request_data_pointer, - hid_event.ux_device_class_hid_event_length); + hid_event.ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ } else { hid_event.ux_device_class_hid_event_report_id = 0; hid_event.ux_device_class_hid_event_length = transfer_request_in -> ux_slave_transfer_request_endpoint -> ux_slave_endpoint_descriptor.wMaxPacketSize & 0x7FF; _ux_utility_memory_set(hid_event.ux_device_class_hid_event_buffer, 0, - hid_event.ux_device_class_hid_event_length); + hid_event.ux_device_class_hid_event_length); /* Use case of memset is verified. */ } _ux_device_class_hid_event_set(hid, &hid_event); @@ -157,7 +163,7 @@ ULONG actual_flags; buffer = transfer_request_in -> ux_slave_transfer_request_data_pointer; /* Copy the event buffer into the target buffer. */ - _ux_utility_memory_copy(buffer, hid_event.ux_device_class_hid_event_buffer, hid_event.ux_device_class_hid_event_length); + _ux_utility_memory_copy(buffer, hid_event.ux_device_class_hid_event_buffer, hid_event.ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ /* Send the request to the device controller. */ status = _ux_device_stack_transfer_request(transfer_request_in, hid_event.ux_device_class_hid_event_length, diff --git a/common/usbx_device_classes/src/ux_device_class_hid_report_get.c b/common/usbx_device_classes/src/ux_device_class_hid_report_get.c index 4782148..44d9910 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_report_get.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_report_get.c @@ -32,10 +32,10 @@ /**************************************************************************/ /* */ -/* FUNCTION RELEASE */ +/* FUNCTION RELEASE */ /* */ -/* _ux_device_class_hid_report_set PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_hid_report_get PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_report_get(UX_SLAVE_CLASS_HID *hid, ULONG descriptor_type, @@ -141,12 +145,14 @@ UINT status = UX_ERROR; hid_event_length = host_length; else hid_event_length = hid_event.ux_device_class_hid_event_length; + if (hid_event_length > UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH) + hid_event_length = UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH; /* First reset it. */ - _ux_utility_memory_set(buffer, 0, hid_event_length); + _ux_utility_memory_set(buffer, 0, hid_event_length); /* Use case of memset is verified. */ /* Copy the event buffer into the target buffer. */ - _ux_utility_memory_copy(buffer, hid_event.ux_device_class_hid_event_buffer, hid_event_length); + _ux_utility_memory_copy(buffer, hid_event.ux_device_class_hid_event_buffer, hid_event_length); /* Use case of memcpy is verified. */ } else { @@ -160,7 +166,7 @@ UINT status = UX_ERROR; hid_event_length = UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH; /* Reset it. */ - _ux_utility_memory_set(buffer, 0, hid_event_length); + _ux_utility_memory_set(buffer, 0, hid_event_length); /* Use case of memset is verified. */ } /* We can send the report. */ diff --git a/common/usbx_device_classes/src/ux_device_class_hid_report_set.c b/common/usbx_device_classes/src/ux_device_class_hid_report_set.c index 69ec450..41b1373 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_report_set.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_report_set.c @@ -32,10 +32,10 @@ /**************************************************************************/ /* */ -/* FUNCTION RELEASE */ +/* FUNCTION RELEASE */ /* */ -/* _ux_device_class_hid_report_set PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_hid_report_set PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_report_set(UX_SLAVE_CLASS_HID *hid, ULONG descriptor_type, @@ -132,7 +136,7 @@ UCHAR *hid_buffer; /* Now we can safely copy the payload. */ _ux_utility_memory_copy(hid_event.ux_device_class_hid_event_buffer, hid_buffer, - hid_event.ux_device_class_hid_event_length); + hid_event.ux_device_class_hid_event_length); /* Use case of memcpy is verified. */ /* If there is a callback defined by the application, send the hid event to it. */ if (hid -> ux_device_class_hid_callback != UX_NULL) diff --git a/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c index 3477161..3086331 100644 --- a/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c +++ b/common/usbx_device_classes/src/ux_device_class_hid_uninitialize.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_hid_uninitialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_hid_uninitialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_activate.c b/common/usbx_device_classes/src/ux_device_class_pima_activate.c index 06a1a02..e24938f 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -63,6 +63,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_control_request.c b/common/usbx_device_classes/src/ux_device_class_pima_control_request.c index 65a3172..b6cc24f 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_control_request.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_pima_control_request PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_pima_control_request PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_control_request(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_data.c b/common/usbx_device_classes/src/ux_device_class_pima_data.c index 79eeb77..b29a98c 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_data.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_data.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_pima_data PORTABLE C */ -/* 6.0 */ +/* ux_device_class_pima_data.c PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -60,6 +60,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ diff --git a/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c b/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c index 63530ef..48a80ca 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -64,6 +64,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c b/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c index c9decae..7794f28 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_device_info_send.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_device_info_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_device_info_send(UX_SLAVE_CLASS_PIMA *pima) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_desc_get.c b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_desc_get.c index 173e517..c6d770d 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_desc_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_desc_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_device_prop_desc_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_device_prop_desc_get(UX_SLAVE_CLASS_PIMA *pima, @@ -132,7 +136,7 @@ UCHAR *device_property_desc_dataset; } /* Copy the property dataset into the local buffer. */ - _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, device_property_desc_dataset, device_property_desc_dataset_length); + _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, device_property_desc_dataset, device_property_desc_dataset_length); /* Use case of memcpy is verified. */ /* Add the header size to the payload. */ device_property_desc_dataset_length += UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c index c4a21a4..9590e2b 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_get.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_device_prop_value_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +76,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_device_prop_value_get(UX_SLAVE_CLASS_PIMA *pima, @@ -116,9 +124,23 @@ UCHAR *device_property_value; else { - + + /* Ensure the application's data can fit in the endpoint's data buffer. */ + if (device_property_value_length > UX_SLAVE_REQUEST_DATA_MAX_LENGTH - UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE) + { + + /* If trace is enabled, insert this event into the trace buffer. */ + UX_TRACE_IN_LINE_INSERT(UX_TRACE_ERROR, UX_MEMORY_INSUFFICIENT, 0, 0, 0, UX_TRACE_ERRORS, 0, 0) + + /* We return an error. */ + _ux_device_class_pima_response_send(pima, UX_DEVICE_CLASS_PIMA_RC_GENERAL_ERROR, 0, 0, 0, 0); + + /* Return overflow error. */ + return(UX_MEMORY_INSUFFICIENT); + } + /* Copy the property dataset into the local buffer. */ - _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, device_property_value, device_property_value_length); + _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, device_property_value, device_property_value_length); /* Use case of memcpy is verified. */ /* Add the header size to the payload. */ device_property_value_length += UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_set.c b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_set.c index 702744b..5391204 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_set.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_device_prop_value_set.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_device_prop_value_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_device_prop_value_set(UX_SLAVE_CLASS_PIMA *pima, ULONG device_property_code) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_device_reset.c b/common/usbx_device_classes/src/ux_device_class_pima_device_reset.c index 3a9c162..04c709f 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_device_reset.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_device_reset.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_device_reset PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_device_reset(UX_SLAVE_CLASS_PIMA *pima) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_entry.c b/common/usbx_device_classes/src/ux_device_class_pima_entry.c index 380e987..de5de6b 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_pima_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_pima_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_event_get.c b/common/usbx_device_classes/src/ux_device_class_pima_event_get.c index 5d83d7d..8030e21 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_event_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_event_get.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_event_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_event_get(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_event_set.c b/common/usbx_device_classes/src/ux_device_class_pima_event_set.c index b360979..015c13e 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_event_set.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_event_set.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_event_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_event_set(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_initialize.c b/common/usbx_device_classes/src/ux_device_class_pima_initialize.c index 9afd7c4..b1e2f51 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_initialize.c @@ -32,8 +32,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_pima_activate PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_pima_initialize PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -107,7 +112,7 @@ UX_SLAVE_CLASS *class; _ux_device_class_pima_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) class -> ux_slave_class_thread_stack, UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c index 1f2f1ae..cc5bc59 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_interrupt_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_interrupt_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_pima_interrupt_thread(ULONG pima_class) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_add.c b/common/usbx_device_classes/src/ux_device_class_pima_object_add.c index cfb604c..90a90e8 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_add.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_add.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_add PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_add(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_data_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_data_get.c index 4786563..20b0d82 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_data_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_data_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_data_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_data_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_data_send.c b/common/usbx_device_classes/src/ux_device_class_pima_object_data_send.c index 50472ab..1411b0b 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_data_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_data_send.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_data_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_data_send(UX_SLAVE_CLASS_PIMA *pima) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_delete.c b/common/usbx_device_classes/src/ux_device_class_pima_object_delete.c index e5b9519..e70f838 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_delete.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_delete.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_delete PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_delete(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_handles_send.c b/common/usbx_device_classes/src/ux_device_class_pima_object_handles_send.c index 60ee0f9..d4a707b 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_handles_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_handles_send.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_handles_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_handles_send(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c index fe6fe48..df22e7b 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_info_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_info_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle) @@ -81,7 +85,11 @@ UX_SLAVE_CLASS_PIMA_OBJECT *object; ULONG object_info_length; UCHAR *object_info; UCHAR *object_info_pointer; -ULONG unicode_string_length; +ULONG file_name_length; +ULONG capture_date_length; +ULONG modification_date_length; +ULONG keywords_length; + /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_PIMA_OBJECT_INFO_GET, pima, object_handle, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) @@ -98,13 +106,38 @@ ULONG unicode_string_length; else { + /* Length calculation and overflow check. */ + file_name_length = ((ULONG) *object -> ux_device_class_pima_object_filename * 2 ) + 1; + capture_date_length = ((ULONG) *object -> ux_device_class_pima_object_capture_date *2 ) + 1; + modification_date_length = ((ULONG) *object -> ux_device_class_pima_object_modification_date * 2 ) + 1; + keywords_length = ((ULONG) *object -> ux_device_class_pima_object_keywords * 2 ) +1; + object_info_length = UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + + UX_DEVICE_CLASS_PIMA_OBJECT_VARIABLE_OFFSET + + file_name_length + + capture_date_length + + modification_date_length + + keywords_length; + + /* Ensure the object info data can fit in the endpoint's data buffer. */ + if (object_info_length > UX_SLAVE_REQUEST_DATA_MAX_LENGTH) + { + + /* If trace is enabled, insert this event into the trace buffer. */ + UX_TRACE_IN_LINE_INSERT(UX_TRACE_ERROR, UX_MEMORY_INSUFFICIENT, 0, 0, 0, UX_TRACE_ERRORS, 0, 0) + + /* We return an error. */ + _ux_device_class_pima_response_send(pima, UX_DEVICE_CLASS_PIMA_RC_GENERAL_ERROR, 0, 0, 0, 0); + + /* Return overflow error. */ + return(UX_MEMORY_INSUFFICIENT); + } /* Obtain the pointer to the transfer request. */ transfer_request = &pima -> ux_device_class_pima_bulk_in_endpoint -> ux_slave_endpoint_transfer_request; /* Obtain memory for this object info. Use the transfer request pre-allocated memory. */ object_info = transfer_request -> ux_slave_transfer_request_data_pointer; - + /* Fill in the data container type. */ _ux_utility_short_put(object_info + UX_DEVICE_CLASS_PIMA_DATA_HEADER_TYPE, UX_DEVICE_CLASS_PIMA_CT_DATA_BLOCK); @@ -129,46 +162,29 @@ ULONG unicode_string_length; /* Copy the object filename field. Point to the beginning of the object description string. */ object_info_pointer += UX_DEVICE_CLASS_PIMA_OBJECT_VARIABLE_OFFSET; - /* Get the unicode string length for the filename. */ - unicode_string_length = ((ULONG) *object -> ux_device_class_pima_object_filename * 2 ) + 1; - /* Copy that string into the object description field. */ - _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_filename, unicode_string_length); + _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_filename, file_name_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ - object_info_pointer += unicode_string_length; + object_info_pointer += file_name_length; - /* Get the unicode string length of the capture date. */ - unicode_string_length = ((ULONG) *object -> ux_device_class_pima_object_capture_date *2 ) + 1; - /* Copy that string into the capture date field. */ - _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_capture_date, unicode_string_length); + _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_capture_date, capture_date_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ - object_info_pointer += unicode_string_length; - - + object_info_pointer += capture_date_length; - /* Get the unicode string length. */ - unicode_string_length = ((ULONG) *object -> ux_device_class_pima_object_modification_date * 2 ) + 1; - /* Copy that string into the modification date field. */ - _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_modification_date, unicode_string_length); + _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_modification_date, modification_date_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ - object_info_pointer += unicode_string_length; + object_info_pointer += modification_date_length; - /* Get the unicode string length. */ - unicode_string_length = ((ULONG) *object -> ux_device_class_pima_object_keywords * 2 ) +1; - /* Copy that string into the keywords field. */ - _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_keywords, unicode_string_length); + _ux_utility_memory_copy(object_info_pointer, object -> ux_device_class_pima_object_keywords, keywords_length); /* Use case of memcpy is verified. */ /* Point to the end of the variable length. */ - object_info_pointer += unicode_string_length; - - /* Compute the overall length of the device info structure. */ - object_info_length = (ULONG) ((ALIGN_TYPE) object_info_pointer - (ALIGN_TYPE) object_info); + object_info_pointer += keywords_length; /* Fill in the size of the response header. */ _ux_utility_long_put(object_info + UX_DEVICE_CLASS_PIMA_DATA_HEADER_LENGTH, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_info_send.c b/common/usbx_device_classes/src/ux_device_class_pima_object_info_send.c index 1ff436d..25a7de6 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_info_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_info_send.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_info_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -74,6 +74,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_info_send(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id, ULONG parent_object_handle) @@ -145,7 +149,7 @@ ULONG object_handle; { /* Copy that string into the object description field. */ - _ux_utility_memory_copy(object -> ux_device_class_pima_object_filename, object_info_pointer, unicode_string_length); + _ux_utility_memory_copy(object -> ux_device_class_pima_object_filename, object_info_pointer, unicode_string_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ object_info_pointer += unicode_string_length; @@ -165,7 +169,7 @@ ULONG object_handle; { /* Copy that string into the capture date field. */ - _ux_utility_memory_copy(object -> ux_device_class_pima_object_capture_date, object_info_pointer, unicode_string_length); + _ux_utility_memory_copy(object -> ux_device_class_pima_object_capture_date, object_info_pointer, unicode_string_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ object_info_pointer += unicode_string_length; @@ -185,7 +189,7 @@ ULONG object_handle; { /* Copy that string into the modification date field. */ - _ux_utility_memory_copy(object -> ux_device_class_pima_object_modification_date, object_info_pointer, unicode_string_length); + _ux_utility_memory_copy(object -> ux_device_class_pima_object_modification_date, object_info_pointer, unicode_string_length); /* Use case of memcpy is verified. */ /* Point to the next field. */ object_info_pointer += unicode_string_length; @@ -205,7 +209,7 @@ ULONG object_handle; { /* Copy that string into the keywords field. */ - _ux_utility_memory_copy(object -> ux_device_class_pima_object_keywords, object_info_pointer, unicode_string_length); + _ux_utility_memory_copy(object -> ux_device_class_pima_object_keywords, object_info_pointer, unicode_string_length); /* Use case of memcpy is verified. */ /* Reset the rest of the other parameters. */ object -> ux_device_class_pima_object_state = 0; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c index 374b1ce..f5d8446 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_desc_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_prop_desc_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +73,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_prop_desc_get(UX_SLAVE_CLASS_PIMA *pima, @@ -126,7 +130,7 @@ UCHAR *object_props_desc_end; /* Copy the object property array. */ _ux_utility_memory_copy(object_props_desc + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, - object_prop_dataset, object_prop_dataset_length); + object_prop_dataset, object_prop_dataset_length); /* Use case of memcpy is verified. */ /* Add the header size. */ object_prop_dataset_length += UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c index 0683fab..081d2ac 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_prop_value_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -76,6 +76,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_prop_value_get(UX_SLAVE_CLASS_PIMA *pima, @@ -131,7 +135,7 @@ ULONG object_property_value_length; { /* Copy the property dataset into the local buffer. */ - _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, object_property_value, object_property_value_length); + _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, object_property_value, object_property_value_length); /* Use case of memcpy is verified. */ /* Add the header size to the payload. */ object_property_value_length += UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_set.c b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_set.c index 0ac6a35..0b86955 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_set.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_prop_value_set.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_prop_value_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_prop_value_set(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_props_supported_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_props_supported_get.c index 3b4289b..f041021 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_props_supported_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_props_supported_get.c @@ -34,8 +34,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_pima_object_prop_supported_get PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_pima_object_props_supported_get PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_props_supported_get(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c b/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c index dfe537d..3162dca 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_references_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_references_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +73,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_references_get(UX_SLAVE_CLASS_PIMA *pima, @@ -127,7 +131,7 @@ ULONG object_references_length; { /* Copy the property dataset into the local buffer. */ - _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, object_references, object_references_length); + _ux_utility_memory_copy(pima_data_buffer + UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE, object_references, object_references_length); /* Use case of memcpy is verified. */ /* Add the header size to the payload. */ object_references_length += UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE; diff --git a/common/usbx_device_classes/src/ux_device_class_pima_object_references_set.c b/common/usbx_device_classes/src/ux_device_class_pima_object_references_set.c index e569dc8..b2c8761 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_object_references_set.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_object_references_set.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_object_references_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_object_references_set(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_objects_number_send.c b/common/usbx_device_classes/src/ux_device_class_pima_objects_number_send.c index 16a4d1e..f0449ca 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_objects_number_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_objects_number_send.c @@ -34,8 +34,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_pima_object_number_send PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_pima_objects_number_send PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_objects_number_send(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_partial_object_data_get.c b/common/usbx_device_classes/src/ux_device_class_pima_partial_object_data_get.c index 84a22f5..3a59fd6 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_partial_object_data_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_partial_object_data_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_partial_object_data_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_partial_object_data_get(UX_SLAVE_CLASS_PIMA *pima, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_response_send.c b/common/usbx_device_classes/src/ux_device_class_pima_response_send.c index 02ec295..d4855d5 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_response_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_response_send.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_response_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_response_send(UX_SLAVE_CLASS_PIMA *pima, ULONG response_code, diff --git a/common/usbx_device_classes/src/ux_device_class_pima_storage_format.c b/common/usbx_device_classes/src/ux_device_class_pima_storage_format.c index f9d04a0..859f93f 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_storage_format.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_storage_format.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_storage_format PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_storage_format(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c b/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c index 8ab1ab6..635c99e 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_storage_id_send.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_storage_id_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_storage_id_send(UX_SLAVE_CLASS_PIMA *pima) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_storage_info_get.c b/common/usbx_device_classes/src/ux_device_class_pima_storage_info_get.c index 47581d9..60799e9 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_storage_info_get.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_storage_info_get.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_storage_info_get PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_pima_storage_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id) diff --git a/common/usbx_device_classes/src/ux_device_class_pima_thread.c b/common/usbx_device_classes/src/ux_device_class_pima_thread.c index d1a4a19..ed50705 100644 --- a/common/usbx_device_classes/src/ux_device_class_pima_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_pima_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_pima_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -110,6 +110,11 @@ /* 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 */ /* */ /**************************************************************************/ VOID _ux_device_class_pima_thread(ULONG pima_class) @@ -163,7 +168,7 @@ UINT status; _ux_device_class_pima_interrupt_thread, (ULONG) (ALIGN_TYPE) pima, (VOID *) pima -> ux_device_class_pima_interrupt_thread_stack, UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_AUTO_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_AUTO_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_activate.c b/common/usbx_device_classes/src/ux_device_class_rndis_activate.c index 31c0c17..5f22683 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_activate.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_activate(UX_SLAVE_CLASS_COMMAND *command) @@ -171,11 +175,11 @@ ULONG physical_address_lsw; /* Reset the endpoint buffers. */ _ux_utility_memory_set(rndis -> ux_slave_class_rndis_bulkout_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ _ux_utility_memory_set(rndis -> ux_slave_class_rndis_bulkin_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ _ux_utility_memory_set(rndis -> ux_slave_class_rndis_interrupt_endpoint -> ux_slave_endpoint_transfer_request. - ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); + ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_REQUEST_DATA_MAX_LENGTH); /* Use case of memset is verified. */ /* Resume the endpoint threads. */ _ux_utility_thread_resume(&rndis -> ux_slave_class_rndis_interrupt_thread); diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c b/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c index 2347b0c..eb960a0 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_bulkin_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_bulkin_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_rndis_bulkin_thread(ULONG rndis_class) @@ -111,7 +117,7 @@ ULONG transfer_length; on the interrupt pipe frequency or a change in the idle state forces us to send an empty report. */ status = _ux_utility_event_flags_get(&rndis -> ux_slave_class_rndis_event_flags_group, (UX_DEVICE_CLASS_RNDIS_NEW_BULKIN_EVENT | UX_DEVICE_CLASS_RNDIS_NEW_DEVICE_STATE_CHANGE_EVENT), - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* Check the completion code and the actual flags returned. */ if (status == UX_SUCCESS && (actual_flags & UX_DEVICE_CLASS_RNDIS_NEW_DEVICE_STATE_CHANGE_EVENT) == 0) @@ -148,7 +154,7 @@ ULONG transfer_length; { /* Copy the packet in the transfer descriptor buffer. */ - _ux_utility_memory_copy (transfer_request -> ux_slave_transfer_request_data_pointer + UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH, packet_header, current_packet -> nx_packet_length); + _ux_utility_memory_copy (transfer_request -> ux_slave_transfer_request_data_pointer + UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_LENGTH, packet_header, current_packet -> nx_packet_length); /* Use case of memcpy is verified. */ /* Add the RNDIS header to this packet. */ _ux_utility_long_put(transfer_request -> ux_slave_transfer_request_data_pointer + UX_DEVICE_CLASS_RNDIS_PACKET_MESSAGE_TYPE, UX_DEVICE_CLASS_RNDIS_PACKET_HEADER_MSG); diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c b/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c index 9bd016a..0dde156 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_bulkout_thread.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_bulkout_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +71,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* prefixed UX to MS_TO_TICK, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_rndis_bulkout_thread(ULONG rndis_class) @@ -107,7 +112,7 @@ ULONG packet_payload; /* We can accept new reception. Get a NX Packet. */ status = nx_packet_allocate(&rndis -> ux_slave_class_rndis_packet_pool, &packet, - NX_RECEIVE_PACKET, MS_TO_TICK(UX_DEVICE_CLASS_RNDIS_PACKET_POOL_WAIT)); + NX_RECEIVE_PACKET, UX_MS_TO_TICK(UX_DEVICE_CLASS_RNDIS_PACKET_POOL_WAIT)); if (status == NX_SUCCESS) { @@ -161,7 +166,7 @@ ULONG packet_payload; /* Copy the received packet in the IP packet data area. */ - _ux_utility_memory_copy(packet -> nx_packet_prepend_ptr, transfer_request -> ux_slave_transfer_request_data_pointer + UX_DEVICE_CLASS_RNDIS_PACKET_BUFFER, packet_payload); + _ux_utility_memory_copy(packet -> nx_packet_prepend_ptr, transfer_request -> ux_slave_transfer_request_data_pointer + UX_DEVICE_CLASS_RNDIS_PACKET_BUFFER, packet_payload); /* Use case of memcpy is verified. */ /* Calculate the accurate packet length from ip header */ if((*(packet -> nx_packet_prepend_ptr + 12) == 0x08) && diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c b/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c index b7ed5b1..edf09eb 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_control_request.c @@ -28,12 +28,18 @@ #include "ux_device_class_rndis.h" #include "ux_device_stack.h" + +#if UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH < UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_LENGTH ||\ + UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH < UX_DEVICE_CLASS_RNDIS_MAX_CONTROL_RESPONSE_LENGTH +#error UX_SLAVE_REQUEST_CONTROL_MAX_LENGTH too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -74,6 +80,12 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_control_request(UX_SLAVE_CLASS_COMMAND *command) @@ -163,13 +175,13 @@ UX_SLAVE_CLASS_RNDIS *rndis; transfer_request_in = &rndis -> ux_slave_class_rndis_interrupt_endpoint -> ux_slave_endpoint_transfer_request; /* Reset the buffer. */ - _ux_utility_memory_set(transfer_request_in -> ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_LENGTH); + _ux_utility_memory_set(transfer_request_in -> ux_slave_transfer_request_data_pointer, 0, UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_LENGTH); /* Use case of memset is verified. */ /* Set the buffer of this transfer request with the flag for response available. */ transfer_request_in -> ux_slave_transfer_request_data_pointer[0] = UX_DEVICE_CLASS_RNDIS_INTERRUPT_RESPONSE_AVAILABLE_FLAG; /* Set an event to wake up the interrupt thread. */ - _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_INTERRUPT_EVENT, TX_OR); + _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_INTERRUPT_EVENT, UX_OR); break; @@ -178,7 +190,7 @@ UX_SLAVE_CLASS_RNDIS *rndis; /* Copy the response into the request data buffer. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, rndis -> ux_slave_class_rndis_response, - rndis -> ux_slave_class_rndis_response_length); + rndis -> ux_slave_class_rndis_response_length); /* Use case of memcpy is verified. */ /* Set the phase of the transfer to data out. */ transfer_request -> ux_slave_transfer_request_phase = UX_TRANSFER_PHASE_DATA_OUT; diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_deactivate.c b/common/usbx_device_classes/src/ux_device_class_rndis_deactivate.c index c47748c..2956aec 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_deactivate.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_deactivate(UX_SLAVE_CLASS_COMMAND *command) @@ -104,7 +109,7 @@ UX_SLAVE_CLASS *class; /* We have 2 threads waiting for an event, interrupt and bulk in. We wake them up with a DEVICE_STATE_CHANGE event. In turn they will release the NetX resources used and suspend. */ - _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_DEVICE_STATE_CHANGE_EVENT, TX_OR); + _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_DEVICE_STATE_CHANGE_EVENT, UX_OR); /* If there is a deactivate function call it. */ if (rndis -> ux_slave_class_rndis_parameter.ux_slave_class_rndis_instance_deactivate != UX_NULL) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_entry.c b/common/usbx_device_classes/src/ux_device_class_rndis_entry.c index c8199b9..4976f9e 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_entry.c @@ -33,8 +33,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_rndis_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_rndis_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c b/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c index 43eab26..54aec46 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_initialize.c @@ -78,7 +78,7 @@ ULONG ux_device_class_rndis_oid_supported_list[UX_DEVICE_CLASS_RNDIS_OID_SUPPORT /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -120,6 +120,12 @@ ULONG ux_device_class_rndis_oid_supported_list[UX_DEVICE_CLASS_RNDIS_OID_SUPPORT /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, used UX prefix to */ +/* refer to TX symbols instead */ +/* of using them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -161,14 +167,14 @@ UINT status; /* Copy the local node ID. */ _ux_utility_memory_copy(rndis -> ux_slave_class_rndis_local_node_id, rndis_parameter -> ux_slave_class_rndis_parameter_local_node_id, - UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); + UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); /* Use case of memcpy is verified. */ /* Copy the remote node ID. */ _ux_utility_memory_copy(rndis -> ux_slave_class_rndis_remote_node_id, rndis_parameter -> ux_slave_class_rndis_parameter_remote_node_id, - UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); + UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); /* Use case of memcpy is verified. */ /* Store the rest of the parameters as they are in the local instance. */ - _ux_utility_memory_copy(&rndis -> ux_slave_class_rndis_parameter, rndis_parameter, sizeof (UX_SLAVE_CLASS_RNDIS_PARAMETER)); + _ux_utility_memory_copy(&rndis -> ux_slave_class_rndis_parameter, rndis_parameter, sizeof (UX_SLAVE_CLASS_RNDIS_PARAMETER)); /* Use case of memcpy is verified. */ /* Create a mutex to protect the RNDIS thread and the application messing up the transmit queue. */ status = _ux_utility_mutex_create(&rndis -> ux_slave_class_rndis_mutex, "ux_slave_class_rndis_mutex"); @@ -197,7 +203,7 @@ UINT status; _ux_device_class_rndis_interrupt_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) rndis -> ux_slave_class_rndis_interrupt_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) @@ -226,7 +232,7 @@ UINT status; _ux_device_class_rndis_bulkout_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) rndis -> ux_slave_class_rndis_bulkout_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) @@ -255,7 +261,7 @@ UINT status; _ux_device_class_rndis_bulkin_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) rndis -> ux_slave_class_rndis_bulkin_thread_stack , UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); /* Check the creation of this thread. */ if (status != UX_SUCCESS) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_interrupt_thread.c b/common/usbx_device_classes/src/ux_device_class_rndis_interrupt_thread.c index 01e3463..ad55242 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_interrupt_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_interrupt_thread.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_interrupt_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,11 @@ /* 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 */ /* */ /**************************************************************************/ VOID _ux_device_class_rndis_interrupt_thread(ULONG rndis_class) @@ -104,7 +109,7 @@ ULONG actual_flags; on the interrupt pipe frequency or a change in the idle state forces us to send an empty report. */ status = _ux_utility_event_flags_get(&rndis -> ux_slave_class_rndis_event_flags_group, (UX_DEVICE_CLASS_RNDIS_NEW_INTERRUPT_EVENT | UX_DEVICE_CLASS_RNDIS_NEW_DEVICE_STATE_CHANGE_EVENT), - TX_OR_CLEAR, &actual_flags, TX_WAIT_FOREVER); + UX_OR_CLEAR, &actual_flags, UX_WAIT_FOREVER); /* If error log is enabled, insert this error message into the log buffer. */ diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_msg_initialize.c b/common/usbx_device_classes/src/ux_device_class_rndis_msg_initialize.c index 6e1c7c3..1cc091b 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_msg_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_msg_initialize.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_msg_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_msg_initialize(UX_SLAVE_CLASS_RNDIS *rndis, UX_SLAVE_TRANSFER *transfer_request) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_msg_keep_alive.c b/common/usbx_device_classes/src/ux_device_class_rndis_msg_keep_alive.c index ad0abd0..481eff0 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_msg_keep_alive.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_msg_keep_alive.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_msg_keep_alive PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_msg_keep_alive(UX_SLAVE_CLASS_RNDIS *rndis, UX_SLAVE_TRANSFER *transfer_request) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_msg_query.c b/common/usbx_device_classes/src/ux_device_class_rndis_msg_query.c index a2b6b33..1cdee77 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_msg_query.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_msg_query.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_msg_query PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,10 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_msg_query(UX_SLAVE_CLASS_RNDIS *rndis, UX_SLAVE_TRANSFER *transfer_request) @@ -255,7 +259,7 @@ ULONG status; rndis_response_length = (ULONG) rndis_response_string_length; /* Copy the vendor description. */ - _ux_utility_memory_copy(rndis_response + UX_DEVICE_CLASS_RNDIS_CMPLT_QUERY_INFO_BUFFER, rndis -> ux_slave_class_rndis_parameter.ux_slave_class_rndis_parameter_vendor_description, rndis_response_length); + _ux_utility_memory_copy(rndis_response + UX_DEVICE_CLASS_RNDIS_CMPLT_QUERY_INFO_BUFFER, rndis -> ux_slave_class_rndis_parameter.ux_slave_class_rndis_parameter_vendor_description, rndis_response_length); /* Use case of memcpy is verified. */ break; @@ -314,7 +318,7 @@ ULONG status; /* Save the Hardware address in the return message. */ _ux_utility_memory_copy(rndis_response + UX_DEVICE_CLASS_RNDIS_CMPLT_QUERY_INFO_BUFFER, - rndis -> ux_slave_class_rndis_remote_node_id, UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); + rndis -> ux_slave_class_rndis_remote_node_id, UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH); /* Use case of memcpy is verified. */ /* Set the total response length. */ rndis_response_length = UX_DEVICE_CLASS_RNDIS_NODE_ID_LENGTH; diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_msg_reset.c b/common/usbx_device_classes/src/ux_device_class_rndis_msg_reset.c index fbb4319..e40ecaa 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_msg_reset.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_msg_reset.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_msg_reset PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_msg_reset(UX_SLAVE_CLASS_RNDIS *rndis, UX_SLAVE_TRANSFER *transfer_request) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_msg_set.c b/common/usbx_device_classes/src/ux_device_class_rndis_msg_set.c index 1f5faa7..111bec7 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_msg_set.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_msg_set.c @@ -33,7 +33,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_msg_set PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_msg_set(UX_SLAVE_CLASS_RNDIS *rndis, UX_SLAVE_TRANSFER *transfer_request) diff --git a/common/usbx_device_classes/src/ux_device_class_rndis_write.c b/common/usbx_device_classes/src/ux_device_class_rndis_write.c index a21615f..4c695db 100644 --- a/common/usbx_device_classes/src/ux_device_class_rndis_write.c +++ b/common/usbx_device_classes/src/ux_device_class_rndis_write.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_rndis_write PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -68,6 +68,11 @@ /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_rndis_write(VOID *rndis_class, NX_PACKET *packet) @@ -121,7 +126,7 @@ UX_SLAVE_CLASS_RNDIS *rndis; packet -> nx_packet_queue_next = NX_NULL; /* Set an event to wake up the bulkin thread. */ - _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_BULKIN_EVENT, TX_OR); + _ux_utility_event_flags_set(&rndis -> ux_slave_class_rndis_event_flags_group, UX_DEVICE_CLASS_RNDIS_NEW_BULKIN_EVENT, UX_OR); /* We are done here. */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_activate.c b/common/usbx_device_classes/src/ux_device_class_storage_activate.c index 1429e09..2a45a2c 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_activate.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_activate.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_activate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_activate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_storage_control_request.c b/common/usbx_device_classes/src/ux_device_class_storage_control_request.c index 895e674..bd9925d 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_control_request.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_control_request.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_control_request PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -67,6 +67,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_control_request(UX_SLAVE_CLASS_COMMAND *command) @@ -135,7 +138,7 @@ UX_SLAVE_ENDPOINT *endpoint_out; _ux_device_stack_transfer_abort(transfer_request, UX_TRANSFER_APPLICATION_RESET); /* Reset phase error. */ - storage -> ux_slave_class_storage_phase_error = UX_FALSE; + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; break; diff --git a/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c b/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c index 9df0fa6..8e9374a 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_csw_send.c @@ -29,12 +29,16 @@ #include "ux_device_class_storage.h" #include "ux_device_stack.h" +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < UX_SLAVE_CLASS_STORAGE_CSW_LENGTH +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_csw_send PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +75,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_csw_send(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -79,13 +88,23 @@ UINT _ux_device_class_storage_csw_send(UX_SLAVE_CLASS_STORAGE *storage, ULONG l UINT status; UX_SLAVE_TRANSFER *transfer_request; -UCHAR csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_LENGTH]; +UCHAR *csw_buffer; + + + UX_PARAMETER_NOT_USED(csw_status); + + /* If CSW skipped, just return. */ + if (UX_DEVICE_CLASS_STORAGE_CSW_SKIP(&storage -> ux_slave_class_storage_csw_status)) + return(UX_SUCCESS); /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + /* Get CSW buffer pointer. */ + csw_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; + /* Ensure it is cleaned. */ - _ux_utility_memory_set(csw_buffer, 0, UX_SLAVE_CLASS_STORAGE_CSW_LENGTH); + _ux_utility_memory_set(csw_buffer, 0, UX_SLAVE_CLASS_STORAGE_CSW_LENGTH); /* Use case of memset is verified. */ /* Store the signature of the CSW. */ _ux_utility_long_put(&csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_SIGNATURE], UX_SLAVE_CLASS_STORAGE_CSW_SIGNATURE_MASK); @@ -94,11 +113,7 @@ UCHAR csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_LENGTH]; _ux_utility_long_put(&csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_TAG], storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_scsi_tag); /* Store the status of the previous operation. */ - csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_STATUS] = csw_status; - - /* Copy the CSW into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - csw_buffer, UX_SLAVE_CLASS_STORAGE_CSW_LENGTH); + csw_buffer[UX_SLAVE_CLASS_STORAGE_CSW_STATUS] = (UCHAR)storage -> ux_slave_class_storage_csw_status; /* We may be in a special state machine condition where the endpoint is stalled waiting for a CLEAR_FEATURE. We will wait until the host clears the endpoint. diff --git a/common/usbx_device_classes/src/ux_device_class_storage_deactivate.c b/common/usbx_device_classes/src/ux_device_class_storage_deactivate.c index ef20dd0..15aa953 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_deactivate.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_deactivate.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_deactivate PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -65,6 +65,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_deactivate(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_storage_entry.c b/common/usbx_device_classes/src/ux_device_class_storage_entry.c index 97cb88f..c030d54 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_entry.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_entry.c @@ -34,8 +34,8 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_class_device_storage_entry PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_storage_entry PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +73,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_entry(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_storage_format.c b/common/usbx_device_classes/src/ux_device_class_storage_format.c index 66a83a5..b972ae7 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_format.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_format.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_format PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_format(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in, @@ -77,6 +80,7 @@ UINT _ux_device_class_storage_format(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun { UX_PARAMETER_NOT_USED(cbwcb); + UX_PARAMETER_NOT_USED(endpoint_in); /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_FORMAT, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) @@ -85,13 +89,12 @@ UINT _ux_device_class_storage_format(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun OUT endpoint because we expect the host to send parameters. */ _ux_device_stack_endpoint_stall(endpoint_out); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x05; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x26; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x01; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x05,0x26,0x01); + + /* Now we set the CSW with failure. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_ERROR, UX_FUNCTION_NOT_SUPPORTED, 0, 0, 0, UX_TRACE_ERRORS, 0, 0) diff --git a/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c b/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c index 8b50ab9..0948742 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_get_configuration.c @@ -291,13 +291,18 @@ UCHAR usbx_device_class_storage_configuration_active_profile[] = { }; +#if (UX_SLAVE_REQUEST_DATA_MAX_LENGTH < USBX_DEVICE_CLASS_STORAGE_CONFIGURATION_ACTIVE_PROFILE_LENGTH) ||\ + (UX_SLAVE_REQUEST_DATA_MAX_LENGTH < USBX_DEVICE_CLASS_STORAGE_CONFIGURATION_PROFILE_LENGTH) +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_get_configuration PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -335,6 +340,11 @@ UCHAR usbx_device_class_storage_configuration_active_profile[] = { /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_get_configuration(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -371,6 +381,9 @@ ULONG feature; /* Get the allocation length. */ allocation_length = _ux_utility_short_get_big_endian(cbwcb + UX_SLAVE_CLASS_STORAGE_GET_CONFIGURATION_ALLOCATION_LENGTH); + /* Default CSW to success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + /* Is the request demanding all the features ? */ if (starting_feature == 0) { @@ -390,7 +403,7 @@ ULONG feature; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, usbx_device_class_storage_configuration_active_profile, - allocation_length); + allocation_length); /* Use case of memcpy is verified. */ } else { @@ -406,7 +419,7 @@ ULONG feature; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, usbx_device_class_storage_configuration_profile, - allocation_length); + allocation_length); /* Use case of memcpy is verified. */ } @@ -415,8 +428,8 @@ ULONG feature; allocation_length, allocation_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now success. */ + status = UX_SUCCESS; } else { @@ -451,15 +464,15 @@ ULONG feature; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, profile_pointer, - allocation_length); + allocation_length); /* Use case of memcpy is verified. */ /* Send a data payload with the read_capacity response buffer. */ _ux_device_stack_transfer_request(transfer_request, allocation_length, allocation_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now success. */ + status = UX_SUCCESS; /* Get out of the loop. */ break; @@ -474,13 +487,12 @@ ULONG feature; /* We are either at the end of the profile or the profile is corrupted. */ _ux_device_stack_endpoint_stall(endpoint_in); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = UX_SLAVE_CLASS_STORAGE_SENSE_KEY_ILLEGAL_REQUEST; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x26; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x02; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(UX_SLAVE_CLASS_STORAGE_SENSE_KEY_ILLEGAL_REQUEST,0x26,0x02); + + /* Now we set the CSW with failure. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* Set status to error. */ status = UX_ERROR; diff --git a/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c b/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c index b50025b..5da7514 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_get_performance.c @@ -30,6 +30,9 @@ #include "ux_device_stack.h" #define USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH 16 +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < (USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH + 8) +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH too small, please check +#endif UCHAR usbx_device_class_storage_performance[] = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x23, 0x12, 0x80, @@ -41,7 +44,7 @@ UCHAR usbx_device_class_storage_performance[] = { /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_get_performance PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -78,6 +81,11 @@ UCHAR usbx_device_class_storage_performance[] = { /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_get_performance(UX_SLAVE_CLASS_STORAGE *storage, @@ -91,6 +99,8 @@ UINT status; UX_SLAVE_TRANSFER *transfer_request; ULONG performance_page; + + UX_PARAMETER_NOT_USED(lun); UX_PARAMETER_NOT_USED(endpoint_out); /* If trace is enabled, insert this event into the trace buffer. */ @@ -100,7 +110,7 @@ ULONG performance_page; transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; /* Ensure memory buffer cleaned. */ - _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, 64); + _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, 64); /* Use case of memset is verified. */ /* Get the performance page code. */ performance_page = (ULONG) *(cbwcb + UX_SLAVE_CLASS_STORAGE_GET_PERFORMANCE_PAGE); @@ -131,20 +141,16 @@ ULONG performance_page; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer + 8, - usbx_device_class_storage_performance, USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH); + usbx_device_class_storage_performance, USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH); /* Use case of memcpy is verified. */ /* Send a data payload with the read_capacity response buffer. */ _ux_device_stack_transfer_request(transfer_request, USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH + 8, USBX_DEVICE_CLASS_STORAGE_GET_PERFORMANCE_0_LENGTH + 8); break; } - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_get_status_notification.c b/common/usbx_device_classes/src/ux_device_class_storage_get_status_notification.c index aaffd92..27f8eec 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_get_status_notification.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_get_status_notification.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_get_status_notification PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_get_status_notification(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -88,7 +93,10 @@ ULONG notification_class; UX_PARAMETER_NOT_USED(endpoint_out); /* If trace is enabled, insert this event into the trace buffer. */ - UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_READ_CAPACITY, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) + UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_READ_CAPACITY, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0); + + /* Default CSW to failed. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* Ensure the callback has been initialized. */ if (storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_notification == UX_NULL) @@ -97,8 +105,9 @@ ULONG notification_class; /* We need to STALL the IN endpoint. The endpoint will be reset by the host. */ _ux_device_stack_endpoint_stall(endpoint_in); - /* Now we return a CSW with Error. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); + /* And update the REQUEST_SENSE codes. */ + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x05,0x26,0x01); /* Return error. */ return(UX_FUNCTION_NOT_SUPPORTED); @@ -114,15 +123,26 @@ ULONG notification_class; &media_notification, &media_notification_length); + /* Check the notification length. */ + if (media_notification_length > UX_SLAVE_REQUEST_DATA_MAX_LENGTH - sizeof(USHORT)) + { + + /* If trace is enabled, insert this event into the trace buffer. */ + UX_TRACE_IN_LINE_INSERT(UX_TRACE_ERROR, UX_MEMORY_INSUFFICIENT, 0, 0, 0, UX_TRACE_ERRORS, 0, 0) + + /* Error callback. */ + _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_MEMORY_INSUFFICIENT); + + /* Set status code. */ + status = UX_MEMORY_INSUFFICIENT; + } + /* Check the status for error. */ if (status != UX_SUCCESS) { /* We need to STALL the IN endpoint. The endpoint will be reset by the host. */ _ux_device_stack_endpoint_stall(endpoint_in); - - /* Now we return a CSW with Error. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); } else { @@ -136,7 +156,7 @@ ULONG notification_class; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer + sizeof (USHORT), media_notification, - media_notification_length); + media_notification_length); /* Use case of memcpy is verified. */ /* Update the notification length. */ media_notification_length += (ULONG)sizeof (USHORT); @@ -146,8 +166,9 @@ ULONG notification_class; media_notification_length, media_notification_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; } /* Return completion status. */ diff --git a/common/usbx_device_classes/src/ux_device_class_storage_initialize.c b/common/usbx_device_classes/src/ux_device_class_storage_initialize.c index 5d01ace..2855498 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_initialize.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_initialize.c @@ -41,7 +41,7 @@ UCHAR _ux_system_slave_class_storage_product_serial[] = "123 /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_initialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -74,6 +74,11 @@ UCHAR _ux_system_slave_class_storage_product_serial[] = "123 /* 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 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_initialize(UX_SLAVE_CLASS_COMMAND *command) @@ -116,7 +121,7 @@ ULONG lun_index; _ux_device_class_storage_thread, (ULONG) (ALIGN_TYPE) class, (VOID *) class -> ux_slave_class_thread_stack, UX_THREAD_STACK_SIZE, UX_THREAD_PRIORITY_CLASS, - UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, TX_DONT_START); + UX_THREAD_PRIORITY_CLASS, UX_NO_TIME_SLICE, UX_DONT_START); else status = UX_MEMORY_INSUFFICIENT; diff --git a/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c b/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c index aa77c82..1cd1d05 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_inquiry.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < 24 +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH is too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_inquiry PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +77,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_inquiry(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in, @@ -83,7 +92,7 @@ UINT status; UX_SLAVE_TRANSFER *transfer_request; UCHAR inquiry_page_code; UCHAR inquiry_length; -UCHAR inquiry_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH]; +UCHAR *inquiry_buffer; UX_PARAMETER_NOT_USED(endpoint_out); @@ -99,13 +108,19 @@ UCHAR inquiry_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_L /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + /* Obtain inquiry buffer pointer. */ + inquiry_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; + /* Ensure the data buffer is cleaned. */ - _ux_utility_memory_set(inquiry_buffer, 0, UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH); + _ux_utility_memory_set(inquiry_buffer, 0, UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH); /* Use case of memset is verified. */ /* Check for the maximum length to be returned. */ if (inquiry_length > UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH) inquiry_length = UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH; + /* Default CSW to passed. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + /* Ensure we know about the page code. */ switch (inquiry_page_code) { @@ -132,29 +147,21 @@ UCHAR inquiry_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_L /* Fill in the storage vendor ID. */ _ux_utility_memory_copy(inquiry_buffer + UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_VENDOR_INFORMATION, - storage -> ux_slave_class_storage_vendor_id, 8); + storage -> ux_slave_class_storage_vendor_id, 8); /* Use case of memcpy is verified. */ /* Fill in the product vendor ID. */ _ux_utility_memory_copy(inquiry_buffer + UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_PRODUCT_ID, - storage -> ux_slave_class_storage_product_id, 16); + storage -> ux_slave_class_storage_product_id, 16); /* Use case of memcpy is verified. */ /* Fill in the product revision number. */ _ux_utility_memory_copy(inquiry_buffer + UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_PRODUCT_REVISION, - storage -> ux_slave_class_storage_product_rev, 4); - - /* Copy the Inquiry Buffer into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, inquiry_buffer, inquiry_length); + storage -> ux_slave_class_storage_product_rev, 4); /* Use case of memcpy is verified. */ /* Send a data payload with the inquiry response buffer. */ _ux_device_stack_transfer_request(transfer_request, inquiry_length, inquiry_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* Now success. */ + status = UX_SUCCESS; break; @@ -167,18 +174,13 @@ UCHAR inquiry_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_L _ux_utility_short_put_big_endian(transfer_request -> ux_slave_transfer_request_data_pointer + 2, 20); /* Copy the serial number buffer into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer + 4, storage -> ux_slave_class_storage_product_serial, 20); + _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer + 4, storage -> ux_slave_class_storage_product_serial, 20); /* Use case of memcpy is verified. */ /* Send a data payload with the inquiry response buffer. */ _ux_device_stack_transfer_request(transfer_request, 24, 24); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* Now success. */ + status = UX_SUCCESS; break; @@ -187,13 +189,12 @@ UCHAR inquiry_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_L /* The page code is not supported. */ _ux_device_stack_endpoint_stall(endpoint_in); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x05; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x26; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x01; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x05,0x26,0x01); + + /* Now we set the CSW with failure. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* Return error. */ status = UX_ERROR; diff --git a/common/usbx_device_classes/src/ux_device_class_storage_mode_select.c b/common/usbx_device_classes/src/ux_device_class_storage_mode_select.c index f314a52..08c3d7d 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_mode_select.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_mode_select.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_mode_select PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -70,6 +70,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_mode_select(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -77,6 +80,7 @@ UINT _ux_device_class_storage_mode_select(UX_SLAVE_CLASS_STORAGE *storage, ULON UX_SLAVE_ENDPOINT *endpoint_out, UCHAR * cbwcb) { + UX_PARAMETER_NOT_USED(endpoint_in); UX_PARAMETER_NOT_USED(cbwcb); /* If trace is enabled, insert this event into the trace buffer. */ @@ -85,13 +89,12 @@ UINT _ux_device_class_storage_mode_select(UX_SLAVE_CLASS_STORAGE *storage, ULON /* This command is not yet supported. So Stall the endpoint. */ _ux_device_stack_endpoint_stall(endpoint_out); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x05; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x26; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x01; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x05,0x26,0x01); + + /* Now we set the CSW with failure. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* Error trap. */ _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, UX_FUNCTION_NOT_SUPPORTED); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c b/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c index c7a1829..cffc6cf 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_mode_sense.c @@ -65,7 +65,7 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_mode_sense PORTABLE C */ -/* 6.0.2 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -104,11 +104,11 @@ UCHAR usbx_device_class_storage_mode_sense_page_cdrom[USBX_DEVICE_CLASS_STORAGE_ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ -/* 08-14-2020 Chaoqiong Xiao Modified comment(s), */ -/* used mode related macros, */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ /* verified memset and memcpy */ /* cases, */ -/* resulting in version 6.0.2 */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_mode_sense(UX_SLAVE_CLASS_STORAGE *storage, @@ -254,13 +254,9 @@ ULONG page_length; /* Send a payload with the response buffer. */ _ux_device_stack_transfer_request(transfer_request, mode_sense_reply_length, mode_sense_reply_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_prevent_allow_media_removal.c b/common/usbx_device_classes/src/ux_device_class_storage_prevent_allow_media_removal.c index 903922e..90d73df 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_prevent_allow_media_removal.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_prevent_allow_media_removal.c @@ -34,8 +34,9 @@ /* */ /* FUNCTION RELEASE */ /* */ -/* _ux_device_class_storage_prevent_allow_media_removal PORTABLE C */ -/* 6.0 */ +/* _ux_device_class_storage_prevent_allow_media_removal */ +/* PORTABLE C */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +70,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_prevent_allow_media_removal(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -76,19 +80,16 @@ UINT _ux_device_class_storage_prevent_allow_media_removal(UX_SLAVE_CLASS_STORAG UX_SLAVE_ENDPOINT *endpoint_out, UCHAR * cbwcb) { - UX_PARAMETER_NOT_USED(cbwcb); + UX_PARAMETER_NOT_USED(lun); + UX_PARAMETER_NOT_USED(endpoint_in); UX_PARAMETER_NOT_USED(endpoint_out); + UX_PARAMETER_NOT_USED(cbwcb); /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_PREVENT_ALLOW_MEDIA_REMOVAL, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) - /* We return a CSW with success. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* We set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return successful completion. */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read.c b/common/usbx_device_classes/src/ux_device_class_storage_read.c index 4fb48dd..79f00cf 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -75,6 +75,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -114,6 +117,9 @@ ULONG transfer_length; /* Compute the total length to transfer and how much remains. */ total_length = total_number_blocks * storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_block_length; + /* Default CSW to failed. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; + /* It may take several transfers to send the requested data. */ while (total_number_blocks) { @@ -123,9 +129,7 @@ ULONG transfer_length; storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_id, &media_status); /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; /* If there is a problem, return a failed command. */ if (status != UX_SUCCESS) @@ -135,9 +139,6 @@ ULONG transfer_length; REQUEST_SENSE command. */ _ux_device_stack_endpoint_stall(endpoint_in); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* Return an error. */ return(UX_ERROR); } @@ -173,12 +174,7 @@ ULONG transfer_length; _ux_device_stack_endpoint_stall(endpoint_in); /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); - - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; /* Return an error. */ return(UX_ERROR); @@ -196,13 +192,9 @@ ULONG transfer_length; _ux_device_stack_endpoint_stall(endpoint_in); /* Update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x02; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x54; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x02,0x54,0x00); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* Return an error. */ return(UX_ERROR); @@ -218,8 +210,8 @@ ULONG transfer_length; total_number_blocks -= number_blocks; } - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c b/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c index cd3a63a..62d4cf6 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read_capacity.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH is too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read_capacity PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +77,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read_capacity(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -83,7 +92,7 @@ UINT _ux_device_class_storage_read_capacity(UX_SLAVE_CLASS_STORAGE *storage, UL UINT status; ULONG media_status; UX_SLAVE_TRANSFER *transfer_request; -UCHAR read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH]; +UCHAR *read_capacity_buffer; UX_PARAMETER_NOT_USED(cbwcb); UX_PARAMETER_NOT_USED(endpoint_out); @@ -96,9 +105,7 @@ UCHAR read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACIT storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_id, &media_status); /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; /* Check the status for error. */ if (status != UX_SUCCESS) @@ -107,17 +114,21 @@ UCHAR read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACIT /* We need to STALL the IN endpoint. The endpoint will be reset by the host. */ _ux_device_stack_endpoint_stall(endpoint_in); - /* Now we return a CSW with Error. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); + /* Now we set the CSW with Error. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; + status = UX_SUCCESS; } else { /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + + /* Obtain read capacity response buffer. */ + read_capacity_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; /* Ensure it is cleaned. */ - _ux_utility_memory_set(read_capacity_buffer, 0, UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH); + _ux_utility_memory_set(read_capacity_buffer, 0, UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH); /* Use case of memcpy is verified. */ /* Insert the last LBA address in the response. */ _ux_utility_long_put_big_endian(&read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LAST_LBA], @@ -127,17 +138,14 @@ UCHAR read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACIT _ux_utility_long_put_big_endian(&read_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_BLOCK_SIZE], storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_block_length); - /* Copy the CSW into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - read_capacity_buffer, UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH); - /* Send a data payload with the read_capacity response buffer. */ _ux_device_stack_transfer_request(transfer_request, UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH, UX_SLAVE_CLASS_STORAGE_READ_CAPACITY_RESPONSE_LENGTH); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; } /* Return completion status. */ diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c b/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c index ad52508..213f711 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read_disk_information.c @@ -30,6 +30,9 @@ #include "ux_device_stack.h" #define USBX_DEVICE_CLASS_STORAGE_DISK_INFORMATION_LENGTH 34 +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < USBX_DEVICE_CLASS_STORAGE_DISK_INFORMATION_LENGTH +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH is too small, please check +#endif UCHAR usbx_device_class_storage_disk_information[] = { 0x00, 0x00, /* Entire length of disk_information */ @@ -61,7 +64,7 @@ UCHAR usbx_device_class_storage_disk_information[] = { /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read_disk_information PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -97,6 +100,11 @@ UCHAR usbx_device_class_storage_disk_information[] = { /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read_disk_information(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -143,15 +151,16 @@ ULONG allocation_length; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, usbx_device_class_storage_disk_information, - allocation_length); + allocation_length); /* Use case of memcpy is verified. */ /* Send a data payload with the read_capacity response buffer. */ _ux_device_stack_transfer_request(transfer_request, allocation_length, allocation_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_dvd_structure.c b/common/usbx_device_classes/src/ux_device_class_storage_read_dvd_structure.c index 5375fd0..46151ea 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read_dvd_structure.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read_dvd_structure.c @@ -162,7 +162,7 @@ UCHAR usbx_device_class_storage_dvd_structure[] = { /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read_dvd_structure PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -198,6 +198,11 @@ UCHAR usbx_device_class_storage_dvd_structure[] = { /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read_dvd_structure(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -249,7 +254,7 @@ UCHAR *dvd_structure_pointer; /* Copy the CSW into the transfer request memory. */ _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, dvd_structure_pointer, - transfer_length); + transfer_length); /* Use case of memcpy is verified. */ /* Send a data payload with the read_capacity response buffer. */ status = _ux_device_stack_transfer_request(transfer_request, @@ -267,8 +272,10 @@ UCHAR *dvd_structure_pointer; allocation_length -= transfer_length; } - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + UX_PARAMETER_NOT_USED(lun); + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c b/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c index 3be024e..18b0871 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read_format_capacity.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE < UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH +#error UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read_format_capacity PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +76,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read_format_capacity(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -81,7 +90,7 @@ UINT _ux_device_class_storage_read_format_capacity(UX_SLAVE_CLASS_STORAGE *stor UINT status; UX_SLAVE_TRANSFER *transfer_request; -UCHAR read_format_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH]; +UCHAR *read_format_capacity_buffer; UX_PARAMETER_NOT_USED(cbwcb); UX_PARAMETER_NOT_USED(endpoint_out); @@ -92,8 +101,11 @@ UCHAR read_format_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_ /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + /* Get read format capacity response buffer. */ + read_format_capacity_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; + /* Ensure it is cleaned. */ - _ux_utility_memory_set(read_format_capacity_buffer, 0, UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH); + _ux_utility_memory_set(read_format_capacity_buffer, 0, UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH); /* Use case of memset is verified. */ /* Insert the size of the response block. */ _ux_utility_long_put_big_endian(&read_format_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_SIZE], 8); @@ -109,17 +121,14 @@ UCHAR read_format_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_ /* Insert the response code : always 2. */ read_format_capacity_buffer[UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_DESC_CODE] = 2; - /* Copy the CSW into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - read_format_capacity_buffer, UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH); - /* Send a data payload with the read_capacity response buffer. */ _ux_device_stack_transfer_request(transfer_request, UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH, UX_SLAVE_CLASS_STORAGE_READ_FORMAT_CAPACITY_RESPONSE_LENGTH); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c b/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c index 515adfe..8a6486d 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_read_toc.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE < 20 +#error UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_read_toc PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -73,6 +77,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_read_toc(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -84,8 +93,10 @@ UINT status; UX_SLAVE_TRANSFER *transfer_request; ULONG allocation_length; ULONG toc_length; -UCHAR toc_buffer[20]; +UCHAR *toc_buffer; + + UX_PARAMETER_NOT_USED(lun); UX_PARAMETER_NOT_USED(endpoint_out); /* If trace is enabled, insert this event into the trace buffer. */ @@ -94,8 +105,11 @@ UCHAR toc_buffer[20]; /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + /* Obtain TOC buffer. */ + toc_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; + /* Reset this buffer. */ - _ux_utility_memory_set(toc_buffer,0,20); + _ux_utility_memory_set(toc_buffer,0,20); /* Use case of memset is verified. */ /* Get the allocation length. */ allocation_length = _ux_utility_short_get_big_endian(cbwcb + UX_SLAVE_CLASS_STORAGE_READ_TOC_ALLOCATION_LENGTH); @@ -166,9 +180,6 @@ UCHAR toc_buffer[20]; break; } - /* Copy the TOC Buffer into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, toc_buffer, toc_length); - /* Check how much we can send back. */ if (allocation_length > toc_length) @@ -178,8 +189,9 @@ UCHAR toc_buffer[20]; /* Send a data payload with the TOC response buffer. */ _ux_device_stack_transfer_request(transfer_request, allocation_length, allocation_length); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_report_key.c b/common/usbx_device_classes/src/ux_device_class_storage_report_key.c index 4deb505..70b1662 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_report_key.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_report_key.c @@ -29,12 +29,17 @@ #include "ux_device_class_storage.h" #include "ux_device_stack.h" + +#if UX_SLAVE_REQUEST_DATA_MAX_LENGTH < UX_SLAVE_CLASS_STORAGE_REPORT_KEY_ANSWER_LENGTH +#error UX_SLAVE_REQUEST_DATA_MAX_LENGTH too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_report_key PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +74,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_report_key(UX_SLAVE_CLASS_STORAGE *storage, @@ -83,6 +93,8 @@ UX_SLAVE_TRANSFER *transfer_request; ULONG allocation_length; ULONG key_format; + + UX_PARAMETER_NOT_USED(lun); UX_PARAMETER_NOT_USED(endpoint_out); /* If trace is enabled, insert this event into the trace buffer. */ @@ -98,7 +110,7 @@ ULONG key_format; allocation_length = _ux_utility_short_get_big_endian(cbwcb + UX_SLAVE_CLASS_STORAGE_REPORT_KEY_ALLOCATION_LENGTH); /* Ensure memory buffer cleaned. */ - _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, 64); + _ux_utility_memory_set(transfer_request -> ux_slave_transfer_request_data_pointer, 0, UX_SLAVE_CLASS_STORAGE_REPORT_KEY_ANSWER_LENGTH); /* Use case of memset is verified. */ /* Filter page code. This is necessary to isolate the CD-ROM mode sense response. */ switch (key_format) @@ -127,7 +139,7 @@ ULONG key_format; allocation_length = UX_SLAVE_CLASS_STORAGE_REPORT_KEY_ANSWER_LENGTH; /* Send a data payload with the read_capacity response buffer. */ - _ux_device_stack_transfer_request(transfer_request, allocation_length, allocation_length); + _ux_device_stack_transfer_request(transfer_request, allocation_length, allocation_length); /* Use case of memset is verified. */ break; @@ -139,13 +151,8 @@ ULONG key_format; } - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - - /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x00; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c b/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c index 8601187..6d7d4ef 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_request_sense.c @@ -30,12 +30,16 @@ #include "ux_device_stack.h" +#if UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE < UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH +#error UX_SLAVE_CLASS_STORAGE_BUFFER_SIZE too small, please check +#endif + /**************************************************************************/ /* */ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_request_sense PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -71,6 +75,11 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* verified memset and memcpy */ +/* cases, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_request_sense(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in, @@ -79,7 +88,9 @@ UINT _ux_device_class_storage_request_sense(UX_SLAVE_CLASS_STORAGE *storage, UL UINT status; UX_SLAVE_TRANSFER *transfer_request; -UCHAR sense_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LENGTH]; +UCHAR *sense_buffer; +UCHAR key, code, qualifier; + UX_PARAMETER_NOT_USED(cbwcb); UX_PARAMETER_NOT_USED(endpoint_out); @@ -87,44 +98,47 @@ UCHAR sense_buffer[UX_SLAVE_CLASS_STORAGE_INQUIRY_RESPONSE_LEN /* Obtain the pointer to the transfer request. */ transfer_request = &endpoint_in -> ux_slave_endpoint_transfer_request; + /* Obtain sense buffer. */ + sense_buffer = transfer_request -> ux_slave_transfer_request_data_pointer; + /* Ensure it is cleaned. */ - _ux_utility_memory_set(sense_buffer, 0, UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH); + _ux_utility_memory_set(sense_buffer, 0, UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH); /* Use case of memset is verified. */ /* Initialize the response buffer with the error code. */ sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_ERROR_CODE] = UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_ERROR_CODE_VALUE; + /* Extract sense key, code, qualifier. */ + key = UX_DEVICE_CLASS_STORAGE_SENSE_KEY(storage -> ux_slave_class_storage_lun[lun]. + ux_slave_class_storage_request_sense_status); + code = UX_DEVICE_CLASS_STORAGE_SENSE_CODE(storage -> ux_slave_class_storage_lun[lun]. + ux_slave_class_storage_request_sense_status); + qualifier = UX_DEVICE_CLASS_STORAGE_SENSE_QUALIFIER(storage -> ux_slave_class_storage_lun[lun]. + ux_slave_class_storage_request_sense_status); + /* Initialize the response buffer with the sense key. */ - sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_SENSE_KEY] = - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key; + sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_SENSE_KEY] = key; /* Initialize the response buffer with the code. */ - sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_CODE] = - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code; + sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_CODE] = code; /* Initialize the response buffer with the code qualifier. */ - sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_CODE_QUALIFIER] = - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier; + sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_CODE_QUALIFIER] = qualifier; /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_REQUEST_SENSE, storage, lun, - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key, - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) + key, code, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) /* Initialize the response buffer with the additional length. */ sense_buffer[UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_ADD_LENGTH] = 10; - - /* Copy the request sense response into the transfer request memory. */ - _ux_utility_memory_copy(transfer_request -> ux_slave_transfer_request_data_pointer, - sense_buffer, UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH); - /* Send a data payload with the sense codes. */ _ux_device_stack_transfer_request(transfer_request, UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH, UX_SLAVE_CLASS_STORAGE_REQUEST_SENSE_RESPONSE_LENGTH); - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_start_stop.c b/common/usbx_device_classes/src/ux_device_class_storage_start_stop.c index 2bd9f12..fbd7ae7 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_start_stop.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_start_stop.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_start_stop PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_start_stop(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -76,14 +79,16 @@ UINT _ux_device_class_storage_start_stop(UX_SLAVE_CLASS_STORAGE *storage, ULONG UX_SLAVE_ENDPOINT *endpoint_out, UCHAR * cbwcb) { - UX_PARAMETER_NOT_USED(cbwcb); + UX_PARAMETER_NOT_USED(lun); + UX_PARAMETER_NOT_USED(endpoint_in); UX_PARAMETER_NOT_USED(endpoint_out); + UX_PARAMETER_NOT_USED(cbwcb); /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_START_STOP, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) - /* We return a CSW with success. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* We set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return successful completion. */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_synchronize_cache.c b/common/usbx_device_classes/src/ux_device_class_storage_synchronize_cache.c index bff1623..5428a91 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_synchronize_cache.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_synchronize_cache.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_synchronize_cache PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -75,6 +75,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_synchronize_cache(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -92,15 +95,15 @@ UCHAR flags; UX_PARAMETER_NOT_USED(endpoint_out); UX_PARAMETER_NOT_USED(scsi_command); + /* By default status is passed. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; + /* Is there not an implementation? */ if (storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_flush == UX_NULL) { /* This means the application is not using a cache. */ - /* Return a CSW with success. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - /* Return success. */ return(UX_SUCCESS); } @@ -119,9 +122,7 @@ UCHAR flags; lun, storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_id, &media_status); /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; /* If there is a problem, return a failed command. */ if (status != UX_SUCCESS) @@ -131,7 +132,7 @@ UCHAR flags; REQUEST_SENSE command. */ _ux_device_stack_endpoint_stall(endpoint_in); - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* We are done here. */ return(UX_ERROR); @@ -145,13 +146,16 @@ UCHAR flags; status = storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_flush(storage, lun, number_blocks, lba, &media_status); /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; /* If the immediate bit is set, we are already done, no matter what local operation status is. */ if ((flags & UX_SLAVE_CLASS_STORAGE_SYNCHRONIZE_CACHE_FLAGS_IMMED) != 0) + { + + /* CSW skipped since already sent in this function. */ + UX_DEVICE_CLASS_STORAGE_CSW_SKIP(&storage -> ux_slave_class_storage_csw_status) = UX_TRUE; return(status); + } /* If there is a problem, return a failed command. */ if (status != UX_SUCCESS) @@ -161,13 +165,11 @@ UCHAR flags; REQUEST_SENSE command. */ _ux_device_stack_endpoint_stall(endpoint_in); - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* Return an error. */ return(UX_ERROR); } - else - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_test_ready.c b/common/usbx_device_classes/src/ux_device_class_storage_test_ready.c index 8444133..295ade0 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_test_ready.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_test_ready.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_test_ready PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -72,6 +72,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_test_ready(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, UX_SLAVE_ENDPOINT *endpoint_in, @@ -81,8 +84,10 @@ UINT _ux_device_class_storage_test_ready(UX_SLAVE_CLASS_STORAGE *storage, ULONG UINT status; ULONG media_status; - UX_PARAMETER_NOT_USED(cbwcb); + UX_PARAMETER_NOT_USED(lun); + UX_PARAMETER_NOT_USED(endpoint_in); UX_PARAMETER_NOT_USED(endpoint_out); + UX_PARAMETER_NOT_USED(cbwcb); /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_TEST_READY, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) @@ -92,23 +97,12 @@ ULONG media_status; storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_id, &media_status); /* Set the sense/code/qualifier codes for the REQUEST_SENSE command. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = ((media_status >> 8) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = ((media_status >> 16) & 0xff); - - /* Check the status for error. */ - if (status != UX_SUCCESS) - { - - /* We return a CSW with error. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - } - else - { + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; - /* We return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); - } + /* Return CSW with success/error. */ + storage -> ux_slave_class_storage_csw_status = (status == UX_SUCCESS) ? + UX_SLAVE_CLASS_STORAGE_CSW_PASSED : UX_SLAVE_CLASS_STORAGE_CSW_FAILED; + status = UX_SUCCESS; /* Return completion status. */ return(status); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_thread.c b/common/usbx_device_classes/src/ux_device_class_storage_thread.c index 790fec3..3fa1d29 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_thread.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_thread.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_thread PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -80,6 +80,7 @@ /* _ux_utility_long_get Get 32-bit value */ /* _ux_utility_memory_allocate Allocate memory */ /* _ux_utility_semaphore_create Create semaphore */ +/* _ux_utility_delay_ms Sleep thread for several ms */ /* _ux_utility_thread_suspend Suspend thread */ /* */ /* CALLED BY */ @@ -91,6 +92,14 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* used sleep instead of */ +/* relinquish on error, */ +/* optimized command logic, */ +/* used UX prefix to refer to */ +/* TX symbols instead of using */ +/* them directly, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ VOID _ux_device_class_storage_thread(ULONG storage_class) @@ -158,7 +167,7 @@ UCHAR *scsi_command; /* Check state, they must be both RESET. */ if (endpoint_out -> ux_slave_endpoint_state == UX_ENDPOINT_RESET && - !storage -> ux_slave_class_storage_phase_error) + (UCHAR)storage -> ux_slave_class_storage_csw_status != UX_SLAVE_CLASS_STORAGE_CSW_PHASE_ERROR) { /* Send the request to the device controller. */ @@ -344,9 +353,9 @@ UCHAR *scsi_command; _ux_device_stack_endpoint_stall(endpoint_in); /* Initialize the request sense keys. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = UX_SLAVE_CLASS_STORAGE_SENSE_KEY_ILLEGAL_REQUEST; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = UX_SLAVE_CLASS_STORAGE_ASC_KEY_INVALID_COMMAND; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(UX_SLAVE_CLASS_STORAGE_SENSE_KEY_ILLEGAL_REQUEST, + UX_SLAVE_CLASS_STORAGE_ASC_KEY_INVALID_COMMAND,0); /* This is the tricky part of the SCSI state machine. We must send the CSW BUT need to wait for the endpoint_in to be reset by the host. */ @@ -357,15 +366,8 @@ UCHAR *scsi_command; if (endpoint_in -> ux_slave_endpoint_state == UX_ENDPOINT_RESET) { - /* Now we return a CSW with failure. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - - /* Check error code. */ - if (status != UX_SUCCESS) - - /* Error trap. */ - _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, status); - + /* Now we set the CSW with failure. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; break; } @@ -376,27 +378,36 @@ UCHAR *scsi_command; } break; } + + /* Send CSW if not SYNC_CACHE. */ + status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, 0 /* Don't care */); + + /* Check error code. */ + if (status != UX_SUCCESS) + + /* Error trap. */ + _ux_system_error_handler(UX_SYSTEM_LEVEL_THREAD, UX_SYSTEM_CONTEXT_CLASS, status); } else /* Phase error! */ - storage -> ux_slave_class_storage_phase_error = TX_TRUE; + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PHASE_ERROR; } else /* Phase error! */ - storage -> ux_slave_class_storage_phase_error = TX_TRUE; + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PHASE_ERROR; } else /* Phase error! */ - storage -> ux_slave_class_storage_phase_error = TX_TRUE; + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PHASE_ERROR; } else { - if (storage -> ux_slave_class_storage_phase_error == TX_TRUE) + if ((UCHAR)storage -> ux_slave_class_storage_csw_status == UX_SLAVE_CLASS_STORAGE_CSW_PHASE_ERROR) { /* We should keep the endpoints stalled. */ @@ -405,7 +416,7 @@ UCHAR *scsi_command; } /* We must therefore wait a while. */ - _ux_utility_thread_relinquish(); + _ux_utility_delay_ms(2); } } diff --git a/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c b/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c index 112225a..1785008 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_uninitialize.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_uninitialize PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -66,6 +66,8 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_uninitialize(UX_SLAVE_CLASS_COMMAND *command) diff --git a/common/usbx_device_classes/src/ux_device_class_storage_verify.c b/common/usbx_device_classes/src/ux_device_class_storage_verify.c index c915ec6..2069cbd 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_verify.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_verify.c @@ -35,7 +35,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_verify PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -69,6 +69,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_verify(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -76,14 +79,16 @@ UINT _ux_device_class_storage_verify(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun UX_SLAVE_ENDPOINT *endpoint_out, UCHAR * cbwcb) { + UX_PARAMETER_NOT_USED(lun); UX_PARAMETER_NOT_USED(cbwcb); + UX_PARAMETER_NOT_USED(endpoint_in); UX_PARAMETER_NOT_USED(endpoint_out); /* If trace is enabled, insert this event into the trace buffer. */ UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_STORAGE_VERIFY, storage, lun, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0) - /* We return a CSW with success. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* We set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return success! */ return(UX_SUCCESS); diff --git a/common/usbx_device_classes/src/ux_device_class_storage_write.c b/common/usbx_device_classes/src/ux_device_class_storage_write.c index dbf0b49..c42bf10 100644 --- a/common/usbx_device_classes/src/ux_device_class_storage_write.c +++ b/common/usbx_device_classes/src/ux_device_class_storage_write.c @@ -34,7 +34,7 @@ /* FUNCTION RELEASE */ /* */ /* _ux_device_class_storage_write PORTABLE C */ -/* 6.0 */ +/* 6.1 */ /* AUTHOR */ /* */ /* Chaoqiong Xiao, Microsoft Corporation */ @@ -77,6 +77,9 @@ /* DATE NAME DESCRIPTION */ /* */ /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ +/* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ +/* optimized command logic, */ +/* resulting in version 6.1 */ /* */ /**************************************************************************/ UINT _ux_device_class_storage_write(UX_SLAVE_CLASS_STORAGE *storage, ULONG lun, @@ -93,6 +96,8 @@ ULONG media_status; ULONG total_length; ULONG transfer_length; + UX_PARAMETER_NOT_USED(endpoint_in); + /* Get the LBA from the CBWCB. */ lba = _ux_utility_long_get_big_endian(cbwcb + UX_SLAVE_CLASS_STORAGE_WRITE_LBA); @@ -119,9 +124,10 @@ ULONG transfer_length; lun, storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_media_id, &media_status); /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; + + /* Default CSW to failed. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_FAILED; /* If there is a problem, return a failed command. */ if (status != UX_SUCCESS) @@ -131,9 +137,6 @@ ULONG transfer_length; REQUEST_SENSE command. */ _ux_device_stack_endpoint_stall(endpoint_out); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* We are done here. */ return(UX_ERROR); } @@ -143,17 +146,14 @@ ULONG transfer_length; { /* Update the request sense. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = UX_SLAVE_CLASS_STORAGE_SENSE_KEY_DATA_PROTECT; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = UX_SLAVE_CLASS_STORAGE_REQUEST_CODE_MEDIA_PROTECTED; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(UX_SLAVE_CLASS_STORAGE_SENSE_KEY_DATA_PROTECT, + UX_SLAVE_CLASS_STORAGE_REQUEST_CODE_MEDIA_PROTECTED,0); /* We have a problem, cannot write to RO drive. Return a bad completion and wait for the REQUEST_SENSE command. */ _ux_device_stack_endpoint_stall(endpoint_out); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* We are done here. */ return(UX_ERROR); } @@ -186,13 +186,9 @@ ULONG transfer_length; _ux_device_stack_endpoint_stall(endpoint_out); /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = 0x02; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = 0x54; - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = 0x00; + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = + UX_DEVICE_CLASS_STORAGE_SENSE_STATUS(0x02,0x54,0x00); - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* Return an error. */ return(UX_ERROR); } @@ -212,13 +208,8 @@ ULONG transfer_length; _ux_device_stack_endpoint_stall(endpoint_out); /* And update the REQUEST_SENSE codes. */ - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_key = (UCHAR) (media_status & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code = (UCHAR) ((media_status >> 8 ) & 0xff); - storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_code_qualifier = (UCHAR) ((media_status >> 16 ) & 0xff); + storage -> ux_slave_class_storage_lun[lun].ux_slave_class_storage_request_sense_status = media_status; - /* Now we return a CSW with failure. */ - _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_FAILED); - /* Return an error. */ return(UX_ERROR); } @@ -230,8 +221,8 @@ ULONG transfer_length; total_length -= transfer_length; } - /* Now we return a CSW with success. */ - status = _ux_device_class_storage_csw_send(storage, lun, endpoint_in, UX_SLAVE_CLASS_STORAGE_CSW_PASSED); + /* Now we set the CSW with success. */ + storage -> ux_slave_class_storage_csw_status = UX_SLAVE_CLASS_STORAGE_CSW_PASSED; /* Return completion status. */ return(status); |
