summaryrefslogtreecommitdiff
path: root/utils/regtools/qeditor/regdisplaypanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/regtools/qeditor/regdisplaypanel.cpp')
-rw-r--r--utils/regtools/qeditor/regdisplaypanel.cpp157
1 files changed, 87 insertions, 70 deletions
diff --git a/utils/regtools/qeditor/regdisplaypanel.cpp b/utils/regtools/qeditor/regdisplaypanel.cpp
index 167c776cce..a72d280d6c 100644
--- a/utils/regtools/qeditor/regdisplaypanel.cpp
+++ b/utils/regtools/qeditor/regdisplaypanel.cpp
@@ -21,36 +21,26 @@
21#include "regdisplaypanel.h" 21#include "regdisplaypanel.h"
22#include <QHeaderView> 22#include <QHeaderView>
23#include <QDebug> 23#include <QDebug>
24 24#include <QStandardItemModel>
25/**
26 * RegItemEditorCreator
27 */
28
29QWidget *RegItemEditorCreator::createWidget(QWidget * parent) const
30{
31 return new RegLineEdit(parent);
32}
33
34QByteArray RegItemEditorCreator::valuePropertyName () const
35{
36 return QByteArray("text");
37}
38 25
39/** 26/**
40 * SocDisplayPanel 27 * SocDisplayPanel
41 */ 28 */
42SocDisplayPanel::SocDisplayPanel(QWidget *parent, const SocRef& dev_ref) 29SocDisplayPanel::SocDisplayPanel(QWidget *parent, IoBackend *io_backend,
43 :QGroupBox(parent), m_soc(dev_ref) 30 const soc_desc::soc_ref_t& ref)
31 :QGroupBox(parent), m_soc(ref)
44{ 32{
33 Q_UNUSED(io_backend)
45 QVBoxLayout *right_layout = new QVBoxLayout; 34 QVBoxLayout *right_layout = new QVBoxLayout;
46 35
47 m_name = new QLabel(this); 36 m_name = new QLabel(this);
48 m_name->setTextFormat(Qt::RichText); 37 m_name->setTextFormat(Qt::RichText);
49 m_name->setText("<h1>" + QString::fromStdString(m_soc.GetSoc().name) + "</h1>"); 38 m_name->setText("<h1>" + QString::fromStdString(m_soc.get()->name) + "</h1>");
50 39
51 m_desc = new QLabel(this); 40 m_desc = new QLabel(this);
52 m_name->setTextFormat(Qt::RichText); 41 m_name->setTextFormat(Qt::RichText);
53 m_desc->setText(QString::fromStdString(m_soc.GetSoc().desc)); 42 m_desc->setText(QString::fromStdString(m_soc.get()->desc));
43 m_desc->setVisible(m_desc->text().size() != 0);
54 44
55 right_layout->addWidget(m_name, 0); 45 right_layout->addWidget(m_name, 0);
56 right_layout->addWidget(m_desc, 0); 46 right_layout->addWidget(m_desc, 0);
@@ -71,24 +61,21 @@ QWidget *SocDisplayPanel::GetWidget()
71} 61}
72 62
73/** 63/**
74 * DevDisplayPanel 64 * NodeDisplayPanel
75 */ 65 */
76DevDisplayPanel::DevDisplayPanel(QWidget *parent, const SocDevRef& dev_ref) 66NodeDisplayPanel::NodeDisplayPanel(QWidget *parent, IoBackend *io_backend,
77 :QGroupBox(parent), m_dev(dev_ref), m_reg_font(font()) 67 const soc_desc::node_inst_t& ref)
68 :QGroupBox(parent), m_node(ref)
78{ 69{
70 BackendHelper helper(io_backend, ref.soc());
79 QVBoxLayout *right_layout = new QVBoxLayout; 71 QVBoxLayout *right_layout = new QVBoxLayout;
80 const soc_dev_addr_t& dev_addr = m_dev.GetDevAddr();
81
82 m_reg_font.setWeight(100);
83 m_reg_font.setKerning(false);
84 72
85 QString dev_name; 73 QString dev_name = helper.GetPath(ref);
86 dev_name.sprintf("HW_%s_BASE", dev_addr.name.c_str());
87 74
88 QLabel *label_names = new QLabel("<b>" + dev_name + "</b>"); 75 QLabel *label_names = new QLabel("<b>" + dev_name + "</b>");
89 label_names->setTextFormat(Qt::RichText); 76 label_names->setTextFormat(Qt::RichText);
90 77
91 QLabel *label_addr = new QLabel("<b>" + QString().sprintf("0x%03x", dev_addr.addr) + "</b>"); 78 QLabel *label_addr = new QLabel("<b>" + QString().sprintf("0x%03x", ref.addr()) + "</b>");
92 label_addr->setTextFormat(Qt::RichText); 79 label_addr->setTextFormat(Qt::RichText);
93 80
94 QHBoxLayout *top_layout = new QHBoxLayout; 81 QHBoxLayout *top_layout = new QHBoxLayout;
@@ -99,27 +86,38 @@ DevDisplayPanel::DevDisplayPanel(QWidget *parent, const SocDevRef& dev_ref)
99 86
100 m_name = new QLabel(this); 87 m_name = new QLabel(this);
101 m_name->setTextFormat(Qt::RichText); 88 m_name->setTextFormat(Qt::RichText);
102 m_name->setText("<h1>" + QString::fromStdString(m_dev.GetDev().long_name) + "</h1>"); 89 /* if instance has a title, it overrides node title.*/
103 90 std::string title = ref.get()->title;
104 m_desc = new QLabel(this); 91 if(title.empty())
105 m_name->setTextFormat(Qt::RichText); 92 title = ref.node().get()->title;
106 m_desc->setText(QString::fromStdString(m_dev.GetDev().desc)); 93 m_name->setText("<h1>" + QString::fromStdString(title) + "</h1>");
94
95 /* put description from the node and from the instance */
96 m_node_desc = new QLabel(this);
97 m_node_desc->setTextFormat(Qt::RichText);
98 m_node_desc->setText(QString::fromStdString(ref.node().get()->desc));
99 m_node_desc->setVisible(m_node_desc->text().size() != 0);
100 m_inst_desc = new QLabel(this);
101 m_inst_desc->setTextFormat(Qt::RichText);
102 m_inst_desc->setText(QString::fromStdString(ref.get()->desc));
103 m_inst_desc->setVisible(m_inst_desc->text().size() != 0);
107 104
108 right_layout->addWidget(m_name, 0); 105 right_layout->addWidget(m_name, 0);
109 right_layout->addLayout(top_layout, 0); 106 right_layout->addLayout(top_layout, 0);
110 right_layout->addWidget(m_desc, 0); 107 right_layout->addWidget(m_node_desc, 0);
108 right_layout->addWidget(m_inst_desc, 0);
111 right_layout->addStretch(1); 109 right_layout->addStretch(1);
112 110
113 setTitle("Device Description"); 111 setTitle("Device Description");
114 setLayout(right_layout); 112 setLayout(right_layout);
115} 113}
116 114
117void DevDisplayPanel::AllowWrite(bool en) 115void NodeDisplayPanel::AllowWrite(bool en)
118{ 116{
119 Q_UNUSED(en); 117 Q_UNUSED(en);
120} 118}
121 119
122QWidget *DevDisplayPanel::GetWidget() 120QWidget *NodeDisplayPanel::GetWidget()
123{ 121{
124 return this; 122 return this;
125} 123}
@@ -128,34 +126,29 @@ QWidget *DevDisplayPanel::GetWidget()
128 * RegDisplayPanel 126 * RegDisplayPanel
129 */ 127 */
130 128
131RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const SocRegRef& reg_ref) 129RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend,
132 :QGroupBox(parent), m_io_backend(io_backend), m_reg(reg_ref), m_reg_font(font()) 130 const soc_desc::node_inst_t& ref)
131 :QGroupBox(parent), m_io_backend(io_backend), m_node(ref), m_reg_font(font())
133{ 132{
134 bool read_only = m_io_backend->IsReadOnly(); 133 bool read_only = m_io_backend->IsReadOnly();
134 BackendHelper helper(m_io_backend, ref.soc());
135 135
136 QVBoxLayout *right_layout = new QVBoxLayout; 136 QVBoxLayout *right_layout = new QVBoxLayout;
137 137
138 const soc_dev_addr_t& dev_addr = m_reg.GetDevAddr();
139 const soc_reg_t& reg = m_reg.GetReg();
140 const soc_reg_addr_t& reg_addr = m_reg.GetRegAddr();
141
142 m_reg_font.setWeight(100); 138 m_reg_font.setWeight(100);
143 m_reg_font.setKerning(false); 139 m_reg_font.setKerning(false);
144 140
145 QString reg_name; 141 QString reg_name = helper.GetPath(ref);
146 reg_name.sprintf("HW_%s_%s", dev_addr.name.c_str(), reg_addr.name.c_str());
147 QStringList names; 142 QStringList names;
148 QVector< soc_addr_t > addresses; 143 QVector< soc_addr_t > addresses;
149 names.append(reg_name); 144 names.append(reg_name);
150 addresses.append(reg_addr.addr); 145 addresses.append(ref.addr());
151 if(reg.flags & REG_HAS_SCT) 146
147 std::vector< soc_desc::variant_ref_t > variants = ref.node().reg().variants();
148 for(size_t i = 0; i < variants.size(); i++)
152 { 149 {
153 names.append(reg_name + "_SET"); 150 names.append(reg_name + "/" + QString::fromStdString(variants[i].get()->type));
154 names.append(reg_name + "_CLR"); 151 addresses.append(ref.addr() + variants[i].get()->offset);
155 names.append(reg_name + "_TOG");
156 addresses.append(reg_addr.addr + 4);
157 addresses.append(reg_addr.addr + 8);
158 addresses.append(reg_addr.addr + 12);
159 } 152 }
160 153
161 QString str; 154 QString str;
@@ -188,7 +181,7 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
188 m_raw_val_edit->SetReadOnly(read_only); 181 m_raw_val_edit->SetReadOnly(read_only);
189 m_raw_val_edit->GetLineEdit()->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); 182 m_raw_val_edit->GetLineEdit()->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
190 m_raw_val_edit->GetLineEdit()->setValidator(new SocFieldValidator(m_raw_val_edit)); 183 m_raw_val_edit->GetLineEdit()->setValidator(new SocFieldValidator(m_raw_val_edit));
191 m_raw_val_edit->EnableSCT(!!(reg.flags & REG_HAS_SCT)); 184 //m_raw_val_edit->EnableSCT(!!(reg.flags & REG_HAS_SCT));
192 m_raw_val_edit->GetLineEdit()->setFont(m_reg_font); 185 m_raw_val_edit->GetLineEdit()->setFont(m_reg_font);
193 QHBoxLayout *raw_val_layout = new QHBoxLayout; 186 QHBoxLayout *raw_val_layout = new QHBoxLayout;
194 raw_val_layout->addStretch(); 187 raw_val_layout->addStretch();
@@ -198,9 +191,13 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
198 191
199 m_value_table = new GrowingTableView(); 192 m_value_table = new GrowingTableView();
200 m_value_model = new RegFieldTableModel(m_value_table); // view takes ownership 193 m_value_model = new RegFieldTableModel(m_value_table); // view takes ownership
201 m_value_model->SetRegister(m_reg.GetReg()); 194 m_value_model->SetRegister(*m_node.node().reg().get());
202 m_value_model->SetReadOnly(read_only); 195 m_value_model->SetReadOnly(read_only);
203 m_value_table->setModel(m_value_model); 196 RegFieldProxyModel *proxy_model = new RegFieldProxyModel(this);
197 proxy_model->setSourceModel(m_value_model);
198 m_value_table->setModel(proxy_model);
199 m_value_table->setSortingEnabled(true);
200 m_value_table->sortByColumn(0, Qt::DescendingOrder);
204 m_value_table->verticalHeader()->setVisible(false); 201 m_value_table->verticalHeader()->setVisible(false);
205 m_value_table->resizeColumnsToContents(); 202 m_value_table->resizeColumnsToContents();
206 m_value_table->horizontalHeader()->setStretchLastSection(true); 203 m_value_table->horizontalHeader()->setStretchLastSection(true);
@@ -217,17 +214,36 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
217 m_table_delegate->setItemEditorFactory(m_table_edit_factory); 214 m_table_delegate->setItemEditorFactory(m_table_edit_factory);
218 m_value_table->setItemDelegate(m_table_delegate); 215 m_value_table->setItemDelegate(m_table_delegate);
219 216
220 m_sexy_display2 = new Unscroll<RegSexyDisplay2>(this); 217 m_sexy_display2 = new Unscroll<YRegDisplay>(this);
221 m_sexy_display2->setFont(m_reg_font); 218 m_sexy_display2->setFont(m_reg_font);
222 m_sexy_display2->setModel(m_value_model); 219 m_sexy_display2->setModel(m_value_model);
220 m_sexy_display2->setWidth(m_node.node().reg().get()->width);
223 m_sexy_display2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 221 m_sexy_display2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
224 222
223 m_name = new QLabel(this);
224 m_name->setTextFormat(Qt::RichText);
225 m_name->setText("<h1>" + QString::fromStdString(ref.node().get()->title) + "</h1>");
226
227 /* put description from the node, from the instance and register */
228 m_node_desc = new QLabel(this);
229 m_node_desc->setTextFormat(Qt::RichText);
230 m_node_desc->setText(QString::fromStdString(ref.node().get()->desc));
231 m_node_desc->setVisible(m_node_desc->text().size() != 0);
232 m_inst_desc = new QLabel(this);
233 m_inst_desc->setTextFormat(Qt::RichText);
234 m_inst_desc->setText(QString::fromStdString(ref.get()->desc));
235 m_inst_desc->setVisible(m_inst_desc->text().size() != 0);
225 m_desc = new QLabel(this); 236 m_desc = new QLabel(this);
226 m_desc->setTextFormat(Qt::RichText); 237 m_desc->setTextFormat(Qt::RichText);
227 m_desc->setText(QString::fromStdString(m_reg.GetReg().desc)); 238 m_desc->setText(QString::fromStdString(m_node.node().reg().get()->desc));
239 m_desc->setVisible(m_desc->text().size() != 0);
228 240
241 right_layout->addWidget(m_name);
229 right_layout->addWidget(m_desc); 242 right_layout->addWidget(m_desc);
230 right_layout->addLayout(top_layout); 243 right_layout->addLayout(top_layout);
244 right_layout->addWidget(m_node_desc);
245 right_layout->addWidget(m_inst_desc);
246 right_layout->addWidget(m_desc);
231 if(raw_val_layout) 247 if(raw_val_layout)
232 right_layout->addLayout(raw_val_layout); 248 right_layout->addLayout(raw_val_layout);
233 right_layout->addWidget(m_sexy_display2); 249 right_layout->addWidget(m_sexy_display2);
@@ -252,8 +268,10 @@ RegDisplayPanel::RegDisplayPanel(QWidget *parent, IoBackend *io_backend, const S
252 268
253 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this, 269 connect(m_raw_val_edit->GetLineEdit(), SIGNAL(returnPressed()), this,
254 SLOT(OnRawRegValueReturnPressed())); 270 SLOT(OnRawRegValueReturnPressed()));
255 connect(m_value_table->model(), SIGNAL(OnValueModified(int)), this, 271 connect(m_value_model, SIGNAL(OnValueModified(int)), this,
256 SLOT(OnRegValueChanged(int))); 272 SLOT(OnRegValueChanged(int)));
273 connect(m_sexy_display2, SIGNAL(clicked(const QModelIndex&)), this,
274 SLOT(OnRegFieldActivated(const QModelIndex&)));
257} 275}
258 276
259RegDisplayPanel::~RegDisplayPanel() 277RegDisplayPanel::~RegDisplayPanel()
@@ -263,12 +281,9 @@ RegDisplayPanel::~RegDisplayPanel()
263 281
264void RegDisplayPanel::Reload() 282void RegDisplayPanel::Reload()
265{ 283{
266 const soc_dev_addr_t& dev_addr = m_reg.GetDevAddr();
267 const soc_reg_t& reg = m_reg.GetReg();
268 const soc_reg_addr_t& reg_addr = m_reg.GetRegAddr();
269 soc_word_t value; 284 soc_word_t value;
270 BackendHelper helper(m_io_backend, m_reg); 285 BackendHelper helper(m_io_backend, m_node.soc());
271 bool has_value = helper.ReadRegister(dev_addr.name.c_str(), reg_addr.name.c_str(), value); 286 bool has_value = helper.ReadRegister(m_node, value);
272 287
273 if(has_value) 288 if(has_value)
274 { 289 {
@@ -296,7 +311,6 @@ void RegDisplayPanel::AllowWrite(bool en)
296 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write); 311 m_raw_val_edit->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
297 m_value_model->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write); 312 m_value_model->SetReadOnly(m_io_backend->IsReadOnly() || !m_allow_write);
298 } 313 }
299 Reload();
300} 314}
301 315
302IoBackend::WriteMode RegDisplayPanel::EditModeToWriteMode(RegLineEdit::EditMode mode) 316IoBackend::WriteMode RegDisplayPanel::EditModeToWriteMode(RegLineEdit::EditMode mode)
@@ -320,9 +334,8 @@ void RegDisplayPanel::OnRawRegValueReturnPressed()
320 if(state != QValidator::Acceptable) 334 if(state != QValidator::Acceptable)
321 return; 335 return;
322 IoBackend::WriteMode mode = EditModeToWriteMode(m_raw_val_edit->GetMode()); 336 IoBackend::WriteMode mode = EditModeToWriteMode(m_raw_val_edit->GetMode());
323 BackendHelper helper(m_io_backend, m_reg); 337 BackendHelper helper(m_io_backend, m_node.soc());
324 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 338 helper.WriteRegister(m_node, val, mode);
325 val, mode);
326 // register write can change all fields 339 // register write can change all fields
327 Reload(); 340 Reload();
328} 341}
@@ -332,13 +345,17 @@ void RegDisplayPanel::OnRegValueChanged(int index)
332 QVariant var = m_value_model->GetValue(index); 345 QVariant var = m_value_model->GetValue(index);
333 if(!var.isValid()) 346 if(!var.isValid())
334 return; 347 return;
335 BackendHelper helper(m_io_backend, m_reg); 348 BackendHelper helper(m_io_backend, m_node.soc());
336 helper.WriteRegister(m_reg.GetDevAddr().name.c_str(), m_reg.GetRegAddr().name.c_str(), 349 helper.WriteRegister(m_node, var.value< soc_word_t >(), IoBackend::Write);
337 var.value< soc_word_t >(), IoBackend::Write);
338 // register write can change all fields 350 // register write can change all fields
339 Reload(); 351 Reload();
340} 352}
341 353
354void RegDisplayPanel::OnRegFieldActivated(const QModelIndex& index)
355{
356 Q_UNUSED(index);
357}
358
342QWidget *RegDisplayPanel::GetWidget() 359QWidget *RegDisplayPanel::GetWidget()
343{ 360{
344 return this; 361 return this;