diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-09-30 15:51:02 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-12-15 22:53:15 +0100 |
commit | 1bcc4fc67bb0aa7b7fab9f9a098f3b473ea1637f (patch) | |
tree | 39182d98d25016db3b98fac7c5c1817f19ff4aef /utils/regtools | |
parent | 4a711fee423b00698313ac9c9a8df4f25696f8dd (diff) | |
download | rockbox-1bcc4fc67bb0aa7b7fab9f9a098f3b473ea1637f.tar.gz rockbox-1bcc4fc67bb0aa7b7fab9f9a098f3b473ea1637f.zip |
qeditor: introduce a new "RAM" backend, and refactor file backend
Change-Id: Icfbbc01b83d3592041803387e35f5aa6fb0fa813
Reviewed-on: http://gerrit.rockbox.org/997
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
Diffstat (limited to 'utils/regtools')
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 60 | ||||
-rw-r--r-- | utils/regtools/qeditor/backend.h | 40 |
2 files changed, 69 insertions, 31 deletions
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) | |||
107 | #endif | 107 | #endif |
108 | 108 | ||
109 | /** | 109 | /** |
110 | * FileIoBackend | 110 | * RamIoBackend |
111 | */ | 111 | */ |
112 | 112 | RamIoBackend::RamIoBackend(const QString& soc_name) | |
113 | FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name) | ||
114 | { | 113 | { |
115 | m_filename = filename; | ||
116 | m_soc = soc_name; | 114 | m_soc = soc_name; |
117 | m_valid = false; | ||
118 | Reload(); | ||
119 | } | 115 | } |
120 | 116 | ||
121 | QString FileIoBackend::GetSocName() | 117 | bool RamIoBackend::ReadRegister(const QString& name, soc_word_t& value) |
122 | { | ||
123 | return m_soc; | ||
124 | } | ||
125 | |||
126 | bool FileIoBackend::ReadRegister(const QString& name, soc_word_t& value) | ||
127 | { | 118 | { |
128 | if(m_map.find(name) == m_map.end()) | 119 | if(m_map.find(name) == m_map.end()) |
129 | return false; | 120 | return false; |
@@ -131,13 +122,45 @@ bool FileIoBackend::ReadRegister(const QString& name, soc_word_t& value) | |||
131 | return true; | 122 | return true; |
132 | } | 123 | } |
133 | 124 | ||
125 | void RamIoBackend::DeleteAll() | ||
126 | { | ||
127 | m_map.clear(); | ||
128 | } | ||
129 | |||
130 | bool RamIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode) | ||
131 | { | ||
132 | switch(mode) | ||
133 | { | ||
134 | case Write: m_map[name] = value; return true; | ||
135 | case Set: m_map[name] |= value; return true; | ||
136 | case Clear: m_map[name] &= ~value; return true; | ||
137 | case Toggle: m_map[name] ^= value; return true; | ||
138 | default: return false; | ||
139 | } | ||
140 | } | ||
141 | |||
142 | |||
143 | |||
144 | /** | ||
145 | * FileIoBackend | ||
146 | */ | ||
147 | |||
148 | FileIoBackend::FileIoBackend(const QString& filename, const QString& soc_name) | ||
149 | :RamIoBackend(soc_name) | ||
150 | { | ||
151 | m_filename = filename; | ||
152 | m_valid = false; | ||
153 | Reload(); | ||
154 | } | ||
155 | |||
156 | |||
134 | bool FileIoBackend::Reload() | 157 | bool FileIoBackend::Reload() |
135 | { | 158 | { |
136 | m_valid = false; | 159 | m_valid = false; |
137 | QFile file(m_filename); | 160 | QFile file(m_filename); |
138 | if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) | 161 | if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) |
139 | return false; | 162 | return false; |
140 | m_map.clear(); | 163 | DeleteAll(); |
141 | 164 | ||
142 | QTextStream in(&file); | 165 | QTextStream in(&file); |
143 | while(!in.atEnd()) | 166 | while(!in.atEnd()) |
@@ -152,7 +175,7 @@ bool FileIoBackend::Reload() | |||
152 | if(key == "HW") | 175 | if(key == "HW") |
153 | m_soc = line.mid(idx + 1).trimmed(); | 176 | m_soc = line.mid(idx + 1).trimmed(); |
154 | else if(ok) | 177 | else if(ok) |
155 | m_map[key] = val; | 178 | RamIoBackend::WriteRegister(key, val, Write); |
156 | } | 179 | } |
157 | 180 | ||
158 | m_readonly = !QFileInfo(file).isWritable(); | 181 | m_readonly = !QFileInfo(file).isWritable(); |
@@ -164,14 +187,7 @@ bool FileIoBackend::Reload() | |||
164 | bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode) | 187 | bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value, WriteMode mode) |
165 | { | 188 | { |
166 | m_dirty = true; | 189 | m_dirty = true; |
167 | switch(mode) | 190 | return RamIoBackend::WriteRegister(name, value, mode); |
168 | { | ||
169 | case Write: m_map[name] = value; return true; | ||
170 | case Set: m_map[name] |= value; return true; | ||
171 | case Clear: m_map[name] &= ~value; return true; | ||
172 | case Toggle: m_map[name] ^= value; return true; | ||
173 | default: return false; | ||
174 | } | ||
175 | } | 191 | } |
176 | 192 | ||
177 | bool FileIoBackend::Commit() | 193 | 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: | |||
102 | virtual bool Commit() { return false; } | 102 | virtual bool Commit() { return false; } |
103 | }; | 103 | }; |
104 | 104 | ||
105 | /** The RAM backend doesn't have any backend storage and stores all values in | ||
106 | * an associative map */ | ||
107 | class RamIoBackend : public IoBackend | ||
108 | { | ||
109 | Q_OBJECT | ||
110 | public: | ||
111 | RamIoBackend(const QString& soc_name = ""); | ||
112 | |||
113 | virtual bool IsValid() { return m_soc != ""; } | ||
114 | virtual bool SupportAccess(AccessType type) { return type == ByName; } | ||
115 | virtual QString GetSocName() { return m_soc; } | ||
116 | virtual void SetSocName(const QString& soc_name) { m_soc = soc_name; } | ||
117 | virtual bool ReadRegister(const QString& name, soc_word_t& value); | ||
118 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) | ||
119 | { Q_UNUSED(addr); Q_UNUSED(value); return false; } | ||
120 | virtual bool Reload() { return false; } | ||
121 | virtual bool IsReadOnly() { return false; } | ||
122 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); | ||
123 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) | ||
124 | { Q_UNUSED(addr); Q_UNUSED(value); Q_UNUSED(mode); return false; } | ||
125 | virtual bool IsDirty() { return false; } | ||
126 | virtual bool Commit() { return false; } | ||
127 | /* clear all entries of the backend */ | ||
128 | virtual void DeleteAll(); | ||
129 | |||
130 | protected: | ||
131 | QString m_soc; | ||
132 | QMap< QString, soc_word_t > m_map; | ||
133 | }; | ||
134 | |||
105 | /** NOTE the File backend makes a difference between writes and commits: | 135 | /** NOTE the File backend makes a difference between writes and commits: |
106 | * a write will *never* touch the underlying file unless it was committed. */ | 136 | * a write will *never* touch the underlying file unless it was committed. */ |
107 | class FileIoBackend : public IoBackend | 137 | class FileIoBackend : public RamIoBackend |
108 | { | 138 | { |
109 | Q_OBJECT | 139 | Q_OBJECT |
110 | public: | 140 | public: |
@@ -112,26 +142,18 @@ public: | |||
112 | 142 | ||
113 | virtual bool IsValid() { return m_valid; } | 143 | virtual bool IsValid() { return m_valid; } |
114 | virtual bool SupportAccess(AccessType type) { return type == ByName; } | 144 | virtual bool SupportAccess(AccessType type) { return type == ByName; } |
115 | virtual QString GetSocName(); | ||
116 | virtual bool ReadRegister(const QString& name, soc_word_t& value); | ||
117 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) | ||
118 | { Q_UNUSED(addr); Q_UNUSED(value); return false; } | ||
119 | virtual bool Reload(); | 145 | virtual bool Reload(); |
120 | virtual bool IsReadOnly() { return m_readonly; } | 146 | virtual bool IsReadOnly() { return m_readonly; } |
121 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); | 147 | virtual bool WriteRegister(const QString& name, soc_word_t value, WriteMode mode); |
122 | virtual bool WriteRegister(soc_addr_t addr, soc_word_t value, WriteMode mode) | ||
123 | { Q_UNUSED(addr); Q_UNUSED(value); Q_UNUSED(mode); return false; } | ||
124 | virtual bool IsDirty() { return m_dirty; } | 148 | virtual bool IsDirty() { return m_dirty; } |
125 | virtual bool Commit(); | 149 | virtual bool Commit(); |
126 | QString GetFileName() { return m_filename; } | 150 | QString GetFileName() { return m_filename; } |
127 | 151 | ||
128 | protected: | 152 | protected: |
129 | QString m_filename; | 153 | QString m_filename; |
130 | QString m_soc; | ||
131 | bool m_readonly; | 154 | bool m_readonly; |
132 | bool m_dirty; | 155 | bool m_dirty; |
133 | bool m_valid; | 156 | bool m_valid; |
134 | QMap< QString, soc_word_t > m_map; | ||
135 | }; | 157 | }; |
136 | 158 | ||
137 | #ifdef HAVE_HWSTUB | 159 | #ifdef HAVE_HWSTUB |