Signals and slots prepared to update content, received from UDP packet

This commit is contained in:
Ollo 2023-08-15 14:38:39 +02:00
parent 3a71ee786e
commit 536779910e
4 changed files with 55 additions and 11 deletions

View File

@ -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);
}

View File

@ -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;

View File

@ -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;
}
}

View File

@ -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