Go to the documentation of this file.00001
00006 #ifndef NODEREGISTERMANAGER_H
00007 #define NODEREGISTERMANAGER_H
00008
00009 #include "robot_instance/RegisterWizardMapLoader.h"
00010 #include "robot_instance/StringUtilities.h"
00011
00012 class NodeRegisterManager
00013 {
00014 public:
00015 NodeRegisterManager();
00016 virtual ~NodeRegisterManager();
00017
00018 class RegisterInfo
00019 {
00020 public:
00021 RegisterInfo(RegisterWizardPtr wizard, uint16_t registerValue)
00022 : wizard(wizard), registerValue(registerValue) {};
00023 RegisterInfo()
00024 {
00025 wizard = boost::make_shared<RegisterWizard>(boost::make_shared<RegisterProperties>());
00026 registerValue = 0;
00027 };
00028 virtual ~RegisterInfo() {};
00029
00030 RegisterWizardPtr wizard;
00031 uint16_t registerValue;
00032 };
00033 typedef boost::unordered_map<std::string, RegisterInfo> RegisterInfoMap;
00034 typedef boost::shared_ptr<RegisterInfoMap> RegisterInfoMapPtr;
00035
00036 struct NodeRegisters
00037 {
00038 RegisterInfoMap control;
00039 RegisterInfoMap status;
00040 std::string nodeType;
00041 };
00042 typedef boost::unordered_map<std::string, NodeRegisters> NodeRegisterMap;
00043 typedef NodeRegisterMap::iterator NodeRegisterMapIterator;
00044
00045 void addNode(const std::string& nodeName, const std::string& xmlFile);
00046 unsigned int getNodeCount();
00047 bool hasNode(const std::string& nodeName);
00048 std::string getNodeType(const std::string& nodeName);
00049
00050 RegisterInfo getControlInfo(const std::string& nodeName, const std::string& registerName);
00051 RegisterInfo getStatusInfo(const std::string& nodeName, const std::string& registerName);
00052
00053 bool hasControlProperty(const std::string& nodeName, const std::string& prop);
00054 bool hasStatusProperty(const std::string& nodeName, const std::string& prop);
00055
00056 uint16_t getStatusValue(const std::string& nodeName, const std::string& prop);
00057 uint16_t getControlValue(const std::string& nodeName, const std::string& prop);
00058 void setControlValue(const std::string& nodeName, const std::string& prop, uint16_t value);
00059
00060 void resetControlValues(const std::string& nodeName);
00061
00062 void show(const std::string& nodeName);
00063 void showStatus(const std::string& nodeName);
00064 void showControl(const std::string& nodeName);
00065
00066 NodeRegisterMap nodeRegisterMap;
00067 };
00068
00069 typedef boost::shared_ptr<NodeRegisterManager> NodeRegisterManagerPtr;
00070
00071 #endif // NODEREGISTERMANAGER_H