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 3

Go to most recent revision | 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
    ISocInfo *info = static_cast<ISocInfo *>(igui_->getSocInfo());
64
    uint32_t addr_pnp = static_cast<int>(info->addressPlugAndPlay());
65
    RISCV_sprintf(tstr, sizeof(tstr),
66
                "read 0x%08x %d", addr_pnp, sizeof(PnpMapType));
67
 
68
    cmd.make_string(tstr);
69
    igui_->registerCommand(static_cast<IGuiCmdHandler *>(this), &cmd, true);
70
 
71
    QWidget::showEvent(event_);
72
}
73
 
74
void PnpWidget::handleResponse(AttributeType *req, AttributeType *resp) {
75
    if (!resp->is_data()) {
76
        return;
77
    }
78
    memcpy(&pnp_, resp->data(), resp->size());
79
    emit signalUpdate();
80
}
81
 
82
void PnpWidget::slotUpdate() {
83
    char tstr[256];
84
    QPixmap pixmapBkg;
85
    QString targetText;
86
 
87
    switch (pnp_.tech.bits.tech) {
88
    case TECH_INFERRED:
89
        targetText = QString("Target: Simulation");
90
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[SIMULATION]);
91
        break;
92
    case TECH_VIRTEX6:
93
        targetText = QString("Target: ML605");
94
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[ML605]);
95
        break;
96
    case TECH_KINTEX7:
97
        targetText = QString("Target: KC705");
98
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[KC705]);
99
        break;
100
    default:
101
        targetText = QString("Target: --");
102
        pixmapBkg = QPixmap(size()).fromImage(imgTarget_[TARGET_Unknown]);
103
    }
104
    getLabel(WTarget_Name)->setText(targetText);
105
    getLabel(WTarget_image)->setPixmap(pixmapBkg);
106
 
107
    QFontMetrics fm(font());
108
    int h = pixmapBkg.size().height() + fm.height() + 50;
109
    int w = pixmapBkg.size().width();
110
 
111
    RISCV_sprintf(tstr, sizeof(tstr), "HW_ID: 0x%08x", pnp_.hwid);
112
    getLabel(WHW_ID)->setText(QString(tstr));
113
    w += 2 * fm.width(QString(tstr));
114
 
115
    RISCV_sprintf(tstr, sizeof(tstr), "FW_ID: 0x%08x", pnp_.fwid);
116
    getLabel(WFW_ID)->setText(QString(tstr));
117
 
118
    RISCV_sprintf(tstr, sizeof(tstr), "MST Total: %d", pnp_.tech.bits.mst_total);
119
    getLabel(WMasterTotal)->setText(QString(tstr));
120
 
121
    RISCV_sprintf(tstr, sizeof(tstr), "SLV Total: %d", pnp_.tech.bits.slv_total);
122
    getLabel(WSlaveTotal)->setText(QString(tstr));
123
 
124
    /**
125
     * Lines with index 5 and 6 are empty.
126
     */
127
    SlaveConfigType *pslv;
128
    MasterConfigType *pmst;
129
    uint32_t adr1, adr2;
130
    uint64_t did;
131
    int i = 0;
132
    iter_.buf = pnp_.cfg_table;
