Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rudihorn/light-cli

A simple heapless command line interface parser for embedded devices
https://github.com/rudihorn/light-cli

Last synced: 9 days ago
JSON representation

A simple heapless command line interface parser for embedded devices

Awesome Lists containing this project

README

        

# `light-cli`

A lightweight and heapless command line interface / command passing tool. Probably more useful for machine to machine communication.

## [Documentation](https://rudihorn.github.io/light-cli/light_cli/)

## [Example]

The following definition allows for the commands:
* `HELLO Name=`: Set the name to ``
* `EHLO`: Return the name

```
lightcli!(cl_in, cl_out, cmd, key, val, [
"HELLO" => [
"Name" => name = String::from(val)
] => { writeln!(cl_out, "Name set").unwrap(); };
"EHLO" => [
] => { writeln!(cl_out, "EHLO Name={}", name.as_str()).unwrap(); }
]);
```

A typical serial communication could look like:

```
>> EHLO
<< EHLO Name=
>> HELLO Name=Johnson
<< Name set
>> EHLO
<< EHLO Name=Johnson
```

It is recommended to use this in conjunction with the program [`rlwrap`](https://linux.die.net/man/1/rlwrap).

[Complete Example](https://github.com/rudihorn/light-cli/tree/master/examples/)

## What works

- Read key value style commands in the form:
`COMMAND KEY=VALUE`
- UTF-8 encoding.
- Specify the heapless string length.
- Partial command evaluation as data is received through the serial connection.

## TODO

- [X] Writing to output
- [ ] Improve UTF-8 error detection / code.
- [ ] Any form of autocompletion / backspaces etc.

## License

Licensed under either of

- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the
work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.