# HostPowerManagement

Support performing custom actions whenever the host suspends, resumes, or is
sleeping.

## Using the plugin

To use the plugin, one needs to include the header, and activate it. No further
configuration is necessary, unless one wants to perform custom actions.

```c++
#include <Kaleidoscope.h>
#include <Kaleidoscope-HostPowerManagement.h>

KALEIDOSCOPE_INIT_PLUGINS(HostPowerManagement);

void setup () {
  Kaleidoscope.setup ();
}
```

## Plugin methods

The plugin provides the `HostPowerManagement` object, with no public methods.

## Overridable methods

### `hostPowerManagementEventHandler(event)`

> The `hostPowerManagementEventHandler` method is the brain of the plugin: this function
> tells it what action to perform in response to the various events.
>
> Currently supported events are:
> `kaleidoscope::plugin::HostPowerManagement::Suspend` is fired once when the
> host suspends; `kaleidoscope::plugin::HostPowerManagement::Sleep` is fired
> every cycle while the host is suspended;
> `kaleidoscope::plugin::HostPowerManagement::Resume` is fired once when the
> host wakes up.
>
> The default implementation is empty.

## Further reading

Starting from the [example][plugin:example] is the recommended way of getting
started with the plugin.

 [plugin:example]: /examples/Features/HostPowerManagement/HostPowerManagement.ino

## Caveats

On some systems, there can be a long delay between suspending/sleeping the host and the
firmware responding to it and calling `hostPowerManagementEventHandler()`. In particular,
on macOS, it can take 30 seconds or more after invoking "sleep" mode on the host before
the keyboard responds. One user reports that it can take more than a minute, so if this
plugin doesn't appear to be working, please wait a few minutes and check again.