diff options
Diffstat (limited to 'utils/regtools/qeditor')
-rw-r--r-- | utils/regtools/qeditor/analyser.cpp | 2 | ||||
-rw-r--r-- | utils/regtools/qeditor/analyser.h | 10 | ||||
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 73 | ||||
-rw-r--r-- | utils/regtools/qeditor/backend.h | 68 | ||||
-rw-r--r-- | utils/regtools/qeditor/regtab.cpp | 69 | ||||
-rw-r--r-- | utils/regtools/qeditor/regtab.h | 31 | ||||
-rw-r--r-- | utils/regtools/qeditor/std_analysers.cpp | 6 | ||||
-rw-r--r-- | utils/regtools/qeditor/std_analysers.h | 6 |
8 files changed, 161 insertions, 104 deletions
diff --git a/utils/regtools/qeditor/analyser.cpp b/utils/regtools/qeditor/analyser.cpp index 1ab213872b..5bd8c9e538 100644 --- a/utils/regtools/qeditor/analyser.cpp +++ b/utils/regtools/qeditor/analyser.cpp | |||
@@ -1,6 +1,6 @@ | |||
1 | #include "analyser.h" | 1 | #include "analyser.h" |
2 | 2 | ||
3 | Analyser::Analyser(const soc_t& soc, IoBackend *backend) | 3 | Analyser::Analyser(const SocRef& soc, IoBackend *backend) |
4 | :m_soc(soc), m_io_backend(backend) | 4 | :m_soc(soc), m_io_backend(backend) |
5 | { | 5 | { |
6 | } | 6 | } |
diff --git a/utils/regtools/qeditor/analyser.h b/utils/regtools/qeditor/analyser.h index 33094574c1..a06652bfb0 100644 --- a/utils/regtools/qeditor/analyser.h +++ b/utils/regtools/qeditor/analyser.h | |||
@@ -10,12 +10,12 @@ class Analyser : public QObject | |||
10 | { | 10 | { |
11 | Q_OBJECT | 11 | Q_OBJECT |
12 | public: | 12 | public: |
13 | Analyser(const soc_t& soc, IoBackend *backend); | 13 | Analyser(const SocRef& soc, IoBackend *backend); |
14 | virtual ~Analyser(); | 14 | virtual ~Analyser(); |
15 | virtual QWidget *GetWidget() = 0; | 15 | virtual QWidget *GetWidget() = 0; |
16 | 16 | ||
17 | protected: | 17 | protected: |
18 | soc_t m_soc; | 18 | const SocRef& m_soc; |
19 | IoBackend *m_io_backend; | 19 | IoBackend *m_io_backend; |
20 | }; | 20 | }; |
21 | 21 | ||
@@ -28,7 +28,7 @@ public: | |||
28 | virtual QString GetName() = 0; | 28 | virtual QString GetName() = 0; |
29 | virtual bool SupportSoc(const QString& soc_name) = 0; | 29 | virtual bool SupportSoc(const QString& soc_name) = 0; |
30 | // return NULL of soc is not handled by the analyser | 30 | // return NULL of soc is not handled by the analyser |
31 | virtual Analyser *Create(const soc_t& soc, IoBackend *backend) = 0; | 31 | virtual Analyser *Create(const SocRef& soc, IoBackend *backend) = 0; |
32 | private: | 32 | private: |
33 | QString m_name; | 33 | QString m_name; |
34 | 34 | ||
@@ -51,9 +51,9 @@ public: | |||
51 | virtual QString GetName() { return m_name; } | 51 | virtual QString GetName() { return m_name; } |
52 | virtual bool SupportSoc(const QString& soc_name) { return T::SupportSoc(soc_name); } | 52 | virtual bool SupportSoc(const QString& soc_name) { return T::SupportSoc(soc_name); } |
53 | // return NULL of soc is not handled by the analyser | 53 | // return NULL of soc is not handled by the analyser |
54 | virtual T *Create(const soc_t& soc, IoBackend *backend) | 54 | virtual T *Create(const SocRef& soc, IoBackend *backend) |
55 | { | 55 | { |
56 | if(!T::SupportSoc(soc.name.c_str())) | 56 | if(!T::SupportSoc(soc.GetSoc().name.c_str())) |
57 | return 0; | 57 | return 0; |
58 | return new T(soc, backend); | 58 | return new T(soc, backend); |
59 | } | 59 | } |
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp index 22210916b1..75c504a6f6 100644 --- a/utils/regtools/qeditor/backend.cpp +++ b/utils/regtools/qeditor/backend.cpp | |||
@@ -19,12 +19,12 @@ QStringList Backend::GetSocNameList() | |||
19 | return sl; | 19 | return sl; |
20 | } | 20 | } |
21 | 21 | ||
22 | bool Backend::GetSocByName(const QString& name, soc_t& s) | 22 | bool Backend::GetSocByName(const QString& name, SocRef& s) |
23 | { | 23 | { |
24 | for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it) | 24 | for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it) |
25 | if(it->name == name.toStdString()) | 25 | if(it->name == name.toStdString()) |
26 | { | 26 | { |
27 | s = *it; | 27 | s = SocRef(&(*it)); |
28 | return true; | 28 | return true; |
29 | } | 29 | } |
30 | return false; | 30 | return false; |
@@ -326,7 +326,7 @@ bool HWStubBackendHelper::HasHotPlugSupport() | |||
326 | * BackendHelper | 326 | * BackendHelper |
327 | */ | 327 | */ |
328 | 328 | ||
329 | BackendHelper::BackendHelper(IoBackend *io_backend, const soc_t& soc) | 329 | BackendHelper::BackendHelper(IoBackend *io_backend, const SocRef& soc) |
330 | :m_io_backend(io_backend), m_soc(soc) | 330 | :m_io_backend(io_backend), m_soc(soc) |
331 | { | 331 | { |
332 | } | 332 | } |
@@ -345,75 +345,72 @@ bool BackendHelper::ReadRegister(const QString& dev, const QString& reg, soc_wor | |||
345 | } | 345 | } |
346 | 346 | ||
347 | 347 | ||
348 | bool BackendHelper::GetDeviceDesc(const QString& dev, soc_dev_t& dev_desc, size_t& index) | 348 | bool BackendHelper::GetDevRef(const QString& sdev, SocDevRef& ref) |
349 | { | 349 | { |
350 | for(size_t i = 0; i < m_soc.dev.size(); i++) | 350 | for(size_t i = 0; i < m_soc.GetSoc().dev.size(); i++) |
351 | { | 351 | { |
352 | for(size_t j = 0; j < m_soc.dev[i].addr.size(); j++) | 352 | const soc_dev_t& dev = m_soc.GetSoc().dev[i]; |
353 | if(m_soc.dev[i].addr[j].name.c_str() == dev) | 353 | for(size_t j = 0; j < dev.addr.size(); j++) |
354 | if(dev.addr[j].name.c_str() == sdev) | ||
354 | { | 355 | { |
355 | dev_desc = m_soc.dev[i]; | 356 | ref = SocDevRef(m_soc, i, j); |
356 | index = j; | ||
357 | return true; | 357 | return true; |
358 | } | 358 | } |
359 | } | 359 | } |
360 | return false; | 360 | return false; |
361 | } | 361 | } |
362 | 362 | ||
363 | bool BackendHelper::GetRegisterDesc(const soc_dev_t& dev, const QString& reg, | 363 | bool BackendHelper::GetRegRef(const SocDevRef& dev, const QString& sreg, SocRegRef& ref) |
364 | soc_reg_t& reg_desc, size_t& index) | ||
365 | { | 364 | { |
366 | for(size_t i = 0; i < dev.reg.size(); i++) | 365 | const soc_dev_t& sdev = dev.GetDev(); |
366 | for(size_t i = 0; i < sdev.reg.size(); i++) | ||
367 | { | 367 | { |
368 | for(size_t j = 0; j < dev.reg[i].addr.size(); j++) | 368 | const soc_reg_t& reg = sdev.reg[i]; |
369 | if(dev.reg[i].addr[j].name.c_str() == reg) | 369 | for(size_t j = 0; j < reg.addr.size(); j++) |
370 | { | ||
371 | if(reg.addr[j].name.c_str() == sreg) | ||
370 | { | 372 | { |
371 | index = j; | 373 | ref = SocRegRef(dev, i, j); |
372 | reg_desc = dev.reg[i]; | ||
373 | return true; | 374 | return true; |
374 | } | 375 | } |
376 | } | ||
375 | } | 377 | } |
376 | return false; | 378 | return false; |
377 | } | 379 | } |
378 | 380 | ||
379 | bool BackendHelper::GetFieldDesc(const soc_reg_t& reg_desc, const QString& field, | 381 | bool BackendHelper::GetFieldRef(const SocRegRef& reg, const QString& sfield, SocFieldRef& ref) |
380 | soc_reg_field_t& field_desc) | ||
381 | { | 382 | { |
382 | for(size_t i = 0; i < reg_desc.field.size(); i++) | 383 | for(size_t i = 0; i < reg.GetReg().field.size(); i++) |
383 | if(reg_desc.field[i].name.c_str() == field) | 384 | if(reg.GetReg().field[i].name.c_str() == sfield) |
384 | field_desc = reg_desc.field[i]; | 385 | { |
386 | ref = SocFieldRef(reg, i); | ||
387 | return true; | ||
388 | } | ||
385 | return false; | 389 | return false; |
386 | } | 390 | } |
387 | 391 | ||
388 | bool BackendHelper::GetRegisterAddress(const QString& dev, const QString& reg, | 392 | bool BackendHelper::GetRegisterAddress(const QString& dev, const QString& reg, |
389 | soc_addr_t& addr) | 393 | soc_addr_t& addr) |
390 | { | 394 | { |
391 | size_t dev_index, reg_index; | 395 | SocDevRef dev_ref; |
392 | soc_dev_t dev_desc; | 396 | SocRegRef reg_ref; |
393 | soc_reg_t reg_desc; | 397 | if(!GetDevRef(dev, dev_ref) || !GetRegRef(dev_ref, reg, reg_ref)) |
394 | if(!GetDeviceDesc(dev, dev_desc, dev_index)) | ||
395 | return false; | ||
396 | if(!GetRegisterDesc(dev_desc, reg, reg_desc, reg_index)) | ||
397 | return false; | 398 | return false; |
398 | addr = dev_desc.addr[dev_index].addr + reg_desc.addr[reg_index].addr; | 399 | addr = dev_ref.GetDevAddr().addr + reg_ref.GetRegAddr().addr; |
399 | return true; | 400 | return true; |
400 | } | 401 | } |
401 | 402 | ||
402 | bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg, | 403 | bool BackendHelper::ReadRegisterField(const QString& dev, const QString& reg, |
403 | const QString& field, soc_word_t& v) | 404 | const QString& field, soc_word_t& v) |
404 | { | 405 | { |
405 | size_t dev_index, reg_index; | 406 | SocDevRef dev_ref; |
406 | soc_dev_t dev_desc; | 407 | SocRegRef reg_ref; |
407 | soc_reg_t reg_desc; | 408 | SocFieldRef field_ref; |
408 | soc_reg_field_t field_desc; | 409 | if(!GetDevRef(dev, dev_ref) || !GetRegRef(dev_ref, reg, reg_ref) || |
409 | if(!GetDeviceDesc(dev, dev_desc, dev_index)) | 410 | !GetFieldRef(reg_ref, field, field_ref)) |
410 | return false; | ||
411 | if(!GetRegisterDesc(dev_desc, reg, reg_desc, reg_index)) | ||
412 | return false; | ||
413 | if(!GetFieldDesc(reg_desc, field, field_desc)) | ||
414 | return false; | 411 | return false; |
415 | if(!ReadRegister(dev, reg, v)) | 412 | if(!ReadRegister(dev, reg, v)) |
416 | return false; | 413 | return false; |
417 | v = (v & field_desc.bitmask()) >> field_desc.first_bit; | 414 | v = (v & field_ref.GetField().bitmask()) >> field_ref.GetField().first_bit; |
418 | return true; | 415 | return true; |
419 | } \ No newline at end of file | 416 | } \ No newline at end of file |
diff --git a/utils/regtools/qeditor/backend.h b/utils/regtools/qeditor/backend.h index 55f31cce52..879b88c42c 100644 --- a/utils/regtools/qeditor/backend.h +++ b/utils/regtools/qeditor/backend.h | |||
@@ -23,10 +23,14 @@ public: | |||
23 | ByAddress, | 23 | ByAddress, |
24 | }; | 24 | }; |
25 | 25 | ||
26 | /* report whether backend supports register access type */ | ||
26 | virtual bool SupportAccess(AccessType type) = 0; | 27 | virtual bool SupportAccess(AccessType type) = 0; |
28 | /* get SoC name */ | ||
27 | virtual QString GetSocName() = 0; | 29 | virtual QString GetSocName() = 0; |
30 | /* read a register by name or address */ | ||
28 | virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0; | 31 | virtual bool ReadRegister(const QString& name, soc_word_t& value) = 0; |
29 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) = 0; | 32 | virtual bool ReadRegister(soc_addr_t addr, soc_word_t& value) = 0; |
33 | /* reload content (if it makes sense) */ | ||
30 | virtual bool Reload() = 0; | 34 | virtual bool Reload() = 0; |
31 | }; | 35 | }; |
32 | 36 | ||
@@ -140,6 +144,56 @@ protected: | |||
140 | }; | 144 | }; |
141 | #endif | 145 | #endif |
142 | 146 | ||
147 | class SocRef | ||
148 | { | ||
149 | public: | ||
150 | SocRef():m_soc(0) {} | ||
151 | SocRef(const soc_t *soc):m_soc(soc) {} | ||
152 | const soc_t& GetSoc() const { return *m_soc; } | ||
153 | protected: | ||
154 | const soc_t *m_soc; | ||
155 | }; | ||
156 | |||
157 | class SocDevRef : public SocRef | ||
158 | { | ||
159 | public: | ||
160 | SocDevRef() {} | ||
161 | SocDevRef(const SocRef& soc, int dev_idx, int dev_addr_idx) | ||
162 | :SocRef(soc), m_dev_idx(dev_idx), m_dev_addr_idx(dev_addr_idx) {} | ||
163 | int GetDevIndex() const { return m_dev_idx; } | ||
164 | const soc_dev_t& GetDev() const { return GetSoc().dev[GetDevIndex()]; } | ||
165 | int GetDevAddrIndex() const { return m_dev_addr_idx; } | ||
166 | const soc_dev_addr_t& GetDevAddr() const { return GetDev().addr[GetDevAddrIndex()]; } | ||
167 | protected: | ||
168 | int m_dev_idx, m_dev_addr_idx; | ||
169 | }; | ||
170 | |||
171 | class SocRegRef : public SocDevRef | ||
172 | { | ||
173 | public: | ||
174 | SocRegRef() {} | ||
175 | SocRegRef(const SocDevRef& dev, int reg_idx, int reg_addr_idx) | ||
176 | :SocDevRef(dev), m_reg_idx(reg_idx), m_reg_addr_idx(reg_addr_idx) {} | ||
177 | int GetRegIndex() const { return m_reg_idx; } | ||
178 | const soc_reg_t& GetReg() const { return GetDev().reg[GetRegIndex()]; } | ||
179 | int GetRegAddrIndex() const { return m_reg_addr_idx; } | ||
180 | const soc_reg_addr_t& GetRegAddr() const { return GetReg().addr[GetRegAddrIndex()]; } | ||
181 | protected: | ||
182 | int m_reg_idx, m_reg_addr_idx; | ||
183 | }; | ||
184 | |||
185 | class SocFieldRef : public SocRegRef | ||
186 | { | ||
187 | public: | ||
188 | SocFieldRef(){} | ||
189 | SocFieldRef(const SocRegRef& reg, int field_idx) | ||
190 | :SocRegRef(reg), m_field_idx(field_idx) {} | ||
191 | int GetFieldIndex() const { return m_field_idx; } | ||
192 | const soc_reg_field_t& GetField() const { return GetReg().field[GetFieldIndex()]; } | ||
193 | protected: | ||
194 | int m_field_idx; | ||
195 | }; | ||
196 | |||
143 | class Backend : public QObject | 197 | class Backend : public QObject |
144 | { | 198 | { |
145 | Q_OBJECT | 199 | Q_OBJECT |
@@ -148,7 +202,7 @@ public: | |||
148 | 202 | ||
149 | QStringList GetSocNameList(); | 203 | QStringList GetSocNameList(); |
150 | bool LoadSocDesc(const QString& filename); | 204 | bool LoadSocDesc(const QString& filename); |
151 | bool GetSocByName(const QString& name, soc_t& s); | 205 | bool GetSocByName(const QString& name, SocRef& s); |
152 | IoBackend *CreateDummyIoBackend(); | 206 | IoBackend *CreateDummyIoBackend(); |
153 | IoBackend *CreateFileIoBackend(const QString& filename); | 207 | IoBackend *CreateFileIoBackend(const QString& filename); |
154 | #ifdef HAVE_HWSTUB | 208 | #ifdef HAVE_HWSTUB |
@@ -158,23 +212,23 @@ public: | |||
158 | signals: | 212 | signals: |
159 | void OnSocListChanged(); | 213 | void OnSocListChanged(); |
160 | private: | 214 | private: |
161 | std::vector< soc_t > m_socs; | 215 | std::list< soc_t > m_socs; |
162 | }; | 216 | }; |
163 | 217 | ||
164 | class BackendHelper | 218 | class BackendHelper |
165 | { | 219 | { |
166 | public: | 220 | public: |
167 | BackendHelper(IoBackend *io_backend, const soc_t& soc); | 221 | BackendHelper(IoBackend *io_backend, const SocRef& soc); |
168 | bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); | 222 | bool ReadRegister(const QString& dev, const QString& reg, soc_word_t& v); |
169 | bool ReadRegisterField(const QString& dev, const QString& reg, | 223 | bool ReadRegisterField(const QString& dev, const QString& reg, |
170 | const QString& field, soc_word_t& v); | 224 | const QString& field, soc_word_t& v); |
171 | bool GetDeviceDesc(const QString& dev, soc_dev_t& dev_desc, size_t& index); | 225 | bool GetDevRef(const QString& dev, SocDevRef& ref); |
172 | bool GetRegisterDesc(const soc_dev_t& dev, const QString& reg, soc_reg_t& reg_desc, size_t& index); | 226 | bool GetRegRef(const SocDevRef& dev, const QString& reg, SocRegRef& ref); |
173 | bool GetFieldDesc(const soc_reg_t& reg_desc, const QString& field, soc_reg_field_t& field_desc); | 227 | bool GetFieldRef(const SocRegRef& reg, const QString& field, SocFieldRef& ref); |
174 | bool GetRegisterAddress(const QString& dev, const QString& reg, soc_addr_t& addr); | 228 | bool GetRegisterAddress(const QString& dev, const QString& reg, soc_addr_t& addr); |
175 | private: | 229 | private: |
176 | IoBackend *m_io_backend; | 230 | IoBackend *m_io_backend; |
177 | soc_t m_soc; | 231 | const SocRef& m_soc; |
178 | }; | 232 | }; |
179 | 233 | ||
180 | #endif /* __BACKEND_H__ */ | 234 | #endif /* __BACKEND_H__ */ |
diff --git a/utils/regtools/qeditor/regtab.cpp b/utils/regtools/qeditor/regtab.cpp index b97ceafdc8..e4adecf203 100644 --- a/utils/regtools/qeditor/regtab.cpp +++ b/utils/regtools/qeditor/regtab.cpp | |||
@@ -203,17 +203,11 @@ void RegTab::OnRegItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previou | |||
203 | void RegTab::OnRegItemClicked(QTreeWidgetItem *current, int col) | 203 | void RegTab::OnRegItemClicked(QTreeWidgetItem *current, int col) |
204 | { | 204 | { |
205 | (void) col; | 205 | (void) col; |
206 | if(current == 0) | 206 | if(current == 0 || current->type() != RegTreeRegType) |
207 | return; | 207 | return; |
208 | RegTreeItem *item = dynamic_cast< RegTreeItem * >(current); | 208 | RegTreeItem *item = dynamic_cast< RegTreeItem * >(current); |
209 | if(item->type() != RegTreeRegType) | ||
210 | return; | ||
211 | soc_dev_t& dev = m_cur_soc.dev[item->GetDevIndex()]; | ||
212 | soc_dev_addr_t& dev_addr = dev.addr[item->GetDevAddrIndex()]; | ||
213 | soc_reg_t& reg = dev.reg[item->GetRegIndex()]; | ||
214 | soc_reg_addr_t& reg_addr = reg.addr[item->GetRegAddrIndex()]; | ||
215 | 209 | ||
216 | DisplayRegister(dev, dev_addr, reg, reg_addr); | 210 | DisplayRegister(item->GetRef()); |
217 | } | 211 | } |
218 | 212 | ||
219 | void RegTab::OnAnalyserChanged(QListWidgetItem *current, QListWidgetItem *previous) | 213 | void RegTab::OnAnalyserChanged(QListWidgetItem *current, QListWidgetItem *previous) |
@@ -232,14 +226,16 @@ void RegTab::OnAnalyserClicked(QListWidgetItem *current) | |||
232 | m_right_panel->addWidget(m_right_content, 1); | 226 | m_right_panel->addWidget(m_right_content, 1); |
233 | } | 227 | } |
234 | 228 | ||
235 | void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, | 229 | void RegTab::DisplayRegister(const SocRegRef& ref) |
236 | soc_reg_t& reg, soc_reg_addr_t& reg_addr) | ||
237 | { | 230 | { |
238 | (void) dev; | ||
239 | delete m_right_content; | 231 | delete m_right_content; |
240 | 232 | ||
241 | QVBoxLayout *right_layout = new QVBoxLayout; | 233 | QVBoxLayout *right_layout = new QVBoxLayout; |
242 | 234 | ||
235 | const soc_dev_addr_t& dev_addr = ref.GetDevAddr(); | ||
236 | const soc_reg_t& reg = ref.GetReg(); | ||
237 | const soc_reg_addr_t& reg_addr = ref.GetRegAddr(); | ||
238 | |||
243 | QString reg_name; | 239 | QString reg_name; |
244 | reg_name.sprintf("HW_%s_%s", dev_addr.name.c_str(), reg_addr.name.c_str()); | 240 | reg_name.sprintf("HW_%s_%s", dev_addr.name.c_str(), reg_addr.name.c_str()); |
245 | QStringList names; | 241 | QStringList names; |
@@ -303,29 +299,29 @@ void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, | |||
303 | QTableWidget *value_table = new QTableWidget; | 299 | QTableWidget *value_table = new QTableWidget; |
304 | value_table->setRowCount(reg.field.size()); | 300 | value_table->setRowCount(reg.field.size()); |
305 | value_table->setColumnCount(4); | 301 | value_table->setColumnCount(4); |
306 | for(size_t i = 0; i < reg.field.size(); i++) | 302 | int row = 0; |
303 | foreach(const soc_reg_field_t& field, reg.field) | ||
307 | { | 304 | { |
308 | QString bits_str; | 305 | QString bits_str; |
309 | if(reg.field[i].first_bit == reg.field[i].last_bit) | 306 | if(field.first_bit == field.last_bit) |
310 | bits_str.sprintf("%d", reg.field[i].first_bit); | 307 | bits_str.sprintf("%d", field.first_bit); |
311 | else | 308 | else |
312 | bits_str.sprintf("%d:%d", reg.field[i].last_bit, reg.field[i].first_bit); | 309 | bits_str.sprintf("%d:%d", field.last_bit, field.first_bit); |
313 | QTableWidgetItem *item = new QTableWidgetItem(bits_str); | 310 | QTableWidgetItem *item = new QTableWidgetItem(bits_str); |
314 | item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); | 311 | item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); |
315 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | 312 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); |
316 | value_table->setItem(i, 0, item); | 313 | value_table->setItem(row, 0, item); |
317 | item = new QTableWidgetItem(QString(reg.field[i].name.c_str())); | 314 | item = new QTableWidgetItem(QString(field.name.c_str())); |
318 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | 315 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); |
319 | value_table->setItem(i, 1, item); | 316 | value_table->setItem(row, 1, item); |
320 | item = new QTableWidgetItem(); | 317 | item = new QTableWidgetItem(); |
321 | if(has_value) | 318 | if(has_value) |
322 | { | 319 | { |
323 | const soc_reg_field_t& field = reg.field[i]; | ||
324 | soc_word_t v = (value & field.bitmask()) >> field.first_bit; | 320 | soc_word_t v = (value & field.bitmask()) >> field.first_bit; |
325 | QString value_name; | 321 | QString value_name; |
326 | for(size_t j = 0; j < field.value.size(); j++) | 322 | foreach(const soc_reg_field_value_t& rval, field.value) |
327 | if(v == field.value[j].value) | 323 | if(v == rval.value) |
328 | value_name = field.value[j].name.c_str(); | 324 | value_name = rval.name.c_str(); |
329 | const char *fmt = "%lu"; | 325 | const char *fmt = "%lu"; |
330 | // heuristic | 326 | // heuristic |
331 | if((field.last_bit - field.first_bit + 1) > 16) | 327 | if((field.last_bit - field.first_bit + 1) > 16) |
@@ -338,11 +334,12 @@ void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, | |||
338 | QTableWidgetItem *t = new QTableWidgetItem(value_name); | 334 | QTableWidgetItem *t = new QTableWidgetItem(value_name); |
339 | t->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); | 335 | t->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); |
340 | t->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | 336 | t->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); |
341 | value_table->setItem(i, 3, t); | 337 | value_table->setItem(row, 3, t); |
342 | } | 338 | } |
343 | } | 339 | } |
344 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); | 340 | item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled); |
345 | value_table->setItem(i, 2, item); | 341 | value_table->setItem(row, 2, item); |
342 | row++; | ||
346 | } | 343 | } |
347 | value_table->setHorizontalHeaderItem(0, new QTableWidgetItem("Bits")); | 344 | value_table->setHorizontalHeaderItem(0, new QTableWidgetItem("Bits")); |
348 | value_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Name")); | 345 | value_table->setHorizontalHeaderItem(1, new QTableWidgetItem("Name")); |
@@ -404,16 +401,16 @@ void RegTab::OnDevChanged(int index) | |||
404 | } | 401 | } |
405 | #endif | 402 | #endif |
406 | 403 | ||
407 | void RegTab::FillDevSubTree(RegTreeItem *item) | 404 | void RegTab::FillDevSubTree(DevTreeItem *item) |
408 | { | 405 | { |
409 | soc_dev_t& sd = m_cur_soc.dev[item->GetDevIndex()]; | 406 | const soc_dev_t& dev = item->GetRef().GetDev(); |
410 | for(size_t i = 0; i < sd.reg.size(); i++) | 407 | for(size_t i = 0; i < dev.reg.size(); i++) |
411 | { | 408 | { |
412 | soc_reg_t& reg = sd.reg[i]; | 409 | const soc_reg_t& reg = dev.reg[i]; |
413 | for(size_t j = 0; j < reg.addr.size(); j++) | 410 | for(size_t j = 0; j < reg.addr.size(); j++) |
414 | { | 411 | { |
415 | RegTreeItem *reg_item = new RegTreeItem(reg.addr[j].name.c_str(), RegTreeRegType); | 412 | RegTreeItem *reg_item = new RegTreeItem(reg.addr[j].name.c_str(), |
416 | reg_item->SetPath(item->GetDevIndex(), item->GetDevAddrIndex(), i, j); | 413 | SocRegRef(item->GetRef(), i, j)); |
417 | item->addChild(reg_item); | 414 | item->addChild(reg_item); |
418 | } | 415 | } |
419 | } | 416 | } |
@@ -421,13 +418,13 @@ void RegTab::FillDevSubTree(RegTreeItem *item) | |||
421 | 418 | ||
422 | void RegTab::FillRegTree() | 419 | void RegTab::FillRegTree() |
423 | { | 420 | { |
424 | for(size_t i = 0; i < m_cur_soc.dev.size(); i++) | 421 | for(size_t i = 0; i < m_cur_soc.GetSoc().dev.size(); i++) |
425 | { | 422 | { |
426 | soc_dev_t& sd = m_cur_soc.dev[i]; | 423 | const soc_dev_t& dev = m_cur_soc.GetSoc().dev[i]; |
427 | for(size_t j = 0; j < sd.addr.size(); j++) | 424 | for(size_t j = 0; j < dev.addr.size(); j++) |
428 | { | 425 | { |
429 | RegTreeItem *dev_item = new RegTreeItem(sd.addr[j].name.c_str(), RegTreeDevType); | 426 | DevTreeItem *dev_item = new DevTreeItem(dev.addr[j].name.c_str(), |
430 | dev_item->SetPath(i, j); | 427 | SocDevRef(m_cur_soc, i, j)); |
431 | FillDevSubTree(dev_item); | 428 | FillDevSubTree(dev_item); |
432 | m_reg_tree->addTopLevelItem(dev_item); | 429 | m_reg_tree->addTopLevelItem(dev_item); |
433 | } | 430 | } |
@@ -437,7 +434,7 @@ void RegTab::FillRegTree() | |||
437 | void RegTab::FillAnalyserList() | 434 | void RegTab::FillAnalyserList() |
438 | { | 435 | { |
439 | m_analysers_list->clear(); | 436 | m_analysers_list->clear(); |
440 | m_analysers_list->addItems(AnalyserFactory::GetAnalysersForSoc(m_cur_soc.name.c_str())); | 437 | m_analysers_list->addItems(AnalyserFactory::GetAnalysersForSoc(m_cur_soc.GetSoc().name.c_str())); |
441 | } | 438 | } |
442 | 439 | ||
443 | void RegTab::OnSocChanged(const QString& soc) | 440 | void RegTab::OnSocChanged(const QString& soc) |
diff --git a/utils/regtools/qeditor/regtab.h b/utils/regtools/qeditor/regtab.h index 460894b143..107e4e3986 100644 --- a/utils/regtools/qeditor/regtab.h +++ b/utils/regtools/qeditor/regtab.h | |||
@@ -30,18 +30,28 @@ enum | |||
30 | #endif | 30 | #endif |
31 | }; | 31 | }; |
32 | 32 | ||
33 | class DevTreeItem : public QTreeWidgetItem | ||
34 | { | ||
35 | public: | ||
36 | DevTreeItem(const QString& string, const SocDevRef& ref) | ||
37 | :QTreeWidgetItem(QStringList(string), RegTreeDevType), m_ref(ref) {} | ||
38 | |||
39 | const SocDevRef& GetRef() { return m_ref; } | ||
40 | private: | ||
41 | SocDevRef m_ref; | ||
42 | }; | ||
43 | |||
33 | class RegTreeItem : public QTreeWidgetItem | 44 | class RegTreeItem : public QTreeWidgetItem |
34 | { | 45 | { |
35 | public: | 46 | public: |
36 | RegTreeItem(const QString& string, int type); | 47 | RegTreeItem(const QString& string, const SocRegRef& ref) |
48 | :QTreeWidgetItem(QStringList(string), RegTreeRegType), m_ref(ref) {} | ||
37 | 49 | ||
38 | void SetPath(int dev_idx, int dev_addr_idx, int reg_idx = -1, int reg_addr_idx = -1); | 50 | const SocRegRef& GetRef() { return m_ref; } |
39 | int GetDevIndex() const { return m_dev_idx; } | ||
40 | int GetDevAddrIndex() const { return m_dev_addr_idx; } | ||
41 | int GetRegIndex() const { return m_reg_idx; } | ||
42 | int GetRegAddrIndex() const { return m_reg_addr_idx; } | ||
43 | private: | 51 | private: |
44 | int m_dev_idx, m_dev_addr_idx, m_reg_idx, m_reg_addr_idx; | 52 | SocRegRef m_ref; |
53 | }; | ||
54 | |||
45 | }; | 55 | }; |
46 | 56 | ||
47 | class RegTab : public QSplitter | 57 | class RegTab : public QSplitter |
@@ -51,12 +61,11 @@ public: | |||
51 | RegTab(Backend *backend); | 61 | RegTab(Backend *backend); |
52 | 62 | ||
53 | protected: | 63 | protected: |
54 | void FillDevSubTree(RegTreeItem *item); | 64 | void FillDevSubTree(DevTreeItem *item); |
55 | void FillRegTree(); | 65 | void FillRegTree(); |
56 | void FillAnalyserList(); | 66 | void FillAnalyserList(); |
57 | void UpdateSocList(); | 67 | void UpdateSocList(); |
58 | void DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, | 68 | void DisplayRegister(const SocRegRef& ref); |
59 | soc_reg_t& reg, soc_reg_addr_t& reg_addr); | ||
60 | void SetDataSocName(const QString& socname); | 69 | void SetDataSocName(const QString& socname); |
61 | QComboBox *m_soc_selector; | 70 | QComboBox *m_soc_selector; |
62 | #ifdef HAVE_HWSTUB | 71 | #ifdef HAVE_HWSTUB |
@@ -65,7 +74,7 @@ protected: | |||
65 | #endif | 74 | #endif |
66 | Backend *m_backend; | 75 | Backend *m_backend; |
67 | QTreeWidget *m_reg_tree; | 76 | QTreeWidget *m_reg_tree; |
68 | soc_t m_cur_soc; | 77 | SocRef m_cur_soc; |
69 | QVBoxLayout *m_right_panel; | 78 | QVBoxLayout *m_right_panel; |
70 | QWidget *m_right_content; | 79 | QWidget *m_right_content; |
71 | QLineEdit *m_data_sel_edit; | 80 | QLineEdit *m_data_sel_edit; |
diff --git a/utils/regtools/qeditor/std_analysers.cpp b/utils/regtools/qeditor/std_analysers.cpp index aef45e7abc..2cc84cb488 100644 --- a/utils/regtools/qeditor/std_analysers.cpp +++ b/utils/regtools/qeditor/std_analysers.cpp | |||
@@ -4,7 +4,7 @@ | |||
4 | * Clock analyser | 4 | * Clock analyser |
5 | */ | 5 | */ |
6 | 6 | ||
7 | ClockAnalyser::ClockAnalyser(const soc_t& soc, IoBackend *backend) | 7 | ClockAnalyser::ClockAnalyser(const SocRef& soc, IoBackend *backend) |
8 | :Analyser(soc, backend) | 8 | :Analyser(soc, backend) |
9 | { | 9 | { |
10 | m_group = new QGroupBox("Clock Analyser"); | 10 | m_group = new QGroupBox("Clock Analyser"); |
@@ -300,7 +300,7 @@ static TmplAnalyserFactory< ClockAnalyser > g_clock_factory(true, "Clock Analyse | |||
300 | /** | 300 | /** |
301 | * EMI analyser | 301 | * EMI analyser |
302 | */ | 302 | */ |
303 | EmiAnalyser::EmiAnalyser(const soc_t& soc, IoBackend *backend) | 303 | EmiAnalyser::EmiAnalyser(const SocRef& soc, IoBackend *backend) |
304 | :Analyser(soc, backend) | 304 | :Analyser(soc, backend) |
305 | { | 305 | { |
306 | m_display_mode = DisplayCycles; | 306 | m_display_mode = DisplayCycles; |
@@ -647,7 +647,7 @@ namespace pin_desc | |||
647 | #include "../../imxtools/misc/map.h" | 647 | #include "../../imxtools/misc/map.h" |
648 | } | 648 | } |
649 | 649 | ||
650 | PinAnalyser::PinAnalyser(const soc_t& soc, IoBackend *backend) | 650 | PinAnalyser::PinAnalyser(const SocRef& soc, IoBackend *backend) |
651 | :Analyser(soc, backend) | 651 | :Analyser(soc, backend) |
652 | { | 652 | { |
653 | m_group = new QGroupBox("Pin Analyser"); | 653 | m_group = new QGroupBox("Pin Analyser"); |
diff --git a/utils/regtools/qeditor/std_analysers.h b/utils/regtools/qeditor/std_analysers.h index e613c07096..aae8e40207 100644 --- a/utils/regtools/qeditor/std_analysers.h +++ b/utils/regtools/qeditor/std_analysers.h | |||
@@ -23,7 +23,7 @@ class ClockAnalyser : public Analyser | |||
23 | { | 23 | { |
24 | Q_OBJECT | 24 | Q_OBJECT |
25 | public: | 25 | public: |
26 | ClockAnalyser(const soc_t& soc, IoBackend *backend); | 26 | ClockAnalyser(const SocRef& soc, IoBackend *backend); |
27 | virtual ~ClockAnalyser(); | 27 | virtual ~ClockAnalyser(); |
28 | virtual QWidget *GetWidget(); | 28 | virtual QWidget *GetWidget(); |
29 | static bool SupportSoc(const QString& soc_name); | 29 | static bool SupportSoc(const QString& soc_name); |
@@ -54,7 +54,7 @@ class EmiAnalyser : public Analyser | |||
54 | { | 54 | { |
55 | Q_OBJECT | 55 | Q_OBJECT |
56 | public: | 56 | public: |
57 | EmiAnalyser(const soc_t& soc, IoBackend *backend); | 57 | EmiAnalyser(const SocRef& soc, IoBackend *backend); |
58 | virtual ~EmiAnalyser(); | 58 | virtual ~EmiAnalyser(); |
59 | virtual QWidget *GetWidget(); | 59 | virtual QWidget *GetWidget(); |
60 | 60 | ||
@@ -98,7 +98,7 @@ class PinAnalyser : public Analyser | |||
98 | { | 98 | { |
99 | Q_OBJECT | 99 | Q_OBJECT |
100 | public: | 100 | public: |
101 | PinAnalyser(const soc_t& soc, IoBackend *backend); | 101 | PinAnalyser(const SocRef& soc, IoBackend *backend); |
102 | virtual ~PinAnalyser(); | 102 | virtual ~PinAnalyser(); |
103 | virtual QWidget *GetWidget(); | 103 | virtual QWidget *GetWidget(); |
104 | 104 | ||