From 8a68203d3451c50c573c6baf4850e72d8dbabfcb Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Mon, 20 Jul 2009 02:27:32 +0000 Subject: [PATCH] Added error codes to most StillImageHost demo commands. --- .../StillImageHost/Lib/StillImageCommands.c | 16 +++++++++++---- .../StillImageHost/Lib/StillImageCommands.h | 10 ++++++++-- .../LowLevel/StillImageHost/StillImageHost.c | 20 +++++++++---------- Demos/OTG/TestApp/TestApp.c | 6 ++++-- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c index bf85750844..c0a9575f40 100644 --- a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c +++ b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.c @@ -80,20 +80,24 @@ void SImage_SendBlockHeader(void) } /** Function to receive a PIMA event container from the attached still image device. */ -void SImage_RecieveEventHeader(void) +uint8_t SImage_RecieveEventHeader(void) { + uint8_t ErrorCode; + /* Unfreeze the events pipe */ Pipe_SelectPipe(SIMAGE_EVENTS_PIPE); Pipe_Unfreeze(); /* Read in the event data into the global structure */ - Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock)); + ErrorCode = Pipe_Read_Stream_LE(&PIMA_EventBlock, sizeof(PIMA_EventBlock)); /* Clear the pipe after read complete to prepare for next event */ Pipe_ClearIN(); /* Freeze the event pipe again after use */ Pipe_Freeze(); + + return ErrorCode; } /** Function to receive a PIMA response container from the attached still image device. */ @@ -193,20 +197,24 @@ uint8_t SImage_RecieveBlockHeader(void) * \param[in] Buffer Source data buffer to send to the device * \param[in] Bytes Number of bytes to send */ -void SImage_SendData(void* Buffer, uint16_t Bytes) +uint8_t SImage_SendData(void* Buffer, uint16_t Bytes) { + uint8_t ErrorCode; + /* Unfreeze the data OUT pipe */ Pipe_SelectPipe(SIMAGE_DATA_OUT_PIPE); Pipe_Unfreeze(); /* Write the data contents to the pipe */ - Pipe_Write_Stream_LE(Buffer, Bytes); + ErrorCode = Pipe_Write_Stream_LE(Buffer, Bytes); /* Send the last packet to the attached device */ Pipe_ClearOUT(); /* Freeze the pipe again after use */ Pipe_Freeze(); + + return ErrorCode; } /** Function to receive the given data to the device, after a response block has been received. diff --git a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h index 2674b6aa56..6000510513 100644 --- a/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h +++ b/Demos/Host/LowLevel/StillImageHost/Lib/StillImageCommands.h @@ -50,6 +50,12 @@ /** Pipe number of the Still Image events pipe */ #define SIMAGE_EVENTS_PIPE 0x03 + + /** Length in bytes of a given Unicode string's character length + * + * \param[in] chars Total number of Unicode characters in the string + */ + #define UNICODE_STRING_LENGTH(chars) (chars << 1) /** Timeout period between the issuing of a command to a device, and the reception of the first packet */ #define COMMAND_DATA_TIMEOUT_MS 5000 @@ -101,8 +107,8 @@ /* Function Prototypes: */ void SImage_SendBlockHeader(void); uint8_t SImage_RecieveBlockHeader(void); - void SImage_RecieveEventHeader(void); - void SImage_SendData(void* Buffer, uint16_t Bytes); + uint8_t SImage_RecieveEventHeader(void); + uint8_t SImage_SendData(void* Buffer, uint16_t Bytes); uint8_t SImage_ReadData(void* Buffer, uint16_t Bytes); bool SImage_IsEventReceived(void); uint8_t SImage_ClearPipeStall(const uint8_t EndpointNum); diff --git a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c index f10de4c316..dfc7cb7c19 100644 --- a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c +++ b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c @@ -216,28 +216,28 @@ void StillImage_Task(void) uint8_t* DeviceInfoPos = DeviceInfo; /* Skip over the data before the unicode device information strings */ - DeviceInfoPos += 8; // Skip to VendorExtensionDesc String - DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over VendorExtensionDesc String - DeviceInfoPos += 2; // Skip over FunctionalMode - DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over OperationCode Array - DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over EventCode Array - DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over DevicePropCode Array - DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array - DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array + DeviceInfoPos += 8; // Skip to VendorExtensionDesc String + DeviceInfoPos += (1 + UNICODE_STRING_LENGTH(*DeviceInfoPos)); // Skip over VendorExtensionDesc String + DeviceInfoPos += 2; // Skip over FunctionalMode + DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over OperationCode Array + DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over EventCode Array + DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over DevicePropCode Array + DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array + DeviceInfoPos += (4 + (*(uint32_t*)DeviceInfoPos << 1)); // Skip over ObjectFormatCode Array /* Extract and convert the Manufacturer Unicode string to ASCII and print it through the USART */ char Manufacturer[*DeviceInfoPos]; UnicodeToASCII(DeviceInfoPos, Manufacturer); printf_P(PSTR(" Manufacturer: %s\r\n"), Manufacturer); - DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over Manufacturer String + DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos); // Skip over Manufacturer String /* Extract and convert the Model Unicode string to ASCII and print it through the USART */ char Model[*DeviceInfoPos]; UnicodeToASCII(DeviceInfoPos, Model); printf_P(PSTR(" Model: %s\r\n"), Model); - DeviceInfoPos += ((*DeviceInfoPos << 1) + 1); // Skip over Model String + DeviceInfoPos += 1 + UNICODE_STRING_LENGTH(*DeviceInfoPos); // Skip over Model String /* Extract and convert the Device Version Unicode string to ASCII and print it through the USART */ char DeviceVersion[*DeviceInfoPos]; diff --git a/Demos/OTG/TestApp/TestApp.c b/Demos/OTG/TestApp/TestApp.c index ef903f0898..562348bf80 100644 --- a/Demos/OTG/TestApp/TestApp.c +++ b/Demos/OTG/TestApp/TestApp.c @@ -51,7 +51,7 @@ int main(void) CheckButton(); CheckTemperature(); - /* Clear output-compare flag (logic 1 clears the flag) */ + /* Clear millisecond timer's Output Compare flag (logic 1 clears the flag) */ TIFR0 |= (1 << OCF0A); USB_USBTask(); @@ -114,11 +114,12 @@ void CheckTemperature(void) { static uint16_t MSElapsed = 0; + /* Timer 0's compare flag is set every millisecond */ if (TIFR0 & (1 << OCF0A)) MSElapsed++; /* Task runs every 10000 ticks, 10 seconds for this demo */ - if (MSElapsed == 1000) + if (MSElapsed == 10000) { printf_P(PSTR("Current temperature: %d Degrees Celcius\r\n\r\n"), (int8_t)Temperature_GetTemperature()); @@ -135,6 +136,7 @@ void CheckButton(void) static uint16_t DebounceMSElapsed = 0; static bool IsPressed; + /* Timer 0's compare flag is set every millisecond */ if (TIFR0 & (1 << OCF0A)) DebounceMSElapsed++;