diff --git a/OpenRGBE131ReceiverDialog.cpp b/OpenRGBE131ReceiverDialog.cpp index 6f00f88..cf1bb1f 100644 --- a/OpenRGBE131ReceiverDialog.cpp +++ b/OpenRGBE131ReceiverDialog.cpp @@ -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(); } diff --git a/OpenRGBE131ReceiverDialog.h b/OpenRGBE131ReceiverDialog.h index 5d09fb7..105243c 100644 --- a/OpenRGBE131ReceiverDialog.h +++ b/OpenRGBE131ReceiverDialog.h @@ -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 diff --git a/OpenRGBE131ReceiverDialog.ui b/OpenRGBE131ReceiverDialog.ui index abd15fe..3b23322 100644 --- a/OpenRGBE131ReceiverDialog.ui +++ b/OpenRGBE131ReceiverDialog.ui @@ -20,7 +20,35 @@ Form + + + + Offline + + + + + + + Start Receiver + + + + + + + Stop Receiver + + + + + + Receiver Status: + + + + @@ -29,6 +57,20 @@ + + + + Packets Received: + + + + + + + 0 + + +