Add const qualifiers to class driver callback parameters, fix parameter naming.
[pub/lufa.git] / Bootloaders / MassStorage / BootloaderMassStorage.txt
index ab77c5d..0fea9d9 100644 (file)
  *  remove your device from the host using the host OS's ejection APIs, to ensure all data is correctly flushed to the
  *  bootloader's virtual filesystem and not cached in the OS's file system driver.
  *
- *  The current device firmware can be read from the device by reading a file from the virtual FAT filesystem.
+ *  The current device firmware can be read from the device by reading a file from the virtual FAT filesystem. Two files will
+ *  be present:
+ *    - <b>FLASH.BIN</b>, representing the AVR's internal flash memory
+ *    - <b>EEPROM.BIN</b>, representing the AVR's internal EEPROM memory
+ *
+ *  To convert an existing Intel HEX (.HEX) program file to a binary (.BIN) file suitable for this bootloader, run:
+ *    \code
+ *             avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature input.hex output.bin
+ *    \endcode
+ *  From a terminal, replacing <tt>input.hex</tt> and <tt>output.bin</tt> with the respective input and output filenames.
+ *  AVR EEPROM data files in Intel HEX format (.EEP) uses a similar technique:
+ *    \code
+ *             avr-objcopy -O binary input.eep output.bin
+ *    \endcode
  *
  *  \warning This bootloader is currently <b>incompatible with the Apple MacOS X OS Finder GUI</b>, due to the
  *           large amount of meta files this OS attempts to write to the disk along with the new binaries. On
  *  By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the
  *  following layout:
  *
- *  \snippet BootloaderAPI.h User Application API
+ *  \code
+ *  #define BOOTLOADER_API_TABLE_SIZE          32
+ *  #define BOOTLOADER_API_TABLE_START         ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE)
+ *  #define BOOTLOADER_API_CALL(Index)         (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2)
+ *
+ *  void    (*BootloaderAPI_ErasePage)(uint32_t Address)               = BOOTLOADER_API_CALL(0);
+ *  void    (*BootloaderAPI_WritePage)(uint32_t Address)               = BOOTLOADER_API_CALL(1);
+ *  void    (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2);
+ *  uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address)           = BOOTLOADER_API_CALL(3);
+ *  uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address)                = BOOTLOADER_API_CALL(4);
+ *  uint8_t (*BootloaderAPI_ReadLock)(void)                            = BOOTLOADER_API_CALL(5);
+ *  void    (*BootloaderAPI_WriteLock)(uint8_t LockBits)               = BOOTLOADER_API_CALL(6);
+ *
+ *  #define BOOTLOADER_MAGIC_SIGNATURE_START   (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2))
+ *  #define BOOTLOADER_MAGIC_SIGNATURE         0xDCFB
+ *
+ *  #define BOOTLOADER_CLASS_SIGNATURE_START   (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4))
+ *  #define BOOTLOADER_MASS_STORAGE_SIGNATURE  0xDF30
+ *
+ *  #define BOOTLOADER_ADDRESS_START           (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8))
+ *  #define BOOTLOADER_ADDRESS_LENGTH          4
+ *  \endcode
  *
  *  From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address
  *  \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader