hocd-0.1.2.0: README.md
[](https://github.com/DistRap/hocd/actions/workflows/ci.yaml)
[](https://hackage.haskell.org/package/hocd)
[](https://packdeps.haskellers.com/feed?needle=hocd)
# hocd
[OpenOCD] RPC service client.
[OpenOCD]: https://openocd.org/
## API
See Haddocks or [HOCD.Monad]
[HOCD.Monad]: ./src/HOCD/Monad.hs
## Example
```haskell
{-# LANGUAGE TypeApplications #-}
import Data.Word (Word32)
import HOCD
main :: IO ()
main = runOCD example >>= print
-- | For STM32G474
example
:: MonadOCD m
=> m ([Word32], Word32)
example = do
halt'
-- Read RCC.CR register
rccCr <- readMemCount @Word32 0x40021000 2
-- Read and increment GPIOA.ODR register
let gpioaOdr = 0x48000014
odr <- readMem32 gpioaOdr
writeMem gpioaOdr [odr+1]
r <- readMem32 gpioaOdr
resume
pure (rccCr, r)
```
This example is runnable from git repository using:
```sh
openocd -f nucleo.cfg
cabal run hocd-readme
```
## Executable
`hocd-read-mem` can be used to read a single or multiple
addresses:
```sh
cabal run hocd-read-mem -- 0x40021000 0x48000014
```
Outputs:
```
0x40021000: 0x3030500
0x48000014: 0x9
```