LRAUV  revA
DAT.h
Go to the documentation of this file.
1 
12 #ifndef DAT_H
13 #define DAT_H
14 
16 #include "io/LoadControl.h"
17 #include "io/UartStream.h"
18 #include "logger/Logger.h"
19 
20 #include "data/Matrix3x3.h"
21 
24 
33 class DAT : public SyncSensorComponent
34 {
35 public:
36 
37  DAT( const Module* module );
38 
39  virtual ~DAT();
40 
41  virtual void run();
42 
45  virtual RunState start();
46 
48  virtual RunState starting();
49 
51  virtual RunState pause();
52 
54  virtual RunState paused();
55 
57  virtual RunState resume();
58 
60  virtual RunState resuming();
61 
63  virtual RunState runnable();
64 
66  virtual RunState resetting()
67  {
68  return stop();
69  }
70 
72  virtual RunState stop();
73 
74  virtual RunState stopping();
75 
77  virtual RunState stopped();
78 
79  virtual void uninitialize();
80 
82  virtual ConfigURI getConfigURI( ConfigOption configOption ) const;
83 
84 private:
85 
86  // Note that the copy constructor below is private and not given a body.
87  // Any attempt to call it will return a compiler error.
88  DAT( const DAT& old ); // disallow copy constructor
89 
90  void readConfig();
91 
93 
94  // Slate inputs
97 
98  // universal outputs
101 
102  // Slate outputs
125 
130 
133 
134  bool debug_;
136  char deviceResponse_[396]; // Stores the current response from the modem
137 
138  Matrix3x3 transformationFromTetrahedronToVehicleFrame_, transformationFromVehicleToTetrahedronFrame_; // alignment matrices from vehicle to instrument frame and vice versa
139 
140  // Instance of load controller
145 
146  UartStream uart_; // Holds the communications device
147 
149  bool commandModeSent_, commandModeAcknowledged_, localAddressSettingSent_, localAddressSettingAcknowledged_; // TODO: These state flags are clunky -- it would be cleaner if we just made this component asynchronous and let the serial port wait for a reasonable time for a response.
151  int remoteAddressRequested_, numPingsRequested_; // The query from another component, consisting of the address of the modem from which the DAT is requesting data and the number of return pings it is requesting
155 
156 // bool rangeRequested_; // Has info from the DAT been requested?
157 // bool oneWayRequested_; // Has oneway mode has been requested of the homing target?
164 
168 
169  void logVoltageAndCurrent();
170 
171 
172  // returns true if data is requested from one of the readers
173  bool isDataRequested();
174 
175  bool gotNewQuery( void );
176 
177  Timestamp requestRange( const int remoteAddress, const int numPings );
178 
179  int clearUserPrompt( void );
180 
181  void readAndParseResponses( void );
182 
183  void parseResponses( void );
184 
185  void cleanResponse( void );
186 
187  bool parseDirectionMessage( void );
188 
189  bool parseRangeMessage( void );
190 
191  void publishData( void );
192 
193  Point3D phaseToUnitVector( const double phaseA, const double phaseB, const double phaseC, const double phaseD );
194 
195  void unitVectorToAzimuthAndElevation( Point3D &uhat, float &azimuth, float &elevation ) __attribute__( ( deprecated ) ); // TODO migrate this elsewhere
196 
197  void azimuthAndElevationToUnitVector( float &azimuth, float &elevation, Point3D &uhat ) __attribute__( ( deprecated ) ); // TODO migrate this elsewhere
198 
199  void phasesToDirectionInVehicleFrame( void );
200 
201  void directionsToAngles( void );
202 
203  bool getSimulatedMeasurements( void ); // TODO fix simulator where appropriate so that this method just reads sim outputs and rewrites them to the slate in the appropriate places
204 
205 };
206 
207 #endif /*DAT_H*/
bool gotResponseNotReceived_
Definition: DAT.h:153
struct SimHeadStruct __attribute__((packed))
DataWriter * remoteAddressWriter_
Definition: DAT.h:121
Matrix3x3 transformationFromTetrahedronToVehicleFrame_
Definition: DAT.h:138
Contains a 3x3 array of double precision floating point numbers, along with methods for performing co...
Definition: Matrix3x3.h:27
DataWriter * lvl2Writer_
Definition: DAT.h:104
Contains the SyncComponent class definition.
Contains the LoadControl class declaration.
Matrix3x3 transformationFromVehicleToTetrahedronFrame_
Definition: DAT.h:138
int agc_
Definition: DAT.h:160
DataWriter * vElevationWriter_
Definition: DAT.h:129
A DataAccessor that reads values from the Slate Contains a default dataValue that must not be NULL...
Definition: UniversalDataReader.h:26
DataWriter * phaseCWriter_
Definition: DAT.h:113
char deviceResponse_[396]
Definition: DAT.h:136
void parseResponses(void)
Definition: DAT.cpp:707
int levelA_
Definition: DAT.h:160
int numPingsRequested_
Definition: DAT.h:151
Timestamp requestRange(const int remoteAddress, const int numPings)
Definition: DAT.cpp:640
float azimuthInVehicleFrame_
Definition: DAT.h:167
double phaseB_
Definition: DAT.h:158
Abstract Base class for components that collect data for use later in the computation cycle...
Definition: SyncComponent.h:172
virtual RunState pause()
Pause for a short period (indicated by pauseTime)
Definition: DAT.cpp:397
DataWriter * rawElevationWriter_
Definition: DAT.h:116
void azimuthAndElevationToUnitVector(float &azimuth, float &elevation, Point3D &uhat) __attribute__((deprecated))
DataWriter * rotatedElevationWriter_
Definition: DAT.h:120
float rawAzimuth_
Definition: DAT.h:162
A DataAccessor that reads values from the Slate Contains a default dataValue that must not be NULL...
Definition: DataReader.h:30
DataReader * numberOfPingsRequestedReader_
Definition: DAT.h:96
virtual RunState stopping()
Might follow a STOP request.
Definition: DAT.cpp:531
A DataAccessor that writes values to the Slate via its associated DataElement.
Definition: UniversalDataWriter.h:24
bool localAddressSettingAcknowledged_
Definition: DAT.h:149
DataWriter * localAddressWriter_
Definition: DAT.h:122
int numPingsReceived_
Definition: DAT.h:152
virtual RunState resuming()
Might follow a PAUSE...RESUME sequence.
Definition: DAT.cpp:427
void logVoltageAndCurrent()
Definition: DAT.cpp:572
double range_
Definition: DAT.h:158
RunState
Definition: Component.h:115
DataWriter * lvl4Writer_
Definition: DAT.h:106
Contains the UartStream class declaration.
Timespan class, represents a delta of time.
Definition: Timestamp.h:248
virtual void uninitialize()
Provide a space for uninitialization.
Definition: DAT.cpp:208
float rotatedAzimuth_
Definition: DAT.h:162
virtual void run()
The actual "payload" of the component.
Definition: DAT.cpp:176
float azimuthInTetrahedronFrame_
Definition: DAT.h:166
BlobWriter * tDirectionWriter_
Definition: DAT.h:131
Implements both InStream and OutStream for the LPC3XXX Standard UART.
Definition: UartStream.h:26
Timespan powerDownTimeout_
Definition: DAT.h:144
int remoteAddressRequested_
Definition: DAT.h:151
void readConfig()
Definition: DAT.cpp:181
A DataAccessor that writes values to the Slate via its associated DataElement.
Definition: DataWriter.h:27
Definition: BlobWriter.h:227
Definition: ElementURI.h:166
virtual ConfigURI getConfigURI(ConfigOption configOption) const
Should return [myNamespace]::SIMULATE_HARDWARE, or [myNamespace]::POWER, etc.
Definition: DAT.cpp:666
Wraps three double precision (8-byte) floating point numbers.
Definition: Point3D.h:28
virtual RunState stop()
Initial state – can be later followed by START.
Definition: DAT.cpp:522
DataWriter * calibratedElevationWriter_
Definition: DAT.h:118
DataWriter * lvl3Writer_
Definition: DAT.h:105
Point3D directionInTetrahedronFrame_
Definition: DAT.h:165
DataWriter * phaseAWriter_
Definition: DAT.h:111
Timespan acousticResponseTimeout_
Definition: DAT.h:150
DataWriter * tAzimuthWriter_
Definition: DAT.h:126
virtual RunState starting()
Might follow a STOP...START sequence.
Definition: DAT.cpp:280
DataWriter * vAzimuthWriter_
Definition: DAT.h:128
int levelB_
Definition: DAT.h:160
void publishData(void)
Definition: DAT.cpp:757
int clearUserPrompt(void)
Definition: DAT.cpp:671
bool gotDirectionMessage_
Definition: DAT.h:153
DataReader * queryAddressRequestedReader_
Definition: DAT.h:95
bool localAddressSettingSent_
Definition: DAT.h:149
Module is the abstract base class for a collection of Component objects that can be contained in a lo...
Definition: Module.h:45
DataWriter * idxPeakWriter_
Definition: DAT.h:108
bool debug_
Definition: DAT.h:134
Timestamp startTime_
Definition: DAT.h:142
DataWriter * agcWriter_
Definition: DAT.h:107
virtual RunState paused()
Should eventually follow a PAUSE request: should set continueTime.
Definition: DAT.cpp:406
void phasesToDirectionInVehicleFrame(void)
Definition: DAT.cpp:830
DataWriter * lvl1Writer_
Definition: DAT.h:103
void readAndParseResponses(void)
Definition: DAT.cpp:691
void unitVectorToAzimuthAndElevation(Point3D &uhat, float &azimuth, float &elevation) __attribute__((deprecated))
Provides software interface to the Benthos DAT.
Definition: DAT.h:33
virtual RunState resume()
Resume from PAUSE.
Definition: DAT.cpp:414
Timespan poTimeout_
Definition: DAT.h:144
bool commandModeAcknowledged_
Definition: DAT.h:149
This class allows one to control loads on a load controller channel.
Definition: LoadControl.h:24
bool gotNewQuery(void)
Definition: DAT.cpp:612
int remoteAddress_
Definition: DAT.h:163
UniversalDataWriter * txTimeWriter_
Definition: DAT.h:100
float elevationInVehicleFrame_
Definition: DAT.h:167
float rotatedElevation_
Definition: DAT.h:162
Definition: ConfigReader.h:13
DataWriter * onewayCmdWriter_
Definition: DAT.h:124
float calibratedElevation_
Definition: DAT.h:162
DataWriter * tElevationWriter_
Definition: DAT.h:127
int levelD_
Definition: DAT.h:160
DAT(const Module *module)
Definition: DAT.cpp:77
float vectorMagnitude_
Definition: DAT.h:161
double phaseC_
Definition: DAT.h:158
double phaseA_
Definition: DAT.h:158
UniversalDataWriter * rxTimeWriter_
Definition: DAT.h:99
DataWriter * idxFitWriter_
Definition: DAT.h:109
BlobWriter * vDirectionWriter_
Definition: DAT.h:132
float rawElevation_
Definition: DAT.h:162
Contains the Logger class definition.
bool parseRangeMessage(void)
Definition: DAT.cpp:751
Contains the Matrix3x3 class definition.
int verbosity_
Definition: DAT.h:135
float calibratedAzimuth_
Definition: DAT.h:162
virtual RunState stopped()
Initial state – can be later followed by START.
Definition: DAT.cpp:548
virtual RunState start()
Do what needs to be done to run Similar to initialize, in old init/run/uninit sequence.
Definition: DAT.cpp:227
DataWriter * vectorMagnitudeWriter_
Definition: DAT.h:114
Timestamp transmitPingTime_
Definition: DAT.h:159
int localAddressCfgSetting_
Definition: DAT.h:148
bool commandModeSent_
Definition: DAT.h:149
int idxPeak_
Definition: DAT.h:160
float idxFit_
Definition: DAT.h:161
LoadControl loadControl_
Definition: DAT.h:141
int localAddress_
Definition: DAT.h:163
bool isDataRequested()
Definition: DAT.cpp:594
DataWriter * rangeWriter_
Definition: DAT.h:123
float elevationInTetrahedronFrame_
Definition: DAT.h:166
Timestamp receivePingTime_
Definition: DAT.h:159
UartStream uart_
Definition: DAT.h:146
void cleanResponse(void)
Definition: DAT.cpp:727
virtual RunState runnable()
Should eventually follow a START request or RESETTING.
Definition: DAT.cpp:439
virtual RunState resetting()
Might occur in case of Error.
Definition: DAT.h:66
void directionsToAngles(void)
Definition: DAT.cpp:843
Timestamp powerOffTimeStart_
Definition: DAT.h:143
DataWriter * rawAzimuthWriter_
Definition: DAT.h:115
virtual ~DAT()
Definition: DAT.cpp:171
int commRate_
Definition: DAT.h:154
bool parseDirectionMessage(void)
Definition: DAT.cpp:736
ConfigOption
Definition: Component.h:456
int levelC_
Definition: DAT.h:160
bool getSimulatedMeasurements(void)
Definition: DAT.cpp:849
float idxPhase_
Definition: DAT.h:161
DataWriter * idxPhaseWriter_
Definition: DAT.h:110
Point3D phaseToUnitVector(const double phaseA, const double phaseB, const double phaseC, const double phaseD)
Definition: DAT.cpp:793
DataWriter * calibratedAzimuthWriter_
Definition: DAT.h:117
ConfigReader * localAddressCfgReader_
Definition: DAT.h:92
DataWriter * rotatedAzimuthWriter_
Definition: DAT.h:119
Represents absolute times.
Definition: Timestamp.h:31
DataWriter * phaseBWriter_
Definition: DAT.h:112
Point3D directionInVehicleFrame_
Definition: DAT.h:165
bool gotRangeMessage_
Definition: DAT.h:153