From 1bcc4fc67bb0aa7b7fab9f9a098f3b473ea1637f Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Tue, 30 Sep 2014 15:51:02 +0200 Subject: qeditor: introduce a new "RAM" backend, and refactor file backend Change-Id: Icfbbc01b83d3592041803387e35f5aa6fb0fa813 Reviewed-on: http://gerrit.rockbox.org/997 Reviewed-by: Amaury Pouly --- utils/regtools/qeditor/backend.cpp | 60 ++++++++++++++++++++++++-------------- utils/regtools/qeditor/backend.h | 40 +++++++++++++++++++------ 2 files changed, 69 insertions(+), 31 deletions(-) (limited to 'utils/regtools/qeditor') diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp index e47df8e3a4..c2db1f2a3e 100644 --- a/utils/regtools/qeditor/backend.cpp +++ b/utils/regtools/qeditor/backend.cpp @@ -107,23 +107,14 @@ IoBackend *Backend::CreateHWStubIoBackend(HWStubDevice *dev) #endif /** - * FileIoBackend + * RamIoBackend */ - -FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name) +RamIoBackend::RamIoBackend(const QString& soc_name) { - m_filename = filename; m_soc = soc_name; - m_valid = false; - Reload(); } -QString FileIoBackend::GetSocName() -{ - return m_soc; -} - -bool FileIoBackend::ReadRegister(const QString& name, soc_word_t& value) +bool RamIoBackend::ReadRegister(const QString& name, soc_word_t& value) { if(m_map.find(name) == m_map.end()) return false; @@ -131,13 +122,45 @@ bool FileIoBackend::ReadRegister(const QString& name, soc_word_t& value) return true; } +void RamIoBackend::DeleteAll() +{ + m_map.clear(); +} + +bool RamIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode) +{ + switch(mode) + { + case Write: m_map[name] = value; return true; + case Set: m_map[name] |= value; return true; + case Clear: m_map[name] &= ~value; return true; + case Toggle: m_map[name] ^= value; return true; + default: return false; + } +} + + + +/** + * FileIoBackend + */ + +FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name) + :RamIoBackend(soc_name) +{ + m_filename = filename; + m_valid = false; + Reload(); +} + + bool FileIoBackend::Reload() { m_valid = false; QFile file(m_filename); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; - m_map.clear(); + DeleteAll(); QTextStream in(&file); while(!in.atEnd()) @@ -152,7 +175,7 @@ bool FileIoBackend::Reload() if(key == "HW") m_soc = line.mid(idx + 1).trimmed(); else if(ok) - m_map[key] = val; + RamIoBackend::WriteRegister(key, val, Write); } m_readonly = !QFileInfo(file).isWritable(); @@ -164,14 +187,7 @@ bool FileIoBackend::Reload() bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode) { m_dirty = true; - switch(mode) - { - case Write: m_map[name] = value; return true; - case Set: m_map[name] |= value; return true; - case Clear: m_map[name] &= ~value; return true; - case Toggle: m_map[name] ^= value; return true; - default: return false; - } + return RamIoBackend::WriteRegister(name, value, mode); } bool FileIoBackend::Commit() diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h index 2dba4e2b08..c8adbc474f 100644 --- a/utils/regtools/qeditor/backend.h +++ b/utils/regtools/qeditor/backend.h @@ -102,9 +102,39 @@ public: virtual bool Commit() { return false; } }; +/** The RAM backend doesn't have any backend storage and stores all values in + * an associative map */ +class RamIoBackend : public IoBackend +{ + Q_OBJECT +public: + RamIoBackend(const QString& soc_name = ""); + + virtual bool IsValid() { return m_soc != ""; } + virtual bool SupportAccess(AccessType type) { return type == ByName; } + virtual QString GetSocName() { return m_soc; } + virtual void SetSocName(const QString& soc_name) { m_soc = soc_name; } + virtual bool ReadRegister(const QString& name, soc_word_t& value); + virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) + { Q_UNUSED(addr); Q_UNUSED(value); return false; } + virtual bool Reload() { return false; } + virtual bool IsReadOnly() { return false; } + virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); + virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) + { Q_UNUSED(addr); Q_UNUSED(value); Q_UNUSED(mode); return false; } + virtual bool IsDirty() { return false; } + virtual bool Commit() { return false; } + /* clear all entries of the backend */ + virtual void DeleteAll(); + +protected: + QString m_soc; + QMap< QString, soc_word_t > m_map; +}; + /** NOTE the File backend makes a difference between writes and commits: * a write will *never* touch the underlying file unless it was committed. */ -class FileIoBackend : public IoBackend +class FileIoBackend : public RamIoBackend { Q_OBJECT public: @@ -112,26 +142,18 @@ public: virtual bool IsValid() { return m_valid; } virtual bool SupportAccess(AccessType type) { return type == ByName; } - virtual QString GetSocName(); - virtual bool ReadRegister(const QString& name, soc_word_t& value); - virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) - { Q_UNUSED(addr); Q_UNUSED(value); return false; } virtual bool Reload(); virtual bool IsReadOnly() { return m_readonly; } virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); - virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) - { Q_UNUSED(addr); Q_UNUSED(value); Q_UNUSED(mode); return false; } virtual bool IsDirty() { return m_dirty; } virtual bool Commit(); QString GetFileName() { return m_filename; } protected: QString m_filename; - QString m_soc; bool m_readonly; bool m_dirty; bool m_valid; - QMap< QString, soc_word_t > m_map; }; #ifdef HAVE_HWSTUB -- cgit v1.2.3