aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..01c9427
--- /dev/null
+++ b/README.md
@@ -0,0 +1,52 @@
+# HsMouse
+Experimental control code for robotics. Tested on Raspberry Pi 5.
+
+## Features
+- [`zeromq4-haskell`](https://hackage.haskell.org/package/zeromq4-haskell)
+library is used for IPC.
+- [`effectful`](https://hackage.haskell.org/package/effectful) library is used
+to control effects within monadic computations.
+- [`streamly`](https://hackage.haskell.org/package/streamly) library is used
+to build pipelines modularly and stream data within pipeline elements. E.g.
+`zmq client & processor & zmq server`.
+
+## Build
+Install [`stack`](https://docs.haskellstack.org/en/stable/). I recommend using
+[`ghcup`](https://www.haskell.org/ghcup/) for this. Run `stack build` to
+compile all libraries and executables. Note: you might need to install some
+system dependencies on your host first (e.g. `libzmq`, etc.)
+
+## Test
+On one terminal, run `stack exec dummy-receiver`. This will initialize a ZMQ
+client that will wait for incoming pulses. On a separate terminal, run
+`stack exec dummy-pulser`. You should be able to see pulses being transmitted
+from server to client. E.g.:
+```
+$> stack exec dummy-receiver
+2025-01-12 21:27:02 INFO receiver/client: Initializing ZMQ client
+2025-01-12 21:27:16 INFO receiver/receiver: Received pulse #1
+2025-01-12 21:27:17 INFO receiver/receiver: Received pulse #2
+2025-01-12 21:27:18 INFO receiver/receiver: Received pulse #3
+2025-01-12 21:27:19 INFO receiver/receiver: Received pulse #4
+2025-01-12 21:27:20 INFO receiver/receiver: Received pulse #5
+2025-01-12 21:27:21 INFO receiver/receiver: Received pulse #6
+2025-01-12 21:27:22 INFO receiver/receiver: Received pulse #7
+2025-01-12 21:27:23 INFO receiver/receiver: Received pulse #8
+2025-01-12 21:27:24 INFO receiver/receiver: Received pulse #9
+```
+
+```
+$> stack exec dummy-pulser
+2025-01-12 21:27:15 INFO pulser/server: Initializing ZMQ server
+2025-01-12 21:27:16 INFO pulser/fsm/run: Sending pulse #1
+2025-01-12 21:27:17 INFO pulser/fsm/run: Sending pulse #2
+2025-01-12 21:27:18 INFO pulser/fsm/run: Sending pulse #3
+2025-01-12 21:27:19 INFO pulser/fsm/run: Sending pulse #4
+2025-01-12 21:27:20 INFO pulser/fsm/run: Sending pulse #5
+2025-01-12 21:27:21 INFO pulser/fsm/run: Sending pulse #6
+2025-01-12 21:27:22 INFO pulser/fsm/run: Sending pulse #7
+2025-01-12 21:27:23 INFO pulser/fsm/run: Sending pulse #8
+2025-01-12 21:27:24 INFO pulser/fsm/run: Sending pulse #9
+2025-01-12 21:27:25 ATTENTION pulser/fsm/run: Reached 10 pulses
+2025-01-12 21:27:25 ATTENTION pulser/fsm: No state returned, exiting FSM
+```