|
ACQ400_XRM (xrmIoc)
|
Declarations for key XRM structures for internal and wire (external) use. More...
#include <epicsTypes.h>#include <cstring>Go to the source code of this file.
Classes | |
| struct | FMT_ROW |
| FMT_ROW defines a row of FMT: More... | |
| struct | SOE_LUT_ROW |
| SOE_LUT_ROW defines a row of SOE_LUT. More... | |
| struct | SOE_HOLD_HEADER |
| SOE_HOLD_HEADER Header for Hold Table. lut_row is a copy of the relevant SOE_LUT_ROW, for traceability. More... | |
| struct | XRM_MAGPS_SAMPLE |
| struct | XRM_QPMS_SAMPLE |
| struct | XRM_INST_A_SAMPLE |
| struct | XRM_INST_B_SAMPLE |
Macros | |
| #define | SOE_HOLD_HEADER_VERSION 1 |
Typedefs | |
| typedef struct FMT_ROW | FMT[FMT_ROWS] |
| FMT : FNAL Multicast Table. | |
| typedef struct SOE_LUT_ROW | SOE_LUT[SOE_LUT_ROWS] |
| SOE_LUT Sample On Event Lookup Table definition. | |
| typedef epicsUInt32 | U32 |
| typedef struct SOE_HOLD_HEADER * | SOE_HOLD_TABLE |
| SOE_HOLD_TABLE. | |
Functions | |
| void | print (FMT &fmt, bool verbose=false) |
| void | print (SOE_LUT &lut, bool verbose=false) |
| void | print (SOE_HOLD_HEADER *ht, bool verbose=false) |
Variables | |
| const epicsUInt16 | EV99 = 65535U |
| const int | FMT_ROWS = 64 |
| const int | SOE_LUT_ROWS = 64 |
| const int | SPAD0_SC = 0 |
| const int | SPAD1_TS = 1 |
| const int | SOE_HLD_ROWS = 64 |
| const int | XRM_MAGPS_AI16 = 32 |
| const int | XRM_MAGPS_DI32 = 2 |
| const int | XRM_MAGPS_SP32 = 6 |
| const int | XRM_QPMS_AI16 = 128 |
| const int | XRM_QPMS_DI32 = 0 |
| const int | XRM_QPMS_SP32 = 8 |
| const int | XRM_INST_A_AI16 = 32 |
| const int | XRM_INST_A_DI32 = 0 |
| const int | XRM_INST_A_SP32 = 4 |
| const int | XRM_INST_B_AI16 = 32 |
| const int | XRM_INST_B_DI32 = 1 |
| const int | XRM_INST_B_SP32 = 3 |
Declarations for key XRM structures for internal and wire (external) use.
| typedef struct SOE_HOLD_HEADER* SOE_HOLD_TABLE |
| ROW | pv_id,event,pad,offset_us | client_data | timestamp | data_offset | ss_u32 | ai_count | di_count | sp_count |
|---|---|---|---|---|---|---|---|---|
| 0 | u32,u16,u16,int32 | u32 | int64 | u16 | u8 | u8 | u8 | u8 |
| 1 | u32,u16,u16,int32 | u32 | int64 | u16 | u8 | u8 | u8 | u8 |
| ... | u32,u16,u16,int32 | u32 | int64 | u16 | u8 | u8 | u8 | u8 |
| DEL | 0,0,0,0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| RAW | ai | di | sp |
|---|---|---|---|
| R0 | i16 | u32 | U32 |
| R1 | i16 | u32 | U32 |
Or in terms of offsets (sizes in bytes):
Actual wire protocol:
@todo We've attempted to meet the spirit of the requirement using the PVXS API to create an Array of Groups, but this has not been a success. Happy to revisit later when we have an example that works.
| typedef struct SOE_LUT_ROW SOE_LUT[SOE_LUT_ROWS] |
SOE_LUT Sample On Event Lookup Table definition.
matches events to PV's with a selectable time offset.
input from user at user-timescale.
in EPICS, we provide a "ROW_EDIT" PV to enable update, this works well for Phoebus and P4P
@todo: unsure how to make a direct pvput for the whole table.
| ROW | event | pad | pv_id | offset_us |
|---|---|---|---|---|
| 0 | u16 | u16 | u32 | int32 |
| 1 | u16 | u16 | u32 | int32 |
| 2 | u16 | u16 | u32 | int32 |
| .. | ... | ... | ... | ... |
| 64 | u16 | u16 | u32 | int32 |
| const int FMT_ROWS = 64 |
define number of rows in FMT.
| const int SPAD0_SC = 0 |
SPAD[0] is sample count (u32)
| const int SPAD1_TS = 1 |
SPAD[1] is WR TS 3 bit seconds, 28 bit ticks