From ab4591cb0e074ce98c24645cdb80cb5012aed566 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Fri, 7 Feb 2025 17:10:05 +0000 Subject: Initial --- hsm-status/Hsm/Status.hs | 47 +++++++++++++++++++++++++++++++++++++++++++++ hsm-status/hsm-status.cabal | 17 ++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 hsm-status/Hsm/Status.hs create mode 100644 hsm-status/hsm-status.cabal (limited to 'hsm-status') diff --git a/hsm-status/Hsm/Status.hs b/hsm-status/Hsm/Status.hs new file mode 100644 index 0000000..94b6351 --- /dev/null +++ b/hsm-status/Hsm/Status.hs @@ -0,0 +1,47 @@ +{-# 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 +import Hsm.PWM (PWMChannel(PWM2), PWMHandle, setDutyCycle, setPeriod) + +data StatusEnv = StatusEnv + { gpioError :: GPIO + , gpioOK :: GPIO + } + +statusEnvDefault :: StatusEnv +statusEnvDefault = StatusEnv {gpioError = GPIO17, gpioOK = GPIO27} + +status :: + HasField "statusEnv" env StatusEnv + => Ptr LineRequest + -> PWMHandle + -> env + -> [Bool] + -> IO () +status lineRequest pwmHandle env signals = do + setDutyCycle pwmHandle PWM2 pwmDutyCycle + setPeriod pwmHandle PWM2 pwmPeriod + 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"] + pwmDutyCycle = 1000000000 + pwmPeriod = 2000000000 diff --git a/hsm-status/hsm-status.cabal b/hsm-status/hsm-status.cabal new file mode 100644 index 0000000..7d75e29 --- /dev/null +++ b/hsm-status/hsm-status.cabal @@ -0,0 +1,17 @@ +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 + , hsm-pwm + + exposed-modules: Hsm.Status + ghc-options: -Wall -Wunused-packages + default-language: GHC2021 -- cgit v1.2.1