areaDetector 3-14
EPICS areaDetector framework
ADTimePix.h
Go to the documentation of this file.
1/*
2 * Header file for the ADTimePix3 EPICS driver
3 *
4 * This file contains the definitions of PV params, and the definition of the ADTimePix3 class and functions.
5 *
6 * Author: Kazimierz Gofron
7 * Created: June, 2022
8 * Last edited: July 20, 2025
9 * Copyright (c) : Oak Ridge National Laboratory
10 *
11 */
12
13// header guard
14#ifndef ADTIMEPIX_H
15#define ADTIMEPIX_H
16
17// version numbers
18#define ADTIMEPIX_VERSION 1
19#define ADTIMEPIX_REVISION 4
20#define ADTIMEPIX_MODIFICATION 0
21
22
23#include "ADDriver.h"
24#include "cpr/cpr.h"
25#include <Magick++.h>
26#include <json.hpp>
27
28// Driver-specific PV string definitions here
29/* String asyn interface access Description */
30#define ADTimePixServalConnectedString "TPX3_SERVAL_CONNECTED" // (asynInt32, r) Serval Connected,
31#define ADTimePixServerNameString "TPX3_SERVER_NAME" // (asynOctet, r) Server Name
32#define ADTimePixDetTypeString "TPX3_DETECTOR_TYPE" // (asynOctet, r) Detector Type, should be binary DetConnected
33#define ADTimePixFWTimeStampString "TPX3_FW_TIMESTAMP" // (asynOctet, r) Firmware TimeStamp
34#define ADTimePixDetConnectedString "TPX3_DETECTOR_CONNECTED" // (asynInt32, r) Detector Connected,
35#define ADTimePixFreeSpaceString "TPX3_FREE_SPACE" // (asynInt64 r) Free Space [Bytes]
36#define ADTimePixWriteSpeedString "TPX3_WRITE_SPEED" // (asynFloat64, r) Hits? [320 Mhits/s]
37#define ADTimePixLowerLimitString "TPX3_LLIM_SPACE" // (asynInt64, w) Lower limit on available disk space [Bytes]
38#define ADTimePixLLimReachedString "TPX3_LLIM_REACH" // (asynInt32, r) Reached Lower disk limit
39#define ADTimePixHttpCodeString "TPX3_HTTP_CODE" // (asynInt32, r) 200/OK, 204/NoContent, 302/MovedTemporarily, 400/BadRequest, 404/NotFound, 409/Conflict, 500/InternalError, 503/ServiceUnavailable
40
41// Detector Health
42#define ADTimePixLocalTempString "TPX3_LOCAL_TEMP" // (asynFloat64, r) Local Temperature
43#define ADTimePixFPGATempString "TPX3_FPGA_TEMP" // (asynFloat64, r) FPGA Temperature
44#define ADTimePixFan1SpeedString "TPX3_FAN1_SPEED" // (asynFloat64, r) Fan1 Speed
45#define ADTimePixFan2SpeedString "TPX3_FAN2_SPEED" // (asynFloat64, r) Fan Speed
46#define ADTimePixBiasVoltageString "TPX3_BIAS_VOLT_H" // (asynFloat64, r) Bias Voltage
47#define ADTimePixHumidityString "TPX3_HUMIDITY" // (asynInt32, r) Humidity
48#define ADTimePixChipTemperatureString "TPX3_CHIP_TEMPS" // (asynOctet, r) Chip temperature list
49#define ADTimePixVDDString "TPX3_VDD" // (asynOctet, r) VDD list
50#define ADTimePixAVDDString "TPX3_AVDD" // (asynOctet, r) AVDD list
51#define ADTimePixHealthString "TPX3_HEALTH" // (asynInt32, r) Scan detector/health
52
53 // Detector Info
54#define ADTimePixIfaceNameString "TPX3_IFACE" // (asynOctet, r) IfaceName
55#define ADTimePixSW_versionString "TPX3_SW_VER" // (asynOctet, r) SW_version
56#define ADTimePixFW_versionString "TPX3_FW_VER" // (asynOctet, r) FW_version
57#define ADTimePixPixCountString "TPX3_PEL_CNT" // (asynInt32, r) PixCount
58#define ADTimePixRowLenString "TPX3_ROWLEN" // (asynInt32, r) RowLen
59#define ADTimePixNumberOfChipsString "TPX3_NUM_CHIPS" // (asynInt32, r) NumberOfChip
60#define ADTimePixNumberOfRowsString "TPX3_NUM_ROWS" // (asynInt32, r) NumberOfRows
61#define ADTimePixMpxTypeString "TPX3_MPX_TYPE" // (asynInt32, r) MpxType
62
63#define ADTimePixBoardsIDString "TPX3_BOARDS_ID" // (asynOctet, r) Boards->ChipboardId
64#define ADTimePixBoardsIPString "TPX3_BOARDS_IP" // (asynOctet, r) Boards->IpAddress
65#define ADTimePixBoardsCh1String "TPX3_BOARDS_CH1" // (asynOctet, r) Boards->Chip1{Id,Name}
66#define ADTimePixBoardsCh2String "TPX3_BOARDS_CH2" // (asynOctet, r) Boards->Chip2{Id,Name}
67#define ADTimePixBoardsCh3String "TPX3_BOARDS_CH3" // (asynOctet, r) Boards->Chip3{Id,Name}
68#define ADTimePixBoardsCh4String "TPX3_BOARDS_CH4" // (asynOctet, r) Boards->Chip4{Id,Name}
69
70#define ADTimePixSuppAcqModesString "TPX3_ACQ_MODES" // (asynInt32, r) SuppAcqModes
71#define ADTimePixClockReadoutString "TPX3_CLOCK_READ" // (asynFloat64, r) ClockReadout
72#define ADTimePixMaxPulseCountString "TPX3_PULSE_CNT" // (asynInt32, r) MaxPulseCount
73#define ADTimePixMaxPulseHeightString "TPX3_PULSE_HEIGHT" // (asynFloat64, r) MaxPulseHeight
74#define ADTimePixMaxPulsePeriodString "TPX3_PULSE_PERIOD" // (asynFloat64, r) MaxPulsePeriod
75#define ADTimePixTimerMaxValString "TPX3_TIME_MAX" // (asynFloat64, r) TimerMaxVal
76#define ADTimePixTimerMinValString "TPX3_TIME_MIN" // (asynFloat64, r) TimerMinVal
77#define ADTimePixTimerStepString "TPX3_TIME_STEP" // (asynFloat64, r) TimerStep
78#define ADTimePixClockTimepixString "TPX3_CLOCK" // (asynFloat64, r) ClockTimepix
79
80 // Detector Config
81#define ADTimePixFan1PWMString "TPX3_FAN1PWM" // (asynInt32, r) Fan1PWM
82#define ADTimePixFan2PWMString "TPX3_FAN2PWM" // (asynInt32, r) Fan2PWM
83#define ADTimePixBiasVoltString "TPX3_BIAS_VOLT_R" // (asynInt32, r) BiasVoltage
84#define ADTimePixBiasEnableString "TPX3_BIAS_ENBL" // (asynInt32, r) BiasEnabled
85#define ADTimePixChainModeString "TPX3_CHAIN_MODE" // (asynInt32, r) ChainMode
86#define ADTimePixTriggerInString "TPX3_TRIGGER_IN" // (asynInt32, r) TriggerIn
87#define ADTimePixTriggerOutString "TPX3_TRIGGER_OUT" // (asynInt32, r) TriggerOut
88#define ADTimePixPolarityString "TPX3_POLARITY" // (asynInt32, r) Polarity
89#define ADTimePixTriggerModeString "TPX3_TRIGGER_MODE" // (asynOctet, r) TriggerMode
90#define ADTimePixExposureTimeString "TPX3_EXPOSURE_TIME" // (asynFloat64, r) ExposureTime
91#define ADTimePixTriggerPeriodString "TPX3_TRIGGER_PERIOD" // (asynFloat64, r) TriggerPeriod
92#define ADTimePixnTriggersString "TPX3_NTRIGGERS" // (asynInt32, r) nTriggers
93#define ADTimePixPeriphClk80String "TPX3_PERIPH_CLK80" // (asynInt32, r) PeriphClk80
94#define ADTimePixTriggerDelayString "TPX3_TRIG_DELAY" // (asynFloat64, r) TriggerDelay
95#define ADTimePixTdcString "TPX3_TDC" // (asynOctet, r) Tdc
96#define ADTimePixTdc0String "TPX3_TDC0" // (asynInt32, r) Tdc0
97#define ADTimePixTdc1String "TPX3_TDC1" // (asynInt32, r) Tdc1
98#define ADTimePixGlobalTimestampIntervalString "TPX3_GL_TIMESTAMP_INT" // (asynFloat64, r) GlobalTimestampInterval
99#define ADTimePixExternalReferenceClockString "TPX3_EXT_REF_CLOCK" // (asynInt32, r) ExternalReferenceClock
100#define ADTimePixLogLevelString "TPX3_LOG_LEVEL" // (asynInt32, r) LogLevel
101
102// Detector Chips: Chip0; Chips count from 0-3. The index come from ADDR parameter
103#define ADTimePixCP_PLLString "TPX3_CP_PLL" // (asynInt32, r) DACs->Ibias_CP_PLL
104#define ADTimePixDiscS1OFFString "TPX3_DISCS1OFF" // (asynInt32, r) DACs->Ibias_DiscS1_OFF
105#define ADTimePixDiscS1ONString "TPX3_DISCS1ON" // (asynInt32, r) DACs->Ibias_DiscS1_ON
106#define ADTimePixDiscS2OFFString "TPX3_DISCS2OFF" // (asynInt32, r) DACs->Ibias_DiscS2_OFF
107#define ADTimePixDiscS2ONString "TPX3_DISCS2ON" // (asynInt32, r) DACs->Ibias_DiscS2_ON
108#define ADTimePixIkrumString "TPX3_IKRUM" // (asynInt32, r) DACs->Ibias_Ikrum
109#define ADTimePixPixelDACString "TPX3_PIXELDAC" // (asynInt32, r) DACs->Ibias_PixelDAC
110#define ADTimePixPreampOFFString "TPX3_PREAMPOFF" // (asynInt32, r) DACs->Ibias_Preamp_OFF
111#define ADTimePixPreampONString "TPX3_PREAMPON" // (asynInt32, r) DACs->Ibias_Preamp_ON
112#define ADTimePixTPbufferInString "TPX3_TPBUFFERIN" // (asynInt32, r) DACs->Ibias_TPbufferIn
113#define ADTimePixTPbufferOutString "TPX3_TPBUFFEROUT" // (asynInt32, r) DACs->Ibias_TPbufferOut
114#define ADTimePixPLL_VcntrlString "TPX3_PLL_VCNTRL" // (asynInt32, r) DACs->PLL_Vcntrl
115#define ADTimePixVPreampNCASString "TPX3_VPREAMPNCAS" // (asynInt32, r) DACs->VPreamp_NCAS
116#define ADTimePixVTPcoarseString "TPX3_VTP_COARSE" // (asynInt32, r) DACs->VTP_coarse
117#define ADTimePixVTPfineString "TPX3_VTP_FINE" // (asynInt32, r) DACs->VTP_fine
118#define ADTimePixVfbkString "TPX3_VFBK" // (asynInt32, r) DACs->Vfbk
119#define ADTimePixVthresholdCoarseString "TPX3_VTH_COARSE" // (asynInt32, r) DACs->Vthreshold_coarse
120#define ADTimePixVthresholdFineString "TPX3_VTH_FINE" // (asynInt32, r) DACs->Vthreshold_fine
121#define ADTimePixAdjustString "TPX3_ADJUST" // (asynInt32, r) DACs->Adjust
122// Chip Layout
123#define ADTimePixDetectorOrientationString "TPX3_DET_ORIENTATION" // (asynInt32, r) DetectorOrientation, in Detector/Layout since 3.0.0
124#define ADTimePixLayoutString "TPX3_LAYOUT" // (asynOctet, r) Chip layout
125// Chip Temperature
126#define ADTimePixChipNTemperatureString "TPX3_CHIP_TEMP" // (asynInt32, r) Chip N temperature
127// Chip VDD, AVDD
128#define ADTimePixChipN_VDDString "TPX3_CHIP_VDD" // (asynFloat64, r) Chip N VDD
129#define ADTimePixChipN_AVDDString "TPX3_CHIP_AVDD" // (asynFloat64, r) Chip N AVDD
130
131 // Absolute path to the binary pixel configuration, absolute path to the text chips configuration
132#define ADTimePixBPCFilePathString "BPC_FILE_PATH"
133#define ADTimePixBPCFilePathExistsString "BPC_FILE_PATH_EXISTS"
134#define ADTimePixBPCFileNameString "BPC_FILE_NAME"
135#define ADTimePixDACSFilePathString "DACS_FILE_PATH"
136#define ADTimePixDACSFilePathExistsString "DACS_FILE_PATH_EXISTS"
137#define ADTimePixDACSFileNameString "DACS_FILE_NAME"
138#define ADTimePixWriteMsgString "WRITE_FILE_MESSAGE"
139#define ADTimePixWriteBPCFileString "WRITE_BPC_FILE"
140#define ADTimePixWriteDACSFileString "WRITE_DACS_FILE"
143 // Server, write data channels
144#define ADTimePixWriteDataString "TPX3_WRITE_DATA" // (asynInt32, w) Write Data output channels (raw,img,preview)
145#define ADTimePixWriteRawString "TPX3_WRITE_RAW" // (asynInt32, w) Write Data output channels (raw)
146#define ADTimePixWriteRaw1String "TPX3_WRITE_RAW1" // (asynInt32, w) Write Data output channels (raw), Serval 3.3.0
147#define ADTimePixWriteImgString "TPX3_WRITE_IMG" // (asynInt32, w) Write Data output channels (img)
148#define ADTimePixWritePrvImgString "TPX3_WRITE_PRVIMG" // (asynInt32, w) Write Data output channels (preview->img)
149#define ADTimePixWritePrvImg1String "TPX3_WRITE_PRVIMG1" // (asynInt32, w) Write Data output channels (preview->img1)
150#define ADTimePixWritePrvHstString "TPX3_WRITE_PRVHST" // (asynInt32, w) Write Data output channels (preview->hst)
151 // Server, read data channels from Serval
152#define ADTimePixWriteRawReadString "TPX3_WRITE_RAW_RBV" // (asynInt32, w) Write Data output channels (raw)
153#define ADTimePixWriteRaw1ReadString "TPX3_WRITE_RAW1_RBV" // (asynInt32, w) Write Data output channels (raw), Serval 3.3.0
154#define ADTimePixWriteImgReadString "TPX3_WRITE_IMG_RBV" // (asynInt32, w) Write Data output channels (img)
155#define ADTimePixWritePrvImgReadString "TPX3_WRITE_PRVIMG_RBV" // (asynInt32, w) Write Data output channels (preview->img)
156#define ADTimePixWritePrvImg1ReadString "TPX3_WRITE_PRVIMG1_RBV" // (asynInt32, w) Write Data output channels (preview->img1)
157#define ADTimePixWritePrvHstReadString "TPX3_WRITE_PRVHST_RBV" // (asynInt32, w) Write Data output channels (preview->hst)
158
159 // Server, raw
160#define ADTimePixRawBaseString "TPX3_RAW_BASE" // (asynOctet, w) Raw Destination Base
161#define ADTimePixRawFilePatString "TPX3_RAW_FILEPAT" // (asynOctet, w) Raw Destination File Pattern
162#define ADTimePixRawSplitStrategyString "TPX3_RAW_SPLITSTG" // (asynInt32, w) Raw Destination Split Strategy
163#define ADTimePixRawQueueSizeString "TPX3_RAW_QUEUESIZE" // (asynInt32, w) Raw Destination Queue Size
164#define ADTimePixRawFilePathExistsString "RAW_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
165
166 // Server, raw stream or .tpx3 file (Serval 3.3.0)
167#define ADTimePixRaw1BaseString "TPX3_RAW1_BASE" // (asynOctet, w) Raw Destination Base
168#define ADTimePixRaw1FilePatString "TPX3_RAW1_FILEPAT" // (asynOctet, w) Raw Destination File Pattern
169#define ADTimePixRaw1SplitStrategyString "TPX3_RAW1_SPLITSTG" // (asynInt32, w) Raw Destination Split Strategy
170#define ADTimePixRaw1QueueSizeString "TPX3_RAW1_QUEUESIZE" // (asynInt32, w) Raw Destination Queue Size
171#define ADTimePixRaw1FilePathExistsString "RAW1_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
172
173 // Server, Image, ImageChannels[0]
174#define ADTimePixImgBaseString "TPX3_IMG_IMGBASE" // (asynOctet, w) ImageChannels Base file (Place raw files)
175#define ADTimePixImgFilePatString "TPX3_IMG_IMGPAT" // (asynOctet, w) ImageChannels FilePattern
176#define ADTimePixImgFormatString "TPX3_IMG_IMGFORMAT" // (asynInt32, w) ImageChannels Format
177#define ADTimePixImgModeString "TPX3_IMG_IMGMODE" // (asynInt32, w) ImageChannels Mode
178#define ADTimePixImgThsString "TPX3_IMG_IMGTHS" // (asynOctet, w) ImageChannels Thresholds (used by MPX3, not used for TPX3)
179#define ADTimePixImgIntSizeString "TPX3_IMG_INTSIZE" // (asynInt32, w) ImageChannels IntegrationSize
180#define ADTimePixImgIntModeString "TPX3_IMG_INTMODE" // (asynInt32, w) ImageChannels IntegrationMode
181#define ADTimePixImgStpOnDskLimString "TPX3_IMG_STPONDSK" // (asynInt32, w) ImageChannels StopMeasurementOnDiskLimit
182#define ADTimePixImgQueueSizeString "TPX3_IMG_QUEUESIZE" // (asynInt32, w) ImageChannels QueueSize
183#define ADTimePixImgFilePathExistsString "IMG_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
184
185 // Server, Preview
186#define ADTimePixPrvPeriodString "TPX3_PRV_PERIOD" // (asynFloat64, w) Preview Period
187#define ADTimePixPrvSamplingModeString "TPX3_PRV_SAMPLMODE" // (asynOctet, w) Preview Sampling Mode
188 // Server, Preview, ImageChannels[0]
189#define ADTimePixPrvImgBaseString "TPX3_PRV_IMGBASE" // (asynOctet, w) Preview ImageChannels Base file (Place raw files)
190#define ADTimePixPrvImgFilePatString "TPX3_PRV_IMGPAT" // (asynOctet, w) Preview ImageChannels FilePattern
191#define ADTimePixPrvImgFormatString "TPX3_PRV_IMGFORMAT" // (asynInt32, w) Preview ImageChannels Format
192#define ADTimePixPrvImgModeString "TPX3_PRV_IMGMODE" // (asynInt32, w) Preview ImageChannels Mode
193#define ADTimePixPrvImgThsString "TPX3_PRV_IMGTHS" // (asynOctet, w) Preview ImageChannels Thresholds
194#define ADTimePixPrvImgIntSizeString "TPX3_PRV_INTSIZE" // (asynInt32, w) Preview ImageChannels IntegrationSize
195#define ADTimePixPrvImgIntModeString "TPX3_PRV_INTMODE" // (asynInt32, w) Preview ImageChannels IntegrationMode
196#define ADTimePixPrvImgStpOnDskLimString "TPX3_PRV_STPONDSK" // (asynInt32, w) Preview ImageChannels StopMeasurementOnDiskLimit
197#define ADTimePixPrvImgQueueSizeString "TPX3_PRV_QUEUESIZE" // (asynInt32, w) Preview ImageChannels QueueSize
198#define ADTimePixPrvImgFilePathExistsString "PRV_IMG_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
199 // Server, Preview, ImageChannels[1]
200#define ADTimePixPrvImg1BaseString "TPX3_PRV_IMG1BASE" // (asynOctet, w) Preview ImageChannels Preview files Base
201#define ADTimePixPrvImg1FilePatString "TPX3_PRV_IMG1PAT" // (asynOctet, w) Preview ImageChannels FilePattern
202#define ADTimePixPrvImg1FormatString "TPX3_PRV_IMG1FORMAT" // (asynInt32, w) Preview ImageChannels Preview files Format
203#define ADTimePixPrvImg1ModeString "TPX3_PRV_IMG1MODE" // (asynInt32, w) Preview ImageChannels Preview files Mode
204#define ADTimePixPrvImg1ThsString "TPX3_PRV_IMG1THS" // (asynOctet, w) Preview ImageChannels Preview files Thresholds
205#define ADTimePixPrvImg1IntSizeString "TPX3_PRV_IMG1INTSIZE" // (asynInt32, w) Preview ImageChannels Preview files IntegrationSize
206#define ADTimePixPrvImg1IntModeString "TPX3_PRV_IMG1INTMODE" // (asynInt32, w) Preview ImageChannels IntegrationMode
207#define ADTimePixPrvImg1StpOnDskLimString "TPX3_PRV_IMG1STPONDSK" // (asynInt32, w) Preview ImageChannels Preview files StopMeasurementOnDiskLimit
208#define ADTimePixPrvImg1QueueSizeString "TPX3_PRV_IMG1QUEUESIZE" // (asynInt32, w) Preview ImageChannels Preview files QueueSize
209#define ADTimePixPrvImg1FilePathExistsString "PRV_IMG1_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
210
211 // Server, Preview, HistogramChannels[0]
212#define ADTimePixPrvHstBaseString "TPX3_PRV_HSTBASE" // (asynOctet, w) Preview HistogramChannels Base file (Place raw files)
213#define ADTimePixPrvHstFilePatString "TPX3_PRV_HSTPAT" // (asynOctet, w) Preview HistogramChannels FilePattern
214#define ADTimePixPrvHstFormatString "TPX3_PRV_HSTFORMAT" // (asynInt32, w) Preview HistogramChannels Format
215#define ADTimePixPrvHstModeString "TPX3_PRV_HSTMODE" // (asynInt32, w) Preview HistogramChannels Mode
216#define ADTimePixPrvHstThsString "TPX3_PRV_HSTTHS" // (asynOctet, w) Preview HistogramChannels Thresholds
217#define ADTimePixPrvHstIntSizeString "TPX3_PRV_HSTINTSIZE" // (asynInt32, w) Preview HistogramChannels IntegrationSize
218#define ADTimePixPrvHstIntModeString "TPX3_PRV_HSTINTMODE" // (asynInt32, w) Preview HistogramChannels IntegrationMode
219#define ADTimePixPrvHstStpOnDskLimString "TPX3_PRV_HSTSTPONDSK" // (asynInt32, w) Preview HistogramChannels StopMeasurementOnDiskLimit
220#define ADTimePixPrvHstQueueSizeString "TPX3_PRV_HSTQUEUESIZE" // (asynInt32, w) Preview HistogramChannels QueueSize
221#define ADTimePixPrvHstNumBinsString "TPX3_PRV_HSTNBINS" // (asynInt32, w) Preview HistogramChannels NumberOfBins
222#define ADTimePixPrvHstBinWidthString "TPX3_PRV_HSTBINWIDTH" // (asynFloat64, w) Preview HistogramChannels BinWidth
223#define ADTimePixPrvHstOffsetString "TPX3_PRV_HSTOFFSET" // (asynFloat64, w) Preview HistogramChannels Offset
224#define ADTimePixPrvHstFilePathExistsString "PRV_HST_FILE_PATH_EXISTS" // (asynInt32, r/w) File path exists? */
225
226 // Measurement
227#define ADTimePixPelRateString "TPX3_PEL_RATE" // (asynInt32, w) PixelEventRate
228#define ADTimePixTdc1RateString "TPX3_TDC1_RATE" // (asynInt32, w) Tdc1EventRate
229#define ADTimePixTdc2RateString "TPX3_TDC2_RATE" // (asynInt32, w) Tdc2EventRate
230#define ADTimePixStartTimeString "TPX3_START_TIME" // (asynInt64, w) StartDateTime
231#define ADTimePixElapsedTimeString "TPX3_ELAPSED_TIME" // (asynFloat64, w) ElapsedTime
232#define ADTimePixTimeLeftString "TPX3_TIME_LEFT" // (asynFloat64, w) TimeLeft
233#define ADTimePixFrameCountString "TPX3_FRAME_COUNT" // (asynInt32, w) FrameCount
234#define ADTimePixDroppedFramesString "TPX3_DROPPED_FRAMES" // (asynInt32, w) DroppedFrames
235#define ADTimePixStatusString "TPX3_MSMT_STATUS" // (asynOctet, w) Status
236
237// BPC Mask
238#define ADTimePixBPCString "TPX3_BPC_PEL" // (asynInt32, w) BPC pel for each pixel, read from .bpc file
239#define ADTimePixBPCnString "TPX3_BPC_PEL_N" // (asynInt32, w) BPC pel number of masked pel from .bpc file
240#define ADTimePixBPCmaskedString "TPX3_BPC_PEL_MASKED" // (asynInt32, w) BPC array of pel masked in .bpc file (typically 36-44 values)
241#define ADTimePixMaskBPCString "TPX3_MASK_ARRAY_BPC" // (asynInt32, w) BPC mask to enable/disable pixel counting, AD mask image
242#define ADTimePixMaskOnOffPelString "TPX3_MASK_ONOFF_PEL" // (asynInt32, w) BPC mask positive/negative mask (count/not count)
243#define ADTimePixMaskResetString "TPX3_MASK_RESET" // (asynInt32, w) BPC mask initialize to 0 or 1 OnOffPel value
244#define ADTimePixMaskMinXString "TPX3_MASK_MINX" // (asynInt32, w) BPC mask rectangular/circular X
245#define ADTimePixMaskSizeXString "TPX3_MASK_SIZEX" // (asynInt32, w) BPC mask rectangular SizeX
246#define ADTimePixMaskMinYString "TPX3_MASK_MINY" // (asynInt32, w) BPC mask rectangular/circular Y
247#define ADTimePixMaskSizeYString "TPX3_MASK_SIZEY" // (asynInt32, w) BPC mask rectangular SizeY
248#define ADTimePixMaskRadiusString "TPX3_MASK_RADIUS" // (asynInt32, w) BPC mask circular Radius
249#define ADTimePixMaskRectangleString "TPX3_MASK_RECTANGLE" // (asynInt32, w) BPC mask rectangle mask write to array
250#define ADTimePixMaskCircleString "TPX3_MASK_CIRCLE" // (asynInt32, w) BPC mask circular mask write to array
251#define ADTimePixMaskFileNameString "TPX3_MASK_FILENAME" // (asynOctet, w) BPC mask FileName, file written to original location of .bpc
252#define ADTimePixMaskPelString "TPX3_MASK_PEL" // (asynInt32, w) BPC extract masked pel in vendor calibration .bpc File
253#define ADTimePixMaskWriteString "TPX3_MASK_WRITE" // (asynInt32, w) BPC write mask to new calibration .bpc File and push to TimePix3 FPGA
254
255// Control
256#define ADTimePixRawStreamString "TPX3_RAW_STREAM" // (asynInt32, w) file:/, http://, tcp://
257#define ADTimePixRaw1StreamString "TPX3_RAW1_STREAM" // (asynInt32, w) file:/, http://, tcp://; Serval 3.3.0
258#define ADTimePixPrvHstStreamString "TPX3_PRV_HST_STREAM" // (asynInt32, w) file:/, http://, tcp://
259
260
261using namespace Magick;
262using json = nlohmann::json;
263
264
265
266// ----------------------------------------
267// ADTimePix3 Data Structures
268//-----------------------------------------
269
270// Place any in use Data structures here
271
272
273
274/*
275 * Class definition of the ADTimePix driver. It inherits from the base ADDriver class
276 *
277 * Includes constructor/destructor, PV params, function definitions and variable definitions
278 *
279 */
280class ADTimePix : public ADDriver{
281
282 public:
283
284 // Constructor - NOTE THERE IS A CHANCE THAT YOUR CAMERA DOES NOT CONNECT WITH SERVAL # AND THIS MUST BE CHANGED
285 ADTimePix(const char* portName, const char* serial, int maxBuffers, size_t maxMemory, int priority, int stackSize);
286
287
288 // ADDriver overrides
289 virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t nChars, size_t *nActual);
290 virtual asynStatus writeInt32(asynUser* pasynUser, epicsInt32 value);
291 virtual asynStatus writeFloat64(asynUser* pasynUser, epicsFloat64 value);
292
293 asynStatus rotateLayout();
294
295 // Declaration for the new function in the driver class
296 virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn);
297
298 asynStatus maskReset(epicsInt32 *buf, int OnOff);
299 asynStatus maskRectangle(epicsInt32 *buf, int nX,int nXsize, int nY, int nYsize, int OnOff);
300 asynStatus maskCircle(epicsInt32 *buf, int nX,int nY, int nRadius, int OnOff);
301 asynStatus readBPCfile(char **buf, int *bufSize);
302 asynStatus writeBPCfile(char **buf, int *bufSize);
303 asynStatus mask2DtoBPC(int *buf, char *bufBPC);
304
305 void timePixCallback();
306
307 // destructor. Disconnects from camera, deletes the object
308 ~ADTimePix();
309
310 protected:
312 #define ADTIMEPIX_FIRST_PARAM ADTimePixHttpCode
313
314 // Dashboard
319
324
326
327 // Health
338
339 // Detector Info
348
355
365
366 // Detector Config
387
388 // Detector Chips
408
409 // Detector Chip layout
412
413 // Detector Health individual Chip Temperature, VDD, AVDD
417
418 // Files BPC, Chip/DACS
428
429 // Server, write output channels/modes
432 int ADTimePixWriteRaw1; // Serval 3.3.0
437 // Read back channels from Serval
439 int ADTimePixWriteRaw1Read; // Serval 3.3.0
444
445 // Server, raw
451
452 // Server, raw; Serval 3.3.0 multiple stream/file
458
459 // Server, Image
470
471 // Server, Preview
474 // Server, Preview, ImageChannels[0]
485 // Server, Preview, ImageChannel[1]
496 // Server, Preview, HistogramChannels[0]
510
511 // Measurement
521
522 // BPC Mask
539
540 // Controls
544
545 #define ADTIMEPIX_LAST_PARAM ADTimePixPrvHstStream
546
547 private:
548
549 // Some data variables
550 epicsEventId startEventId;
551 epicsEventId endEventId;
552
553 std::map<std::string, int> mDetOrientationMap;
554
555 std::string serverURL;
556 Image image;
557
558 bool acquiring=false;
559
560 epicsThreadId callbackThreadId;
561
562 // ----------------------------------------
563 // DRIVERNAMESTANDARD Global Variables
564
565 // ----------------------------------------
566 // DRIVERNAMESTANDARD Functions - Logging/Reporting
567 //-----------------------------------------
568
569 // reports device and driver info into a log file
570 void report(FILE* fp, int details);
571
572 // writes to ADStatus PV
573 void updateStatus(const char* status);
574
575 //function used for connecting to a TimePix3 serval URL device
576 // NOTE - THIS MAY ALSO NEED TO CHANGE IF SERIAL # NOT USED
577 asynStatus initialServerCheckConnection();
578
579 void printConnectedDeviceInfo();
580
581 //function that starts image acquisition
582 asynStatus acquireStart();
583
584 //function that stops image acquisition
585 asynStatus acquireStop();
586
587 // TimePix3 specific functions
588 asynStatus getDashboard();
589 asynStatus getServer();
590 asynStatus getHealth();
591 asynStatus getDetector();
592 asynStatus initCamera();
593 asynStatus initAcquisition();
594 asynStatus checkBPCPath();
595 asynStatus checkDACSPath();
596 asynStatus checkRawPath();
597 asynStatus checkRaw1Path();
598 asynStatus checkImgPath();
599 asynStatus checkPrvImgPath();
600 asynStatus checkPrvImg1Path();
601 asynStatus checkPrvHstPath();
602 asynStatus checkChannelPath(int baseParam, int streamParam, int filePathExistsParam,
603 const std::string& channelName, const std::string& errorMessage);
604 bool checkPath(std::string &filePath);
605 asynStatus uploadBPC();
606 asynStatus uploadDACS();
607 asynStatus writeDac(int chip, const std::string &dac, int value);
608 asynStatus fetchDacs(json &data, int chip);
609 asynStatus readImage();
610 asynStatus fileWriter();
611
612 // Helper functions for fileWriter optimization
613 asynStatus getParameterSafely(int param, int& value);
614 asynStatus getParameterSafely(int param, std::string& value);
615 asynStatus getParameterSafely(int param, double& value);
616 bool validateIntegrationSize(int size);
617 bool validateArrayIndex(int index, int maxSize);
618 asynStatus configureRawChannel(int channelIndex, json& server_j);
619 asynStatus configureImageChannel(const std::string& jsonPath, json& server_j);
620 asynStatus configurePreviewSettings(json& server_j);
621 asynStatus configureHistogramChannel(json& server_j);
622 asynStatus sendConfiguration(const json& config);
623
624 int checkFile(std::string &fullFileName);
625 asynStatus rowsCols(int *rows, int *cols, int *xChips, int *yChips, int *chipPelWidth);
626 asynStatus findChip(int x, int y, int *xChip, int *yChip, int *width);
627 int pelIndex(int x, int y);
628 int bcp2ImgIndex(int bpcIndexIn, int chipPelWidthIn);
629};
630
631// Stores number of additional PV parameters are added by the driver
632#define NUM_TIMEPIX_PARAMS ((int)(&ADTIMEPIX_LAST_PARAM - &ADTIMEPIX_FIRST_PARAM + 1))
633
634#endif
nlohmann::json json
Definition ADTimePix.cpp:67
Class from which areaDetector drivers are directly derived.
Definition ADDriver.h:132
Definition ADTimePix.h:280
void timePixCallback()
Definition ADTimePix.cpp:1848
int ADTimePixImgMode
Definition ADTimePix.h:463
int ADTimePixPreampON
Definition ADTimePix.h:397
int ADTimePixWriteRawRead
Definition ADTimePix.h:438
int ADTimePixPrvImgIntMode
Definition ADTimePix.h:481
int ADTimePixVthresholdFine
Definition ADTimePix.h:406
int ADTimePixWritePrvImgRead
Definition ADTimePix.h:441
int ADTimePixRaw1SplitStrategy
Definition ADTimePix.h:455
int ADTimePixPrvImgFilePat
Definition ADTimePix.h:476
int ADTimePixPolarity
Definition ADTimePix.h:374
int ADTimePixDiscS2ON
Definition ADTimePix.h:393
int ADTimePixPrvHstIntMode
Definition ADTimePix.h:503
int ADTimePixHealth
Definition ADTimePix.h:337
int ADTimePixBoardsCh2
Definition ADTimePix.h:352
int ADTimePixPixelDAC
Definition ADTimePix.h:395
int ADTimePixVthresholdCoarse
Definition ADTimePix.h:405
int ADTimePixRawFilePathExists
Definition ADTimePix.h:450
int ADTimePixPrvHstFormat
Definition ADTimePix.h:499
int ADTimePixMaxPulseCount
Definition ADTimePix.h:358
int ADTimePixPrvHstThs
Definition ADTimePix.h:501
int ADTimePixPrvImgFilePathExists
Definition ADTimePix.h:484
int ADTimePixMaskRadius
Definition ADTimePix.h:533
int ADTimePixImgFormat
Definition ADTimePix.h:462
int ADTimePixChipN_AVDD
Definition ADTimePix.h:416
int ADTimePixImgFilePat
Definition ADTimePix.h:461
int ADTimePixPreampOFF
Definition ADTimePix.h:396
int ADTimePixLogLevel
Definition ADTimePix.h:386
int ADTimePixVTPfine
Definition ADTimePix.h:403
int ADTimePixWriteRaw1
Definition ADTimePix.h:432
int ADTimePixWritePrvHst
Definition ADTimePix.h:436
int ADTimePixTdc1Rate
Definition ADTimePix.h:513
int ADTimePixPrvHstMode
Definition ADTimePix.h:500
virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t nChars, size_t *nActual)
Called when asyn clients call pasynOctet->write().
Definition ADTimePix.cpp:2084
int ADTimePixServerName
Definition ADTimePix.h:325
int ADTimePixFW_version
Definition ADTimePix.h:342
int ADTimePixPrvImg1IntMode
Definition ADTimePix.h:492
int ADTimePixMaskSizeX
Definition ADTimePix.h:530
int ADTimePixTriggerPeriod
Definition ADTimePix.h:377
int ADTimePixPrvImg1FilePathExists
Definition ADTimePix.h:495
int ADTimePixBPCFilePathExists
Definition ADTimePix.h:420
int ADTimePixWriteBPCFile
Definition ADTimePix.h:426
int ADTimePixPrvImg1IntSize
Definition ADTimePix.h:491
int ADTimePixLayout
Definition ADTimePix.h:411
asynStatus maskReset(epicsInt32 *buf, int OnOff)
Definition mask_io.cpp:146
int ADTimePixBoardsCh3
Definition ADTimePix.h:353
int ADTimePixFan1PWM
Definition ADTimePix.h:367
int ADTimePixPrvHstOffset
Definition ADTimePix.h:508
int ADTimePixBiasEnable
Definition ADTimePix.h:370
int ADTimePixVfbk
Definition ADTimePix.h:404
int ADTimePixPrvImgMode
Definition ADTimePix.h:478
int ADTimePixWritePrvImg
Definition ADTimePix.h:434
int ADTimePixFWTimeStamp
Definition ADTimePix.h:321
int ADTimePixHumidity
Definition ADTimePix.h:333
asynStatus maskRectangle(epicsInt32 *buf, int nX, int nXsize, int nY, int nYsize, int OnOff)
Definition mask_io.cpp:161
int ADTimePixPrvHstIntSize
Definition ADTimePix.h:502
int ADTimePixDetectorOrientation
Definition ADTimePix.h:410
int ADTimePixBoardsID
Definition ADTimePix.h:349
int ADTimePixTdc0
Definition ADTimePix.h:382
int ADTimePixRawFilePat
Definition ADTimePix.h:447
int ADTimePixPrvImg1Base
Definition ADTimePix.h:486
int ADTimePixMaskCircle
Definition ADTimePix.h:535
int ADTimePixPrvHstQueueSize
Definition ADTimePix.h:505
int ADTimePixTriggerDelay
Definition ADTimePix.h:380
int ADTimePixMaskMinX
Definition ADTimePix.h:529
int ADTimePixWriteData
Definition ADTimePix.h:430
int ADTimePixPrvHstStream
Definition ADTimePix.h:543
int ADTimePixRaw1QueueSize
Definition ADTimePix.h:456
int ADTimePixDiscS1ON
Definition ADTimePix.h:391
int ADTimePixPrvHstBinWidth
Definition ADTimePix.h:507
int ADTimePixRaw1Stream
Definition ADTimePix.h:542
asynStatus maskCircle(epicsInt32 *buf, int nX, int nY, int nRadius, int OnOff)
Definition mask_io.cpp:184
int ADTimePixRaw1Base
Definition ADTimePix.h:453
int ADTimePixFreeSpace
Definition ADTimePix.h:315
int ADTimePixTriggerMode
Definition ADTimePix.h:375
int ADTimePixVDD
Definition ADTimePix.h:335
int ADTimePixImgQueueSize
Definition ADTimePix.h:468
int ADTimePixnTriggers
Definition ADTimePix.h:378
int ADTimePixIfaceName
Definition ADTimePix.h:340
int ADTimePixTdc1
Definition ADTimePix.h:383
asynStatus readBPCfile(char **buf, int *bufSize)
Definition mask_io.cpp:237
int ADTimePixDACSFileName
Definition ADTimePix.h:424
int ADTimePixBoardsCh1
Definition ADTimePix.h:351
int ADTimePixPrvImg1QueueSize
Definition ADTimePix.h:494
int ADTimePixChainMode
Definition ADTimePix.h:371
int ADTimePixPrvImg1FilePat
Definition ADTimePix.h:487
int ADTimePixRawBase
Definition ADTimePix.h:446
int ADTimePixDiscS1OFF
Definition ADTimePix.h:390
int ADTimePixWriteRaw1Read
Definition ADTimePix.h:439
int ADTimePixBiasVolt
Definition ADTimePix.h:369
int ADTimePixBPCFilePath
Definition ADTimePix.h:419
int ADTimePixMaskFileName
Definition ADTimePix.h:536
int ADTimePixTdc2Rate
Definition ADTimePix.h:514
int ADTimePixLocalTemp
Definition ADTimePix.h:328
int ADTimePixMaskPel
Definition ADTimePix.h:537
int ADTimePixBPCmasked
Definition ADTimePix.h:525
int ADTimePixTriggerOut
Definition ADTimePix.h:373
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value)
Sets an int32 parameter.
Definition ADTimePix.cpp:2137
int ADTimePixElapsedTime
Definition ADTimePix.h:516
int ADTimePixBoardsIP
Definition ADTimePix.h:350
int ADTimePixTPbufferIn
Definition ADTimePix.h:398
asynStatus mask2DtoBPC(int *buf, char *bufBPC)
int ADTimePixPrvImg1StpOnDskLim
Definition ADTimePix.h:493
int ADTimePixPrvHstBase
Definition ADTimePix.h:497
int ADTimePixNumberOfChips
Definition ADTimePix.h:345
int ADTimePixWriteSpeed
Definition ADTimePix.h:316
int ADTimePixPrvImgIntSize
Definition ADTimePix.h:480
int ADTimePixTPbufferOut
Definition ADTimePix.h:399
int ADTimePixMaxPulsePeriod
Definition ADTimePix.h:360
int ADTimePixDetConnected
Definition ADTimePix.h:322
int ADTimePixSuppAcqModes
Definition ADTimePix.h:356
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value)
Definition ADTimePix.cpp:2252
int ADTimePixBiasVoltage
Definition ADTimePix.h:332
int ADTimePixWritePrvImg1
Definition ADTimePix.h:435
int ADTimePixRawStream
Definition ADTimePix.h:541
int ADTimePixPrvImg1Format
Definition ADTimePix.h:488
int ADTimePixDACSFilePathExists
Definition ADTimePix.h:423
asynStatus rotateLayout()
Write detector Layout.
Definition ADTimePix.cpp:526
int ADTimePixChipN_VDD
Definition ADTimePix.h:415
int ADTimePixWriteImgRead
Definition ADTimePix.h:440
int ADTimePixFPGATemp
Definition ADTimePix.h:329
int ADTimePixPrvHstNumBins
Definition ADTimePix.h:506
int ADTimePixWritePrvImg1Read
Definition ADTimePix.h:442
int ADTimePixTriggerIn
Definition ADTimePix.h:372
int ADTimePixPrvPeriod
Definition ADTimePix.h:472
int ADTimePixPrvHstStpOnDskLim
Definition ADTimePix.h:504
int ADTimePixRowLen
Definition ADTimePix.h:344
int ADTimePixMaxPulseHeight
Definition ADTimePix.h:359
int ADTimePixBPCFileName
Definition ADTimePix.h:421
int ADTimePixTimerMinVal
Definition ADTimePix.h:362
int ADTimePixTdc
Definition ADTimePix.h:381
int ADTimePixImgFilePathExists
Definition ADTimePix.h:469
int ADTimePixMaskWrite
Definition ADTimePix.h:538
int ADTimePixPixCount
Definition ADTimePix.h:343
int ADTimePixDACSFilePath
Definition ADTimePix.h:422
int ADTimePixPrvHstFilePathExists
Definition ADTimePix.h:509
int ADTimePixImgThs
Definition ADTimePix.h:464
int ADTimePixPrvImg1Mode
Definition ADTimePix.h:489
int ADTimePixStatus
Definition ADTimePix.h:520
int ADTimePixPrvSamplingMode
Definition ADTimePix.h:473
int ADTimePixBoardsCh4
Definition ADTimePix.h:354
int ADTimePixWriteRaw
Definition ADTimePix.h:431
int ADTimePixImgStpOnDskLim
Definition ADTimePix.h:467
int ADTimePixVPreampNCAS
Definition ADTimePix.h:401
int ADTimePixBPCn
Definition ADTimePix.h:524
int ADTimePixImgBase
Definition ADTimePix.h:460
int ADTimePixGlobalTimestampInterval
Definition ADTimePix.h:384
int ADTimePixMaskOnOffPel
Definition ADTimePix.h:527
int ADTimePixPelRate
Definition ADTimePix.h:512
int ADTimePixChipNTemperature
Definition ADTimePix.h:414
int ADTimePixAVDD
Definition ADTimePix.h:336
int ADTimePixWriteDACSFile
Definition ADTimePix.h:427
virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn)
Definition mask_io.cpp:5
int ADTimePixCP_PLL
Definition ADTimePix.h:389
int ADTimePixRaw1FilePathExists
Definition ADTimePix.h:457
int ADTimePixMaskSizeY
Definition ADTimePix.h:532
int ADTimePixExternalReferenceClock
Definition ADTimePix.h:385
int ADTimePixMaskRectangle
Definition ADTimePix.h:534
int ADTimePixBPC
Definition ADTimePix.h:523
int ADTimePixRawSplitStrategy
Definition ADTimePix.h:448
int ADTimePixFrameCount
Definition ADTimePix.h:518
int ADTimePixWriteImg
Definition ADTimePix.h:433
int ADTimePixSW_version
Definition ADTimePix.h:341
int ADTimePixPrvImgStpOnDskLim
Definition ADTimePix.h:482
int ADTimePixLLimReached
Definition ADTimePix.h:318
int ADTimePixTimeLeft
Definition ADTimePix.h:517
int ADTimePixPrvImg1Ths
Definition ADTimePix.h:490
int ADTimePixStartTime
Definition ADTimePix.h:515
int ADTimePixDiscS2OFF
Definition ADTimePix.h:392
int ADTimePixFan2Speed
Definition ADTimePix.h:331
int ADTimePixImgIntMode
Definition ADTimePix.h:466
int ADTimePixIkrum
Definition ADTimePix.h:394
int ADTimePixPrvImgFormat
Definition ADTimePix.h:477
int ADTimePixDroppedFrames
Definition ADTimePix.h:519
int ADTimePixImgIntSize
Definition ADTimePix.h:465
int ADTimePixWritePrvHstRead
Definition ADTimePix.h:443
int ADTimePixPrvHstFilePat
Definition ADTimePix.h:498
int ADTimePixPrvImgBase
Definition ADTimePix.h:475
asynStatus writeBPCfile(char **buf, int *bufSize)
Definition mask_io.cpp:303
int ADTimePixExposureTime
Definition ADTimePix.h:376
int ADTimePixPeriphClk80
Definition ADTimePix.h:379
int ADTimePixPLL_Vcntrl
Definition ADTimePix.h:400
int ADTimePixDetType
Definition ADTimePix.h:320
int ADTimePixChipTemperature
Definition ADTimePix.h:334
int ADTimePixMaskReset
Definition ADTimePix.h:528
int ADTimePixFan2PWM
Definition ADTimePix.h:368
int ADTimePixServalConnected
Definition ADTimePix.h:323
int ADTimePixNumberOfRows
Definition ADTimePix.h:346
int ADTimePixMaskMinY
Definition ADTimePix.h:531
int ADTimePixMpxType
Definition ADTimePix.h:347
int ADTimePixPrvImgThs
Definition ADTimePix.h:479
int ADTimePixClockReadout
Definition ADTimePix.h:357
~ADTimePix()
Definition ADTimePix.cpp:2701
int ADTimePixWriteMsg
Definition ADTimePix.h:425
int ADTimePixRaw1FilePat
Definition ADTimePix.h:454
int ADTimePixAdjust
Definition ADTimePix.h:407
int ADTimePixLowerLimit
Definition ADTimePix.h:317
int ADTimePixTimerMaxVal
Definition ADTimePix.h:361
int ADTimePixClockTimepix
Definition ADTimePix.h:364
int ADTimePixFan1Speed
Definition ADTimePix.h:330
int ADTimePixMaskBPC
Definition ADTimePix.h:526
int ADTimePixVTPcoarse
Definition ADTimePix.h:402
int ADTimePixPrvImgQueueSize
Definition ADTimePix.h:483
int ADTimePixTimerStep
Definition ADTimePix.h:363
int ADTimePixRawQueueSize
Definition ADTimePix.h:449
int ADTimePixHttpCode
Definition ADTimePix.h:311
virtual asynStatus checkPath()
Checks whether the directory specified NDFilePath parameter exists.
Definition asynNDArrayDriver.cpp:98
CONFIG config
Definition nullhttpd_extern.c:3