diff options
Diffstat (limited to 'utils/regtools/qeditor/regtab.cpp')
-rw-r--r-- | utils/regtools/qeditor/regtab.cpp | 69 |
1 files changed, 33 insertions, 36 deletions
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) |