RegisterWizard.cpp
Go to the documentation of this file.
00001 
00006 #include "robot_instance/RegisterWizard.h"
00007 
00008 using namespace std;
00009 
00010 RegisterWizard::RegisterWizard(RegisterPropertiesPtr registerProperties)
00011     : registerProperties(registerProperties)
00012 {
00013 }
00014 
00015 RegisterWizard::~RegisterWizard()
00016 {
00017 }
00018 
00019 string RegisterWizard::registerToString(const uint16_t& registerValue)
00020 {
00021     stringstream retval;
00022 
00023     if (isRegisterCertified(registerValue))
00024     {
00025         retval << "============================================================" << endl
00026                << "Register:  "
00027                << "Value=" << "0x" << hex << setw(4) << setfill('0') << uppercase << registerValue << "  "
00028                << "Unmasked=" << "0x" << hex << setw(4) << uppercase << (registerValue & ~registerProperties->REGISTER_CERTIFICATE_VALUE) << endl
00029                << setfill(' ')
00030                << left << setw(19) << "Name"
00031                << left << setw(8)  << "Index"
00032                << left << setw(11) << "Size Mask"
00033                << left << setw(12) << "Value"
00034                << left << "Notes" << endl
00035                << "------------------------------------------------------------";
00036 
00037         for (unsigned int i = 0; i < registerProperties->registerPropertyVector.size(); i++)
00038         {
00039             retval
00040                     << endl
00041                     << left << setw(19) << registerProperties->registerPropertyVector[i]->name
00042                     << left << dec << setw(8)  << registerProperties->registerPropertyVector[i]->bitIndex
00043                     << "0x" << left << hex << setw(9) << registerProperties->registerPropertyVector[i]->sizeMask
00044                     << "0x" << left << setw(10) << bitWizard.getBits(registerProperties->registerPropertyVector[i]->bitIndex, registerProperties->registerPropertyVector[i]->sizeMask, registerValue)
00045                     << registerProperties->registerPropertyVector[i]->notes;
00046         }
00047     }
00048     else
00049     {
00050         retval << "Register is invalid.";
00051     }
00052 
00053     return retval.str();
00054 }
00055 
00056 vector< string > RegisterWizard::changedRegisterProperties(const uint16_t& registerValueBefore, const uint16_t& registerValueAfter, const uint16_t& bitsToCheckMask)
00057 {
00058     vector<string> changedProperties;
00059 
00060     for (PropertyDefMap::iterator it = registerProperties->registerProperty.begin(); it != registerProperties->registerProperty.end(); ++it)
00061     {
00062         // XOR the registerValues to get changed bits
00063         // mask the result with the bits of the current property
00064         if (((registerValueBefore ^ registerValueAfter) & (it->second.sizeMask << it->second.bitIndex)) & bitsToCheckMask)
00065         {
00066             changedProperties.push_back(it->second.name);
00067         }
00068     }
00069 
00070     return changedProperties;
00071 }
00072 
00073 bool RegisterWizard::has(const std::string& prop)
00074 {
00075     return (registerProperties->registerProperty.find(prop) != registerProperties->registerProperty.end());
00076 }
00077 
00078 std::vector< std::string> RegisterWizard::getRegisterProperties()
00079 {
00080     std::vector< std::string > temp;
00081 
00082     for (PropertyDefVector::iterator it = registerProperties->registerPropertyVector.begin(); it != registerProperties->registerPropertyVector.end(); ++it)
00083     {
00084         temp.push_back((*it)->name);
00085     }
00086 
00087     return temp;
00088 }
00089 
00090 bool RegisterWizard::isWritable()
00091 {
00092     return registerProperties->isWritable;
00093 }


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