diff options
author | lonkaars <loek@pipeframe.xyz> | 2022-05-23 21:13:23 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2022-05-23 21:13:23 +0200 |
commit | 333eea840a17d0f8ecf0110d952df2857fea4da0 (patch) | |
tree | 8407e56589e87a5322d0594e4fbeddf549ee7502 /client/readme.md | |
parent | fbe22ab2f654cfff37a7d6815693f3914463d7c9 (diff) |
WIP client architecture
Diffstat (limited to 'client/readme.md')
-rw-r--r-- | client/readme.md | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/client/readme.md b/client/readme.md new file mode 100644 index 0000000..990504d --- /dev/null +++ b/client/readme.md @@ -0,0 +1,82 @@ +# client code + +this is the subdirectory for all client code (runs on pc/laptop) + +this page is WIP + +## features + +|feature|due|status|author|description| +|-|-|-|-|-| +|view warnings / errors| +|direct control| +|enable/disable emergency mode| + + + + + +## interface + +the client is a user-facing application that allows control and monitoring of +the robot in various ways. it primarily works in a command-line way, with the +user typing commands that get translated to protocol messages, and sent to the +robot. to start the interface, the user should run `./main <com-port> [command] +[args]`. by not specifying a command, the interactive shell is launched which +looks like this (and it's supposed to be in dutch): + +``` +verbonden, 2ms ping (0.0.2-11-g92c394b) batterij 100% +[huidige logica-modus] 0 waarschuwingen, 0 foutmeldingen +-------------------------------------------------------------------------------- + + + + + + + + + + + + + + +welkom in de wall-e2 console applicatie! deze client is versie +0.0.2-11-g92c394b + +typ 'help' om alle commando's te zien in een lijst, of 'doei' om deze +applicatie weer te sluiten. + +w2> +``` + +the top status bar is always supposed to be visible, and is sort of inspired by +[ncmpcpp](https://github.com/ncmpcpp/ncmpcpp). because the client software +should use no libraries if possible, a custom renderer needs to be implemented, +though it doesn't matter if it's very primitive. + +going from top-left in reading order the status bar contains: connection +status, ping time, robot version number, robot battery info, current logic +mode, warnings and critical exceptions. the version number is aligned to the +terminal center, and the battery and warning counters are aligned right. when a +connection hasn't been established between the robot and client, the fields +containing robot info should dissapear. + +## code structure + +because multithreading is hard, another cyclic system is used. the following +modules are executed after each other: + +- serial read +- stdin read (user input) +- optional control mode handling + +## notes on ascii escape codes + +- color codes +- terminal echo codes +- how to read terminal (re)size +- cursor movement + |