11 #include "LibCyberRadio/Driver/RadioHandler.h" 12 #include "LibCyberRadio/Driver/NbddcGroupComponent.h" 13 #include "LibCyberRadio/Common/Pythonesque.h" 14 #include <boost/lexical_cast.hpp> 25 const std::string& name,
30 int groupMemberIndexBase) :
32 _numGroupMembers(numGroupMembers),
33 _groupMemberIndexBase(groupMemberIndexBase)
44 _numGroupMembers(other._numGroupMembers),
45 _groupMemberIndexBase(other._groupMemberIndexBase)
54 _numGroupMembers = other._numGroupMembers;
55 _groupMemberIndexBase = other._groupMemberIndexBase;
62 bool adjEnabled = enabled;
64 if ( _config.
hasKey(
"enable") )
69 _enabled = adjEnabled;
78 this->
debug(
"[NbddcGroupComponent::setConfiguration] Called\n");
83 bool adjEnabled = _enabled;
85 bool enableCmdNeedsExecuting =
false;
86 bool memberCmdNeedsExecuting =
false;
90 enableCmdNeedsExecuting =
true;
92 if ( cfg.
hasKey(
"members") && _config.
hasKey(
"members") )
96 for( BasicStringList::const_iterator it = vec.begin(); it != vec.end(); it++ )
100 memberCmdNeedsExecuting =
true;
102 if ( memberCmdNeedsExecuting )
106 if ( enableCmdNeedsExecuting )
112 _enabled = adjEnabled;
113 _groupMembers = adjMembers;
116 this->
debug(
"[NbddcGroupComponent::setConfiguration] Returning\n");
122 this->
debug(
"[NbddcGroupComponent::queryConfiguration] Called\n");
123 if ( _config.
hasKey(
"enable") )
127 if ( _config.
hasKey(
"members") )
132 this->
debug(
"[NbddcGroupComponent::queryConfiguration] Returning\n");
137 return _groupMembers;
142 this->
debug(
"[NbddcGroupComponent::setMembers] Called\n");
144 if ( _config.
hasKey(
"members") )
150 _groupMembers = groupMembers;
154 this->
debug(
"[NbddcGroupComponent::setMembers] Returning %s\n",
161 this->
debug(
"[NbddcGroupComponent::addMember] Called\n");
163 if ( _config.
hasKey(
"members") )
165 bool isMember =
true;
169 if ( std::count(_groupMembers.begin(), _groupMembers.end(), member) == 0 )
171 _groupMembers.push_back(member);
172 std::sort(_groupMembers.begin(), _groupMembers.end());
177 this->
debug(
"[NbddcGroupComponent::addMember] Returning %s\n",
184 this->
debug(
"[NbddcGroupComponent::removeMember] Called\n");
186 if ( _config.
hasKey(
"members") )
188 bool isMember =
false;
192 if ( std::count(_groupMembers.begin(), _groupMembers.end(), member) == 0 )
194 _groupMembers.push_back(member);
195 std::sort(_groupMembers.begin(), _groupMembers.end());
200 this->
debug(
"[NbddcGroupComponent::removeMember] Returning %s\n",
211 _config[
"members"] =
"";
216 this->
debug(
"[NbddcGroupComponent::updateConfigurationDict] Called\n");
218 if ( _config.
hasKey(
"members") )
220 this->
debug(
"[NbddcGroupComponent::updateConfigurationDict] Returning\n");
226 for (BasicIntList::const_iterator it = _groupMembers.begin();
227 it != _groupMembers.end(); it++)
229 vec.push_back( std::to_string(*it) );
239 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupEnableQuery] Called\n");
241 if ( (_parent != NULL) && (_parent->
isConnected()) )
243 std::ostringstream oss;
244 oss <<
"NBGE? " << index <<
"\n";
253 enabled = (boost::lexical_cast<
int>(vec[1]) == 1);
257 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupEnableQuery] Returning %s\n",
266 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupEnableCommand] Called\n");
268 if ( (_parent != NULL) && (_parent->
isConnected()) )
270 std::ostringstream oss;
271 oss <<
"NBGE " << index
272 <<
", " << (enabled ? 1 : 0)
280 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupEnableCommand] Returning %s\n",
289 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupQuery] Called\n");
292 groupMembers.clear();
293 for (
int member = _groupMemberIndexBase;
294 member < (_groupMemberIndexBase + _numGroupMembers); member++)
300 groupMembers.push_back(member);
305 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupQuery] Returning %s\n",
314 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupCommand] Called\n");
317 for (
int member = _groupMemberIndexBase;
318 member < (_groupMemberIndexBase + _numGroupMembers); member++)
320 isMember = ( std::count(groupMembers.begin(), groupMembers.end(), member) > 0 );
325 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupCommand] Returning %s\n",
333 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupMemberQuery] Called\n");
335 if ( (_parent != NULL) && (_parent->
isConnected()) )
337 std::ostringstream oss;
340 oss <<
"NBG? " << index
341 <<
", " << groupMember
352 isMember = ( boost::lexical_cast<
int>(vec[2]) == 1 );
356 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupMemberQuery] Returning %s\n",
365 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupMemberCommand] Called\n");
367 if ( (_parent != NULL) && (_parent->
isConnected()) )
369 std::ostringstream oss;
370 oss <<
"NBG " << index
371 <<
", " << groupMember
372 <<
", " << ( isMember ? 1 : 0 )
380 this->
debug(
"[NbddcGroupComponent::executeNbddcGroupMemberCommand] Returning %s\n",
virtual void updateConfigurationDict()
Updates the configuration dictionary from component settings.
virtual bool getConfigurationValueAsBool(const std::string &key) const
Gets a named configuration value as a Boolean.
virtual bool executeNbddcGroupMemberQuery(int index, int groupMember, bool &isMember)
Executes the NBDDC group member query command.
virtual ConfigString getConfigurationValue(const std::string &key) const
Gets a named configuration value as a string.
virtual bool executeNbddcGroupEnableCommand(int index, bool &enabled)
Executes the NBDDC group enable command.
static std::string Strip(const std::string &str, const std::string &chars=" \\\)
Strips both leading and trailing whitespace from the given string.
Base hardware component class.
virtual bool hasKey(const std::string &key) const
Determines if the dictionary has the given key.
virtual bool executeNbddcGroupMemberCommand(int index, int groupMember, bool &isMember)
Executes the NBDDC group member set command.
Base NBDDC group component class.
virtual bool isConnected() const
Gets whether or not the handler is connected.
virtual RadioComponent & operator=(const RadioComponent &other)
Assignment operator for RadioComponent objects.
static std::string Replace(const std::string &str, const std::string &oldstr, const std::string &newstr, int count=INT_MAX)
Replaces occurrences of one substring with another within the given string.
NbddcGroupComponent(const std::string &name="NBG", int index=1, RadioHandler *parent=NULL, bool debug=false, int numGroupMembers=0, int groupMemberIndexBase=1)
Constructs a NbddcGroupComponent object.
virtual bool enable(bool enabled=true)
Enables this component.
virtual void queryConfiguration()
Tells the component to query its hardware configuration in order to create its configuration dictiona...
virtual bool executeNbddcGroupCommand(int index, BasicIntList &groupMembers)
Executes the NBDDC group configuration set command.
virtual bool setConfiguration(ConfigurationDict &cfg)
Sets the configuration dictionary for this component.
virtual bool addMember(int member)
Adds a NBDDC to the list of group members.
static BasicStringList Split(const std::string &str, const std::string &sep, int maxsplit=INT_MAX)
Splits the given string into a list of string tokens.
virtual bool executeNbddcGroupQuery(int index, BasicIntList &groupMembers)
Executes the NBDDC group configuration query command.
virtual bool setMembers(const BasicIntList &groupMembers)
Sets the list of group members.
virtual void updateConfigurationDict()
Updates the configuration dictionary from component settings.
Generic radio handler class.
virtual int debug(const char *format,...)
Outputs debug information.
BASIC_LIST_CONTAINER< std::string > BasicStringList
Type representing a list of strings.
virtual std::string getMembersString()
Gets the string representation of the member list.
virtual void initConfigurationDict()
Initializes the configuration dictionary, defining the allowed keys.
Defines functionality for LibCyberRadio applications.
A configuration dictionary.
virtual std::string getLastCommandErrorInfo() const
Gets the error message from the last command attempted.
virtual BasicIntList getMembers() const
Gets the list of group members.
virtual const char * debugBool(bool x)
Gets a debug output string for a Boolean value.
virtual NbddcGroupComponent & operator=(const NbddcGroupComponent &other)
Assignment operator for NbddcGroupComponent objects.
virtual bool setConfiguration(ConfigurationDict &cfg)
Sets the configuration dictionary for this object.
virtual BasicStringList sendCommand(const std::string &cmdString, double timeout=-1)
Sends a command to the radio.
BASIC_LIST_CONTAINER< int > BasicIntList
Type representing a list of integers.
virtual void initConfigurationDict()
Initializes the configuration dictionary, defining the allowed keys.
static std::string Join(const BasicStringList &vec, const std::string &sep)
Joins a list of string tokens, concatenating them into a single string.
virtual bool executeNbddcGroupEnableQuery(int index, bool &enabled)
Executes the NBDDC group enable query command.
virtual bool setConfigurationValue(const std::string &key, const std::string &value)
Sets a named configuration value to a string.
virtual ~NbddcGroupComponent()
Destroys a NbddcGroupComponent object.
virtual bool removeMember(int member)
Removes a NBDDC from the list of group members.