versadac  1
versadac - Scalable Recorder Firmware
eiot2srdos.h
1 /*******************************************************************************
2 FILE : eiot2srdos.h
3 VERSION : $Id$
4 AUTHOR : David Cozens
5 SYSTEM : Diab C for PowerPC under vxWorks
6 DESCRIPTION : This file contains The t2500 module class for representing slow
7  digital output modules.
8 
9  Modification for 8Hz execution (for Scalable Recorder)
10 
11 *******************************************************************************/
12 #ifndef __EIOT2SRDOS_H
13 #define __EIOT2SRDOS_H
14 
15 #include "prjParams.h"
16 #include "eio.h"
17 #include "eio_t25srm.h"
18 #include "eio_vp.h"
19 #include "do_s_ssm.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 enum EioT2500DoSlowRunStates
26 {
27  EIO_T2500DOSLOW_STATE_JUST_CREATED,
28  EIO_T2500DOSLOW_STATE_MODULE_HAS_CHANGED,
29  EIO_T2500DOSLOW_STATE_RUNTIME,
30  EIO_T2500DOSLOW_STATE_DELETE,
31  EIO_T2500DOSLOW_STATE_SECONDARY,
32  EIO_T2500DOSLOW_STATE_BECOMING_PRIMARY,
33 };
34 
35 enum EioT2500DoSlowTpoStates
36 {
37  EIO_T2500DOSLOW_TPO_STATE_INITIALISE,
38  EIO_T2500DOSLOW_TPO_STATE_SEND_MINIMUM_ON_TIME,
39  EIO_T2500DOSLOW_TPO_STATE_SEND_DEMAND,
40  EIO_T2500DOSLOW_TPO_STATE_CAPABILITY_EXCEEDED
41 };
42 
44 {
45  public:
46  EioT2500DoSlowModule(unsigned char z_moduleNumber, EioModuleType z_type, EioT2500CycleEnum z_expectedCycleNumber);
47  virtual ~EioT2500DoSlowModule();
48 
49  protected:
50  virtual void update62_5mS();
51  virtual void update125mS();
52  virtual void updateBuffers125ms();
53  virtual void cycleComplete125mS();
54 
55  private:
56  void configureUpdateMessage();
57  EioT2500DoSlowRunStates m_state;
58  DigitalOutputSlowSpiScheduledMessage *m_updateMessage;
59  static const int MAX_NUMBER_OF_OUTPUTS_PER_MODULE = 4;
60  static const int MAX_NUMBER_OF_VP_OUTPUTS_PER_MODULE = MAX_NUMBER_OF_OUTPUTS_PER_MODULE/2;
61  EioDoPointConfig m_pointConfig[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
62  EioDoPointRuntime m_pointRuntime[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
63  EioUint32 m_oneShotTimer[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
64  EioUint32 m_pulseTrainPeriod62_5mSTicks[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
65  EioUint32 m_pulseTrainCurrentPulseLength62_5mSTicks[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
66  EioUint32 m_pulseTrainPulsesOutstanding[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
67  EioT2500DoSlowTpoStates m_tpoState[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
68  EioValvePositioningOutput m_vpo[MAX_NUMBER_OF_VP_OUTPUTS_PER_MODULE];
69  EioDOStatus m_status[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
70  bool m_messagesScheduled;
71  bool m_hadHardwareError[MAX_NUMBER_OF_OUTPUTS_PER_MODULE];
72 };
73 
74 #ifdef __cplusplus
75 } /* extern "C" */
76 #endif
77 #endif /*__EIOT2SRDOS_H */
78 
Definition: eio_t25srm.h:58
Definition: eiot2srdos.h:43
Definition: do_s_ssm.h:36
Definition: eio_do.h:89
Definition: eio_do.h:102
Definition: eio_vp.h:25