forked from mfulz_github/qmk_firmware
Minor optimizations and corrections to the incomplete Mass Storage class bootloader.
This commit is contained in:
parent
d5cff25cd1
commit
6c9632ae38
|
@ -43,8 +43,6 @@
|
||||||
|
|
||||||
#include <LUFA/Common/Common.h>
|
#include <LUFA/Common/Common.h>
|
||||||
|
|
||||||
#include "Config/AppConfig.h"
|
|
||||||
|
|
||||||
/* Function Prototypes: */
|
/* Function Prototypes: */
|
||||||
void BootloaderAPI_ErasePage(const uint32_t Address);
|
void BootloaderAPI_ErasePage(const uint32_t Address);
|
||||||
void BootloaderAPI_WritePage(const uint32_t Address);
|
void BootloaderAPI_WritePage(const uint32_t Address);
|
||||||
|
|
|
@ -58,8 +58,8 @@ const USB_Descriptor_Device_t DeviceDescriptor =
|
||||||
.ProductID = 0x2045,
|
.ProductID = 0x2045,
|
||||||
.ReleaseNumber = VERSION_BCD(00.01),
|
.ReleaseNumber = VERSION_BCD(00.01),
|
||||||
|
|
||||||
.ManufacturerStrIndex = 0x01,
|
.ManufacturerStrIndex = NO_DESCRIPTOR,
|
||||||
.ProductStrIndex = 0x02,
|
.ProductStrIndex = NO_DESCRIPTOR,
|
||||||
.SerialNumStrIndex = USE_INTERNAL_SERIAL,
|
.SerialNumStrIndex = USE_INTERNAL_SERIAL,
|
||||||
|
|
||||||
.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
|
.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
|
||||||
|
@ -135,28 +135,6 @@ const USB_Descriptor_String_t LanguageString =
|
||||||
.UnicodeString = {LANGUAGE_ID_ENG}
|
.UnicodeString = {LANGUAGE_ID_ENG}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer's details in human readable
|
|
||||||
* form, and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
|
|
||||||
* Descriptor.
|
|
||||||
*/
|
|
||||||
const USB_Descriptor_String_t ManufacturerString =
|
|
||||||
{
|
|
||||||
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
|
|
||||||
|
|
||||||
.UnicodeString = L"Dean Camera"
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
|
|
||||||
* and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
|
|
||||||
* Descriptor.
|
|
||||||
*/
|
|
||||||
const USB_Descriptor_String_t ProductString =
|
|
||||||
{
|
|
||||||
.Header = {.Size = USB_STRING_LEN(15), .Type = DTYPE_String},
|
|
||||||
|
|
||||||
.UnicodeString = L"LUFA Bootloader"
|
|
||||||
};
|
|
||||||
|
|
||||||
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
|
||||||
* documentation) by the application code so that the address and size of a requested descriptor can be given
|
* documentation) by the application code so that the address and size of a requested descriptor can be given
|
||||||
* to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
|
* to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
|
||||||
|
@ -190,14 +168,6 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
|
||||||
Address = &LanguageString;
|
Address = &LanguageString;
|
||||||
Size = pgm_read_byte(&LanguageString.Header.Size);
|
Size = pgm_read_byte(&LanguageString.Header.Size);
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
|
||||||
Address = &ManufacturerString;
|
|
||||||
Size = pgm_read_byte(&ManufacturerString.Header.Size);
|
|
||||||
break;
|
|
||||||
case 0x02:
|
|
||||||
Address = &ProductString;
|
|
||||||
Size = pgm_read_byte(&ProductString.Header.Size);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -307,11 +307,8 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa
|
||||||
*/
|
*/
|
||||||
static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
|
||||||
{
|
{
|
||||||
/* Send an empty header response with the Write Protect flag status */
|
/* Send an empty header response indicating Write Protect flag is off */
|
||||||
Endpoint_Write_8(0x00);
|
Endpoint_Write_32_LE(0);
|
||||||
Endpoint_Write_8(0x00);
|
|
||||||
Endpoint_Write_8(0x00);
|
|
||||||
Endpoint_Write_8(0x00);
|
|
||||||
Endpoint_ClearIN();
|
Endpoint_ClearIN();
|
||||||
|
|
||||||
/* Update the bytes transferred counter and succeed the command */
|
/* Update the bytes transferred counter and succeed the command */
|
||||||
|
|
|
@ -51,8 +51,6 @@ static const FATBootBlock_t BootBlock =
|
||||||
.VolumeSerialNumber = 0x12345678,
|
.VolumeSerialNumber = 0x12345678,
|
||||||
.VolumeLabel = "LUFA BOOT ",
|
.VolumeLabel = "LUFA BOOT ",
|
||||||
.FilesystemIdentifier = "FAT12 ",
|
.FilesystemIdentifier = "FAT12 ",
|
||||||
.BootstrapProgram = {0},
|
|
||||||
.MagicSignature = 0xAA55,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static FATDirectoryEntry_t FirmwareFileEntry =
|
static FATDirectoryEntry_t FirmwareFileEntry =
|
||||||
|
@ -138,6 +136,10 @@ static void ReadBlock(const uint16_t BlockNumber)
|
||||||
{
|
{
|
||||||
case 0: /* Block 0: Boot block sector */
|
case 0: /* Block 0: Boot block sector */
|
||||||
memcpy(BlockBuffer, &BootBlock, sizeof(FATBootBlock_t));
|
memcpy(BlockBuffer, &BootBlock, sizeof(FATBootBlock_t));
|
||||||
|
|
||||||
|
/* Add the magic signature to the end of the block */
|
||||||
|
BlockBuffer[SECTOR_SIZE_BYTES - 2] = 0x55;
|
||||||
|
BlockBuffer[SECTOR_SIZE_BYTES - 1] = 0xAA;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1: /* Block 1: First FAT12 cluster chain copy */
|
case 1: /* Block 1: First FAT12 cluster chain copy */
|
||||||
|
|
|
@ -72,8 +72,6 @@
|
||||||
uint32_t VolumeSerialNumber;
|
uint32_t VolumeSerialNumber;
|
||||||
uint8_t VolumeLabel[11];
|
uint8_t VolumeLabel[11];
|
||||||
uint8_t FilesystemIdentifier[8];
|
uint8_t FilesystemIdentifier[8];
|
||||||
uint8_t BootstrapProgram[448];
|
|
||||||
uint16_t MagicSignature;
|
|
||||||
} FATBootBlock_t;
|
} FATBootBlock_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|
|
@ -18,7 +18,7 @@ F_CPU = 8000000
|
||||||
F_USB = $(F_CPU)
|
F_USB = $(F_CPU)
|
||||||
OPTIMIZATION = s
|
OPTIMIZATION = s
|
||||||
TARGET = BootloaderMassStorage
|
TARGET = BootloaderMassStorage
|
||||||
SRC = $(TARGET).c Descriptors.c Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
|
SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
|
||||||
LUFA_PATH = ../../../LUFA
|
LUFA_PATH = ../../../LUFA
|
||||||
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
|
CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
|
||||||
LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
|
LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
|
||||||
|
|
Loading…
Reference in New Issue