versadac  1
versadac - Scalable Recorder Firmware
eiot2srai8.h
1 /*******************************************************************************
2 FILE : eiot2srai8.h
3 VERSION : $Id$
4 AUTHOR : Steve Pickford
5 SYSTEM : Diab C for PowerPC under vxWorks
6 DESCRIPTION : This file contains The t2500 module classes
7 
8 *******************************************************************************/
9 
10 #ifndef __EIOT2SRAI8_H
11 #define __EIOT2SRAI8_H
12 /* The following section is needed by eio_t25sr.c */
13 #include "ai8_constants.h"
14 
15 /*
16  * When doing mA measurement a fixed burden resistor is used.
17  */
18 #define AI8_BURDEN_RESISTOR_OHMS (3.325f)
19 
20 #define AIC_AI8_MV_RANGE_NOMINAL_INPUT_IMPEDANCE (200000.0f)
21 #define AIC_AI8_MA_RANGE_NOMINAL_INPUT_IMPEDANCE (AI8_BURDEN_RESISTOR_OHMS)
22 
23 #define AIC_MAX_FILTER_TIME (999999999) /* 999.999999 seconds */
24 
25 /* Calibration range data on AI8 modules */
26 typedef struct
27 {
28  EioAICalRangeType rangeType;
29  float rangeLowLimit;
30  float rangeHighLimit;
31  float calPointLow;
32  float calPointHigh;
33  EioUint8 numCalPoints;
35 
36 #ifdef __cplusplus
37 
38 /* This section must never be included from C */
39 
40 
41 #include "eio_t25srm.h"
42 #include "ai8_ssm.h"
43 #include "rst_ssm.h"
44 #include "led_ssm.h"
45 
46 #ifdef __cplusplus
47 extern "C" {
48 #endif
49 
50 enum Ai8CalibrationTypeEnum
51 {
52  AI8_CALIBRATION_TYPE_VOLTS,
53  AI8_CALIBRATION_TYPE_RESISTANCE,
54 };
55 
56 enum Ai8FilterTypeEnum
57 {
58  AI8_FILTER_TYPE_MAIN,
59  AI8_FILTER_TYPE_AUX,
60  AI8_NUMBER_OF_FILTER_TYPES
61 };
62 
63 enum Ai8RunStates
64 {
65  EIO_T2500AI8_STATE_MODULE_NEEDS_RESET,
66  EIO_T2500AI8_STATE_MODULE_WAIT_FOR_MODULE_TO_RESET,
67  EIO_T2500AI8_STATE_INITIALISING,
68  EIO_T2500AI8_STATE_RUNTIME,
69  EIO_T2500AI8_STATE_DELETE,
70  EIO_T2500AI8_STATE_SECONDARY,
71  EIO_T2500AI8_STATE_BECOMING_PRIMARY_1,
72  EIO_T2500AI8_STATE_BECOMING_PRIMARY_2,
73 };
74 
75 // internal states of the calibration state machine
76 enum Ai8CalibrationState
77 {
78  AI8_CAL_STATE_IDLE,
79  AI8_CAL_STATE_WAIT_FOR_RANGE,
80  AI8_CAL_STATE_START_MEASUREMENT,
81  AI8_CAL_STATE_WAIT_FOR_VALUE,
82  AI8_CAL_STATE_POINT_DONE,
83  AI8_CAL_STATE_VERIFY,
84  AI8_CAL_STATE_SAVE,
85  AI8_CAL_STATE_RESTORE,
86  AI8_CAL_STATE_ABORT,
87  AI8_CAL_STATE_WRITE_PROCESS_WORD
88 };
89 
90 enum Ai8CalibrationPoints
91 {
92  AI8_CAL_POINT_LOW,
93  AI8_CAL_POINT_HIGH,
94  AI8_NUMBER_OF_CALIBRATION_POINTS
95 };
96 
97 class EioT2500AI8Module:public EioT2500Module
98 {
99  public:
100  EioT2500AI8Module(unsigned char moduleNumber, EioModuleType z_type, EioT2500CycleEnum z_expectedCycleNumber);
101  virtual ~EioT2500AI8Module();
102 
103  protected:
104  virtual void update62_5mS();
105  virtual void update125mS();
106  virtual void updateBuffers125ms();
107  EioBoolean getCalibrated(EioUint8 channel, EioAICalType calType, EioUint8 rangeNumber);
108 
109  private:
110  EioUint8 getChannelConfig(EioUint8 channel);
111  static void secondaryFilter( float sample, float *polep, float divisor, EioSint8 *resetp );
112  void disableAll62_5mS();
113  void disableAll125mS();
114  void updateCalibrationState();
115  bool calibrationRequestReceived(EioAiCalibrationRequest z_request);
116  bool calibrationRequestReceivedAll(EioAiCalibrationRequest z_request);
117 
118  Ai8RunStates m_state;
119  Ai8CalibrationState m_calibrationState;
120  EioBoolean m_rangeFactoryCalibrated[AI8_NUMBER_OF_CHANNELS];
121  EioBoolean m_rangeUserCalibrated[AI8_NUMBER_OF_CHANNELS];
122  Ai8CalibrationPoints m_calPointIndex;
123 
124  // configuration messages
125  Ai8ConfigSpiScheduledMessage * m_totalConfig62_5mS;
126  Ai8ConfigSpiScheduledMessage * m_totalConfig125mS;
127 
128  bool m_messagesScheduled;
129 
130  float m_divisor[AI8_NUMBER_OF_CHANNELS];
131  EioSint8 m_filterReset[AI8_NUMBER_OF_CHANNELS][AI8_NUMBER_OF_FILTER_TYPES];
132 
133  EioAIMeasuredValueData m_measuredValueData[AI8_NUMBER_OF_CHANNELS];
134  EioAIPointConfig m_pointConfig[AI8_NUMBER_OF_CHANNELS];
135  EioAICalibrationData m_calData[AI8_NUMBER_OF_CHANNELS];
136 
137  EioUint8 m_currentConfig[AI8_NUMBER_OF_CHANNELS];
138 
139  EioUint8 m_hideAuxilliaryErrors;
140 
141  EioUint8 m_moduleErrorCount;
142 
143  EioUint8 m_numberChannels;
144 
145  EioUint8 m_waitCount;
146 
147  EioUint8 m_rangingCount[AI8_NUMBER_OF_CHANNELS];
148 
149 };
150 #ifdef __cplusplus
151 } /* extern "C" */
152 #endif
153 #endif /* __cplusplus */
154 #endif /*__EIOT2SRAI8_H */
Definition: eio_t25srm.h:58
Definition: eio_ai.h:44
Definition: eiot2cal.h:36
Definition: eio_ai.h:76
Definition: eiot2srai8.h:26
Definition: ai8_ssm.h:124