From 4c0a03fd814822c64264c44b1116471ca252ea52 Mon Sep 17 00:00:00 2001
From: Caissa Roque <caissa.roque@ess.eu>
Date: Wed, 2 Oct 2024 15:39:17 +0200
Subject: [PATCH] Add sensor cooler

---
 ADOrcaApp/Db/orca.template | 27 +++++++++++++++++++++++++++
 ADOrcaApp/src/orca.cpp     | 11 +++++++++++
 2 files changed, 38 insertions(+)

diff --git a/ADOrcaApp/Db/orca.template b/ADOrcaApp/Db/orca.template
index fd0dc07..d4c03be 100644
--- a/ADOrcaApp/Db/orca.template
+++ b/ADOrcaApp/Db/orca.template
@@ -1682,3 +1682,30 @@ record(mbbi, "$(P)$(R)FrameStampProd-R") {
     field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_FRAMESTAMP_PRODUCER")
     field(SCAN, "I/O Intr")
 }
+
+record(mbbo, "$(P)$(R)SensorCooler-S") {
+    field(DESC, "Sensor cooler")
+    field(PINI, "YES")
+    field(DTYP, "asynInt32")
+    field(ZRVL, "1")
+    field(ZRST, "Off")
+    field(ONVL, "2")
+    field(ONST, "On")
+    field(TWVL, "4")
+    field(TWST, "Max")
+    field(OUT,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_SENSOR_COOLER")
+    field(VAL,  "1")
+}
+
+record(mbbi, "$(P)$(R)SensorCooler-RB") {
+    field(DESC, "Sensor cooler")
+    field(DTYP, "asynInt32")
+    field(ZRVL, "1")
+    field(ZRST, "Off")
+    field(ONVL, "2")
+    field(ONST, "On")
+    field(TWVL, "4")
+    field(TWST, "Max")
+    field(INP,  "@asyn($(PORT),$(ADDR),$(TIMEOUT))H_SENSOR_COOLER")
+    field(SCAN, "I/O Intr")
+}
diff --git a/ADOrcaApp/src/orca.cpp b/ADOrcaApp/src/orca.cpp
index 7031359..6ab5f84 100644
--- a/ADOrcaApp/src/orca.cpp
+++ b/ADOrcaApp/src/orca.cpp
@@ -447,6 +447,10 @@ int Orca::readParameter(int propertyID, bool processPV) {
       status = setIntegerParam(hInternalTriggerHandling, dvalue);
       break;
     // - sensor cooler
+    case DCAM_IDPROP_SENSORCOOLER:  //(RW1--)
+      m_err = dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLER, &dvalue);
+      status = setIntegerParam(hSensorCooler, dvalue);
+      break;
     case DCAM_IDPROP_SENSORCOOLERSTATUS:  //(R)
       m_err =
           dcamprop_getvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLERSTATUS, &dvalue);
@@ -1155,6 +1159,13 @@ asynStatus Orca::writeInt32(asynUser* pasynUser, epicsInt32 value) {
                      functionName);
   }
 
+  //-- Sensor cooler
+  else if (index == hSensorCooler) {
+    m_err = dcamprop_setgetvalue(m_hdcam, DCAM_IDPROP_SENSORCOOLER, &dvalue);
+    checkAndLogError(m_err, "dcamprop_setgetvalue()", index, dvalue,
+                     functionName);
+  }  
+
   //-- binning
   else if (index == hBinning) {
     double dFrameBytes = 0;
-- 
GitLab