27 #ifndef NIDAS_CORE_CHARACTERSENSOR_H
28 #define NIDAS_CORE_CHARACTERSENSOR_H
34 namespace nidas {
namespace core {
38 class TimetagAdjuster;
140 virtual void addPrompt(
const std::string& promptString,
double promptRate,
171 "startPrompting",
"not supported");
177 "stopPrompting",
"not supported");
239 virtual void validateSscanfs() throw(nidas::util::InvalidParameterException);
246 virtual
bool process(const
Sample*,std::list<const Sample*>& result)
250 throw(nidas::util::InvalidParameterException);
351 CharacterSensor& operator=(const CharacterSensor&);
virtual bool getNullTerminate() const
Should the SampleScanner append a null character, '\0', to the messages.
Definition: SampleScanner.h:127
std::string _promptString
Definition: CharacterSensor.h:322
virtual int scanSample(AsciiSscanf *sscanf, const char *inputstr, float *data_ptr)
Definition: CharacterSensor.cc:356
void open(int flags)
Open the sensor device port for real-time sampling.
Definition: CharacterSensor.cc:99
const std::string & getInitString() const
Definition: CharacterSensor.h:193
SampleScanner * getSampleScanner() const
Definition: DSMSensor.h:953
void setPromptString(const std::string &val)
Set the <sensor> prompt string for this sensor.
Definition: CharacterSensor.h:278
std::list< AsciiSscanf * >::const_iterator _nextSscanfer
Definition: CharacterSensor.h:330
virtual ~CharacterSensor()
Definition: CharacterSensor.cc:70
int getMaxScanfFields() const
The maximum number of fields in any of the AsciiSscanfs for this CharacterSensor. ...
Definition: CharacterSensor.h:231
const std::string & getMessageSeparator() const
Get message separator with backslash sequences replaced by their intended character.
Definition: CharacterSensor.h:111
bool _prompted
Definition: CharacterSensor.h:338
std::string _messageSeparator
Definition: CharacterSensor.h:314
Implementation of support for a sensor which generates character output.
Definition: CharacterSensor.h:46
virtual std::string getName() const
Return a name that should fully identify this sensor.
Definition: DSMSensor.h:183
void setOffset(const double val)
Set prompt offset in seconds.
Definition: Prompt.h:63
double getPromptRate() const
Definition: CharacterSensor.h:267
void validate()
Implementation of DSMSensor::validate for a Character Sensor.
Definition: CharacterSensor.cc:327
const std::list< AsciiSscanf * > & getScanfers() const
Return the list of AsciiSscanfs requested for this CharacterSensor.
Definition: CharacterSensor.h:221
Class providing sscanf functionality for parsing ASCII data.
Definition: AsciiSscanf.h:62
std::map< const SampleTag *, TimetagAdjuster * > _ttadjusters
Definition: CharacterSensor.h:310
virtual bool process(const Sample *, std::list< const Sample * > &result)
Process a raw sample, which in this case means do a sscanf on the character string contents...
Definition: CharacterSensor.cc:451
virtual void sendInitString()
Definition: CharacterSensor.cc:109
virtual void setMessageParameters(unsigned int length, const std::string &val, bool eom)
The messageSeparator is the string of bytes that sensor generates to separate messages.
Definition: CharacterSensor.cc:88
Class to contain prompt information - string and rate.
Definition: Prompt.h:38
IODevice * buildIODevice()
Creates an IODevice depending on the device name prefix: name prefix type of IODevice inet: TCPSocket...
Definition: CharacterSensor.cc:119
bool getMessageSeparatorAtEOM() const
Definition: CharacterSensor.h:124
void setString(const std::string &val)
Definition: Prompt.h:43
void setInitString(const std::string &val)
Set the initialization string(s) for this sensor.
Definition: CharacterSensor.h:191
void fromDOMElement(const xercesc::DOMElement *)
Initialize myself from a xercesc::DOMElement.
Definition: CharacterSensor.cc:226
bool doesAsciiSscanfs()
Definition: CharacterSensor.cc:154
void setPromptRate(const double val)
Set the rate at which <sensor> prompts are sent to this sensor.
Definition: CharacterSensor.h:265
int getMessageLength() const
Definition: CharacterSensor.h:129
std::string _initString
String that is sent once after sensor is opened.
Definition: CharacterSensor.h:343
virtual void startPrompting()
Definition: CharacterSensor.h:168
void setRate(const double val)
Set rate of desired prompting, in Hz (sec^-1).
Definition: Prompt.h:52
int _scanfPartials
Definition: CharacterSensor.h:336
virtual void stopPrompting()
Definition: CharacterSensor.h:174
std::list< Prompt > _prompts
Definition: CharacterSensor.h:320
double _promptRate
Definition: CharacterSensor.h:324
virtual void validateSscanfs()
Virtual method to check that the Sscanfs for this CharacterSensor are OK.
Definition: CharacterSensor.cc:204
bool getNullTerminated() const
Definition: CharacterSensor.h:197
int getNumScanfPartials() const
How many samples have been partially scanned, because a character in the middle of a message conflict...
Definition: CharacterSensor.h:215
int _scanfFailures
Definition: CharacterSensor.h:334
std::string addBackslashSequences(const std::string &str)
Utility function for substituting backslash sequences back into a string.
Definition: util.cc:102
An interface to an IO device.
Definition: IODevice.h:41
SampleT< float > * searchSampleScanners(const Sample *samp, SampleTag **stag_out=0)
Search through the AsciiSscanf instances attached to this sensor, looking for the next scanner which ...
Definition: CharacterSensor.cc:365
void adjustTimeTag(SampleTag *stag, SampleT< float > *outs)
Apply TimetagAdjuster and lag adjustments to the timetag of the given sample.
Definition: CharacterSensor.cc:475
const std::string getBackslashedMessageSeparator() const
Get message separator with backslash sequences added back.
Definition: CharacterSensor.h:119
virtual void togglePrompting()
Definition: CharacterSensor.h:180
Interface to a data sample.
Definition: Sample.h:189
DSMSensor provides the basic support for reading, processing and distributing samples from a sensor a...
Definition: DSMSensor.h:87
void init()
Initialize the CharacterSensor instance for post-processing.
Definition: CharacterSensor.cc:164
Definition: IOException.h:37
double _promptOffset
Definition: CharacterSensor.h:326
const std::list< Prompt > & getPrompts() const
Definition: CharacterSensor.h:153
virtual void addPrompt(const std::string &promptString, double promptRate, double promptOffset)
Prompting Sensors can have multiple prompts and rates.
Definition: CharacterSensor.h:140
SampleScanner * buildSampleScanner()
Creates a SampleScanner for this DSMSensor depending on the device name prefix: name prefix type of S...
Definition: CharacterSensor.cc:134
Class describing a group of variables that are sampled and handled together.
Definition: SampleTag.h:87
std::string _emptyString
Definition: CharacterSensor.h:345
const std::string & getPromptString() const
Definition: CharacterSensor.h:280
bool _separatorAtEOM
Definition: CharacterSensor.h:316
A scanner of sample data.
Definition: SampleScanner.h:73
int getNumScanfFailures() const
How many samples have resulted in complete scanf failures - nothing parsed, because the sensor messag...
Definition: CharacterSensor.h:208
std::list< AsciiSscanf * > _sscanfers
Definition: CharacterSensor.h:328
int _maxScanfFields
Definition: CharacterSensor.h:332
double getPromptOffset() const
Definition: CharacterSensor.h:271
CharacterSensor()
No arg constructor.
Definition: CharacterSensor.cc:51
int _messageLength
Definition: CharacterSensor.h:318
virtual bool isPrompted() const
Is this a prompted sensor.
Definition: CharacterSensor.h:160
void setPromptOffset(const double val)
Definition: CharacterSensor.h:269
virtual bool isPrompting() const
Is prompting active, i.e.
Definition: CharacterSensor.h:166
Definition: InvalidParameterException.h:35