nidas  v1.2-1520
PIP_Serial.h
Go to the documentation of this file.
1 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 4; tab-width: 4; -*-
2 // vim: set shiftwidth=4 softtabstop=4 expandtab:
3 /*
4  ********************************************************************
5  ** NIDAS: NCAR In-situ Data Acquistion Software
6  **
7  ** 2007, Copyright University Corporation for Atmospheric Research
8  **
9  ** This program is free software; you can redistribute it and/or modify
10  ** it under the terms of the GNU General Public License as published by
11  ** the Free Software Foundation; either version 2 of the License, or
12  ** (at your option) any later version.
13  **
14  ** This program is distributed in the hope that it will be useful,
15  ** but WITHOUT ANY WARRANTY; without even the implied warranty of
16  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  ** GNU General Public License for more details.
18  **
19  ** The LICENSE.txt file accompanying this software contains
20  ** a copy of the GNU General Public License. If it is not found,
21  ** write to the Free Software Foundation, Inc.,
22  ** 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23  **
24  ********************************************************************
25 */
26 
27 #ifndef NIDAS_DYNLD_RAF_PIP_SERIAL_H
28 #define NIDAS_DYNLD_RAF_PIP_SERIAL_H
29 
30 #include "SppSerial.h"
32 #include <iostream>
33 
34 namespace nidas { namespace dynld { namespace raf {
35 
40 class PIP_Serial : public SppSerial, public DerivedDataClient
41 {
42 public:
43 
44  PIP_Serial();
45 
46  void validate()
48 
50 
51  bool process(const Sample* samp,std::list<const Sample*>& results)
52  throw();
53 
54  static const size_t N_PIP_CHANNELS = 62;
55  static const size_t N_PIP_HSKP = 16;
56 
57  // Packet to initialize probe with.
58  struct InitPIP_blk
59  {
60  unsigned char esc; // ESC 0x1b
61  unsigned char id; // cmd id
64  unsigned char pSizeDim; // ParticleSizingDimension
65  unsigned char rc; // recovery coefficient
66  DMT_UShort chksum; // cksum
67  };
68 
69  static const int _InitPacketSize = 10;
70  static const int _setTimePacketSize = 8;
71 
79  struct SendPIP_BLK
80  {
81  unsigned char esc;
82  unsigned char id; // ESC 0x1b id =0x02
86  DMT_UShort chksum; // cksum
87  };
88 
89  static const int _SendDataPacketSize = 12;
91  {
92  unsigned char esc;
93  unsigned char id; //5
94  unsigned char sec; //sec/milisec may need to be swapped
95  unsigned char milisec;
96  unsigned char hour; //hour/min may need to be swapped
97  unsigned char min;
98  //DMT_UShort secMili; //seconds and miliseconds
99  // DMT_UShort hourMin; //set hour and min
101  };
102 
106  struct PIP_blk
107  {
108  unsigned char header1;
109  unsigned char header2;
117 // mixing types here to see what actually comes out of all this
118 // unsigned char sec; //sec/milisec may need to be swapped
119 // unsigned char milisec;
120  DMT_UShort SecMili; //Seconds and Milliseconds
121  unsigned char hour; // hour/min may need to be swapped
122  unsigned char min;
123  // DMT_UShort SecMili; //Seconds and Milliseconds
124  // DMT_UShort HourMin; //Hour and minute
128  unsigned char trailer1;
129  unsigned char trailer2;
130  };
131 
132 
136  virtual void
138  throw();
142  void open(int flags)
144 
145  void close() throw(nidas::util::IOException);
146 
147 protected:
148 
149  int packetLen() const {
150  return (180); //use _nChannels if binCount ends up being variable
151  }
152 
156  void sendTimePacket()throw(nidas::util::IOException);
157 
158  int appendDataAndFindGood(const Sample* sample);
159 
160  // These are instantiated in .cc, used for indexing into the housekeeping array
163 
164  unsigned short _dofReject;
165  unsigned short _airspeedSource;
166 
171 };
172 
173 }}} // namespace nidas namespace dynld raf
174 
175 #endif
static const size_t N_PIP_HSKP
Definition: PIP_Serial.h:55
unsigned char id
Definition: PIP_Serial.h:61
static const size_t PIPEDV32
Definition: PIP_Serial.h:161
DMT_UShort EndRejectCount
Definition: PIP_Serial.h:114
unsigned char milisec
Definition: PIP_Serial.h:95
DMT_UShort ParticleCounter
Definition: PIP_Serial.h:116
unsigned char id
Definition: PIP_Serial.h:82
DMT_UShort airspeedSource
Definition: PIP_Serial.h:62
DMT_UShort DOFRejectCount
Definition: PIP_Serial.h:113
static const size_t PIPLWCSLV
Definition: PIP_Serial.h:161
unsigned short _airspeedSource
Definition: PIP_Serial.h:165
DMT_UShort chksum
Definition: PIP_Serial.h:127
void close()
close my associated device.
Definition: PIP_Serial.cc:356
unsigned char min
Definition: PIP_Serial.h:122
static const size_t PIPEDV64
Definition: PIP_Serial.h:161
static const size_t N_PIP_CHANNELS
Definition: PIP_Serial.h:54
static const size_t PIPPS
Definition: PIP_Serial.h:161
int appendDataAndFindGood(const Sample *sample)
Append _packetLen bytes of data to _waitingData, and find the earliest &quot;good&quot; record possible...
Definition: PIP_Serial.cc:265
void validate()
Implementation of DSMSensor::validate for a Character Sensor.
Definition: PIP_Serial.cc:88
DMT_UShort relayControl
Definition: PIP_Serial.h:85
unsigned char trailer2
Definition: PIP_Serial.h:129
static const size_t PIPLSRP
Definition: PIP_Serial.h:161
DMT_UShort chksum
Definition: PIP_Serial.h:86
unsigned char trailer1
Definition: PIP_Serial.h:128
unsigned char pSizeDim
Definition: PIP_Serial.h:64
static const size_t REJDOF
Definition: PIP_Serial.h:161
Data packet back from probe.
Definition: PIP_Serial.h:106
void sendTimePacket()
Set probe time.
Definition: PIP_Serial.cc:121
unsigned char sec
Definition: PIP_Serial.h:94
DMT_UShort packetByteCount
Definition: PIP_Serial.h:110
unsigned char header2
Definition: PIP_Serial.h:109
DMT_UShort resetFlag
Definition: PIP_Serial.h:126
static const int _SendDataPacketSize
Definition: PIP_Serial.h:89
virtual void throw()
PIP has dynamic TAS.
A class for reading DMT PIP/CIP probe histogram data.
Definition: PIP_Serial.h:40
float _trueAirSpeed
True air speed, received from IWGADTS feed.
Definition: PIP_Serial.h:170
DMT_ULong PASCoefficient
Definition: PIP_Serial.h:84
static const size_t PIPRT
Definition: PIP_Serial.h:161
unsigned char esc
Definition: PIP_Serial.h:92
static const int _InitPacketSize
Definition: PIP_Serial.h:69
unsigned char hour
Definition: PIP_Serial.h:121
unsigned char esc
Definition: PIP_Serial.h:60
static const size_t PIPEDV0
Definition: PIP_Serial.h:161
Interface to a data sample.
Definition: Sample.h:189
virtual void derivedDataNotify(const DerivedDataReader *s)=0
Method called on a DerivedDataClient by the DerivedDataReader thread when a new packet of derived dat...
unsigned char min
Definition: PIP_Serial.h:97
Base class for many DMT Probes, including SPP100, SPP200, SPP300 and the CDP.
Definition: SppSerial.h:99
DMT_UShort hostSyncCounter
Definition: PIP_Serial.h:83
Definition: IOException.h:37
void open(int flags)
open the sensor and perform any intialization to the driver.
Definition: PIP_Serial.cc:340
DMT_UShort hostSyncCounter
Definition: PIP_Serial.h:125
static const size_t PIPCBTMP
Definition: PIP_Serial.h:161
DMT_UShort housekeeping[N_PIP_HSKP]
Definition: PIP_Serial.h:115
unsigned short _dofReject
Definition: PIP_Serial.h:164
void sendInitString()
Definition: PIP_Serial.cc:152
unsigned char hour
Definition: PIP_Serial.h:96
static const int _setTimePacketSize
Definition: PIP_Serial.h:70
static const size_t PIPRH
Definition: PIP_Serial.h:161
This class will read, parse and make available the parameters in the onboard real-time broadcast of d...
Definition: DerivedDataReader.h:44
DMT_UShort binCount[N_PIP_CHANNELS]
Definition: PIP_Serial.h:112
PIP_Serial()
Definition: PIP_Serial.cc:56
static const size_t PIPQC
Definition: PIP_Serial.h:161
unsigned char DMT_UShort[2]
DMT 2-byte ints are packed with byte order 01, where byte 0 is the low-order byte.
Definition: SppSerial.h:52
DMT_UShort SecMili
Definition: PIP_Serial.h:120
Packet sent to probe to begin sending data.
Definition: PIP_Serial.h:79
unsigned char rc
Definition: PIP_Serial.h:65
static const size_t PIPLSRC
Definition: PIP_Serial.h:161
DMT_UShort oversizeReject
Definition: PIP_Serial.h:111
unsigned char DMT_ULong[4]
DMT 4-byte ints are packed with byte order 2301, where byte 0 is the low-order byte.
Definition: SppSerial.h:78
DMT_UShort dofRej
Definition: PIP_Serial.h:63
unsigned char id
Definition: PIP_Serial.h:93
static const size_t PIPLWC
Definition: PIP_Serial.h:161
static const size_t REJEND
Definition: PIP_Serial.h:161
bool process(const Sample *samp, std::list< const Sample * > &results)
Process a raw sample, which in this case means do a sscanf on the character string contents...
Definition: PIP_Serial.cc:189
Interface of a DerivedDataClient of the DerivedDataReader.
Definition: DerivedDataClient.h:37
unsigned char header1
Definition: PIP_Serial.h:108
DMT_UShort chksum
Definition: PIP_Serial.h:66
DMT_UShort chksum
Definition: PIP_Serial.h:100
unsigned char esc
Definition: PIP_Serial.h:81
Definition: InvalidParameterException.h:35
static const size_t REJOFLOW
Definition: PIP_Serial.h:161
int packetLen() const
Return the expected data packet length in bytes based on the number of channels being used...
Definition: PIP_Serial.h:149