diff options
Diffstat (limited to 'utils/regtools/qeditor/regtab.cpp')
-rw-r--r-- | utils/regtools/qeditor/regtab.cpp | 65 |
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 | ||
210 | void RegTab::DisplayRegister(soc_dev_t& dev, soc_dev_addr_t& dev_addr, | 238 | void 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 | ||
380 | void 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 | |||
397 | void 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 | |||
351 | void RegTab::FillDevSubTree(RegTreeItem *item) | 410 | void 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()]; |