aboutsummaryrefslogtreecommitdiff
path: root/hsm-status
diff options
context:
space:
mode:
Diffstat (limited to 'hsm-status')
-rw-r--r--hsm-status/Hsm/Status.hs41
-rw-r--r--hsm-status/hsm-status.cabal16
2 files changed, 57 insertions, 0 deletions
diff --git a/hsm-status/Hsm/Status.hs b/hsm-status/Hsm/Status.hs
new file mode 100644
index 0000000..8154611
--- /dev/null
+++ b/hsm-status/Hsm/Status.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+module Hsm.Status
+ ( StatusEnv(..)
+ , statusEnvDefault
+ , status
+ ) where
+
+import Foreign.Ptr (Ptr)
+import GHC.Records (HasField)
+import Hsm.GPIO (GPIO(..), LineRequest, active, inactive, setPins)
+import Hsm.Log qualified as L
+
+data StatusEnv = StatusEnv
+ { gpioOk :: GPIO
+ , gpioError :: GPIO
+ }
+
+statusEnvDefault :: StatusEnv
+statusEnvDefault = StatusEnv {gpioOk = GPIO17, gpioError = GPIO27}
+
+status ::
+ HasField "statusEnv" env StatusEnv
+ => Ptr LineRequest
+ -> env
+ -> [Bool]
+ -> IO ()
+status lineRequest env signals = do
+ if and signals
+ then do
+ logMsg "All signals OK"
+ setPins lineRequest [env.statusEnv.gpioError] inactive
+ setPins lineRequest [env.statusEnv.gpioOk] active
+ else do
+ logMsg "Error signal received"
+ setPins lineRequest [env.statusEnv.gpioError] active
+ setPins lineRequest [env.statusEnv.gpioOk] inactive
+ where
+ logMsg = L.logMsg ["status"]
diff --git a/hsm-status/hsm-status.cabal b/hsm-status/hsm-status.cabal
new file mode 100644
index 0000000..66560e8
--- /dev/null
+++ b/hsm-status/hsm-status.cabal
@@ -0,0 +1,16 @@
+cabal-version: 3.4
+author: Paul Oliver
+build-type: Simple
+maintainer: contact@pauloliver.dev
+name: hsm-status
+version: 0.1.0.0
+
+library
+ build-depends:
+ , base
+ , hsm-gpio
+ , hsm-log
+
+ exposed-modules: Hsm.Status
+ ghc-options: -Wall -Wunused-packages
+ default-language: GHC2021