mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-03 14:32:05 +00:00
Refactor macros in the VirtualFAT implementation of the incomplete Mass Storage bootloader.
This commit is contained in:
parent
f0c7a11670
commit
7f5dab4f26
@ -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)
|
static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1);
|
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(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL);
|
||||||
Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), 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);
|
VirtualFAT_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks);
|
||||||
|
|
||||||
/* Update the bytes transferred counter and succeed the command */
|
/* 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -30,15 +30,6 @@
|
|||||||
|
|
||||||
#include "VirtualFAT.h"
|
#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 =
|
static const FATBootBlock_t BootBlock =
|
||||||
{
|
{
|
||||||
.Bootstrap = {0xEB, 0x3C, 0x90},
|
.Bootstrap = {0xEB, 0x3C, 0x90},
|
||||||
@ -47,7 +38,7 @@ static const FATBootBlock_t BootBlock =
|
|||||||
.SectorsPerCluster = SECTOR_PER_CLUSTER,
|
.SectorsPerCluster = SECTOR_PER_CLUSTER,
|
||||||
.ReservedSectors = 1,
|
.ReservedSectors = 1,
|
||||||
.FATCopies = 2,
|
.FATCopies = 2,
|
||||||
.RootDirectoryEntries = SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t),
|
.RootDirectoryEntries = (SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t)),
|
||||||
.TotalSectors16 = LUN_MEDIA_BLOCKS,
|
.TotalSectors16 = LUN_MEDIA_BLOCKS,
|
||||||
.MediaDescriptor = 0xF8,
|
.MediaDescriptor = 0xF8,
|
||||||
.SectorsPerFAT = 1,
|
.SectorsPerFAT = 1,
|
||||||
@ -76,6 +67,7 @@ static FATDirectoryEntry_t FirmwareFileEntry =
|
|||||||
.FileSizeBytes = 2049,
|
.FileSizeBytes = 2049,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static void WriteBlock(uint16_t BlockNumber)
|
static void WriteBlock(uint16_t BlockNumber)
|
||||||
{
|
{
|
||||||
uint8_t BlockBuffer[512];
|
uint8_t BlockBuffer[512];
|
||||||
@ -156,6 +148,8 @@ void VirtualFAT_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
|
|||||||
{
|
{
|
||||||
uint16_t CurrentBlock = (uint16_t)BlockAddress;
|
uint16_t CurrentBlock = (uint16_t)BlockAddress;
|
||||||
|
|
||||||
|
/* Emulated FAT is performed per-block, pass each requested block index
|
||||||
|
* to the emulation function */
|
||||||
while (TotalBlocks--)
|
while (TotalBlocks--)
|
||||||
WriteBlock(CurrentBlock++);
|
WriteBlock(CurrentBlock++);
|
||||||
}
|
}
|
||||||
@ -166,6 +160,8 @@ void VirtualFAT_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
|
|||||||
{
|
{
|
||||||
uint16_t CurrentBlock = (uint16_t)BlockAddress;
|
uint16_t CurrentBlock = (uint16_t)BlockAddress;
|
||||||
|
|
||||||
|
/* Emulated FAT is performed per-block, pass each requested block index
|
||||||
|
* to the emulation function */
|
||||||
while (TotalBlocks--)
|
while (TotalBlocks--)
|
||||||
ReadBlock(CurrentBlock++);
|
ReadBlock(CurrentBlock++);
|
||||||
}
|
}
|
||||||
|
@ -38,11 +38,17 @@
|
|||||||
#include <LUFA/Drivers/USB/USB.h>
|
#include <LUFA/Drivers/USB/USB.h>
|
||||||
|
|
||||||
/* Macros: */
|
/* Macros: */
|
||||||
#define VIRTUAL_MEMORY_BLOCK_SIZE 512
|
|
||||||
|
|
||||||
#define FIRMWARE_FILE_SIZE (FLASHEND + 1UL)
|
#define FIRMWARE_FILE_SIZE (FLASHEND + 1UL)
|
||||||
|
#define FILE_CLUSTERS(size) ((size / CLUSTER_SIZE_BYTES) + ((size % CLUSTER_SIZE_BYTES) ? 1 : 0))
|
||||||
|
|
||||||
#define LUN_MEDIA_BLOCKS ((FIRMWARE_FILE_SIZE / VIRTUAL_MEMORY_BLOCK_SIZE) + 32)
|
#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 / 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: */
|
/* Type Definitions: */
|
||||||
typedef struct
|
typedef struct
|
||||||
|
Loading…
Reference in New Issue
Block a user