Kaleidoscope/docs/drivers/Bootloader.md

59 lines
1.6 KiB

# kaleidoscope::driver::bootloader
We rarely have to work with or care about the bootloader from the user firmware,
but there's one scenario when we do: if we want to reset the device, and put it
into bootloader (programmable) mode, we need to do that in a bootloader-specific
manner.
This driver provides a number of helpers that implement the reset functionality
for various bootloaders.
## Using the driver
To use the driver, we need to include the appropriate header, from the hardware plugin of
our keyboard:
```c++
#include <kaleidoscope/driver/bootloader/avr/Caterina.h>
```
Next, we set up the device `Properties` so that it includes the override for our
bootloader:
```c++
struct OurBoardProps : kaleidoscope::device::BaseProps {
typedef kaleidoscope::driver::bootloader::avr::Caterina Bootloader;
};
```
The base classes will do all the rest.
## Methods provided by all bootloader drivers
### `.rebootBootloader()`
> Resets the device, and forces it into bootloader (programmable) mode.
## List of bootloaders
All of the drivers below live below the `kaleidoscope::driver::bootloader`
namespace.
## `avr::Caterina`:
Used by many (most?) arduino MCUs. Provided by
`kaleidoscope/driver/bootloader/avr/Caterina.h`.
### `avr::HalfKay`
Used by the Teensy2. Provided by `kaleidoscope/driver/bootloader/avr/HalfKay.h`.
### `avr::FLIP`
Used by the ATMega32U4 MCUs by default, unless another bootloader has been
flashed on them. Provided by `kaleidoscope/driver/bootloader/avr/FLIP.h`.
For this driver to work, one also needs to define the
`KALEIDOSCOPE_BOOTLOADER_FLIP_WORKAROUND` macro before including the driver
header, for technical reasons.