diff options
| author | Dean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28> | 2010-12-02 01:56:06 +0000 |
|---|---|---|
| committer | Dean <Dean@d5102386-fcda-11dd-9fdb-3debd5008f28> | 2010-12-02 01:56:06 +0000 |
| commit | 15bde77cf3c3c8a47e3ce4be8148bffed0c79317 (patch) | |
| tree | c704acafd6e964edadc79bb04cf68d6927f23238 /LUFA/Drivers/USB/Class/Host/HID.c | |
| parent | 1b362c2ab73d8cd2439e913153d939d00ecdffde (diff) | |
Refactored Host mode Class Driver *_Host_ConfigurePipes() routines to be more space efficient when compiled.
Added new *_ENUMERROR_PipeConfigurationFailed error codes for the *_Host_ConfigurePipes() routines.
git-svn-id: http://lufa-lib.googlecode.com/svn/trunk@1599 d5102386-fcda-11dd-9fdb-3debd5008f28
Diffstat (limited to 'LUFA/Drivers/USB/Class/Host/HID.c')
| -rw-r--r-- | LUFA/Drivers/USB/Class/Host/HID.c | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/LUFA/Drivers/USB/Class/Host/HID.c b/LUFA/Drivers/USB/Class/Host/HID.c index bb10ee2d..e6c575e2 100644 --- a/LUFA/Drivers/USB/Class/Host/HID.c +++ b/LUFA/Drivers/USB/Class/Host/HID.c @@ -95,25 +95,49 @@ uint8_t HID_Host_ConfigurePipes(USB_ClassInfo_HID_Host_t* const HIDInterfaceInfo for (uint8_t PipeNum = 1; PipeNum < PIPE_TOTAL_PIPES; PipeNum++) { + uint16_t Size; + uint8_t Type; + uint8_t Token; + uint8_t EndpointAddress; + uint8_t InterruptPeriod; + bool DoubleBanked; + if (PipeNum == HIDInterfaceInfo->Config.DataINPipeNumber) { - Pipe_ConfigurePipe(PipeNum, EP_TYPE_INTERRUPT, PIPE_TOKEN_IN, - DataINEndpoint->EndpointAddress, DataINEndpoint->EndpointSize, - HIDInterfaceInfo->Config.DataINPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE); - Pipe_SetInterruptPeriod(DataINEndpoint->PollingIntervalMS); - - HIDInterfaceInfo->State.DataINPipeSize = DataINEndpoint->EndpointSize; + Size = DataINEndpoint->EndpointSize; + EndpointAddress = DataINEndpoint->EndpointAddress; + Token = PIPE_TOKEN_IN; + Type = EP_TYPE_INTERRUPT; + DoubleBanked = HIDInterfaceInfo->Config.DataINPipeDoubleBank; + InterruptPeriod = DataINEndpoint->PollingIntervalMS; + + HIDInterfaceInfo->State.DataINPipeSize = DataINEndpoint->EndpointSize; } else if (PipeNum == HIDInterfaceInfo->Config.DataOUTPipeNumber) { - Pipe_ConfigurePipe(PipeNum, EP_TYPE_INTERRUPT, PIPE_TOKEN_OUT, - DataOUTEndpoint->EndpointAddress, DataOUTEndpoint->EndpointSize, - HIDInterfaceInfo->Config.DataOUTPipeDoubleBank ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE); - Pipe_SetInterruptPeriod(DataOUTEndpoint->PollingIntervalMS); - - HIDInterfaceInfo->State.DataOUTPipeSize = DataOUTEndpoint->EndpointSize; + Size = DataOUTEndpoint->EndpointSize; + EndpointAddress = DataOUTEndpoint->EndpointAddress; + Token = PIPE_TOKEN_OUT; + Type = EP_TYPE_INTERRUPT; + DoubleBanked = HIDInterfaceInfo->Config.DataOUTPipeDoubleBank; + InterruptPeriod = DataOUTEndpoint->PollingIntervalMS; + + HIDInterfaceInfo->State.DataOUTPipeSize = DataOUTEndpoint->EndpointSize; HIDInterfaceInfo->State.DeviceUsesOUTPipe = true; } + else + { + continue; + } + + if (!(Pipe_ConfigurePipe(PipeNum, Type, Token, EndpointAddress, Size, + DoubleBanked ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE))) + { + return HID_ENUMERROR_PipeConfigurationFailed; + } + + if (InterruptPeriod) + Pipe_SetInterruptPeriod(InterruptPeriod); } HIDInterfaceInfo->State.InterfaceNumber = HIDInterface->InterfaceNumber; |
