|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | /* Low level disk I/O module skeleton for Petit FatFs (C)ChaN, 2009      */ | 
					
						
							|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "diskio.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #include <LUFA/Drivers/USB/Class/MassStorage.h>
 | 
					
						
							|  |  |  | #include "../DataflashManager.h"
 | 
					
						
							|  |  |  | #include "../../DiskHost.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | /* Initialize Disk Drive                                                 */ | 
					
						
							|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DSTATUS disk_initialize (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	return RES_OK; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | /* Read Partial Sector                                                   */ | 
					
						
							|  |  |  | /*-----------------------------------------------------------------------*/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DRESULT disk_readp ( | 
					
						
							|  |  |  | 	BYTE* dest,			/* Pointer to the destination object */ | 
					
						
							|  |  |  | 	DWORD sector,		/* Sector number (LBA) */ | 
					
						
							|  |  |  | 	WORD sofs,			/* Offset in the sector */ | 
					
						
							|  |  |  | 	WORD count			/* Byte count (bit15:destination) */ | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	DRESULT ErrorCode = RES_OK; | 
					
						
							|  |  |  | 	uint8_t BlockTemp[512]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if (USB_CurrentMode == USB_MODE_Host) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		#if defined(USB_CAN_BE_HOST)
 | 
					
						
							|  |  |  | 		if (USB_HostState != HOST_STATE_Configured) | 
					
						
							|  |  |  | 		  ErrorCode = RES_NOTRDY; | 
					
						
							|  |  |  | 		else if (MS_Host_ReadDeviceBlocks(&DiskHost_MS_Interface, 0, sector, 1, 512, BlockTemp)) | 
					
						
							|  |  |  | 		  ErrorCode = RES_ERROR; | 
					
						
							|  |  |  | 		#endif
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		#if defined(USB_CAN_BE_DEVICE)
 | 
					
						
							|  |  |  | 		DataflashManager_ReadBlocks_RAM(sector, 1, BlockTemp); | 
					
						
							|  |  |  | 		#endif
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	memcpy(dest, &BlockTemp[sofs], count); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return ErrorCode; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |