OpenCores
URL https://opencores.org/ocsvn/riscv_vhdl/riscv_vhdl/trunk

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [gui_plugin/] [ControlWidget/] [PnpWidget.cpp] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 sergeykhbr
#include "coreservices/isocinfo.h"
2
#include "PnpWidget.h"
3
#include "moc_PnpWidget.h"
4
 
5
#include <QtGui/QPainter>
6
#include <QtWidgets/QScrollBar>
7
#include <memory>
8
 
9
namespace debugger {
10
 
11
enum EWName {
12
    WTarget_Name,
13
    WTarget_image,
14
    WHW_ID,
15
    WFW_ID,
16
    WMasterTotal,
17
    WSlaveTotal,
18
    W_Total
19
};
20
 
21
PnpWidget::PnpWidget(IGui *igui, QWidget *parent) : QWidget(parent) {
22
    igui_ = igui;
23
    parent_ = parent;
24
 
25
    mainLayout_ = new QGridLayout(this);
26
 
27
    setMinimumWidth(150);
28
    setMinimumHeight(100);
29
 
30
    imgTarget_[SIMULATION] = QImage(tr(":/images/ml605_top.png"));
31
    imgTarget_[ML605] = QImage(tr(":/images/ml605_top.png"));
32
    imgTarget_[KC705] = QImage(tr(":/images/kc705_top.png"));
33
    imgTarget_[TARGET_Unknown] = QImage(tr(":/images/ml605_top.png"));
34
 
35
 
36
    QLabel *labelBoardImg = new QLabel(this);
37
    labelBoardImg->setScaledContents(false);
38
 
39
    // row, column, rowSpan, colSpan:
40
    mainLayout_->addWidget(new QLabel(tr("Target: --")), 0, 0, 1, 2, Qt::AlignCenter);
41
    // row span 5: hwid, swid, slvtotal, msttotal, empty_row, empty_row
42
    mainLayout_->addWidget(labelBoardImg, 1, 0, 6, 1, Qt::AlignVCenter);
43
    mainLayout_->addWidget(new QLabel(tr("HW_ID:")), 1, 1, Qt::AlignLeft);
44
    mainLayout_->addWidget(new QLabel(tr("FW_ID:")), 2, 1, Qt::AlignLeft);
45
    mainLayout_->addWidget(new QLabel(tr("Masters Total:")), 3, 1, Qt::AlignLeft);
46
    mainLayout_->addWidget(new QLabel(tr("Slave Total:")), 4, 1, Qt::AlignLeft);
47
 
48
    mainLayout_->setColumnStretch(1, 10);
49
 
50
    connect(this, SIGNAL(signalUpdate()), this, SLOT(slotUpdate()));
51
    setMinimumWidth(400);
52
    setMinimumHeight(300);
53
}
54
 
55
PnpWidget::~PnpWidget() {
56
    igui_->removeFromQueue(static_cast<IGuiCmdHandler *>(this));
57
}
58
 
59
void PnpWidget::showEvent(QShowEvent *event_) {
60
    AttributeType cmd;
61
    char tstr[64];
62
 
63 4 sergeykhbr
    uint32_t addr_pnp = 0xFFFFF000;
64 3 sergeykhbr
    RISCV_sprintf(tstr, sizeof(tstr),
65
                "read 0x%08x %d", addr_pnp, sizeof(PnpMapType));
66
 
67
    cmd.make_string(tstr);
68
    igui_->registerCommand(static_cast<IGuiCmdHandler *>(this), &cmd, true);
69
 
70
    QWidget::showEvent(event_);
71
}
72
 
73
void PnpWidget::handleResponse(AttributeType *req, AttributeType *resp) {
74
    if (!resp->is_data()) {
75
        return;
76
    }
77
    memcpy(&pnp_, resp->data(), resp->size());
78
    emit signalUpdate();
79
}
80
 
81
void PnpWidget::slotUpdate() {
82
    char tstr[256];
83
    QPixmap pixmapBkg;
84
    QString targetText;
85
 
86
    switch (pnp_.tech.bits.tech) {
87
    case TECH_INFERRED:
88
        targetText = QString("Target: Simulation");
89
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[SIMULATION]);
90
        break;
91
    case TECH_VIRTEX6:
92
        targetText = QString("Target: ML605");
93
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[ML605]);
94
        break;
95
    case TECH_KINTEX7:
96
        targetText = QString("Target: KC705");
97
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[KC705]);
98
        break;
