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->server = new UdpLedServer ();
|
||||||
|
|
||||||
this->mOffscreenPanel = new QImage(DEFAULT_WIDTH + LED_DISTANCE, DEFAULT_HEIGHT + LED_DISTANCE, QImage::Format_RGB32);
|
this->mOffscreenPanel = new QImage(DEFAULT_WIDTH + LED_DISTANCE, DEFAULT_HEIGHT + LED_DISTANCE, QImage::Format_RGB32);
|
||||||
this->renderPanel();
|
for(int x=0; x < (PANEL_WIDTH * MAXIMUM_PANELSIZE); x++) {
|
||||||
this->drawImage(this->mOffscreenPanel);
|
for(int y=0; y < PANEL_HEIGHT; y++) {
|
||||||
|
setLED(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updatePanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
@ -34,17 +38,21 @@ void MainWindow::drawImage(QImage *target) {
|
|||||||
this->ui->ledPanel->addWidget(graphicsView);
|
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 */
|
/* draw inital screen */
|
||||||
QPainter painter(this->mOffscreenPanel);
|
QPainter painter(this->mOffscreenPanel);
|
||||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
painter.setPen(QPen(COLOR_FOREGROUND, 1));
|
painter.setPen(QPen(COLOR_FOREGROUND, 1));
|
||||||
painter.setBrush(COLOR_FOREGROUND);
|
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);
|
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(QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setLED(uint8_t x, uint8_t y);
|
||||||
|
void updatePanel(void);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::MainWindow *ui;
|
Ui::MainWindow *ui;
|
||||||
UdpLedServer *server;
|
UdpLedServer *server;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include <QUdpSocket>
|
#include <QUdpSocket>
|
||||||
#include <QNetworkDatagram>
|
#include <QNetworkDatagram>
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
#define UDP_IMAGE_PORT 4242
|
#define UDP_IMAGE_PORT 4242
|
||||||
|
|
||||||
@ -9,6 +10,15 @@ UdpLedServer ::UdpLedServer (QObject *parent)
|
|||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
initSocket();
|
initSocket();
|
||||||
|
connect(this,
|
||||||
|
&UdpLedServer::changeLEDstate,
|
||||||
|
(MainWindow*) parent,
|
||||||
|
&MainWindow::setLED);
|
||||||
|
connect(this,
|
||||||
|
&UdpLedServer::updatePanelContent,
|
||||||
|
(MainWindow*) parent,
|
||||||
|
&MainWindow::updatePanel);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void UdpLedServer ::initSocket()
|
void UdpLedServer ::initSocket()
|
||||||
@ -31,6 +41,25 @@ void UdpLedServer ::readPendingDatagrams()
|
|||||||
|
|
||||||
void UdpLedServer::processTheDatagram(QNetworkDatagram datagram) {
|
void UdpLedServer::processTheDatagram(QNetworkDatagram datagram) {
|
||||||
if (datagram.isValid() && datagram.data().length() == PACKET_LENGTH) {
|
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:
|
public:
|
||||||
explicit UdpLedServer (QObject *parent = nullptr);
|
explicit UdpLedServer (QObject *parent = nullptr);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initSocket();
|
void initSocket();
|
||||||
void readPendingDatagrams();
|
void readPendingDatagrams();
|
||||||
QUdpSocket *mUdpSocket;
|
QUdpSocket *mUdpSocket;
|
||||||
void processTheDatagram(QNetworkDatagram datagram);
|
void processTheDatagram(QNetworkDatagram datagram);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void changeLEDstate(uint8_t x, uint8_t y);
|
||||||
|
void updatePanelContent(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // UDPSERVER_H
|
#endif // UDPSERVER_H
|
||||||
|
Loading…
Reference in New Issue
Block a user