Refactor macros in the VirtualFAT implementation of the incomplete Mass Storage bootl...
authorDean Camera <dean@fourwalledcubicle.com>
Sat, 9 Mar 2013 08:00:22 +0000 (08:00 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sat, 9 Mar 2013 08:00:22 +0000 (08:00 +0000)
Bootloaders/Incomplete/MassStorage/Lib/SCSI.c
Bootloaders/Incomplete/MassStorage/Lib/VirtualFAT.c
Bootloaders/Incomplete/MassStorage/Lib/VirtualFAT.h

index c6596d4..7ab149c 100644 (file)
@@ -214,7 +214,7 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterf
 static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
 {
        uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1);
-       uint32_t MediaBlockSize        = VIRTUAL_MEMORY_BLOCK_SIZE;
+       uint32_t MediaBlockSize        = SECTOR_SIZE_BYTES;
 
        Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL);
        Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL);
@@ -292,7 +292,7 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
          VirtualFAT_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
 
        /* Update the bytes transferred counter and succeed the command */
-       MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);
+       MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES);
 
        return true;
 }
index 2365ba5..883586c 100644 (file)
 
 #include "VirtualFAT.h"
 
-#define FAT_TIME(h, m, s)      ((h << 11) | (m << 5) | (s >> 1))
-#define FAT_DATE(d, m, y)      (((y - 1980) << 9) | (m << 5) | (d << 0))
-
-#define SECTOR_SIZE_BYTES      VIRTUAL_MEMORY_BLOCK_SIZE
-#define SECTOR_PER_CLUSTER     4
-#define CLUSTER_SIZE_BYTES     (SECTOR_PER_CLUSTER * SECTOR_SIZE_BYTES)
-
-#define FILE_CLUSTERS(size)    (size / CLUSTER_SIZE_BYTES)
-
 static const FATBootBlock_t BootBlock =
        {
                .Bootstrap               = {0xEB, 0x3C, 0x90},
@@ -47,7 +38,7 @@ static const FATBootBlock_t BootBlock =
                .SectorsPerCluster       = SECTOR_PER_CLUSTER,
                .ReservedSectors         = 1,
                .FATCopies               = 2,
-               .RootDirectoryEntries    = SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t),
+               .RootDirectoryEntries    = (SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t)),
                .TotalSectors16          = LUN_MEDIA_BLOCKS,
                .MediaDescriptor         = 0xF8,
                .SectorsPerFAT           = 1,
@@ -76,6 +67,7 @@ static FATDirectoryEntry_t FirmwareFileEntry =
                .FileSizeBytes   = 2049,
        };
 
+
 static void WriteBlock(uint16_t BlockNumber)
 {
        uint8_t BlockBuffer[512];
@@ -156,6 +148,8 @@ void VirtualFAT_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
 
+       /* Emulated FAT is performed per-block, pass each requested block index
+        * to the emulation function */
        while (TotalBlocks--)
          WriteBlock(CurrentBlock++);
 }
@@ -166,6 +160,8 @@ void VirtualFAT_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
 {
        uint16_t CurrentBlock = (uint16_t)BlockAddress;
 
+       /* Emulated FAT is performed per-block, pass each requested block index
+        * to the emulation function */
        while (TotalBlocks--)
          ReadBlock(CurrentBlock++);
 }
index 760fb40..156760a 100644 (file)
                #include <LUFA/Drivers/USB/USB.h>
 
        /* Macros: */
-               #define VIRTUAL_MEMORY_BLOCK_SIZE 512
+               #define FIRMWARE_FILE_SIZE     (FLASHEND + 1UL)
+               #define FILE_CLUSTERS(size)    ((size / CLUSTER_SIZE_BYTES) + ((size % CLUSTER_SIZE_BYTES) ? 1 : 0))
 
-               #define FIRMWARE_FILE_SIZE        (FLASHEND + 1UL)
+               #define SECTOR_SIZE_BYTES      512
+               #define SECTOR_PER_CLUSTER     4
+               #define CLUSTER_SIZE_BYTES     (SECTOR_PER_CLUSTER * SECTOR_SIZE_BYTES)
 
-               #define LUN_MEDIA_BLOCKS          ((FIRMWARE_FILE_SIZE / VIRTUAL_MEMORY_BLOCK_SIZE) + 32)
+               #define LUN_MEDIA_BLOCKS       ((FIRMWARE_FILE_SIZE / SECTOR_SIZE_BYTES) + 32)
+
+               #define FAT_TIME(h, m, s)      ((h << 11) | (m << 5) | (s >> 1))
+               #define FAT_DATE(d, m, y)      (((y - 1980) << 9) | (m << 5) | (d << 0))
 
        /* Type Definitions: */
                typedef struct