133
    while (iter_.item->slv.descr.bits.descrtype != PNP_CFG_TYPE_INVALID) {
134
        if (iter_.item->slv.descr.bits.descrtype == PNP_CFG_TYPE_MASTER) {
135
            pmst = &iter_.item->mst;
136
            did = pmst->did;
137
            RISCV_sprintf(tstr, sizeof(tstr), "mst: ", NULL);
138
        } else {
139
            pslv = &iter_.item->slv;
140
            adr1 = pslv->xaddr;
141
            adr2 = adr1 + ~pslv->xmask;
142
            did = pslv->did;
143
            RISCV_sprintf(tstr, sizeof(tstr), "slv: 0x%08x .. 0x%08x", adr1, adr2);
144
        }
145
        if ((W_Total + 2*i) < mainLayout_->count()) {
146
            getLabel(W_Total + 2*i)->setText(QString(tstr));
147
        } else {
148
            mainLayout_->addWidget(new QLabel(tstr), 7 + 2*i, 0, Qt::AlignLeft);
149
        }
150
 
151
        switch (did) {
152
        case MST_DID_EMPTY:
153
            RISCV_sprintf(tstr, sizeof(tstr), "Empty master slot", NULL);
154
            break;
155
        case RISCV_CACHED_TILELINK:
156
            RISCV_sprintf(tstr, sizeof(tstr), "Rocket CPU Cached tile", NULL);
157
            break;
158
        case RISCV_UNCACHED_TILELINK:
159
            RISCV_sprintf(tstr, sizeof(tstr), "Rocket CPU Uncached tile", NULL);
160
            break;
161
        case GAISLER_ETH_MAC_MASTER:
162
            RISCV_sprintf(tstr, sizeof(tstr), "Ethernet MAC with DMA interface", NULL);
163
            break;
164
        case GAISLER_ETH_EDCL_MASTER:
165
            RISCV_sprintf(tstr, sizeof(tstr), "EDCL debug with DMA interface", NULL);
166
            break;
167
        case RISCV_RIVER_CPU:
168
            RISCV_sprintf(tstr, sizeof(tstr), "Risc-V RIVER CPU", NULL);
169
            break;
170
        case SLV_DID_EMPTY:
171
            RISCV_sprintf(tstr, sizeof(tstr), "Empty slave slot", NULL);
172
            break;
173
        case GNSSSENSOR_BOOTROM:
174
            RISCV_sprintf(tstr, sizeof(tstr), "Boot ROM", NULL);
175
            break;
176
        case GNSSSENSOR_FWIMAGE:
177
            RISCV_sprintf(tstr, sizeof(tstr), "FwImage ROM", NULL);
178
            break;
179
        case GNSSSENSOR_SRAM:
180
            RISCV_sprintf(tstr, sizeof(tstr), "SRAM", NULL);
181
            break;
182
        case GNSSSENSOR_IRQCTRL:
183
            RISCV_sprintf(tstr, sizeof(tstr), "Interrupt Controller", NULL);
184
            break;
185
        case GNSSSENSOR_FSE_V2_GPS:
186
            RISCV_sprintf(tstr, sizeof(tstr), "GPS Fast Search Engine", NULL);
187
            break;
188
        case GNSSSENSOR_UART:
189
            RISCV_sprintf(tstr, sizeof(tstr), "UART", NULL);
190
            break;
191
        case GNSSSENSOR_GPIO:
192
            RISCV_sprintf(tstr, sizeof(tstr), "GPIO/LEDs", NULL);
193
            break;
194
        case GNSSSENSOR_RF_CONTROL:
195
            RISCV_sprintf(tstr, sizeof(tstr), "RF fron-end Controller", NULL);
196
            break;
197
        case GNSSSENSOR_ENGINE_STUB:
198
            RISCV_sprintf(tstr, sizeof(tstr), "GNSS Enginge stub", NULL);
199
            break;
200
        case GNSSSENSOR_ETHMAC:
201
            RISCV_sprintf(tstr, sizeof(tstr), "Ethernet MAC 10/100", NULL);
202
            break;
203
        case GNSSSENSOR_DSU:
204
            RISCV_sprintf(tstr, sizeof(tstr), "Debug Support Unit", NULL);
205
            break;
206
        case GNSSSENSOR_GPTIMERS:
207
            RISCV_sprintf(tstr, sizeof(tstr), "GP Timers", NULL);
208
            break;
209
        case GNSSSENSOR_PNP:
210
            RISCV_sprintf(tstr, sizeof(tstr), "Plug'n'Play support", NULL);
211
            break;
212
        default:
213
            RISCV_sprintf(tstr, sizeof(tstr), "Unknown", NULL);
214
        }
215
        if ((W_Total + 2*i + 1) < mainLayout_->count()) {
216
            getLabel(W_Total + 2*i + 1)->setText(QString(tstr));
217
        } else {
218
            mainLayout_->addWidget(new QLabel(tstr), 7 + 2*i, 1, Qt::AlignLeft);
219
        }
220
 
221
        h += 8 + fm.height();
222
        i++;
223
        iter_.buf += iter_.item->mst.descr.bits.descrsize;
224
    }
225
 
226
    parent_->resize(QSize(w, h));
227
    update();
228
}
229
 
230
}  // namespace debugger

powered by: WebSVN 2.1.0

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