Signals and slots prepared to update content, received from UDP packet
This commit is contained in:
parent
3a71ee786e
commit
536779910e
@ -14,8 +14,12 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
this->server = new UdpLedServer ();
|
||||
|
||||
this->mOffscreenPanel = new QImage(DEFAULT_WIDTH + LED_DISTANCE, DEFAULT_HEIGHT + LED_DISTANCE, QImage::Format_RGB32);
|
||||
this->renderPanel();
|
||||
this->drawImage(this->mOffscreenPanel);
|
||||
for(int x=0; x < (PANEL_WIDTH * MAXIMUM_PANELSIZE); x++) {
|
||||
for(int y=0; y < PANEL_HEIGHT; y++) {
|
||||
setLED(x, y);
|
||||
}
|
||||
}
|
||||
updatePanel();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
@ -34,17 +38,21 @@ void MainWindow::drawImage(QImage *target) {
|
||||
this->ui->ledPanel->addWidget(graphicsView);
|
||||
}
|
||||
|
||||
void MainWindow::renderPanel(void) {
|
||||
this->mOffscreenPanel->fill(COLOR_BACKGROUND);
|
||||
|
||||
void MainWindow::setLED(uint8_t x, uint8_t y) {
|
||||
/* draw inital screen */
|
||||
QPainter painter(this->mOffscreenPanel);
|
||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||
painter.setPen(QPen(COLOR_FOREGROUND, 1));
|
||||
painter.setBrush(COLOR_FOREGROUND);
|
||||
for(int x=0; x < (PANEL_WIDTH * MAXIMUM_PANELSIZE); x++) {
|
||||
for(int y=0; y < PANEL_HEIGHT; y++) {
|
||||
painter.drawEllipse(LED_DIAMETER/2 + (x* LED_DISTANCE), LED_DIAMETER/2 + (y * LED_DISTANCE), LED_DIAMETER, LED_DIAMETER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::updatePanel(void) {
|
||||
this->drawImage(this->mOffscreenPanel);
|
||||
this->renderPanel();
|
||||
}
|
||||
|
||||
void MainWindow::renderPanel(void) {
|
||||
this->mOffscreenPanel->fill(COLOR_BACKGROUND);
|
||||
}
|
||||
|
@ -22,6 +22,10 @@ public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
public slots:
|
||||
void setLED(uint8_t x, uint8_t y);
|
||||
void updatePanel(void);
|
||||
|
||||
private:
|
||||
Ui::MainWindow *ui;
|
||||
UdpLedServer *server;
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include "settings.h"
|
||||
#include <QUdpSocket>
|
||||
#include <QNetworkDatagram>
|
||||
#include "mainwindow.h"
|
||||
|
||||
#define UDP_IMAGE_PORT 4242
|
||||
|
||||
@ -9,6 +10,15 @@ UdpLedServer ::UdpLedServer (QObject *parent)
|
||||
: QObject(parent)
|
||||
{
|
||||
initSocket();
|
||||
connect(this,
|
||||
&UdpLedServer::changeLEDstate,
|
||||
(MainWindow*) parent,
|
||||
&MainWindow::setLED);
|
||||
connect(this,
|
||||
&UdpLedServer::updatePanelContent,
|
||||
(MainWindow*) parent,
|
||||
&MainWindow::updatePanel);
|
||||
|
||||
}
|
||||
|
||||
void UdpLedServer ::initSocket()
|
||||
@ -31,6 +41,25 @@ void UdpLedServer ::readPendingDatagrams()
|
||||
|
||||
void UdpLedServer::processTheDatagram(QNetworkDatagram datagram) {
|
||||
if (datagram.isValid() && datagram.data().length() == PACKET_LENGTH) {
|
||||
qDebug() << "Received datagram:" << datagram.data().size();
|
||||
uint8_t brightness = datagram.data().at(PACKET_INDEX_BRIGHTNESS);
|
||||
int currentIndex = PACKET_INDEX_PANEL0;
|
||||
|
||||
uint16_t mask = 1;
|
||||
for(int x=0; x < (PANEL_WIDTH * MAXIMUM_PANELSIZE); x++) {
|
||||
for(int y=0; y < PANEL_HEIGHT; y++) {
|
||||
if (datagram.data().at(currentIndex) & mask) {
|
||||
this->changeLEDstate(x, y);
|
||||
}
|
||||
mask = (mask << 1);
|
||||
if (mask >= 256) {
|
||||
mask = 1;
|
||||
currentIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
this->updatePanelContent();
|
||||
|
||||
qDebug() << "Received datagram:" << brightness;
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -11,12 +11,15 @@ class UdpLedServer : public QObject
|
||||
public:
|
||||
explicit UdpLedServer (QObject *parent = nullptr);
|
||||
|
||||
|
||||
private:
|
||||
void initSocket();
|
||||
void readPendingDatagrams();
|
||||
QUdpSocket *mUdpSocket;
|
||||
void processTheDatagram(QNetworkDatagram datagram);
|
||||
|
||||
signals:
|
||||
void changeLEDstate(uint8_t x, uint8_t y);
|
||||
void updatePanelContent(void);
|
||||
};
|
||||
|
||||
#endif // UDPSERVER_H
|
||||
|
Loading…
Reference in New Issue
Block a user