X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/071e02c6b6b4837fa9cf0b6d4c749994e02638d7..c43605612d3cc18e159bc8e97c3838153ed6a258:/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommands.c diff --git a/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommands.c b/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommands.c index 5bce088c8..f57b9c85a 100644 --- a/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommands.c +++ b/Demos/Device/Incomplete/Sideshow/Lib/SideshowCommands.c @@ -1,21 +1,21 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -42,15 +42,15 @@ Unicode_String_t Manufacturer = {LengthInBytes: sizeof(L"Dean Camera"), Unicode_String_t SupportedLanguage = {LengthInBytes: sizeof(L"en-US:1"), UnicodeString: L"en-US:1"}; - + void Sideshow_ProcessCommandPacket(void) { SideShow_PacketHeader_t PacketHeader; - - Endpoint_SelectEndpoint(SIDESHOW_OUT_EPNUM); + + Endpoint_SelectEndpoint(SIDESHOW_OUT_EPNUM); Endpoint_Read_Stream_LE(&PacketHeader, sizeof(SideShow_PacketHeader_t)); - - PacketHeader.Type.Response = true; + + PacketHeader.Type.TypeFields.Response = true; printf("\r\nCmd: %lX", (PacketHeader.Type.TypeLong & 0x00FFFFFF)); @@ -70,7 +70,7 @@ void Sideshow_ProcessCommandPacket(void) break; case SIDESHOW_CMD_GET_CAPABILITIES: SideShow_GetCapabilities(&PacketHeader); - break; + break; case SIDESHOW_CMD_GET_DEVICE_NAME: SideShow_GetString(&PacketHeader, &DeviceName); break; @@ -94,7 +94,7 @@ void Sideshow_ProcessCommandPacket(void) break; case SIDESHOW_CMD_DELETE_ALL_CONTENT: SideShow_DeleteAllContent(&PacketHeader); - break; + break; case SIDESHOW_CMD_DELETE_APPLICATION: SideShow_DeleteApplication(&PacketHeader); break; @@ -108,12 +108,12 @@ void Sideshow_ProcessCommandPacket(void) Endpoint_ClearOUT(); PacketHeader.Length = sizeof(SideShow_PacketHeader_t); - PacketHeader.Type.NAK = true; - - Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); - Endpoint_Write_Stream_LE(&PacketHeader, sizeof(SideShow_PacketHeader_t)); + PacketHeader.Type.TypeFields.NAK = true; + + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); + Endpoint_Write_Stream_LE(&PacketHeader, sizeof(SideShow_PacketHeader_t)); Endpoint_ClearIN(); - + printf(" UNK"); } } @@ -122,8 +122,8 @@ static void SideShow_Ping(SideShow_PacketHeader_t* const PacketHeader) { Endpoint_ClearOUT(); - Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); - Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); + Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); Endpoint_ClearIN(); } @@ -133,12 +133,12 @@ static void SideShow_Sync(SideShow_PacketHeader_t* const PacketHeader) Endpoint_Read_Stream_LE(&ProtocolGUID, sizeof(GUID_t)); Endpoint_ClearOUT(); - + if (!(GUID_COMPARE(&ProtocolGUID, (uint32_t[])STANDARD_PROTOCOL_GUID))) - PacketHeader->Type.NAK = true; - + PacketHeader->Type.TypeFields.NAK = true; + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); - Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); + Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); Endpoint_Write_Stream_LE(&ProtocolGUID, sizeof(GUID_t)); Endpoint_ClearIN(); } @@ -159,7 +159,7 @@ static void SideShow_SetCurrentUser(SideShow_PacketHeader_t* const PacketHeader) { SideShow_Read_Unicode_String(&UserSID, sizeof(UserSID.UnicodeString)); Endpoint_ClearOUT(); - + PacketHeader->Length = sizeof(SideShow_PacketHeader_t); Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); @@ -174,7 +174,7 @@ static void SideShow_GetCapabilities(SideShow_PacketHeader_t* const PacketHeader Endpoint_Read_Stream_LE(&Property, sizeof(SideShow_PropertyKey_t)); Endpoint_ClearOUT(); - + printf(" ID: %lu", Property.PropertyID); PacketHeader->Length = sizeof(SideShow_PacketHeader_t); @@ -187,46 +187,46 @@ static void SideShow_GetCapabilities(SideShow_PacketHeader_t* const PacketHeader PropertyData.DataType = VT_I4; PropertyData.Data.Data32 = ScreenText; PacketHeader->Length += sizeof(uint32_t); - + break; case PROPERTY_SIDESHOW_SCREENWIDTH: case PROPERTY_SIDESHOW_CLIENTWIDTH: PropertyData.DataType = VT_UI2; PropertyData.Data.Data16 = 16; PacketHeader->Length += sizeof(uint16_t); - + break; case PROPERTY_SIDESHOW_SCREENHEIGHT: case PROPERTY_SIDESHOW_CLIENTHEIGHT: PropertyData.DataType = VT_UI2; PropertyData.Data.Data16 = 2; PacketHeader->Length += sizeof(uint16_t); - + break; case PROPERTY_SIDESHOW_COLORDEPTH: PropertyData.DataType = VT_UI2; PropertyData.Data.Data16 = 1; PacketHeader->Length += sizeof(uint16_t); - + break; case PROPERTY_SIDESHOW_COLORTYPE: PropertyData.DataType = VT_UI2; PropertyData.Data.Data16 = BlackAndWhiteDisplay; PacketHeader->Length += sizeof(uint16_t); - + break; case PROPERTY_SIDESHOW_DATACACHE: PropertyData.DataType = VT_BOOL; PropertyData.Data.Data16 = false; PacketHeader->Length += sizeof(uint16_t); - + break; case PROPERTY_SIDESHOW_SUPPORTEDLANGS: case PROPERTY_SIDESHOW_CURRENTLANG: PropertyData.DataType = VT_LPWSTR; PropertyData.Data.DataPointer = &SupportedLanguage; PacketHeader->Length += SupportedLanguage.LengthInBytes; - + break; default: PropertyData.DataType = VT_EMPTY; @@ -241,23 +241,23 @@ static void SideShow_GetCapabilities(SideShow_PacketHeader_t* const PacketHeader PropertyData.DataType = VT_UI4; PropertyData.Data.Data32 = GenericDevice; PacketHeader->Length += sizeof(uint32_t); - + break; } - } + } else { - PacketHeader->Type.NAK = true; - + PacketHeader->Type.TypeFields.NAK = true; + printf(" WRONG GUID"); printf(" %lX %lX %lX %lX", Property.PropertyGUID.Chunks[0], Property.PropertyGUID.Chunks[1], - Property.PropertyGUID.Chunks[2], Property.PropertyGUID.Chunks[3]); + Property.PropertyGUID.Chunks[2], Property.PropertyGUID.Chunks[3]); } Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); - - if (!(PacketHeader->Type.NAK)) + + if (!(PacketHeader->Type.TypeFields.NAK)) { switch (PropertyData.DataType) { @@ -275,18 +275,19 @@ static void SideShow_GetCapabilities(SideShow_PacketHeader_t* const PacketHeader break; } } - + Endpoint_ClearIN(); return; } -static void SideShow_GetString(SideShow_PacketHeader_t* const PacketHeader, void* const UnicodeStruct) +static void SideShow_GetString(SideShow_PacketHeader_t* const PacketHeader, + void* const UnicodeStruct) { Endpoint_ClearOUT(); PacketHeader->Length = sizeof(SideShow_PacketHeader_t) + sizeof(uint32_t) + ((Unicode_String_t*)UnicodeStruct)->LengthInBytes; - + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); SideShow_Write_Unicode_String(UnicodeStruct); @@ -296,7 +297,7 @@ static void SideShow_GetString(SideShow_PacketHeader_t* const PacketHeader, void static void SideShow_GetApplicationOrder(SideShow_PacketHeader_t* const PacketHeader) { uint8_t TotalApplications = 0; - + Endpoint_ClearOUT(); for (uint8_t App = 0; App < MAX_APPLICATIONS; App++) @@ -307,11 +308,11 @@ static void SideShow_GetApplicationOrder(SideShow_PacketHeader_t* const PacketHe PacketHeader->Length = sizeof(SideShow_PacketHeader_t) + sizeof(uint32_t) + (TotalApplications * sizeof(GUID_t)); - + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); Endpoint_Write_DWord_LE(TotalApplications); - + for (uint8_t App = 0; App < MAX_APPLICATIONS; App++) { if (InstalledApplications[App].InUse) @@ -328,7 +329,7 @@ static void SideShow_GetSupportedEndpoints(SideShow_PacketHeader_t* const Packet Endpoint_ClearOUT(); PacketHeader->Length = sizeof(SideShow_PacketHeader_t) + sizeof(uint32_t) + sizeof(GUID_t); - + Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); Endpoint_Write_DWord_LE(1); @@ -355,7 +356,7 @@ static void SideShow_AddApplication(SideShow_PacketHeader_t* const PacketHeader) Endpoint_Discard_Stream(PacketHeader->Length); Endpoint_ClearOUT(); - PacketHeader->Type.NAK = true; + PacketHeader->Type.TypeFields.NAK = true; } else { @@ -368,7 +369,7 @@ static void SideShow_AddApplication(SideShow_PacketHeader_t* const PacketHeader) SideShow_Discard_Byte_Stream(); SideShow_Discard_Byte_Stream(); Endpoint_ClearOUT(); - + CurrApp->InUse = true; CurrApp->HaveContent = false; CurrApp->CurrentContentID = 1; @@ -384,8 +385,8 @@ static void SideShow_AddApplication(SideShow_PacketHeader_t* const PacketHeader) static void SideShow_DeleteApplication(SideShow_PacketHeader_t* const PacketHeader) { GUID_t ApplicationGUID; - - Endpoint_Read_Stream_LE(&ApplicationGUID, sizeof(GUID_t)); + + Endpoint_Read_Stream_LE(&ApplicationGUID, sizeof(GUID_t)); Endpoint_ClearOUT(); SideShow_Application_t* AppToDelete = SideShow_GetApplicationFromGUID(&ApplicationGUID); @@ -393,7 +394,7 @@ static void SideShow_DeleteApplication(SideShow_PacketHeader_t* const PacketHead if (AppToDelete != NULL) AppToDelete->InUse = false; else - PacketHeader->Type.NAK = true; + PacketHeader->Type.TypeFields.NAK = true; PacketHeader->Length = sizeof(SideShow_PacketHeader_t); @@ -405,7 +406,7 @@ static void SideShow_DeleteApplication(SideShow_PacketHeader_t* const PacketHead static void SideShow_DeleteAllApplications(SideShow_PacketHeader_t* const PacketHeader) { Endpoint_ClearOUT(); - + for (uint8_t App = 0; App < MAX_APPLICATIONS; App++) InstalledApplications[App].InUse = false; @@ -419,22 +420,22 @@ static void SideShow_AddContent(SideShow_PacketHeader_t* const PacketHeader) GUID_t ApplicationID; GUID_t EndpointID; SideShow_Application_t* Application; - + Endpoint_Read_Stream_LE(&ApplicationID, sizeof(GUID_t)); Endpoint_Read_Stream_LE(&EndpointID, sizeof(GUID_t)); - + Application = SideShow_GetApplicationFromGUID(&ApplicationID); - + if (Application == NULL) { SideShow_Discard_Byte_Stream(); - PacketHeader->Type.NAK = true; + PacketHeader->Type.TypeFields.NAK = true; } else if (!(SideShow_AddSimpleContent(PacketHeader, Application))) { - PacketHeader->Type.NAK = true; + PacketHeader->Type.TypeFields.NAK = true; } - + Endpoint_ClearOUT(); PacketHeader->Length = sizeof(SideShow_PacketHeader_t); @@ -454,14 +455,14 @@ static void SideShow_DeleteContent(SideShow_PacketHeader_t* const PacketHeader) Endpoint_Read_Stream_LE(&EndpointID, sizeof(GUID_t)); Endpoint_Read_Stream_LE(&ContentID, sizeof(uint32_t)); Endpoint_ClearOUT(); - + SideShow_Application_t* Application = SideShow_GetApplicationFromGUID(&ApplicationID); - + if ((Application != NULL) && (Application->CurrentContentID == ContentID)) Application->HaveContent = false; else - PacketHeader->Type.NAK = true; - + PacketHeader->Type.TypeFields.NAK = true; + PacketHeader->Length = sizeof(SideShow_PacketHeader_t); Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); @@ -479,15 +480,16 @@ static void SideShow_DeleteAllContent(SideShow_PacketHeader_t* const PacketHeade Endpoint_ClearOUT(); SideShow_Application_t* Application = SideShow_GetApplicationFromGUID(&ApplicationID); - + if (Application != NULL) Application->HaveContent = false; else - PacketHeader->Type.NAK = true; + PacketHeader->Type.TypeFields.NAK = true; PacketHeader->Length = sizeof(SideShow_PacketHeader_t); Endpoint_SelectEndpoint(SIDESHOW_IN_EPNUM); Endpoint_Write_Stream_LE(PacketHeader, sizeof(SideShow_PacketHeader_t)); - Endpoint_ClearIN(); + Endpoint_ClearIN(); } +