Rearrange the file layout in preparation of becoming a monorepo

Move the documentation to `doc/plugin/HostOS.md`, sources under
`src/kaleidoscope/plugin/` (appropriately namespaced). This is in preparation of
merging plugins into a single monorepo.

The `Kaleidoscope/HostOS-select.h` remains in place, for compatibility reasons.

Signed-off-by: Gergely Nagy <algernon@keyboard.io>
pull/389/head
Gergely Nagy 6 years ago
parent 38b8230c30
commit 175f5080a5
No known key found for this signature in database
GPG Key ID: AC1E90BAC433F68F

@ -5,98 +5,4 @@
[travis:image]: https://travis-ci.org/keyboardio/Kaleidoscope-HostOS.svg?branch=master
[travis:status]: https://travis-ci.org/keyboardio/Kaleidoscope-HostOS
The `HostOS` extension is not all that useful in itself, rather, it is a
building block other plugins and extensions can use to not repeat the same
guesswork and logic.
The goal is to have a single place that remembers the host OS, whether set by
the end-user in a Sketch, or via a macro, or some other way. This information
can then be reused by other plugins.
See the [Unicode][plugin:unicode] extension for an example about how to use
`HostOS` in practice.
[plugin:unicode]: https://github.com/keyboardio/Kaleidoscope-Unicode
## Using the extension
The extension provides a `HostOS` singleton object.
```c++
#include <Kaleidoscope.h>
#include <Kaleidoscope-EEPROM-Settings.h>
#include <Kaleidoscope-HostOS.h>
void someFunction(void) {
if (HostOS.os() == kaleidoscope::hostos::LINUX) {
// do something linux-y
}
if (HostOS.os() == kaleidoscope::hostos::OSX) {
// do something OSX-y
}
}
KALEIDOSCOPE_INIT_PLUGINS(EEPROMSettings, HostOS)
void setup(void) {
Kaleidoscope.setup ();
}
```
## Extension methods
The extension provides the following methods on the `HostOS` singleton:
### `.os()`
> Returns the stored type of the Host OS.
### `.os(type)`
> Sets the type of the host OS, overriding any previous value. The type is then
> stored in EEPROM for persistence.
## Host OS Values
The OS type (i.e. the return type of `.os()` and the arguments to `.os(type)`) will be one of the following:
- `kaleidoscope::hostos::LINUX`
- `kaleidoscope::hostos::OSX`
- `kaleidoscope::hostos::WINDOWS`
- `kaleidoscope::hostos::OTHER`
## Focus commands
The plugin provides the `FocusHostOSCommand` object, which, when enabled,
provides the `hostos.type` Focus command.
### `hostos.type [type]`
> Without argument, returns the current OS type set (a numeric value).
>
> With an argument, it sets the OS type.
>
> This command can be used from the host to reliably set the OS type within the firmware.
## Dependencies
* [Kaleidoscope-EEPROM-Settings](https://github.com/keyboardio/Kaleidoscope-EEPROM-Settings)
## Further reading
Starting from the [example][plugin:example] is the recommended way of getting
started with the extension.
[plugin:example]: https://github.com/keyboardio/Kaleidoscope-HostOS/blob/master/examples/HostOS/HostOS.ino
## Upgrading
Prior versions of `HostOS` used to include a way to auto-detect the host
operating system. This code was brittle, unreliable, and rather big too. For
these reasons, this functionality was removed. The `autoDetect()` method is now
a no-op, and is deprecated. The `Kaleidoscope/HostOS-select.h` header is
similarly obsolete. Both of these produce deprecation messages now, and will be
removed by 2019-01-14.
Furthermore, `HostOS` now depends on `Kaleidoscope-EEPROM-Settings`, that plugin
should be initialized first.
See [doc/plugin/HostOS.md](doc/plugin/HostOS.md) for documentation.

@ -0,0 +1,96 @@
# Kaleidoscope-HostOS
The `HostOS` extension is not all that useful in itself, rather, it is a
building block other plugins and extensions can use to not repeat the same
guesswork and logic.
The goal is to have a single place that remembers the host OS, whether set by
the end-user in a Sketch, or via a macro, or some other way. This information
can then be reused by other plugins.
See the [Unicode][plugin:unicode] extension for an example about how to use
`HostOS` in practice.
[plugin:unicode]: https://github.com/keyboardio/Kaleidoscope-Unicode
## Using the extension
The extension provides a `HostOS` singleton object.
```c++
#include <Kaleidoscope.h>
#include <Kaleidoscope-HostOS.h>
void someFunction(void) {
if (HostOS.os() == kaleidoscope::hostos::LINUX) {
// do something linux-y
}
if (HostOS.os() == kaleidoscope::hostos::OSX) {
// do something OSX-y
}
}
KALEIDOSCOPE_INIT_PLUGINS(HostOS)
void setup(void) {
Kaleidoscope.setup ();
}
```
## Extension methods
The extension provides the following methods on the `HostOS` singleton:
### `.os()`
> Returns the stored type of the Host OS.
### `.os(type)`
> Sets the type of the host OS, overriding any previous value. The type is then
> stored in EEPROM for persistence.
## Host OS Values
The OS type (i.e. the return type of `.os()` and the arguments to `.os(type)`) will be one of the following:
- `kaleidoscope::hostos::LINUX`
- `kaleidoscope::hostos::OSX`
- `kaleidoscope::hostos::WINDOWS`
- `kaleidoscope::hostos::OTHER`
## Focus commands
The plugin provides the `FocusHostOSCommand` object, which, when enabled,
provides the `hostos.type` Focus command.
### `hostos.type [type]`
> Without argument, returns the current OS type set (a numeric value).
>
> With an argument, it sets the OS type.
>
> This command can be used from the host to reliably set the OS type within the firmware.
## Dependencies
* [Kaleidoscope-EEPROM-Settings](https://github.com/keyboardio/Kaleidoscope-EEPROM-Settings)
## Further reading
Starting from the [example][plugin:example] is the recommended way of getting
started with the extension.
[plugin:example]: https://github.com/keyboardio/Kaleidoscope-HostOS/blob/master/examples/HostOS/HostOS.ino
## Upgrading
Prior versions of `HostOS` used to include a way to auto-detect the host
operating system. This code was brittle, unreliable, and rather big too. For
these reasons, this functionality was removed. The `autoDetect()` method is now
a no-op, and is deprecated. The `Kaleidoscope/HostOS-select.h` header is
similarly obsolete. Both of these produce deprecation messages now, and will be
removed by 2019-01-14.
Furthermore, `HostOS` now depends on `Kaleidoscope-EEPROM-Settings`, that plugin
should be initialized first.

@ -17,5 +17,5 @@
#pragma once
#include <Kaleidoscope/HostOS.h>
#include <Kaleidoscope/HostOS-Focus.h>
#include <kaleidoscope/plugin/HostOS.h>
#include <kaleidoscope/plugin/HostOS-Focus.h>

@ -19,6 +19,7 @@
#include <Kaleidoscope-FocusSerial.h>
namespace kaleidoscope {
namespace plugin {
EventHandlerResult FocusHostOSCommand::onFocusEvent(const char *command) {
const char *cmd = PSTR("hostos.type");
@ -39,6 +40,7 @@ EventHandlerResult FocusHostOSCommand::onFocusEvent(const char *command) {
return EventHandlerResult::EVENT_CONSUMED;
}
}
}
kaleidoscope::FocusHostOSCommand FocusHostOSCommand;
kaleidoscope::plugin::FocusHostOSCommand FocusHostOSCommand;

@ -20,13 +20,14 @@
#include <Kaleidoscope.h>
namespace kaleidoscope {
namespace plugin {
class FocusHostOSCommand : public kaleidoscope::Plugin {
public:
FocusHostOSCommand() {}
EventHandlerResult onFocusEvent(const char *command);
};
}
}
extern kaleidoscope::FocusHostOSCommand FocusHostOSCommand;
extern kaleidoscope::plugin::FocusHostOSCommand FocusHostOSCommand;

@ -15,12 +15,13 @@
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <Kaleidoscope/HostOS.h>
#include <kaleidoscope/plugin/HostOS.h>
#include <Kaleidoscope-EEPROM-Settings.h>
#include <EEPROM.h>
namespace kaleidoscope {
namespace plugin {
EventHandlerResult HostOS::onSetup(void) {
if (is_configured_)
@ -44,6 +45,7 @@ void HostOS::os(hostos::Type new_os) {
EEPROM.update(eeprom_slice_, os_);
}
}
}
kaleidoscope::HostOS HostOS;
kaleidoscope::plugin::HostOS HostOS;

@ -20,6 +20,7 @@
#include <Kaleidoscope.h>
namespace kaleidoscope {
namespace plugin {
namespace hostos {
typedef enum {
@ -57,7 +58,9 @@ class HostOS : public kaleidoscope::Plugin {
uint16_t eeprom_slice_;
bool is_configured_ = false;
};
}
namespace hostos = plugin::hostos;
}
extern kaleidoscope::HostOS HostOS;
extern kaleidoscope::plugin::HostOS HostOS;
Loading…
Cancel
Save