59 lines
1.6 KiB
59 lines
1.6 KiB
5 years ago
|
# 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.
|