X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/071e02c6b6b4837fa9cf0b6d4c749994e02638d7..ec537fd84d6ad3fd0dfa1b55efa2c2d554c1db48:/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c diff --git a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c index 2739fc99a..b08daa27b 100644 --- a/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.c +++ b/Demos/Host/LowLevel/MassStorageHost/MassStorageHost.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 @@ -117,13 +117,14 @@ void EVENT_USB_Host_HostError(const uint8_t ErrorCode) /** Event handler for the USB_DeviceEnumerationFailed event. This indicates that a problem occurred while * enumerating an attached USB device. */ -void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, const uint8_t SubErrorCode) +void EVENT_USB_Host_DeviceEnumerationFailed(const uint8_t ErrorCode, + const uint8_t SubErrorCode) { printf_P(PSTR(ESC_FG_RED "Dev Enum Error\r\n" " -- Error Code %d\r\n" " -- Sub Error Code %d\r\n" " -- In State %d\r\n" ESC_FG_WHITE), ErrorCode, SubErrorCode, USB_HostState); - + LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } @@ -138,7 +139,7 @@ void MassStorage_Task(void) { case HOST_STATE_Addressed: puts_P(PSTR("Getting Config Data.\r\n")); - + /* Get and process the configuration descriptor data */ if ((ErrorCode = ProcessConfigurationDescriptor()) != SuccessfulConfigRead) { @@ -148,7 +149,7 @@ void MassStorage_Task(void) puts_P(PSTR(ESC_FG_RED "Invalid Device.\r\n")); printf_P(PSTR(" -- Error Code: %d\r\n" ESC_FG_WHITE), ErrorCode); - + /* Indicate error via status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); @@ -170,7 +171,7 @@ void MassStorage_Task(void) USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + puts_P(PSTR("Mass Storage Disk Enumerated.\r\n")); USB_HostState = HOST_STATE_Configured; @@ -178,28 +179,28 @@ void MassStorage_Task(void) case HOST_STATE_Configured: /* Indicate device busy via the status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_BUSY); - + /* Send the request, display error and wait for device detach if request fails */ if ((ErrorCode = MassStore_GetMaxLUN(&MassStore_MaxLUNIndex)) != HOST_SENDCONTROL_Successful) - { + { ShowDiskReadError(PSTR("Get Max LUN"), ErrorCode); USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + /* Print number of LUNs detected in the attached device */ printf_P(PSTR("Total LUNs: %d - Using first LUN in device.\r\n"), (MassStore_MaxLUNIndex + 1)); - + /* Reset the Mass Storage device interface, ready for use */ if ((ErrorCode = MassStore_MassStorageReset()) != HOST_SENDCONTROL_Successful) { ShowDiskReadError(PSTR("Mass Storage Reset"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + /* Get sense data from the device - many devices will not accept any other commands until the sense data * is read - both on start-up and after a failed command */ SCSI_Request_Sense_Response_t SenseData; @@ -209,12 +210,12 @@ void MassStorage_Task(void) USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + /* Set the prevent removal flag for the device, allowing it to be accessed */ if ((ErrorCode = MassStore_PreventAllowMediumRemoval(0, true)) != 0) { ShowDiskReadError(PSTR("Prevent/Allow Medium Removal"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -224,14 +225,14 @@ void MassStorage_Task(void) if ((ErrorCode = MassStore_Inquiry(0, &InquiryData)) != 0) { ShowDiskReadError(PSTR("Inquiry"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } /* Print vendor and product names of attached device */ printf_P(PSTR("Vendor \"%.8s\", Product \"%.16s\"\r\n"), InquiryData.VendorID, InquiryData.ProductID); - + /* Wait until disk ready */ puts_P(PSTR("Waiting until ready..")); @@ -245,7 +246,7 @@ void MassStorage_Task(void) /* Check to see if the attached device is ready for new commands */ ErrorCode = MassStore_TestUnitReady(0); - + /* If attached device is ready, abort the loop */ if (!(ErrorCode)) break; @@ -269,11 +270,11 @@ void MassStorage_Task(void) if ((ErrorCode = MassStore_ReadCapacity(0, &DiskCapacity)) != 0) { ShowDiskReadError(PSTR("Read Capacity"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + /* Display the disk capacity in blocks * block size bytes */ printf_P(PSTR("%lu blocks of %lu bytes.\r\n"), DiskCapacity.Blocks, DiskCapacity.BlockSize); @@ -284,11 +285,11 @@ void MassStorage_Task(void) if ((ErrorCode = MassStore_ReadDeviceBlock(0, 0x00000000, 1, DiskCapacity.BlockSize, BlockBuffer)) != 0) { ShowDiskReadError(PSTR("Read Device Block"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } - + puts_P(PSTR("\r\nContents of first block:\r\n")); /* Print out the first block in both HEX and ASCII, 16 bytes per line */ @@ -296,30 +297,30 @@ void MassStorage_Task(void) { /* Pointer to the start of the current 16-byte chunk in the read block of data */ uint8_t* ChunkPtr = &BlockBuffer[Chunk << 4]; - + /* Print out the 16 bytes of the chunk in HEX format */ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) { char CurrByte = *(ChunkPtr + ByteOffset); - + printf_P(PSTR("%.2X "), CurrByte); } - + puts_P(PSTR(" ")); /* Print out the 16 bytes of the chunk in ASCII format */ for (uint8_t ByteOffset = 0; ByteOffset < (1 << 4); ByteOffset++) { char CurrByte = *(ChunkPtr + ByteOffset); - + putchar(isprint(CurrByte) ? CurrByte : '.'); } - + puts_P(PSTR("\r\n")); } - + puts_P(PSTR("\r\n\r\nPress board button to read entire ASCII contents of disk...\r\n\r\n")); - + /* Wait for the board button to be pressed */ while (!(Buttons_GetStatus() & BUTTONS_BUTTON1)) { @@ -331,7 +332,7 @@ void MassStorage_Task(void) /* Abort if device removed */ if (USB_HostState == HOST_STATE_Unattached) break; - + /* Print out the entire disk contents in ASCII format */ for (uint32_t CurrBlockAddress = 0; CurrBlockAddress < DiskCapacity.Blocks; CurrBlockAddress++) { @@ -339,7 +340,7 @@ void MassStorage_Task(void) if ((ErrorCode = MassStore_ReadDeviceBlock(0, CurrBlockAddress, 1, DiskCapacity.BlockSize, BlockBuffer)) != 0) { ShowDiskReadError(PSTR("Read Device Block"), ErrorCode); - + USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; } @@ -348,7 +349,7 @@ void MassStorage_Task(void) for (uint16_t Byte = 0; Byte < DiskCapacity.BlockSize; Byte++) { char CurrByte = BlockBuffer[Byte]; - + putchar(isprint(CurrByte) ? CurrByte : '.'); } @@ -356,10 +357,10 @@ void MassStorage_Task(void) if (USB_HostState == HOST_STATE_Unattached) break; } - + /* Indicate device no longer busy */ LEDs_SetAllLEDs(LEDMASK_USB_READY); - + /* Wait until USB device disconnected */ USB_HostState = HOST_STATE_WaitForDeviceRemoval; break; @@ -373,7 +374,8 @@ void MassStorage_Task(void) * \param[in] CommandString ASCII string located in PROGMEM space indicating what operation failed * \param[in] ErrorCode Error code of the function which failed to complete successfully */ -void ShowDiskReadError(char* CommandString, uint8_t ErrorCode) +void ShowDiskReadError(char* CommandString, + const uint8_t ErrorCode) { if (ErrorCode == MASS_STORE_SCSI_COMMAND_FAILED) { @@ -384,7 +386,7 @@ void ShowDiskReadError(char* CommandString, uint8_t ErrorCode) { /* Display the error code */ printf_P(PSTR(ESC_FG_RED "Command error (%S).\r\n"), CommandString); - printf_P(PSTR(" -- Error Code: %d" ESC_FG_WHITE), ErrorCode); + printf_P(PSTR(" -- Error Code: %d" ESC_FG_WHITE), ErrorCode); } Pipe_Freeze(); @@ -392,3 +394,4 @@ void ShowDiskReadError(char* CommandString, uint8_t ErrorCode) /* Indicate device error via the status LEDs */ LEDs_SetAllLEDs(LEDMASK_USB_ERROR); } +