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
00063
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 }