forked from PAWPAW-Mirror/lib_xua
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.
This commit is contained in:
@@ -11,17 +11,12 @@
|
|||||||
#if( 0 < HID_CONTROLS )
|
#if( 0 < HID_CONTROLS )
|
||||||
#define MS_IN_TICKS 100000U
|
#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_hidCurrentPeriod = ENDPOINT_INT_INTERVAL_IN_HID * MS_IN_TICKS;
|
||||||
static unsigned s_hidIdleActive = 0U;
|
static unsigned s_hidIdleActive = 0U;
|
||||||
static unsigned s_hidIndefiniteDuration = 0U;
|
static unsigned s_hidIndefiniteDuration = 0U;
|
||||||
static unsigned s_hidNextReportTime = 0U;
|
static unsigned s_hidNextReportTime = 0U;
|
||||||
static unsigned s_hidReportTime = 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 HidCalcNewReportTime( const unsigned currentPeriod, const unsigned reportTime, const unsigned reportToSetIdleInterval, const unsigned newPeriod );
|
||||||
static unsigned HidCalcReportToSetIdleInterval( const unsigned reportTime );
|
static unsigned HidCalcReportToSetIdleInterval( const unsigned reportTime );
|
||||||
static unsigned HidFindSetIdleActivationPoint( const unsigned currentPeriod, const unsigned timeWithinPeriod );
|
static unsigned HidFindSetIdleActivationPoint( const unsigned currentPeriod, const unsigned timeWithinPeriod );
|
||||||
@@ -58,18 +53,6 @@ XUD_Result_t HidInterfaceClassRequests(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HidClearChangePending( void )
|
|
||||||
{
|
|
||||||
unsafe {
|
|
||||||
*s_hidChangePendingPtr = 0U;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned HidIsChangePending( void )
|
|
||||||
{
|
|
||||||
return( s_hidChangePending != 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned HidIsSetIdleSilenced( void )
|
unsigned HidIsSetIdleSilenced( void )
|
||||||
{
|
{
|
||||||
unsigned isSilenced = s_hidIdleActive;
|
unsigned isSilenced = s_hidIdleActive;
|
||||||
@@ -86,13 +69,6 @@ unsigned HidIsSetIdleSilenced( void )
|
|||||||
return isSilenced;
|
return isSilenced;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HidSetChangePending( void )
|
|
||||||
{
|
|
||||||
unsafe {
|
|
||||||
*s_hidChangePendingPtr = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Calculate the timer value for sending the next HID Report.
|
* \brief Calculate the timer value for sending the next HID Report.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -13,10 +13,13 @@
|
|||||||
#define HID_REPORT_DESCRIPTOR_MAX_LENGTH ( HID_REPORT_DESCRIPTOR_ITEM_COUNT * \
|
#define HID_REPORT_DESCRIPTOR_MAX_LENGTH ( HID_REPORT_DESCRIPTOR_ITEM_COUNT * \
|
||||||
( sizeof ( USB_HID_Short_Item_t ) - HID_REPORT_ITEM_LOCATION_SIZE ))
|
( 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 unsigned char hidReportDescriptor[ HID_REPORT_DESCRIPTOR_MAX_LENGTH ];
|
||||||
static size_t hidReportDescriptorLength = 0U;
|
static size_t hidReportDescriptorLength = 0U;
|
||||||
static unsigned hidReportDescriptorPrepared = 0U;
|
static unsigned hidReportDescriptorPrepared = 0U;
|
||||||
|
|
||||||
|
volatile unsigned* s_hidChangePendingPtr = &hidChangePending;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the bit position from the location of a report element
|
* @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 );
|
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 )
|
static unsigned hidGetElementBitLocation( const unsigned short location )
|
||||||
{
|
{
|
||||||
unsigned bBit = ( location & HID_REPORT_ELEMENT_LOC_BIT_MASK ) >> HID_REPORT_ELEMENT_LOC_BIT_SHIFT;
|
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;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned hidIsChangePending( void )
|
||||||
|
{
|
||||||
|
return( s_hidChangePending != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
void hidPrepareReportDescriptor( void )
|
void hidPrepareReportDescriptor( void )
|
||||||
{
|
{
|
||||||
if( !hidReportDescriptorPrepared ) {
|
if( !hidReportDescriptorPrepared ) {
|
||||||
@@ -264,6 +277,11 @@ void hidResetReportDescriptor( void )
|
|||||||
hidReportDescriptorPrepared = 0U;
|
hidReportDescriptorPrepared = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hidSetChangePending( void )
|
||||||
|
{
|
||||||
|
s_hidChangePending = 1;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned hidSetReportItem(
|
unsigned hidSetReportItem(
|
||||||
const unsigned id,
|
const unsigned id,
|
||||||
const unsigned byte,
|
const unsigned byte,
|
||||||
|
|||||||
@@ -41,17 +41,6 @@ XUD_Result_t HidInterfaceClassRequests(
|
|||||||
XUD_ep c_ep0_in,
|
XUD_ep c_ep0_in,
|
||||||
REFERENCE_PARAM( USB_SetupPacket_t, sp ));
|
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.
|
* \brief Indicate whether to send a HID Report based on elapsed time.
|
||||||
*
|
*
|
||||||
@@ -70,9 +59,4 @@ unsigned HidIsChangePending( void );
|
|||||||
*/
|
*/
|
||||||
unsigned HidIsSetIdleSilenced( void );
|
unsigned HidIsSetIdleSilenced( void );
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Register that a change to the HID Report data has been received.
|
|
||||||
*/
|
|
||||||
void HidSetChangePending( void );
|
|
||||||
|
|
||||||
#endif // __XUA_HID_H__
|
#endif // __XUA_HID_H__
|
||||||
|
|||||||
@@ -87,6 +87,16 @@ typedef struct
|
|||||||
unsigned short location;
|
unsigned short location;
|
||||||
} USB_HID_Report_Element_t;
|
} 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
|
* @brief Get the HID Report descriptor
|
||||||
*
|
*
|
||||||
@@ -180,6 +190,22 @@ unsigned hidGetReportItem(
|
|||||||
*/
|
*/
|
||||||
size_t hidGetReportLength( const unsigned id );
|
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
|
* @brief Prepare the USB HID Report descriptor
|
||||||
*
|
*
|
||||||
@@ -197,6 +223,15 @@ void hidPrepareReportDescriptor( void );
|
|||||||
*/
|
*/
|
||||||
void hidResetReportDescriptor( 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
|
* @brief Modify a HID Report descriptor item
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user