{-# 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"]