14#ifndef XRMIOCAPP_SRC_ACQ400_SOE_H_
15#define XRMIOCAPP_SRC_ACQ400_SOE_H_
17#include "acq400_asyn_common.h"
22#define PS_SOE_STRATEGY "SOE_STRATEGY"
24#define PS_SOE_LUT_COL_ROWNUM "SOE_LUT_COL_ROWNUM"
25#define PS_SOE_LUT_COL_EVENT "SOE_LUT_COL_EVENT"
26#define PS_SOE_LUT_COL_PAD "SOE_LUT_COL_PAD"
27#define PS_SOE_LUT_COL_PV_ID "SOE_LUT_COL_PV_ID"
28#define PS_SOE_LUT_COL_OFFSET_US "SOE_LUT_COL_OFFSET_US"
31#define PS_SOE_LUT_REDIT_ROW "SOE_LUT_REDIT_ROW"
32#define PS_SOE_LUT_REDIT_ROWCOUNT "SOE_LUT_REDIT_ROWCOUNT"
33#define PS_SOE_LUT_REDIT_EVENT "SOE_LUT_REDIT_EVENT"
34#define PS_SOE_LUT_REDIT_EVENT_STEP "SOE_LUT_REDIT_EVENT_STEP"
35#define PS_SOE_LUT_REDIT_PV_ID "SOE_LUT_REDIT_PV_ID"
36#define PS_SOE_LUT_REDIT_PV_ID_STEP "SOE_LUT_REDIT_PV_ID_STEP"
37#define PS_SOE_LUT_REDIT_OFFSET_US "SOE_LUT_REDIT_OFFSET_US"
38#define PS_SOE_LUT_REDIT_OFFSET_US_STEP "SOE_LUT_REDIT_OFFSET_US_STEP"
40#define PS_SOE_LUT_REDIT_COMMIT "SOE_LUT_REDIT_COMMIT"
42#define PS_SOE_HLD_COL_ROWNUM "SOE_HLD_COL_ROWNUM"
43#define PS_SOE_HLD_COL_EVT "SOE_HLD_COL_EVT"
44#define PS_SOE_HLD_COL_PV_ID "SOE_HLD_COL_PV_ID"
45#define PS_SOE_HLD_COL_OFFSET_US "SOE_HLD_COL_OFFSET_US"
46#define PS_SOE_HLD_COL_CLIDAT "SOE_HLD_COL_CLIDAT"
47#define PS_SOE_HLD_COL_TS "SOE_HLD_COL_TS"
48#define PS_SOE_HLD_COL_DATA_OFFSET "SOE_HLD_COL_DATA_OFFSET"
50#define PS_SOE_AGG_SITES "SOE_AGG_SITES"
51#define PS_SOE_SITE_SSB "SOE_SITE_SSB"
52#define PS_SOE_SMPL_NSAM "SOE_SMPL_NSAM"
53#define PS_SOE_SITE_IS_ADC "SOE_SITE_IS_ADC"
54#define PS_SOE_SMPL_SS_U32 "SOE_SMPL_SS_U32"
55#define PS_SOE_SMPL_AI_COUNT "SOE_SMPL_AI_COUNT"
56#define PS_SOE_SMPL_DI_COUNT "SOE_SMPL_DI_COUNT"
57#define PS_SOE_SMPL_SP_COUNT "SOE_SMPL_SP_COUNT"
59#define PS_SOE_SMPL_DI_INDEX "SOE_SMPL_DI_INDEX"
60#define PS_SOE_SMPL_SP_INDEX "SOE_SMPL_SP_INDEX"
62#define PS_SOE_KBUF_INDEX "SOE_KBUF_INDEX"
63#define PS_SOE_KBUF_WRT0 "SOE_KBUF_WRT0"
64#define PS_SOE_KBUF_WRT1 "SOE_KBUF_WRT1"
67#define PS_SOE_HLD_COL_AI1 "SOE_HLD_COL_AI1"
68#define PS_SOE_HLD_COL_AI2 "SOE_HLD_COL_AI2"
70#define PS_SOE_HLD_COL_DI1 "SOE_HLD_COL_DI1"
71#define PS_SOE_HLD_COL_DI2 "SOE_HLD_COL_DI2"
77#define PS_SOE_HLD_COL_SP0 "SOE_HLD_COL_SP0"
78#define PS_SOE_HLD_COL_SP1 "SOE_HLD_COL_SP1"
79#define PS_SOE_HLD_COL_SP2 "SOE_HLD_COL_SP2"
80#define PS_SOE_HLD_COL_SP3 "SOE_HLD_COL_SP3"
81#define PS_SOE_HLD_COL_WRVS "SOE_HLD_COL_WRVS"
82#define PS_SOE_HLD_COL_WRVT "SOE_HLD_COL_WRVT"
83#define PS_SOE_HLD_COL_WRUS "SOE_HLD_COL_WRUS"
93#define PS_SOE_HLD_DATA_COL_AI "SOE_HLD_DATA_COL_AI"
94#define PS_SOE_HLD_DATA_COL_DI "SOE_HLD_DATA_COL_DI"
95#define PS_SOE_HLD_DATA_COL_SP "SOE_HLD_DATA_COL_SP"
97#define PS_SOE_FMT_RX_TIMEOUTS "SOE_FMT_RX_TIMEOUTS"
98#define PS_SOE_FMT_RX_TIMEOUT_REASON \
99 "SOE_FMT_RX_TIMEOUT_REASON"
100#define PS_SOE_FMT_DELTA_TS "SOE_FMT_DELTA_TS"
101#define PS_SOE_FMT_RX_SUCCESS "SOE_FMT_RX_SUCCESS"
102#define PS_SOE_FMT_EV_MATCHES "SOE_FMT_EV_MATCHES"
103#define PS_SOE_FMT_EV_NIB "SOE_FMT_EV_NOT_IN_BUFFER"
104#define PS_SOE_FMT_BUF_POS "SOE_FMT_BUF_POS"
105#define PS_SOE_FMT_NEXT_RETRY "SOE_FMT_NEXT_RETRY"
107#define PS_SOE_HLD_TABLE_WF "SOE_HLD_TABLE_WF"
137 E_FMT_TS_TOO_EARLY_FOR_KB = -2,
138 E_FMT_TS_TOO_LATE_FOR_KB = -3,
139 E_FMT_NO_EVENTS_FOUND = -4,
140 E_FMT_UNDEFINED = -99
152 short events_accepted;
153 short events_not_in_buffer;
178 epicsInt8 c_rownum[SOE_LUT_ROWS];
179 epicsInt16 c_event[SOE_LUT_ROWS];
180 epicsInt16 c_pad[SOE_LUT_ROWS];
181 epicsInt32 c_pv_id[SOE_LUT_ROWS];
182 epicsInt64 c_offset_us[SOE_LUT_ROWS];
186 epicsInt8 c_rownum[SOE_HLD_ROWS];
187 epicsInt16 c_event[SOE_HLD_ROWS];
188 epicsInt32 c_pv_id[SOE_HLD_ROWS];
189 epicsInt32 c_offset_us[SOE_HLD_ROWS];
190 epicsInt32 c_client_data[SOE_HLD_ROWS];
191 epicsInt64 c_timestamp[SOE_HLD_ROWS];
192 epicsFloat32 c_AI1[SOE_HLD_ROWS];
193 epicsFloat32 c_AI2[SOE_HLD_ROWS];
194 epicsInt32 c_DI1[SOE_HLD_ROWS];
195 epicsInt32 c_DI2[SOE_HLD_ROWS];
196 epicsInt32 c_SP0[SOE_HLD_ROWS];
197 epicsInt32 c_SP1[SOE_HLD_ROWS];
198 epicsInt32 c_SP2[SOE_HLD_ROWS];
199 epicsInt32 c_SP3[SOE_HLD_ROWS];
200 epicsInt8 c_WRVS[SOE_HLD_ROWS];
201 epicsInt32 c_WRVT[SOE_HLD_ROWS];
202 epicsInt64 c_WRUS[SOE_HLD_ROWS];
204 unsigned fmt_rx_timeouts;
205 unsigned fmt_rx_success;
210 void get_sample_dimensions();
211 void init_the_hold_table();
214 virtual void update_soe_lut(
bool first_time =
false);
215 virtual void update_soe_lut_columns(
void);
216 virtual void update_soe_lut_callbacks(
bool call_array_callbacks);
218 virtual void update_hld_tab_columns(
void);
219 virtual void update_hld_tab_callbacks(
int n_u32);
220 virtual void update_hld_tab_columns_callbacks(
void);
222 struct KBUF current_kb;
223 inline char* get_raw();
224 void update_kbuf_info(
char* raw);
228 static void task_runner(
void *drvPvt);
310 virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
312 static const int CYCLE_MS;
defines SamplePrams, sample geometry definition struct.
Fermi Multicast Table Abstract Base Class Created on: 16 Feb 2026 Author: pgm.
Definition acq400_SOE.h:131
virtual RC operator()(const SOE_DIMS &soe, SOE_HOLD_TABLE ht)=0
int P_SOE_FMT_EV_MATCHES
Definition acq400_SOE.h:294
int P_SOE_LUT_REDIT_PV_ID
Definition acq400_SOE.h:242
int P_SOE_HLD_COL_CLIDAT
Definition acq400_SOE.h:268
int P_SOE_FMT_NEXT_RETRY
Definition acq400_SOE.h:297
int P_SOE_LUT_REDIT_ROW
Definition acq400_SOE.h:238
int P_SOE_HLD_COL_WRVS
Definition acq400_SOE.h:282
int P_SOE_HLD_COL_EVT
Definition acq400_SOE.h:265
int P_SOE_SMPL_SS_U32
Definition acq400_SOE.h:253
int P_SOE_SMPL_DI_INDEX
Definition acq400_SOE.h:261
int P_SOE_KBUF_INDEX
Definition acq400_SOE.h:286
int P_SOE_FMT_DELTA_TS
Definition acq400_SOE.h:292
int P_SOE_SMPL_AI_COUNT
Definition acq400_SOE.h:258
acq400_SOE(const char *portName, acq400_SOE_Strategy *strategy)
Definition acq400_SOE.cpp:32
int P_SOE_SMPL_NSAM
Definition acq400_SOE.h:255
int P_SOE_SITE_SSB
Definition acq400_SOE.h:252
int P_SOE_HLD_COL_SP3
Definition acq400_SOE.h:281
int P_SOE_HLD_COL_PV_ID
Definition acq400_SOE.h:266
int P_SOE_HLD_COL_DI1
Definition acq400_SOE.h:275
int P_SOE_FMT_EV_NIB
Definition acq400_SOE.h:295
int P_SOE_STRATEGY
Definition acq400_SOE.h:230
int P_SOE_HLD_COL_OFFSET_US
Definition acq400_SOE.h:267
int P_SOE_FMT_RX_TIMEOUTS
Definition acq400_SOE.h:290
int P_SOE_HLD_COL_WRUS
Definition acq400_SOE.h:284
int P_SOE_LUT_REDIT_EVENT_STEP
Definition acq400_SOE.h:241
int P_SOE_LUT_REDIT_OFFSET_US_STEP
Definition acq400_SOE.h:245
int P_SOE_AGG_SITES
Definition acq400_SOE.h:251
int P_SOE_KBUF_WRT0
Definition acq400_SOE.h:287
int P_SOE_HLD_COL_SP2
Definition acq400_SOE.h:280
int P_SOE_HLD_COL_ROWNUM
Definition acq400_SOE.h:264
int P_SOE_LUT_COL_PV_ID
Definition acq400_SOE.h:235
int P_SOE_HLD_COL_DATA_OFFSET
Definition acq400_SOE.h:270
int P_SOE_SMPL_SP_INDEX
Definition acq400_SOE.h:262
int P_SOE_LUT_REDIT_ROWCOUNT
Definition acq400_SOE.h:239
int P_SOE_HLD_COL_AI1
Definition acq400_SOE.h:272
int P_SOE_FMT_RX_TIMEOUT_REASON
Definition acq400_SOE.h:291
int P_SOE_LUT_REDIT_PV_ID_STEP
Definition acq400_SOE.h:243
int P_SOE_FMT_RX_SUCCESS
Definition acq400_SOE.h:293
int P_SOE_LUT_REDIT_OFFSET_US
Definition acq400_SOE.h:244
int P_SOE_SITE_IS_ADC
Definition acq400_SOE.h:256
int P_SOE_SMPL_DI_COUNT
Definition acq400_SOE.h:259
int P_SOE_LUT_COL_OFFSET_US
Definition acq400_SOE.h:236
int P_SOE_LUT_COL_PAD
Definition acq400_SOE.h:234
int P_SOE_HLD_COL_SP1
Definition acq400_SOE.h:279
int P_SOE_HLD_COL_AI2
Definition acq400_SOE.h:273
int P_SOE_LUT_REDIT_COMMIT
Definition acq400_SOE.h:247
int P_SOE_HLD_COL_DI2
Definition acq400_SOE.h:276
int P_SOE_LUT_COL_EVENT
Definition acq400_SOE.h:233
int P_SOE_HLD_COL_TS
Definition acq400_SOE.h:269
int P_SOE_HLD_COL_WRVT
Definition acq400_SOE.h:283
int P_SOE_HLD_TABLE_WF
Definition acq400_SOE.h:298
int P_SOE_KBUF_WRT1
Definition acq400_SOE.h:288
int P_SOE_SMPL_SP_COUNT
Definition acq400_SOE.h:260
int P_SOE_FMT_BUF_POS
Definition acq400_SOE.h:296
int P_SOE_LUT_COL_ROWNUM
Definition acq400_SOE.h:232
int P_SOE_HLD_COL_SP0
Definition acq400_SOE.h:278
int P_SOE_LUT_REDIT_EVENT
Definition acq400_SOE.h:240
SOE_HOLD_HEADER * the_hold_table
Definition acq400_SOE.h:172
acq400_asynPortDriver(const char *portName, int maxAddr, int interfaceMask, int interruptMask, int asynFlags, int autoConnect, int priority, int stackSize)
Definition acq400_asynPortDriver.cpp:16
KBUF "Kernel BUFfer" On boot: KBUF's are preassigned for capture memory Typical transient recorder: 1...
Definition acq400_SOE.h:117
unsigned ib
Definition acq400_SOE.h:118
epicsInt64 wrt0
Definition acq400_SOE.h:119
epicsInt64 wrt1
Definition acq400_SOE.h:120
const char * raw
Definition acq400_SOE.h:121
Definition acq400_SOE.h:124
Definition SamplePrams.h:11
Definition acq400_SOE.h:177
Definition acq400_SOE.h:185
Definition acq400_SOE.h:147
Declarations for key XRM structures for internal and wire (external) use.
struct SOE_LUT_ROW SOE_LUT[SOE_LUT_ROWS]
SOE_LUT Sample On Event Lookup Table definition.
Definition xrm_structs.h:95
struct SOE_HOLD_HEADER * SOE_HOLD_TABLE
SOE_HOLD_TABLE.
Definition xrm_structs.h:250