diff options
Diffstat (limited to 'utils/regtools/qeditor/backend.cpp')
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp index 75c504a6f6..fa107ec26c 100644 --- a/utils/regtools/qeditor/backend.cpp +++ b/utils/regtools/qeditor/backend.cpp | |||
@@ -1,6 +1,7 @@ | |||
1 | #include <QFile> | 1 | #include <QFile> |
2 | #include <QTextStream> | 2 | #include <QTextStream> |
3 | #include <QDebug> | 3 | #include <QDebug> |
4 | #include <QFileInfo> | ||
4 | #include "backend.h" | 5 | #include "backend.h" |
5 | 6 | ||
6 | /** | 7 | /** |
@@ -99,9 +100,38 @@ bool FileIoBackend::Reload() | |||
99 | else if(ok) | 100 | else if(ok) |
100 | m_map[key] = val; | 101 | m_map[key] = val; |
101 | } | 102 | } |
103 | |||
104 | m_readonly = !QFileInfo(file).isWritable(); | ||
105 | m_dirty = false; | ||
106 | return true; | ||
107 | } | ||
108 | |||
109 | bool FileIoBackend::WriteRegister(const QString& name, soc_word_t value) | ||
110 | { | ||
111 | m_dirty = true; | ||
112 | m_map[name] = value; | ||
102 | return true; | 113 | return true; |
103 | } | 114 | } |
104 | 115 | ||
116 | bool FileIoBackend::Commit() | ||
117 | { | ||
118 | if(!m_dirty) | ||
119 | return true; | ||
120 | QFile file(m_filename); | ||
121 | if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) | ||
122 | return false; | ||
123 | QTextStream out(&file); | ||
124 | out << "HW = " << m_soc << "\n"; | ||
125 | QMapIterator< QString, soc_word_t > it(m_map); | ||
126 | while(it.hasNext()) | ||
127 | { | ||
128 | it.next(); | ||
129 | out << it.key() << " = " << it.value() << "\n"; | ||
130 | } | ||
131 | out.flush(); | ||
132 | return file.flush(); | ||
133 | } | ||
134 | |||
105 | #ifdef HAVE_HWSTUB | 135 | #ifdef HAVE_HWSTUB |
106 | /** | 136 | /** |
107 | * HWStubDevice | 137 | * HWStubDevice |
@@ -195,6 +225,14 @@ bool HWStubDevice::ReadMem(soc_addr_t addr, size_t length, void *buffer) | |||
195 | return ret >= 0 && (size_t)ret == length; | 225 | return ret >= 0 && (size_t)ret == length; |
196 | } | 226 | } |
197 | 227 | ||
228 | bool HWStubDevice::WriteMem(soc_addr_t addr, size_t length, void *buffer) | ||
229 | { | ||
230 | if(!m_hwdev) | ||
231 | return false; | ||
232 | int ret = hwstub_rw_mem(m_hwdev, 0, addr, buffer, length); | ||
233 | return ret >= 0 && (size_t)ret == length; | ||
234 | } | ||
235 | |||
198 | bool HWStubDevice::IsValid() | 236 | bool HWStubDevice::IsValid() |
199 | { | 237 | { |
200 | return m_valid; | 238 | return m_valid; |
@@ -243,6 +281,11 @@ bool HWStubIoBackend::ReadRegister(soc_addr_t addr, soc_word_t& value) | |||
243 | return m_dev->ReadMem(addr, sizeof(value), &value); | 281 | return m_dev->ReadMem(addr, sizeof(value), &value); |
244 | } | 282 | } |
245 | 283 | ||
284 | bool HWStubIoBackend:: WriteRegister(soc_addr_t addr, soc_word_t value) | ||
285 | { | ||
286 | return m_dev->WriteMem(addr, sizeof(value), &value); | ||
287 | } | ||
288 | |||
246 | bool HWStubIoBackend::Reload() | 289 | bool HWStubIoBackend::Reload() |
247 | { | 290 | { |
248 | return true; | 291 | return true; |