1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 12 /**************************************************************************/ 13 /**************************************************************************/ 14 /** */ 15 /** USBX Component */ 16 /** */ 17 /** Audio Class */ 18 /** */ 19 /**************************************************************************/ 20 /**************************************************************************/ 21 22 23 /* Include necessary system files. */ 24 25 #define UX_SOURCE_CODE 26 27 #include "ux_api.h" 28 #include "ux_host_class_audio.h" 29 #include "ux_host_stack.h" 30 31 32 #if defined(UX_HOST_CLASS_AUDIO_FEEDBACK_SUPPORT) 33 /**************************************************************************/ 34 /* */ 35 /* FUNCTION RELEASE */ 36 /* */ 37 /* _ux_host_class_audio_feedback_transfer_completed PORTABLE C */ 38 /* 6.1.12 */ 39 /* AUTHOR */ 40 /* */ 41 /* Chaoqiong Xiao, Microsoft Corporation */ 42 /* */ 43 /* DESCRIPTION */ 44 /* */ 45 /* This function receives a completion call back on a isoch transfer */ 46 /* request. */ 47 /* */ 48 /* INPUT */ 49 /* */ 50 /* transfer_request Pointer to transfer request */ 51 /* */ 52 /* OUTPUT */ 53 /* */ 54 /* None */ 55 /* */ 56 /* CALLS */ 57 /* */ 58 /* */ 59 /* CALLED BY */ 60 /* */ 61 /* HCD */ 62 /* */ 63 /* RELEASE HISTORY */ 64 /* */ 65 /* DATE NAME DESCRIPTION */ 66 /* */ 67 /* 07-29-2022 Chaoqiong Xiao Initial Version 6.1.12 */ 68 /* */ 69 /**************************************************************************/ _ux_host_class_audio_feedback_transfer_completed(UX_TRANSFER * transfer_request)70VOID _ux_host_class_audio_feedback_transfer_completed(UX_TRANSFER *transfer_request) 71 { 72 UX_HOST_CLASS_AUDIO *audio; 73 UX_ENDPOINT *endpoint; 74 ULONG endpoint_dir; 75 76 /* Check status. */ 77 if (transfer_request -> ux_transfer_request_completion_code != UX_SUCCESS) 78 return; 79 80 /* Sync with feedback buffer. */ 81 audio = (UX_HOST_CLASS_AUDIO *) transfer_request -> ux_transfer_request_class_instance; 82 endpoint = transfer_request -> ux_transfer_request_endpoint; 83 endpoint_dir = endpoint -> ux_endpoint_descriptor.bEndpointAddress & UX_ENDPOINT_DIRECTION; 84 if (endpoint_dir == UX_ENDPOINT_IN) 85 { 86 _ux_utility_memory_copy(audio -> ux_host_class_audio_feedback_buffer, 87 transfer_request -> ux_transfer_request_data_pointer, 88 sizeof(audio -> ux_host_class_audio_feedback_buffer)); /* Use case of memcpy is verified. */ 89 } 90 91 /* Issue another request again. */ 92 _ux_host_stack_transfer_request(transfer_request); 93 } 94 #endif 95