Add buttons to start and stop receiver, add online status and received packet count (not yet implemented)

This commit is contained in:
Adam Honse 2021-01-06 12:54:33 -06:00
parent b7fbb150fb
commit 14f7657ddf
3 changed files with 120 additions and 9 deletions

View file

@ -38,6 +38,11 @@ OpenRGBE131ReceiverDialog::OpenRGBE131ReceiverDialog(ResourceManager* manager, Q
\*-------------------------------------------------*/
resource_manager->RegisterDeviceListChangeCallback(DeviceListChanged_Callback, this);
resource_manager->RegisterDetectionProgressCallback(DeviceListChanged_Callback, this);
online = false;
received_count = 0;
UpdateOnlineStatus();
}
OpenRGBE131ReceiverDialog::~OpenRGBE131ReceiverDialog()
@ -119,9 +124,6 @@ void OpenRGBE131ReceiverDialog::DeviceListChanged()
}
ui->E131TreeView->expandAll();
// Start the receiver thread
E131ReceiverThread = new std::thread(&OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction, this);
}
}
@ -132,6 +134,11 @@ void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
e131_error_t error;
uint8_t last_seq = 0x00;
/*-----------------------------------------------------*\
| Clear online status |
\*-----------------------------------------------------*/
online = false;
/*-----------------------------------------------------*\
| Create a socket for E1.31 |
\*-----------------------------------------------------*/
@ -164,15 +171,23 @@ void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
}
}
/*-----------------------------------------------------*\
| Set online status |
\*-----------------------------------------------------*/
online = true;
UpdateOnlineStatus();
/*-----------------------------------------------------*\
| Loop to receive E1.31 packets |
\*-----------------------------------------------------*/
while(1)
while(online)
{
if(e131_recv(sockfd, &packet) < 0)
{
printf("Receive error\r\n");
return;
online = false;
}
if((error = e131_pkt_validate(&packet)) != E131_ERR_NONE)
@ -188,6 +203,8 @@ void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
// continue;
// }
received_count++;
last_seq = packet.frame.seq_number;
/*-------------------------------------------------*\
@ -233,4 +250,46 @@ void OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction()
}
}
}
closesocket(sockfd);
UpdateOnlineStatus();
}
void OpenRGBE131ReceiverDialog::UpdateOnlineStatus()
{
if(online)
{
ui->ReceiverStatusValue->setText("Online");
ui->ButtonStartReceiver->setEnabled(false);
ui->ButtonStopReceiver->setEnabled(true);
}
else
{
ui->ReceiverStatusValue->setText("Offline");
received_count = 0;
ui->PacketsReceivedValue->setText(QString::number(received_count));
ui->ButtonStartReceiver->setEnabled(true);
ui->ButtonStopReceiver->setEnabled(false);
}
}
void OpenRGBE131ReceiverDialog::on_ButtonStartReceiver_clicked()
{
if(!online)
{
// Start the receiver thread
E131ReceiverThread = new std::thread(&OpenRGBE131ReceiverDialog::E131ReceiverThreadFunction, this);
}
}
void OpenRGBE131ReceiverDialog::on_ButtonStopReceiver_clicked()
{
online = false;
UpdateOnlineStatus();
}

View file

@ -20,11 +20,21 @@ public:
void DeviceListChanged();
void E131ReceiverThreadFunction();
private:
ResourceManager* resource_manager;
Ui::OpenRGBE131ReceiverDialog *ui;
private slots:
void on_ButtonStartReceiver_clicked();
std::thread* E131ReceiverThread;
void on_ButtonStopReceiver_clicked();
private:
ResourceManager* resource_manager;
Ui::OpenRGBE131ReceiverDialog *ui;
bool online;
unsigned long received_count;
std::thread* E131ReceiverThread;
void UpdateOnlineStatus();
};
#endif // OPENRGBE131RECEIVERDIALOG_H

View file

@ -20,7 +20,35 @@
<string>Form</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QLabel" name="ReceiverStatusValue">
<property name="text">
<string>Offline</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="ButtonStartReceiver">
<property name="text">
<string>Start Receiver</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="ButtonStopReceiver">
<property name="text">
<string>Stop Receiver</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="ReceiverStatusLabel">
<property name="text">
<string>Receiver Status:</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="4">
<widget class="QTreeWidget" name="E131TreeView">
<column>
<property name="text">
@ -29,6 +57,20 @@
</column>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="PacketsReceivedLabel">
<property name="text">
<string>Packets Received:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLabel" name="PacketsReceivedValue">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>