forked from PAWPAW-Mirror/lib_xua
Merge pull request #111 from mbanth/feature/hid_4bit_reliance_jan_demo
Feature/hid 4bit reliance jan demo
This commit is contained in:
@@ -11,6 +11,8 @@ lib_xua Change Log
|
|||||||
microphone operation
|
microphone operation
|
||||||
* FIXED: Descriptors for XUA_ADAPTIVE incorrectly defined for IN endpoint
|
* FIXED: Descriptors for XUA_ADAPTIVE incorrectly defined for IN endpoint
|
||||||
* ADDED: Guards to user_hid.h and xua_hid.h
|
* ADDED: Guards to user_hid.h and xua_hid.h
|
||||||
|
* ADDED: UAC1 HID support for AC Stop (End Call), Volume Increment and
|
||||||
|
Volume Decrement
|
||||||
|
|
||||||
0.2.1
|
0.2.1
|
||||||
-----
|
-----
|
||||||
|
|||||||
@@ -880,7 +880,7 @@ void XUA_Buffer_Ep(register chanend c_aud_out,
|
|||||||
case XUD_SetData_Select(c_hid, ep_hid, result):
|
case XUD_SetData_Select(c_hid, ep_hid, result):
|
||||||
{
|
{
|
||||||
g_hidData[0]=0;
|
g_hidData[0]=0;
|
||||||
UserReadHIDData(g_hidData);
|
g_hidData[0]=UserHIDGetData();
|
||||||
XUD_SetReady_In(ep_hid, g_hidData, 1);
|
XUD_SetReady_In(ep_hid, g_hidData, 1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -572,10 +572,16 @@ unsigned char hidReportDescriptor[] = /* Voice Command usage as per request #HUT
|
|||||||
0xa1, 0x01, /* Collection (Application) */
|
0xa1, 0x01, /* Collection (Application) */
|
||||||
0x0a, 0x00, 0x02, /* Usage (Generic GUI Application Controls) */
|
0x0a, 0x00, 0x02, /* Usage (Generic GUI Application Controls) */
|
||||||
0xa1, 0x02, /* Collection (Logical) */
|
0xa1, 0x02, /* Collection (Logical) */
|
||||||
0x0a, 0x21, 0x02, /* Usage (AC Search) */
|
|
||||||
0x95, 0x01, /* Report Count (1) */
|
0x95, 0x01, /* Report Count (1) */
|
||||||
|
0x0a, 0x21, 0x02, /* Usage (AC Search) */
|
||||||
0x81, 0x40, /* Input (Data, Ary, Abs, Nul) */
|
0x81, 0x40, /* Input (Data, Ary, Abs, Nul) */
|
||||||
0x95, 0x07, /* Report Count (7) */
|
0x0a, 0x26, 0x02, /* Usage (AC Stop) */
|
||||||
|
0x81, 0x40, /* Input (Data, Ary, Abs, Nul) */
|
||||||
|
0x09, 0xe9, /* Usage (Volume Increment) */
|
||||||
|
0x81, 0x40, /* Input (Data, Ary, Abs, Nul) */
|
||||||
|
0x09, 0xea, /* Usage (Volume Decrement) */
|
||||||
|
0x81, 0x40, /* Input (Data, Ary, Abs, Nul) */
|
||||||
|
0x95, 0x04, /* Report Count (4) */
|
||||||
0x81, 0x01, /* Input (Cnst, Ary, Abs) */
|
0x81, 0x01, /* Input (Cnst, Ary, Abs) */
|
||||||
0xc0, /* End collection (Logical) */
|
0xc0, /* End collection (Logical) */
|
||||||
0xc0 /* End collection (Application) */
|
0xc0 /* End collection (Application) */
|
||||||
@@ -2884,7 +2890,7 @@ unsigned char cfgDesc_Audio1[] =
|
|||||||
0x00, /* 4 bCountryCode */
|
0x00, /* 4 bCountryCode */
|
||||||
0x01, /* 5 bNumDescriptors */
|
0x01, /* 5 bNumDescriptors */
|
||||||
0x22, /* 6 bDescriptorType[0] (Report) */
|
0x22, /* 6 bDescriptorType[0] (Report) */
|
||||||
0x1E, /* 7 wDescriptorLength[0] */
|
0x2B, /* 7 wDescriptorLength[0] */
|
||||||
0x00, /* 8 wDescriptorLength[0] */
|
0x00, /* 8 wDescriptorLength[0] */
|
||||||
|
|
||||||
/* HID Endpoint descriptor (IN) */
|
/* HID Endpoint descriptor (IN) */
|
||||||
|
|||||||
@@ -3,21 +3,49 @@
|
|||||||
#ifndef __USER_HID_H__
|
#ifndef __USER_HID_H__
|
||||||
#define __USER_HID_H__
|
#define __USER_HID_H__
|
||||||
|
|
||||||
/* These defines relate to the HID report desc - do not mod */
|
/* These enumerated constants relate to the HID report desc - do not mod */
|
||||||
#define HID_CONTROL_PLAYPAUSE_SHIFT 0x00
|
typedef enum hidEventId_t {
|
||||||
#define HID_CONTROL_NEXT_SHIFT 0x01
|
HID_EVENT_ID_GPI0 = 0,
|
||||||
#define HID_CONTROL_PREV_SHIFT 0x02
|
HID_EVENT_ID_GPI1,
|
||||||
#define HID_CONTROL_VOLUP_SHIFT 0x03
|
HID_EVENT_ID_GPI2,
|
||||||
#define HID_CONTROL_VOLDN_SHIFT 0x04
|
HID_EVENT_ID_GPI3,
|
||||||
#define HID_CONTROL_MUTE_SHIFT 0x05
|
HID_EVENT_ID_EVT0,
|
||||||
|
HID_EVENT_ID_EVT1,
|
||||||
|
HID_EVENT_ID_EVT2,
|
||||||
|
HID_EVENT_ID_EVT3,
|
||||||
|
HID_EVENT_ID_EVT4,
|
||||||
|
HID_EVENT_ID_EVT5,
|
||||||
|
HID_EVENT_ID_EVT6,
|
||||||
|
HID_EVENT_ID_EVT7,
|
||||||
|
HID_EVENT_ID_EVT8,
|
||||||
|
HID_EVENT_ID_EVT9,
|
||||||
|
HID_EVENT_ID_EVT10,
|
||||||
|
HID_EVENT_ID_EVT11,
|
||||||
|
HID_EVENT_ID_EVT12,
|
||||||
|
HID_EVENT_ID_EVT13,
|
||||||
|
HID_EVENT_ID_EVT14,
|
||||||
|
HID_EVENT_ID_EVT15,
|
||||||
|
HID_EVENT_ID_EVT16,
|
||||||
|
HID_EVENT_ID_EVT17,
|
||||||
|
HID_EVENT_ID_EVT18,
|
||||||
|
HID_EVENT_ID_EVT19,
|
||||||
|
HID_EVENT_ID_EVT20,
|
||||||
|
HID_EVENT_ID_EVT21,
|
||||||
|
HID_EVENT_ID_EVT22,
|
||||||
|
HID_EVENT_ID_EVT23,
|
||||||
|
HID_EVENT_ID_EVT24,
|
||||||
|
HID_EVENT_ID_EVT25,
|
||||||
|
HID_EVENT_ID_EVT26,
|
||||||
|
HID_EVENT_ID_EVT27
|
||||||
|
} hidEventId_t;
|
||||||
|
|
||||||
#define HID_DATA_SIZE 1
|
#define HID_DATA_SIZE 1
|
||||||
|
|
||||||
#if( 0 < HID_CONTROLS )
|
#if( 0 < HID_CONTROLS )
|
||||||
|
|
||||||
void UserInitHIDData( void );
|
unsigned UserHIDGetData( void );
|
||||||
void UserReadHIDData( unsigned char hidData[ HID_DATA_SIZE ]);
|
void UserHIDInit( void );
|
||||||
void UserSetHIDData( const unsigned hidData );
|
void UserHIDRegisterEvent( const hidEventId_t hidEventId, const int * hidEventData, const unsigned hidEventDataSize );
|
||||||
|
|
||||||
#endif /* ( 0 < HID_CONTROLS ) */
|
#endif /* ( 0 < HID_CONTROLS ) */
|
||||||
#endif /* __USER_HID_H__ */
|
#endif /* __USER_HID_H__ */
|
||||||
|
|||||||
@@ -9,12 +9,17 @@
|
|||||||
#if( 0 < HID_CONTROLS )
|
#if( 0 < HID_CONTROLS )
|
||||||
#define MS_IN_TICKS 100000U
|
#define MS_IN_TICKS 100000U
|
||||||
|
|
||||||
static unsigned s_hidIdleActive = 0U;
|
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_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 );
|
||||||
@@ -51,6 +56,18 @@ 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;
|
||||||
@@ -67,6 +84,13 @@ 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.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -40,6 +40,17 @@ 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.
|
||||||
*
|
*
|
||||||
@@ -58,4 +69,9 @@ XUD_Result_t HidInterfaceClassRequests(
|
|||||||
*/
|
*/
|
||||||
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__
|
||||||
|
|||||||
Reference in New Issue
Block a user