nidas v1.2.3
|
A scanner of sample data. More...
#include <SampleScanner.h>
Protected Attributes | |
const unsigned int | BUFSIZE |
Buffer size for reading from sensor. | |
char * | _buffer |
unsigned int | _bufhead |
unsigned int | _buftail |
Sample * | _osamp |
struct dsm_sample | _header |
unsigned int | _outSampRead |
unsigned int | _outSampToRead |
char * | _outSampDataPtr |
std::string | _messageSeparator |
int | _messageLength |
bool | _separatorAtEOM |
char * | _separator |
messageSeparator in a C string. | |
int | _separatorLen |
Length of messageSeparator. | |
Private Member Functions | |
SampleScanner (const SampleScanner &) | |
No copy (could be added if needed). | |
SampleScanner & | operator= (const SampleScanner &) |
No assignment (could be added if needed). | |
Private Attributes | |
std::string | _emptyString |
time_t | _initialTimeSecs |
unsigned int | _minSampleLength [2] |
unsigned int | _maxSampleLength [2] |
int | _currentIndex |
int | _reportIndex |
size_t | _nsamples |
size_t | _nbytes |
unsigned int | _badTimeTags |
float | _sampleRateObs |
Observed number of samples per second. | |
float | _dataRateObs |
int | _usecsPerByte |
A scanner of sample data.
Provides a readBuffer() method to read data from a DSMSensor into an internal buffer. Then defines a virtual nextSample() method to extract all available samples from that buffer.
Currently there are four implementations of SampleScanner, which differ in how they extract samples from the internal buffer:
DriverSampleScanner: A SampleScanner for reading samples that have been pre-formatted by a device driver - they already have a header consisting of a timetag, and a data length. This can be used, for example, to read samples from a driver supporting an A/D converter.
MessageSampleScanner: Subclass of DriverSampleScanner, supporting the set/get of the message separation parameters. This scanner does not itself break the input into samples, since this has been done by the driver module.
MessageStreamScanner: Provides sets and gets of message separation parameters used in parsing input messages from a sensor. Parses the stream input, breaking it into samples, by recognizing separators in the message stream.
DatagramSampleScanner: Creates samples from input datagrams, a simple task since the OS maintains the separation of the input datagrams. Each datagram becomes a separate sample, with a timetag taken from the system clock at the time the scanner has determined that there is data available.
SampleScanner::SampleScanner | ( | int | bufsize = 8192 | ) |
References resetStatistics().
|
virtual |
References _buffer, _osamp, _separator, and nidas::core::Sample::freeReference().
|
private |
No copy (could be added if needed).
References _nbytes, and nidas::core::getSample().
Referenced by readBuffer(), and nidas::core::DatagramSampleScanner::readBuffer().
References _currentIndex, _maxSampleLength, _minSampleLength, and _nsamples.
Referenced by nidas::core::DriverSampleScanner::nextSample(), nidas::core::DatagramSampleScanner::nextSample(), nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), and nidas::core::MessageStreamScanner::requestBiggerSample().
Update the sensor sampling statistics: samples/sec, bytes/sec, min/max sample size, that can be accessed via getObservedSamplingRate(), getObservedDataRate() etc.
Should be called every periodUsec by a user of this sensor.
periodUsec | Statistics period. |
References _currentIndex, _dataRateObs, _maxSampleLength, _minSampleLength, _nbytes, _nsamples, _reportIndex, _sampleRateObs, nidas::core::getSample(), and USECS_PER_SEC.
Referenced by nidas::core::DSMSensor::calcStatistics().
|
virtual |
References _bufhead, and _buftail.
Referenced by nidas::core::DSMSensor::clearBuffer().
|
inlinevirtual |
Returns an empty string.
Reimplemented in nidas::core::MessageSampleScanner, and nidas::core::MessageStreamScanner.
References _emptyString.
References _badTimeTags.
Referenced by nidas::core::DSMSensor::getBadTimeTagCount().
References _maxSampleLength, and _reportIndex.
Referenced by nidas::core::DSMSensor::getMaxSampleLength().
Returns 0.
Reimplemented in nidas::core::MessageSampleScanner, and nidas::core::MessageStreamScanner.
Returns an empty string.
Reimplemented in nidas::core::MessageSampleScanner, and nidas::core::MessageStreamScanner.
References _emptyString.
Reimplemented in nidas::core::MessageSampleScanner, and nidas::core::MessageStreamScanner.
References _maxSampleLength, _minSampleLength, and _reportIndex.
Referenced by nidas::core::DSMSensor::getMinSampleLength().
Should the SampleScanner append a null character, '\0', to the messages.
Reimplemented in nidas::core::MessageStreamScanner, and nidas::core::DatagramSampleScanner.
Referenced by nidas::core::CharacterSensor::getNullTerminated().
float SampleScanner::getObservedDataRate | ( | ) | const |
References _currentIndex, _dataRateObs, _initialTimeSecs, _nbytes, and _reportIndex.
Referenced by nidas::core::DSMSensor::getObservedDataRate().
float SampleScanner::getObservedSamplingRate | ( | ) | const |
References _currentIndex, _initialTimeSecs, _nsamples, _reportIndex, and _sampleRateObs.
Referenced by nidas::core::DSMSensor::getObservedSamplingRate().
|
inline |
References _usecsPerByte.
Referenced by nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), nidas::core::MessageStreamScanner::readBuffer(), and nidas::core::MessageStreamScanner::readBuffer().
|
inline |
References _badTimeTags.
Referenced by nidas::core::DriverSampleScanner::nextSample().
|
virtual |
Initialize the scanner.
Must be called by a user of SampleScanner prior to calling readSamples().
References resetStatistics().
Referenced by nidas::core::DSMSensor::open().
Extract the next sample from the buffer.
Returns NULL if there are no more samples in the buffer.
Implemented in nidas::core::DriverSampleScanner, nidas::core::MessageStreamScanner, and nidas::core::DatagramSampleScanner.
Referenced by nidas::core::DSMSensor::nextSample().
|
private |
No assignment (could be added if needed).
Read from the sensor into the internal buffer of this SampleScanner.
nidas::util::IOException |
Reimplemented in nidas::core::MessageStreamScanner, and nidas::core::DatagramSampleScanner.
References _buffer, _bufhead, _buftail, addNumBytesToStats(), BUFSIZE, DLOG, nidas::core::DSMSensor::getDSMId(), nidas::core::Project::getInstance(), nidas::core::DSMSensor::getName(), nidas::core::getSample(), nidas::core::DSMSensor::getSensorId(), len, and nidas::core::DSMSensor::read().
Referenced by nidas::core::DSMSensor::readBuffer(), nidas::core::MessageStreamScanner::readBuffer(), readBuffer(), nidas::core::MessageStreamScanner::readBuffer(), and nidas::core::DSMSensor::readBuffer().
Read from the sensor into the internal buffer of this SampleScanner, providing a timeout in milliseconds.
This will throw nidas::util::IOTimeoutException if the read fails due to a timeout.
nidas::util::IOException |
Reimplemented in nidas::core::MessageStreamScanner.
References nidas::core::DSMSensor::getName(), nidas::core::DSMSensor::getReadFd(), nidas::core::getSample(), MSECS_PER_SEC, NLOG, NSECS_PER_MSEC, and readBuffer().
|
virtual |
References _badTimeTags, _currentIndex, _dataRateObs, _initialTimeSecs, _maxSampleLength, _minSampleLength, _nbytes, _nsamples, _reportIndex, _sampleRateObs, and nidas::core::getSample().
Referenced by init(), and SampleScanner().
|
pure virtual |
Set the parameters associated with scanning of character messages.
nidas::util::InvalidParameterException |
Implemented in nidas::core::MessageSampleScanner, nidas::core::MessageStreamScanner, nidas::core::DriverSampleScanner, and nidas::core::DatagramSampleScanner.
Referenced by nidas::core::CharacterSensor::setMessageParameters().
References _usecsPerByte, and nidas::core::getSample().
Referenced by nidas::dynld::ModbusRTU::open().
Referenced by getBadTimeTagCount(), incrementBadTimeTags(), and resetStatistics().
|
protected |
Referenced by nidas::core::DriverSampleScanner::nextSample(), nidas::core::DatagramSampleScanner::nextSample(), nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), readBuffer(), nidas::core::DatagramSampleScanner::readBuffer(), and ~SampleScanner().
Referenced by clearBuffer(), getBytesInBuffer(), nidas::core::DriverSampleScanner::nextSample(), nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), readBuffer(), and nidas::core::DatagramSampleScanner::readBuffer().
Referenced by clearBuffer(), getBytesInBuffer(), nidas::core::DriverSampleScanner::nextSample(), nidas::core::DatagramSampleScanner::nextSample(), nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), readBuffer(), and nidas::core::DatagramSampleScanner::readBuffer().
|
private |
Referenced by addSampleToStats(), calcStatistics(), getObservedDataRate(), getObservedSamplingRate(), and resetStatistics().
|
private |
Referenced by calcStatistics(), getObservedDataRate(), and resetStatistics().
|
private |
Referenced by getBackslashedMessageSeparator(), and getMessageSeparator().
|
protected |
Referenced by nidas::core::DriverSampleScanner::nextSample().
|
private |
Referenced by getObservedDataRate(), getObservedSamplingRate(), and resetStatistics().
Referenced by addSampleToStats(), calcStatistics(), getMaxSampleLength(), getMinSampleLength(), and resetStatistics().
|
protected |
|
protected |
Referenced by nidas::core::MessageSampleScanner::getBackslashedMessageSeparator(), nidas::core::MessageStreamScanner::getBackslashedMessageSeparator(), nidas::core::MessageSampleScanner::getMessageSeparator(), nidas::core::MessageStreamScanner::getMessageSeparator(), nidas::core::MessageSampleScanner::setMessageParameters(), and nidas::core::MessageStreamScanner::setMessageParameters().
Referenced by addSampleToStats(), calcStatistics(), getMinSampleLength(), and resetStatistics().
|
private |
Referenced by addNumBytesToStats(), calcStatistics(), getObservedDataRate(), and resetStatistics().
|
private |
Referenced by addSampleToStats(), calcStatistics(), getObservedSamplingRate(), and resetStatistics().
|
protected |
Referenced by nidas::core::DriverSampleScanner::nextSample(), nidas::core::MessageStreamScanner::nextSampleByLength(), nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), nidas::core::MessageStreamScanner::requestBiggerSample(), and ~SampleScanner().
|
protected |
Referenced by nidas::core::DriverSampleScanner::nextSample().
|
private |
|
private |
Observed number of samples per second.
Referenced by calcStatistics(), getObservedSamplingRate(), and resetStatistics().
|
protected |
messageSeparator in a C string.
Referenced by nidas::core::MessageStreamScanner::nextSampleSepBOM(), nidas::core::MessageStreamScanner::nextSampleSepEOM(), nidas::core::MessageStreamScanner::setMessageParameters(), and ~SampleScanner().
|
protected |
|
protected |
|
private |
Referenced by getUsecsPerByte(), and setUsecsPerByte().
Buffer size for reading from sensor.
Referenced by readBuffer(), and nidas::core::DatagramSampleScanner::readBuffer().