Minor optimizations and corrections to the incomplete Mass Storage class bootloader.
authorDean Camera <dean@fourwalledcubicle.com>
Sun, 10 Mar 2013 08:38:47 +0000 (08:38 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Sun, 10 Mar 2013 08:38:47 +0000 (08:38 +0000)
Bootloaders/Incomplete/MassStorage/BootloaderAPI.h
Bootloaders/Incomplete/MassStorage/Descriptors.c
Bootloaders/Incomplete/MassStorage/Lib/SCSI.c
Bootloaders/Incomplete/MassStorage/Lib/VirtualFAT.c
Bootloaders/Incomplete/MassStorage/Lib/VirtualFAT.h
Bootloaders/Incomplete/MassStorage/makefile

index c57da8b..d159f68 100644 (file)
@@ -43,8 +43,6 @@
 
                #include <LUFA/Common/Common.h>
 
 
                #include <LUFA/Common/Common.h>
 
-               #include "Config/AppConfig.h"
-
        /* Function Prototypes: */
                void    BootloaderAPI_ErasePage(const uint32_t Address);
                void    BootloaderAPI_WritePage(const uint32_t Address);
        /* Function Prototypes: */
                void    BootloaderAPI_ErasePage(const uint32_t Address);
                void    BootloaderAPI_WritePage(const uint32_t Address);
index 0dda34a..ed7f1e3 100644 (file)
@@ -58,8 +58,8 @@ const USB_Descriptor_Device_t DeviceDescriptor =
        .ProductID              = 0x2045,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
        .ProductID              = 0x2045,
        .ReleaseNumber          = VERSION_BCD(00.01),
 
-       .ManufacturerStrIndex   = 0x01,
-       .ProductStrIndex        = 0x02,
+       .ManufacturerStrIndex   = NO_DESCRIPTOR,
+       .ProductStrIndex        = NO_DESCRIPTOR,
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
        .SerialNumStrIndex      = USE_INTERNAL_SERIAL,
 
        .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"
  *  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
 /** 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
  *  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;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        break;
                                        Address = &LanguageString;
                                        Size    = pgm_read_byte(&LanguageString.Header.Size);
                                        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;
index a79a468..154fe48 100644 (file)
@@ -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 */
-       Endpoint_Write_8(0x00);
-       Endpoint_Write_8(0x00);
-       Endpoint_Write_8(0x00);
-       Endpoint_Write_8(0x00);
+       /* Send an empty header response indicating Write Protect flag is off */
+       Endpoint_Write_32_LE(0);
        Endpoint_ClearIN();
 
        /* Update the bytes transferred counter and succeed the command */
        Endpoint_ClearIN();
 
        /* Update the bytes transferred counter and succeed the command */
index 85f274b..96dfc55 100644 (file)
@@ -51,8 +51,6 @@ static const FATBootBlock_t BootBlock =
                .VolumeSerialNumber      = 0x12345678,
                .VolumeLabel             = "LUFA BOOT  ",
                .FilesystemIdentifier    = "FAT12   ",
                .VolumeSerialNumber      = 0x12345678,
                .VolumeLabel             = "LUFA BOOT  ",
                .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 */
                        memcpy(BlockBuffer, &BootBlock, sizeof(FATBootBlock_t));
        {
                case 0: /* Block 0: Boot block sector */
                        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;
 
                case 1: /* Block 1: First FAT12 cluster chain copy */
                        break;
 
                case 1: /* Block 1: First FAT12 cluster chain copy */
index 98ea5cd..fe8d770 100644 (file)
@@ -72,8 +72,6 @@
                        uint32_t VolumeSerialNumber;
                        uint8_t  VolumeLabel[11];
                        uint8_t  FilesystemIdentifier[8];
                        uint32_t VolumeSerialNumber;
                        uint8_t  VolumeLabel[11];
                        uint8_t  FilesystemIdentifier[8];
-                       uint8_t  BootstrapProgram[448];
-                       uint16_t MagicSignature;
                } FATBootBlock_t;
 
                typedef struct
                } FATBootBlock_t;
 
                typedef struct
index c922b9d..6387843 100644 (file)
@@ -18,7 +18,7 @@ F_CPU        = 8000000
 F_USB        = $(F_CPU)\r
 OPTIMIZATION = s\r
 TARGET       = BootloaderMassStorage\r
 F_USB        = $(F_CPU)\r
 OPTIMIZATION = s\r
 TARGET       = BootloaderMassStorage\r
-SRC          = $(TARGET).c Descriptors.c Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
+SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)\r
 LUFA_PATH    = ../../../LUFA\r
 CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
 LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r
 LUFA_PATH    = ../../../LUFA\r
 CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)\r
 LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)\r