X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/b5ca3990c2ec9dc240fb334002ed2f7c82eea853..d0db78432fc02bacbd57cc9f15eb05b4e56981cb:/Demos/Host/LowLevel/StillImageHost/StillImageHost.c diff --git a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c index a337ab045..5cfaf46be 100644 --- a/Demos/Host/LowLevel/StillImageHost/StillImageHost.c +++ b/Demos/Host/LowLevel/StillImageHost/StillImageHost.c @@ -43,8 +43,7 @@ int main(void) { SetupHardware(); - puts_P(PSTR(ESC_RESET ESC_BG_WHITE ESC_INVERSE_ON ESC_ERASE_DISPLAY - "Still Image Host Demo running.\r\n" ESC_INVERSE_OFF)); + puts_P(PSTR(ESC_FG_CYAN "Still Image Host Demo running.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); @@ -77,7 +76,7 @@ void SetupHardware(void) */ void EVENT_USB_DeviceAttached(void) { - puts_P(PSTR("Device Attached.\r\n")); + puts_P(PSTR(ESC_FG_GREEN "Device Attached.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING); } @@ -86,7 +85,7 @@ void EVENT_USB_DeviceAttached(void) */ void EVENT_USB_DeviceUnattached(void) { - puts_P(PSTR("\r\nDevice Unattached.\r\n")); + puts_P(PSTR(ESC_FG_GREEN "\r\nDevice Unattached.\r\n" ESC_FG_WHITE)); LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); } @@ -103,8 +102,8 @@ void EVENT_USB_HostError(const uint8_t ErrorCode) { USB_ShutDown(); - puts_P(PSTR(ESC_BG_RED "Host Mode Error\r\n")); - printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode); + puts_P(PSTR(ESC_FG_RED "Host Mode Error\r\n")); + printf_P(PSTR(" -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); for(;;); @@ -115,10 +114,10 @@ void EVENT_USB_HostError(const uint8_t ErrorCode) */ void EVENT_USB_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode) { - puts_P(PSTR(ESC_BG_RED "Dev Enum Error\r\n")); + puts_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n")); printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode); printf_P(PSTR(" -- Sub Error Code %d\r\n"), SubErrorCode); - printf_P(PSTR(" -- In State %d\r\n"), USB_HostState); + printf_P(PSTR(" -- In State %d\r\n" ESC_FG_WHITE), USB_HostState); LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } @@ -139,30 +138,31 @@ void StillImage_Task(void) if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) { if (ErrorCode == ControlError) - puts_P(PSTR("Control Error (Get Configuration).\r\n")); + puts_P(PSTR(ESC_FG_RED "Control Error (Get Configuration).\r\n")); else - puts_P(PSTR("Invalid Device.\r\n")); + puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); - printf_P(PSTR(" -- Error Code: %d\r\n"), ErrorCode); + printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); /* Indicate error via status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); /* Wait until USB device disconnected */ - while (USB_IsConnected); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } /* Set the device configuration to the first configuration (rarely do devices use multiple configurations) */ if ((ErrorCode = USB_Host_SetDeviceConfiguration(1)) != HOST_SENDCONTROL_Successful) { - puts_P(PSTR("Control error.\r\n")); + puts_P(PSTR(ESC_FG_RED "Control Error (Set Configuration).\r\n")); + printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); /* Indicate error via status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); /* Wait until USB device disconnected */ - while (USB_IsConnected); + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -195,6 +195,8 @@ void StillImage_Task(void) if ((ErrorCode = SImage_RecieveBlockHeader()) != PIPE_RWSTREAM_NoError) { ShowCommandError(ErrorCode, false); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -214,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]; @@ -246,6 +248,8 @@ void StillImage_Task(void) if ((ErrorCode = SImage_RecieveBlockHeader()) != PIPE_RWSTREAM_NoError) { ShowCommandError(ErrorCode, false); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -253,6 +257,8 @@ void StillImage_Task(void) if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK)) { ShowCommandError(PIMA_ReceivedBlock.Code, true); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -274,6 +280,8 @@ void StillImage_Task(void) if ((ErrorCode = SImage_RecieveBlockHeader()) != PIPE_RWSTREAM_NoError) { ShowCommandError(ErrorCode, false); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -281,6 +289,8 @@ void StillImage_Task(void) if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK)) { ShowCommandError(PIMA_ReceivedBlock.Code, true); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -302,6 +312,8 @@ void StillImage_Task(void) if ((ErrorCode = SImage_RecieveBlockHeader()) != PIPE_RWSTREAM_NoError) { ShowCommandError(ErrorCode, false); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -309,6 +321,8 @@ void StillImage_Task(void) if ((PIMA_ReceivedBlock.Type != CType_ResponseBlock) || (PIMA_ReceivedBlock.Code != PIMA_RESPONSE_OK)) { ShowCommandError(PIMA_ReceivedBlock.Code, true); + + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -327,8 +341,8 @@ void StillImage_Task(void) /** Function to convert a given Unicode encoded string to ASCII. This function will only work correctly on Unicode * strings which contain ASCII printable characters only. * - * \param UnicodeString Pointer to a Unicode encoded input string - * \param Buffer Pointer to a buffer where the converted ASCII string should be stored + * \param[in] UnicodeString Pointer to a Unicode encoded input string + * \param[out] Buffer Pointer to a buffer where the converted ASCII string should be stored */ void UnicodeToASCII(uint8_t* UnicodeString, char* Buffer) { @@ -338,7 +352,7 @@ void UnicodeToASCII(uint8_t* UnicodeString, char* Buffer) /* Loop through the entire unicode string */ while (CharactersRemaining--) { - /* Load in the next unicode character (only the lower byte, only Unicode coded ASCII supported) */ + /* Load in the next unicode character (only the lower byte, as only Unicode coded ASCII is supported) */ *(Buffer++) = *UnicodeString; /* Jump to the next unicode character */ @@ -351,19 +365,16 @@ void UnicodeToASCII(uint8_t* UnicodeString, char* Buffer) /** Displays a PIMA command error via the device's serial port. * - * \param ErrorCode Error code of the function which failed to complete successfully - * \param ResponseCodeError Indicates if the error is due to a command failed indication from the device, or a communication failure + * \param[in] ErrorCode Error code of the function which failed to complete successfully + * \param[in] ResponseCodeError Indicates if the error is due to a command failed indication from the device, or a communication failure */ void ShowCommandError(uint8_t ErrorCode, bool ResponseCodeError) { char* FailureType = ((ResponseCodeError) ? PSTR("Response Code != OK") : PSTR("Transaction Fail")); - printf_P(PSTR(ESC_BG_RED "Command Error (%S).\r\n"), FailureType); - printf_P(PSTR(" -- Error Code %d\r\n"), ErrorCode); + printf_P(PSTR(ESC_FG_RED "Command Error (%S).\r\n"), FailureType); + printf_P(PSTR(" -- Error Code %d\r\n" ESC_FG_WHITE), ErrorCode); /* Indicate error via status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); - - /* Wait until USB device disconnected */ - while (USB_IsConnected); }