99
    default:
100
        targetText = QString("Target: --");
101
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[TARGET_Unknown]);
102
    }
103
    getLabel(WTarget_Name)->setText(targetText);
104
    getLabel(WTarget_image)->setPixmap(pixmapBkg);
105
 
106
    QFontMetrics fm(font());
107
    int h = pixmapBkg.size().height() + fm.height() + 50;
108
    int w = pixmapBkg.size().width();
109
 
110
    RISCV_sprintf(tstr, sizeof(tstr), "HW_ID: 0x%08x", pnp_.hwid);
111
    getLabel(WHW_ID)->setText(QString(tstr));
112
    w += 2 * fm.width(QString(tstr));
113
 
114
    RISCV_sprintf(tstr, sizeof(tstr), "FW_ID: 0x%08x", pnp_.fwid);
115
    getLabel(WFW_ID)->setText(QString(tstr));
116
 
117
    RISCV_sprintf(tstr, sizeof(tstr), "MST Total: %d", pnp_.tech.bits.mst_total);
118
    getLabel(WMasterTotal)->setText(QString(tstr));
119
 
120
    RISCV_sprintf(tstr, sizeof(tstr), "SLV Total: %d", pnp_.tech.bits.slv_total);
121
    getLabel(WSlaveTotal)->setText(QString(tstr));
122
 
123
    /**
124
     * Lines with index 5 and 6 are empty.
125
     */
126
    SlaveConfigType *pslv;
127
    MasterConfigType *pmst;
128
    uint32_t adr1, adr2;
129
    uint64_t did;
130
    int i = 0;
131
    iter_.buf = pnp_.cfg_table;
