X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/8b5aa616013811faf53fb5c1f2fdb819dd671b36..e39f3378a21ae5076e8c49bc728c20e436e3a69f:/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c diff --git a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c index 299f294c9..7c564e012 100644 --- a/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c +++ b/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2011. + Copyright (C) Dean Camera, 2012. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -41,10 +41,9 @@ bool AOA_Host_ValidateAccessoryDevice(USB_ClassInfo_AOA_Host_t* const AOAInterfa const USB_Descriptor_Device_t* const DeviceDescriptor, bool* const NeedModeSwitch) { - if (DeviceDescriptor->Header.Type != DTYPE_Device) - return false; + (void)AOAInterfaceInfo; - if (DeviceDescriptor->VendorID != ANDROID_VENDOR_ID) + if (DeviceDescriptor->Header.Type != DTYPE_Device) return false; *NeedModeSwitch = ((DeviceDescriptor->ProductID != ANDROID_ACCESSORY_PRODUCT_ID) && @@ -90,45 +89,19 @@ uint8_t AOA_Host_ConfigurePipes(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo DataOUTEndpoint = EndpointData; } - for (uint8_t PipeNum = 1; PipeNum < PIPE_TOTAL_PIPES; PipeNum++) - { - uint16_t Size; - uint8_t Type; - uint8_t Token; - uint8_t EndpointAddress; - bool DoubleBanked; - - if (PipeNum == AOAInterfaceInfo->Config.DataINPipeNumber) - { - Size = le16_to_cpu(DataINEndpoint->EndpointSize); - EndpointAddress = DataINEndpoint->EndpointAddress; - Token = PIPE_TOKEN_IN; - Type = EP_TYPE_BULK; - DoubleBanked = AOAInterfaceInfo->Config.DataINPipeDoubleBank; - - AOAInterfaceInfo->State.DataINPipeSize = DataINEndpoint->EndpointSize; - } - else if (PipeNum == AOAInterfaceInfo->Config.DataOUTPipeNumber) - { - Size = le16_to_cpu(DataOUTEndpoint->EndpointSize); - EndpointAddress = DataOUTEndpoint->EndpointAddress; - Token = PIPE_TOKEN_OUT; - Type = EP_TYPE_BULK; - DoubleBanked = AOAInterfaceInfo->Config.DataOUTPipeDoubleBank; - - AOAInterfaceInfo->State.DataOUTPipeSize = DataOUTEndpoint->EndpointSize; - } - else - { - continue; - } - - if (!(Pipe_ConfigurePipe(PipeNum, Type, Token, EndpointAddress, Size, - DoubleBanked ? PIPE_BANK_DOUBLE : PIPE_BANK_SINGLE))) - { - return AOA_ENUMERROR_PipeConfigurationFailed; - } - } + AOAInterfaceInfo->Config.DataINPipe.Size = le16_to_cpu(DataINEndpoint->EndpointSize); + AOAInterfaceInfo->Config.DataINPipe.EndpointAddress = DataINEndpoint->EndpointAddress; + AOAInterfaceInfo->Config.DataINPipe.Type = EP_TYPE_BULK; + + AOAInterfaceInfo->Config.DataOUTPipe.Size = le16_to_cpu(DataOUTEndpoint->EndpointSize); + AOAInterfaceInfo->Config.DataOUTPipe.EndpointAddress = DataOUTEndpoint->EndpointAddress; + AOAInterfaceInfo->Config.DataOUTPipe.Type = EP_TYPE_BULK; + + if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataINPipe, 1))) + return false; + + if (!(Pipe_ConfigurePipeTable(&AOAInterfaceInfo->Config.DataOUTPipe, 1))) + return false; AOAInterfaceInfo->State.IsActive = true; AOAInterfaceInfo->State.InterfaceNumber = AOAInterface->InterfaceNumber; @@ -194,7 +167,7 @@ uint8_t AOA_Host_StartAccessoryMode(USB_ClassInfo_AOA_Host_t* const AOAInterface if ((ErrorCode = AOA_Host_GetAccessoryProtocol(&AccessoryProtocol)) != HOST_WAITERROR_Successful) return ErrorCode; - if (AccessoryProtocol != CPU_TO_LE16(AOA_PROTOCOL_Accessory)) + if (AccessoryProtocol != CPU_TO_LE16(AOA_PROTOCOL_AccessoryV1)) return AOA_ERROR_LOGICAL_CMD_FAILED; for (uint8_t PropertyIndex = 0; PropertyIndex < AOA_STRING_TOTAL_STRINGS; PropertyIndex++) @@ -234,7 +207,7 @@ static uint8_t AOA_Host_GetAccessoryProtocol(uint16_t* const Protocol) static uint8_t AOA_Host_SendPropertyString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo, const uint8_t StringIndex) { - const char* String = ((char**)&AOAInterfaceInfo->Config.PropertyStrings)[StringIndex]; + const char* String = AOAInterfaceInfo->Config.PropertyStrings[StringIndex]; if (String == NULL) String = ""; @@ -261,7 +234,7 @@ uint8_t AOA_Host_SendData(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo, uint8_t ErrorCode; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address); Pipe_Unfreeze(); ErrorCode = Pipe_Write_Stream_LE(Buffer, Length, NULL); @@ -278,7 +251,7 @@ uint8_t AOA_Host_SendString(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo, uint8_t ErrorCode; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address); Pipe_Unfreeze(); ErrorCode = Pipe_Write_Stream_LE(String, strlen(String), NULL); @@ -295,7 +268,7 @@ uint8_t AOA_Host_SendByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo, uint8_t ErrorCode; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address); Pipe_Unfreeze(); if (!(Pipe_IsReadWriteAllowed())) @@ -317,7 +290,7 @@ uint16_t AOA_Host_BytesReceived(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo if ((USB_HostState != HOST_STATE_Configured) || !(AOAInterfaceInfo->State.IsActive)) return 0; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address); Pipe_Unfreeze(); if (Pipe_IsINReceived()) @@ -349,7 +322,7 @@ int16_t AOA_Host_ReceiveByte(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) int16_t ReceivedByte = -1; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataINPipe.Address); Pipe_Unfreeze(); if (Pipe_IsINReceived()) @@ -373,7 +346,7 @@ uint8_t AOA_Host_Flush(USB_ClassInfo_AOA_Host_t* const AOAInterfaceInfo) uint8_t ErrorCode; - Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipeNumber); + Pipe_SelectPipe(AOAInterfaceInfo->Config.DataOUTPipe.Address); Pipe_Unfreeze(); if (!(Pipe_BytesInPipe())) @@ -446,3 +419,4 @@ static int AOA_Host_getchar_Blocking(FILE* Stream) #endif +