RegisterWizard.h
Go to the documentation of this file.
00001 
00006 #ifndef REGISTERWIZARD_H_
00007 #define REGISTERWIZARD_H_
00008 
00009 #include <map>
00010 #include <sstream>
00011 #include <iomanip>
00012 #include <algorithm>
00013 #include "robot_instance/RegisterProperties.h"
00014 
00015 class RegisterWizard
00016 {
00017 public:
00018     RegisterWizard(RegisterPropertiesPtr registerProperties);
00019     virtual ~RegisterWizard();
00020 
00021     void certifyRegister(uint16_t& registerValue);
00022     bool isRegisterCertified(const uint16_t& registerValue);
00023 
00024     void setRegisterValue(const uint16_t& val, const std::string& prop, uint16_t& registerValue);
00025     uint16_t getRegisterValue(const std::string& prop, const uint16_t& registerValue);
00026 
00027     bool has(const std::string& prop);
00028     std::vector< std::string> getRegisterProperties();
00029 
00030     std::string registerToString(const uint16_t& registerValue);
00031 
00032     std::vector< std::string > changedRegisterProperties(const uint16_t& registerValueBefore, const uint16_t& registerValueAfter, const uint16_t& bitsToCheckMask = -1);
00033 
00034     bool isWritable();
00035 
00036 private:
00037     BitWizard<uint16_t> bitWizard;
00038     RegisterPropertiesPtr registerProperties;
00039 };
00040 
00041 typedef boost::shared_ptr<RegisterWizard> RegisterWizardPtr;
00042 typedef std::map < std::string, RegisterWizardPtr > RegisterWizardMap;
00043 typedef boost::shared_ptr<RegisterWizardMap> RegisterWizardMapPtr;
00044 
00045 inline
00046 void RegisterWizard::certifyRegister(uint16_t& registerValue)
00047 {
00048     registerValue = (registerValue & ~registerProperties->REGISTER_CERTIFICATE_MASK) | registerProperties->REGISTER_CERTIFICATE_VALUE;
00049 }
00050 
00051 inline
00052 bool RegisterWizard::isRegisterCertified(const uint16_t& registerValue)
00053 {
00054     return ((registerValue & registerProperties->REGISTER_CERTIFICATE_MASK) == registerProperties->REGISTER_CERTIFICATE_VALUE);
00055 }
00056 
00057 inline
00058 void RegisterWizard::setRegisterValue(const uint16_t& val, const std::string& prop, uint16_t& registerValue)
00059 {
00060     bitWizard.setBits(val, registerProperties->registerProperty.at(prop).bitIndex, registerProperties->registerProperty.at(prop).sizeMask, registerValue);
00061     certifyRegister(registerValue);
00062 }
00063 
00064 inline
00065 uint16_t RegisterWizard::getRegisterValue(const std::string& prop, const uint16_t& registerValue)
00066 {
00067     return bitWizard.getBits(registerProperties->registerProperty.at(prop).bitIndex, registerProperties->registerProperty.at(prop).sizeMask, registerValue);
00068 }
00069 
00070 #endif /* REGISTERWIZARD_H_ */


robot_instance
Author(s):
autogenerated on Sat Jun 8 2019 20:43:12