132
    while (iter_.item->slv.descr.bits.descrtype != PNP_CFG_TYPE_INVALID) {
133
        if (iter_.item->slv.descr.bits.descrtype == PNP_CFG_TYPE_MASTER) {
134
            pmst = &iter_.item->mst;
135
            did = pmst->did;
136
            RISCV_sprintf(tstr, sizeof(tstr), "mst: ", NULL);
137
        } else {
138
            pslv = &iter_.item->slv;
139
            adr1 = pslv->xaddr;
140
            adr2 = adr1 + ~pslv->xmask;
141
            did = pslv->did;
142
            RISCV_sprintf(tstr, sizeof(tstr), "slv: 0x%08x .. 0x%08x", adr1, adr2);
143
        }
144
        if ((W_Total + 2*i) < mainLayout_->count()) {
145
            getLabel(W_Total + 2*i)->setText(QString(tstr));
146
        } else {
147
            mainLayout_->addWidget(new QLabel(tstr), 7 + 2*i, 0, Qt::AlignLeft);
148
        }
149
 
150
        switch (did) {
151
        case MST_DID_EMPTY:
152
            RISCV_sprintf(tstr, sizeof(tstr), "Empty master slot", NULL);
153
            break;
154
        case RISCV_CACHED_TILELINK:
155
            RISCV_sprintf(tstr, sizeof(tstr), "Rocket CPU Cached tile", NULL);
156
            break;
157
        case RISCV_UNCACHED_TILELINK:
158
            RISCV_sprintf(tstr, sizeof(tstr), "Rocket CPU Uncached tile", NULL);
159
            break;
160
        case GAISLER_ETH_MAC_MASTER:
161
            RISCV_sprintf(tstr, sizeof(tstr), "Ethernet MAC with DMA interface", NULL);
162
            break;
163
        case GAISLER_ETH_EDCL_MASTER:
164
            RISCV_sprintf(tstr, sizeof(tstr), "EDCL debug with DMA interface", NULL);
165
            break;
166
        case RISCV_RIVER_CPU:
167
            RISCV_sprintf(tstr, sizeof(tstr), "Risc-V RIVER CPU", NULL);
168
            break;
169 4 sergeykhbr
        case GNSSSENSOR_UART_TAP:
170
            RISCV_sprintf(tstr, sizeof(tstr), "AXI UART TAP with DMA", NULL);
171
            break;
172 3 sergeykhbr
        case SLV_DID_EMPTY:
173
            RISCV_sprintf(tstr, sizeof(tstr), "Empty slave slot", NULL);
174
            break;
175
        case GNSSSENSOR_BOOTROM:
176
            RISCV_sprintf(tstr, sizeof(tstr), "Boot ROM", NULL);
177
            break;
178
        case GNSSSENSOR_FWIMAGE:
179
            RISCV_sprintf(tstr, sizeof(tstr), "FwImage ROM", NULL);
180
            break;
181
        case GNSSSENSOR_SRAM:
182
            RISCV_sprintf(tstr, sizeof(tstr), "SRAM", NULL);
183
            break;
184
        case GNSSSENSOR_IRQCTRL:
185
            RISCV_sprintf(tstr, sizeof(tstr), "Interrupt Controller", NULL);
186
            break;
187
        case GNSSSENSOR_FSE_V2_GPS:
188
            RISCV_sprintf(tstr, sizeof(tstr), "GPS Fast Search Engine", NULL);
189
            break;
190
        case GNSSSENSOR_UART:
191
            RISCV_sprintf(tstr, sizeof(tstr), "UART", NULL);
192
            break;
193
        case GNSSSENSOR_GPIO:
194
            RISCV_sprintf(tstr, sizeof(tstr), "GPIO/LEDs", NULL);
195
            break;
196
        case GNSSSENSOR_RF_CONTROL:
197
            RISCV_sprintf(tstr, sizeof(tstr), "RF fron-end Controller", NULL);
198
            break;
199
        case GNSSSENSOR_ENGINE_STUB:
200
            RISCV_sprintf(tstr, sizeof(tstr), "GNSS Enginge stub", NULL);
201
            break;
202
        case GNSSSENSOR_ETHMAC:
203
            RISCV_sprintf(tstr, sizeof(tstr), "Ethernet MAC 10/100", NULL);
204
            break;
205
        case GNSSSENSOR_DSU:
206
            RISCV_sprintf(tstr, sizeof(tstr), "Debug Support Unit", NULL);
207
            break;
208
        case GNSSSENSOR_GPTIMERS:
209
            RISCV_sprintf(tstr, sizeof(tstr), "GP Timers", NULL);
210
            break;
211
        case GNSSSENSOR_PNP:
212
            RISCV_sprintf(tstr, sizeof(tstr), "Plug'n'Play support", NULL);
213
            break;
214
        default:
215
            RISCV_sprintf(tstr, sizeof(tstr), "Unknown", NULL);
216
        }
217
        if ((W_Total + 2*i + 1) < mainLayout_->count()) {
218
            getLabel(W_Total + 2*i + 1)->setText(QString(tstr));
219
        } else {
220
            mainLayout_->addWidget(new QLabel(tstr), 7 + 2*i, 1, Qt::AlignLeft);
221
        }
222
 
223
        h += 8 + fm.height();
224
        i++;
225
        iter_.buf += iter_.item->mst.descr.bits.descrsize;
226
    }
227
 
228
    parent_->resize(QSize(w, h));
229
    update();
230
}
231
 
232
}  // namespace debugger

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.