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