aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 01c9427b388aaeae22405b9866192fcf5bad5971 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
```