summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regtab.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools/qeditor/regtab.cpp')
-rw-r--r--utils/regtools/qeditor/regtab.cpp65
1 files changed, 62 insertions, 3 deletions
diff --git a/utils/regtools/qeditor/regtab.cpp b/utils/regtools/qeditor/regtab.cpp
index 4f7a73cffc..8f64bbf48a 100644
--- a/utils/regtools/qeditor/regtab.cpp
+++ b/utils/regtools/qeditor/regtab.cpp
@@ -13,6 +13,7 @@
13#include <QTableWidget> 13#include <QTableWidget>
14#include <QHeaderView> 14#include <QHeaderView>
15#include <QFileDialog> 15#include <QFileDialog>
16#include <QDebug>
16#include "backend.h" 17#include "backend.h"
17#include "analyser.h" 18#include "analyser.h"
18 19
@@ -65,6 +66,9 @@ RegTab::RegTab(Backend *backend, QTabWidget *parent)
65 m_data_selector = new QComboBox; 66 m_data_selector = new QComboBox;
66 m_data_selector->addItem(QIcon::fromTheme("face-sad"), "None", QVariant(DataSelNothing)); 67 m_data_selector->addItem(QIcon::fromTheme("face-sad"), "None", QVariant(DataSelNothing));
67 m_data_selector->addItem(QIcon::fromTheme("document-open"), "File...", QVariant(DataSelFile)); 68 m_data_selector->addItem(QIcon::fromTheme("document-open"), "File...", QVariant(DataSelFile));
69#ifdef HAVE_HWSTUB
70 m_data_selector->addItem(QIcon::fromTheme("multimedia-player"), "Device...", QVariant(DataSelDevice));
71#endif
68 m_data_sel_edit = new QLineEdit; 72 m_data_sel_edit = new QLineEdit;
69 m_data_sel_edit->setReadOnly(true); 73 m_data_sel_edit->setReadOnly(true);
70 m_data_soc_label = new QLabel; 74 m_data_soc_label = new QLabel;
@@ -72,6 +76,10 @@ RegTab::RegTab(Backend *backend, QTabWidget *parent)
72 data_sel_reload->setIcon(QIcon::fromTheme("view-refresh")); 76 data_sel_reload->setIcon(QIcon::fromTheme("view-refresh"));
73 data_sel_layout->addWidget(m_data_selector); 77 data_sel_layout->addWidget(m_data_selector);
74 data_sel_layout->addWidget(m_data_sel_edit); 78 data_sel_layout->addWidget(m_data_sel_edit);
79#ifdef HAVE_HWSTUB
80 m_dev_selector = new QComboBox;
81 data_sel_layout->addWidget(m_dev_selector, 1);
82#endif
75 data_sel_layout->addWidget(m_data_soc_label); 83 data_sel_layout->addWidget(m_data_soc_label);
76 data_sel_layout->addWidget(data_sel_reload); 84 data_sel_layout->addWidget(data_sel_reload);
77 data_sel_group->setLayout(data_sel_layout); 85 data_sel_group->setLayout(data_sel_layout);
@@ -107,6 +115,10 @@ RegTab::RegTab(Backend *backend, QTabWidget *parent)
107 this, SLOT(OnAnalyserChanged(QListWidgetItem *, QListWidgetItem *))); 115 this, SLOT(OnAnalyserChanged(QListWidgetItem *, QListWidgetItem *)));
108 connect(m_analysers_list, SIGNAL(itemClicked(QListWidgetItem *)), this, 116 connect(m_analysers_list, SIGNAL(itemClicked(QListWidgetItem *)), this,
109 SLOT(OnAnalyserClicked(QListWidgetItem *))); 117 SLOT(OnAnalyserClicked(QListWidgetItem *)));
118#ifdef HAVE_HWSTUB
119 connect(m_dev_selector, SIGNAL(currentIndexChanged(int)),
120 this, SLOT(OnDevChanged(int)));
121#endif
110 122
111 OnSocListChanged(); 123 OnSocListChanged();
112 OnDataSelChanged(DataSelNothing); 124 OnDataSelChanged(DataSelNothing);
@@ -141,6 +153,10 @@ void RegTab::OnDataSelChanged(int index)
141 QVariant var = m_data_selector->itemData(index); 153 QVariant var = m_data_selector->itemData(index);
142 if(var == DataSelFile) 154 if(var == DataSelFile)
143 { 155 {
156 m_data_sel_edit->show();
157#ifdef HAVE_HWSTUB
158 m_dev_selector->hide();
159#endif
144 QFileDialog *fd = new QFileDialog(m_data_selector); 160 QFileDialog *fd = new QFileDialog(m_data_selector);
145 fd->setFilter("Textual files (*.txt);;All files (*)"); 161 fd->setFilter("Textual files (*.txt);;All files (*)");
146 fd->setDirectory(Settings::Get()->value("regtab/loaddatadir", QDir::currentPath()).toString()); 162 fd->setDirectory(Settings::Get()->value("regtab/loaddatadir", QDir::currentPath()).toString());
@@ -155,8 +171,20 @@ void RegTab::OnDataSelChanged(int index)
155 } 171 }
156 Settings::Get()->setValue("regtab/loaddatadir", fd->directory().absolutePath()); 172 Settings::Get()->setValue("regtab/loaddatadir", fd->directory().absolutePath());
157 } 173 }
174#ifdef HAVE_HWSTUB
175 else if(var == DataSelDevice)
176 {
177 m_data_sel_edit->hide();
178 m_dev_selector->show();
179 OnDevListChanged();
180 }
181#endif
158 else 182 else
159 { 183 {
184 m_data_sel_edit->show();
185#ifdef HAVE_HWSTUB
186 m_dev_selector->hide();
187#endif
160 delete m_io_backend; 188 delete m_io_backend;
161 m_io_backend = m_backend->CreateDummyIoBackend(); 189 m_io_backend = m_backend->CreateDummyIoBackend();
162 SetDataSocName(""); 190 SetDataSocName("");
@@ -204,7 +232,7 @@ void RegTab::OnAnalyserClicked(QListWidgetItem *current)
204 delete m_right_content; 232 delete m_right_content;
205 AnalyserFactory *ana = AnalyserFactory::GetAnalyserByName(current->text()); 233 AnalyserFactory *ana = AnalyserFactory::GetAnalyserByName(current->text());
206 m_right_content = ana->Create(m_cur_soc, m_io_backend)->GetWidget(); 234 m_right_content = ana->Create(m_cur_soc, m_io_backend)->GetWidget();
207 m_right_panel->addWidget(m_right_content); 235 m_right_panel->addWidget(m_right_content, 1);
208} 236}
209 237
210void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, 238void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr,
@@ -256,8 +284,8 @@ void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr,
256 top_layout->addStretch(); 284 top_layout->addStretch();
257 285
258 soc_word_t value; 286 soc_word_t value;
259 bool has_value = m_io_backend->ReadRegister(QString().sprintf("HW.%s.%s", 287 BackendHelper helper(m_io_backend, m_cur_soc);
260 dev_addr.name.c_str(), reg_addr.name.c_str()), value); 288 bool has_value = helper.ReadRegister(dev_addr.name.c_str(), reg_addr.name.c_str(), value);
261 289
262 QHBoxLayout *raw_val_layout = 0; 290 QHBoxLayout *raw_val_layout = 0;
263 if(has_value) 291 if(has_value)
@@ -348,6 +376,37 @@ void RegTab::OnSocListChanged()
348 m_soc_selector->addItem(socs[i]); 376 m_soc_selector->addItem(socs[i]);
349} 377}
350 378
379#ifdef HAVE_HWSTUB
380void RegTab::OnDevListChanged()
381{
382 m_dev_selector->clear();
383 QList< HWStubDevice* > list = m_hwstub_helper.GetDevList();
384 foreach(HWStubDevice *dev, list)
385 {
386 QString name = QString("Bus %1 Device %2: %3").arg(dev->GetBusNumber())
387 .arg(dev->GetDevAddress()).arg(dev->GetTargetInfo().bName);
388 m_dev_selector->addItem(QIcon::fromTheme("multimedia-player"), name,
389 QVariant::fromValue((void *)dev));
390 }
391 if(list.size() > 0)
392 m_dev_selector->setCurrentIndex(0);
393 else
394 SetDataSocName("");
395}
396
397void RegTab::OnDevChanged(int index)
398{
399 if(index == -1)
400 return;
401 HWStubDevice *dev = reinterpret_cast< HWStubDevice* >(m_dev_selector->itemData(index).value< void* >());
402 delete m_io_backend;
403 m_io_backend = m_backend->CreateHWStubIoBackend(dev);
404 SetDataSocName(m_io_backend->GetSocName());
405 OnDataSocActivated(m_io_backend->GetSocName());
406 OnDataChanged();
407}
408#endif
409
351void RegTab::FillDevSubTree(RegTreeItem *item) 410void RegTab::FillDevSubTree(RegTreeItem *item)
352{ 411{
353 soc_dev_t& sd = m_cur_soc.dev[item->GetDevIndex()]; 412 soc_dev_t& sd = m_cur_soc.dev[item->GetDevIndex()];