From b85358912032eeb825a9aae42d6d9a3fcc701a50 Mon Sep 17 00:00:00 2001 From: mbanth Date: Tue, 30 Nov 2021 18:29:17 +0000 Subject: [PATCH] Move the HID Clear Pending, Is Pending and Set Pending functions from hid.xc to hid_report_descriptor.c. These functions are called from the application so they do not belong in hid.xc which contains internal XUA functionality. --- lib_xua/src/hid/hid.xc | 24 -------------- lib_xua/src/hid/hid_report_descriptor.c | 18 +++++++++++ lib_xua/src/hid/xua_hid.h | 16 ---------- lib_xua/src/hid/xua_hid_report_descriptor.h | 35 +++++++++++++++++++++ 4 files changed, 53 insertions(+), 40 deletions(-) diff --git a/lib_xua/src/hid/hid.xc b/lib_xua/src/hid/hid.xc index f3c741a1..5761a776 100644 --- a/lib_xua/src/hid/hid.xc +++ b/lib_xua/src/hid/hid.xc @@ -11,17 +11,12 @@ #if( 0 < HID_CONTROLS ) #define MS_IN_TICKS 100000U -static unsigned s_hidChangePending = 0U; static unsigned s_hidCurrentPeriod = ENDPOINT_INT_INTERVAL_IN_HID * MS_IN_TICKS; static unsigned s_hidIdleActive = 0U; static unsigned s_hidIndefiniteDuration = 0U; static unsigned s_hidNextReportTime = 0U; static unsigned s_hidReportTime = 0U; -unsafe { - volatile unsigned * unsafe s_hidChangePendingPtr = &s_hidChangePending; -} - static unsigned HidCalcNewReportTime( const unsigned currentPeriod, const unsigned reportTime, const unsigned reportToSetIdleInterval, const unsigned newPeriod ); static unsigned HidCalcReportToSetIdleInterval( const unsigned reportTime ); static unsigned HidFindSetIdleActivationPoint( const unsigned currentPeriod, const unsigned timeWithinPeriod ); @@ -58,18 +53,6 @@ XUD_Result_t HidInterfaceClassRequests( return result; } -void HidClearChangePending( void ) -{ - unsafe { - *s_hidChangePendingPtr = 0U; - } -} - -unsigned HidIsChangePending( void ) -{ - return( s_hidChangePending != 0 ); -} - unsigned HidIsSetIdleSilenced( void ) { unsigned isSilenced = s_hidIdleActive; @@ -86,13 +69,6 @@ unsigned HidIsSetIdleSilenced( void ) return isSilenced; } -void HidSetChangePending( void ) -{ - unsafe { - *s_hidChangePendingPtr = 1; - } -} - /** * \brief Calculate the timer value for sending the next HID Report. * diff --git a/lib_xua/src/hid/hid_report_descriptor.c b/lib_xua/src/hid/hid_report_descriptor.c index 399d82c7..74517a29 100644 --- a/lib_xua/src/hid/hid_report_descriptor.c +++ b/lib_xua/src/hid/hid_report_descriptor.c @@ -13,10 +13,13 @@ #define HID_REPORT_DESCRIPTOR_MAX_LENGTH ( HID_REPORT_DESCRIPTOR_ITEM_COUNT * \ ( sizeof ( USB_HID_Short_Item_t ) - HID_REPORT_ITEM_LOCATION_SIZE )) +static unsigned hidChangePending = 0U; static unsigned char hidReportDescriptor[ HID_REPORT_DESCRIPTOR_MAX_LENGTH ]; static size_t hidReportDescriptorLength = 0U; static unsigned hidReportDescriptorPrepared = 0U; +volatile unsigned* s_hidChangePendingPtr = &hidChangePending; + /** * @brief Get the bit position from the location of a report element * @@ -121,6 +124,11 @@ static unsigned hidGetUsagePage( const unsigned id ); static size_t hidTranslateItem( const USB_HID_Short_Item_t* inPtr, unsigned char** outPtrPtr ); +void hidClearChangePending( void ) +{ + s_hidChangePending = 0U; +} + static unsigned hidGetElementBitLocation( const unsigned short location ) { unsigned bBit = ( location & HID_REPORT_ELEMENT_LOC_BIT_MASK ) >> HID_REPORT_ELEMENT_LOC_BIT_SHIFT; @@ -245,6 +253,11 @@ static unsigned hidGetUsagePage( const unsigned id ) return retVal; } +unsigned hidIsChangePending( void ) +{ + return( s_hidChangePending != 0 ); +} + void hidPrepareReportDescriptor( void ) { if( !hidReportDescriptorPrepared ) { @@ -264,6 +277,11 @@ void hidResetReportDescriptor( void ) hidReportDescriptorPrepared = 0U; } +void hidSetChangePending( void ) +{ + s_hidChangePending = 1; +} + unsigned hidSetReportItem( const unsigned id, const unsigned byte, diff --git a/lib_xua/src/hid/xua_hid.h b/lib_xua/src/hid/xua_hid.h index 1344b5a2..9d8f1f82 100644 --- a/lib_xua/src/hid/xua_hid.h +++ b/lib_xua/src/hid/xua_hid.h @@ -41,17 +41,6 @@ XUD_Result_t HidInterfaceClassRequests( XUD_ep c_ep0_in, REFERENCE_PARAM( USB_SetupPacket_t, sp )); -/** - * \brief Register that previously changed HID Report data has reported - * to the USB Host. - */ -void HidClearChangePending( void ); - -/** - * \brief Indicate if a change to the HID Report data has been received. - */ -unsigned HidIsChangePending( void ); - /** * \brief Indicate whether to send a HID Report based on elapsed time. * @@ -70,9 +59,4 @@ unsigned HidIsChangePending( void ); */ unsigned HidIsSetIdleSilenced( void ); -/** - * \brief Register that a change to the HID Report data has been received. - */ -void HidSetChangePending( void ); - #endif // __XUA_HID_H__ diff --git a/lib_xua/src/hid/xua_hid_report_descriptor.h b/lib_xua/src/hid/xua_hid_report_descriptor.h index c9312be2..1196d347 100644 --- a/lib_xua/src/hid/xua_hid_report_descriptor.h +++ b/lib_xua/src/hid/xua_hid_report_descriptor.h @@ -87,6 +87,16 @@ typedef struct unsigned short location; } USB_HID_Report_Element_t; +/** + * \brief Register that previously changed HID Report data has been sent + * to the USB Host. + * + * \param[in] id A HID Report ID. + * Zero clears the pending status of all Report IDs. + * Use zero if the application does not use Report IDs. + */ +void hidClearChangePending( const unsigned id ); + /** * @brief Get the HID Report descriptor * @@ -180,6 +190,22 @@ unsigned hidGetReportItem( */ size_t hidGetReportLength( const unsigned id ); +/** + * \brief Indicate if a change to the HID Report data has been received. + * + * \param[in] id A HID Report ID. + * Zero reports the pending status of all Report IDs. + * Use zero if the application does not use Report IDs. + * + * \returns A Boolean indicating whether the given \a id has a changed + * HID Report not yet sent to the USB Host. + * \retval True The given \a id has changed HID Report data. + * For an \a id of zero, some HID Report has changed data. + * \retval False The given \a id does not have changed HID Report data. + * For an \a id of zero, no HID Report has changed data. + */ +unsigned hidIsChangePending( const unsigned id ); + /** * @brief Prepare the USB HID Report descriptor * @@ -197,6 +223,15 @@ void hidPrepareReportDescriptor( void ); */ void hidResetReportDescriptor( void ); +/** + * \brief Register that a change to the HID Report data has been received. + * + * \param[in] id A HID Report ID. + * Zero reports the pending status of all Report IDs. + * Use zero if the application does not use Report IDs. + */ +void hidSetChangePending( const unsigned id ); + /** * @brief Modify a HID Report descriptor item *