added symbol to indicate buzzer connectivity

added timer to refresh connectivity
This commit is contained in:
Dorian Zedler 2018-08-02 18:10:08 +02:00
parent 51e3e543d9
commit 1518680397
7 changed files with 77 additions and 23 deletions

View file

@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
### Added
- added profiles dialog
- buzzer icon in the upper left corner indicating that the buzzer is connected
### Fixed
- start seqnece continues in a buggy way when cancel is being pressed while 'at your marks' or 'ready'
- bug that made the start sequence freeze if a delay of zero or lower or a non valid number was set as delay

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View file

@ -30,19 +30,29 @@ public:
private:
QNetworkAccessManager *networkManager;
QNetworkAccessManager *reloadNetworkManager;
QDateTime *date;
signals:
public slots:
ReturnData_t senddata(QUrl serviceUrl, int timeout);
ReturnData_t senddata(QNetworkAccessManager * NetMan, QUrl serviceUrl, int timeout);
//function to communicate with the buzzer
Q_INVOKABLE QList<double> gettimes(int timeout);
//function to get the times from the buzzer as a list with the normal network manager
Q_INVOKABLE bool connect();
Q_INVOKABLE bool calcoffset();
//function to connect to buzzer
Q_INVOKABLE bool calcoffset(QList<double> times);
//function that calculates the average time offset between the buzzer and the device
Q_INVOKABLE bool buzzer_triggered();
//function that checks ih the buzzer has been pushed since the last call of this function
Q_INVOKABLE bool start();
//syncs the buzzer and the base to make a start possible
Q_INVOKABLE double get(QString key);
//can return some things (offset, lastpressed, currtime, connection_progress, connected)
Q_INVOKABLE QString test();
Q_INVOKABLE bool refresh();
//refreshed the connection to the buzzer
};
#endif // BUZZERCONN_H

View file

@ -43,11 +43,13 @@ Window {
Timer {
//timer that refreshes the connection state to the buzzer
running: false
repeat: true
interval: 500
id: connectionRefreshTimer
running: root.state !== "RUNNING" && root.state !== "STARTING"
repeat: false
interval: 1000
onTriggered: {
console.log(_cppBuzzerConn.calcoffset())
_cppBuzzerConn.refresh()
connectionRefreshTimer.start()
}
}
@ -149,7 +151,7 @@ Window {
onPlayingChanged: {
if(!playing && root.state==="STARTING"){
root.startTime = _cppBuzzerConn.get("currtime")
_cppBuzzerConn.start()
root.currTime = _cppBuzzerConn.get("currtime")
time.text = ( ( root.currTime - root.startTime ) / 1000 ).toFixed(3) + " sec"
root.state = "RUNNING"
@ -181,17 +183,31 @@ Window {
}
}
Rectangle {
Image {
id: buzzerLogo
source: "qrc:/graphics/icons/buzzer_black.png"
mipmap: true
anchors {
top: parent.top
topMargin: 10
left: parent.left
leftMargin: 10
}
visible: _cppBuzzerConn.get("connected")===1
height: root.landscape()? root.height*0.1:root.width*0.1
width: height
radius: height*0.5
color: "#6efc0f"
Component.onCompleted: {
visible= _cppBuzzerConn.get("connected")===1
}
Timer {
interval: 100
running: true
repeat: true
onTriggered: {
buzzerLogo.visible= _cppBuzzerConn.get("connected")===1
}
}
}
Rectangle {

View file

@ -13,5 +13,6 @@
<file>sounds/at_marks_1.wav</file>
<file>sounds/ready_2.wav</file>
<file>sounds/at_marks_2.wav</file>
<file>graphics/icons/buzzer_black.png</file>
</qresource>
</RCC>

View file

@ -3,6 +3,7 @@
BuzzerConn::BuzzerConn(QObject *parent) : QObject(parent)
{
this->networkManager = new QNetworkAccessManager();
this->reloadNetworkManager = new QNetworkAccessManager();
this->date = new QDateTime;
this->latest_button_pressed = 0;
@ -15,30 +16,31 @@ bool BuzzerConn::connect()
QList<double> times = gettimes(1000);
qDebug() << times[0];
if(times[0] == 200.0){
this->connected = true;
this->latest_button_pressed = times[2];
for(int i=0;i<=100;i++){
this->connection_progress = i;
if(!calcoffset()){
if(!calcoffset(this->gettimes(1000))){
this->connection_progress = 100;
this->connected = false;
return(false);
}
}
this->connected = true;
return(true);
}
else{
this->connected = false;
return(false);
}
}
bool BuzzerConn::calcoffset()
bool BuzzerConn::calcoffset(QList<double> times)
{
QList<double> times = gettimes(1000);
if(times.length() != 3){
return(false);
}
if(times[0] == 200.0 && this->connected){
if(times[0] == 200.0){
this->latest_button_pressed = times[2];
double offset = date->currentMSecsSinceEpoch() - times[1];
if(this->latest_offsets.length()>=100){
this->latest_offsets.removeFirst();
@ -54,7 +56,7 @@ bool BuzzerConn::calcoffset()
return(true);
}
else {
this->connected = false;
//this->connected = false;
return(false);
}
}
@ -62,7 +64,7 @@ bool BuzzerConn::calcoffset()
QList<double> BuzzerConn::gettimes(int timeout)
{
QList<double> times;
ReturnData_t ret = senddata(QUrl("http://192.168.4.1"), timeout);
ReturnData_t ret = senddata(this->networkManager, QUrl("http://192.168.4.1"), timeout);
times.append(double(ret.status_code));
if(ret.status_code == 200){
@ -142,11 +144,35 @@ double BuzzerConn::get(QString key)
QString BuzzerConn::test()
{
ReturnData_t ret = this->senddata(QUrl("http://www.google.de"), 500);
ReturnData_t ret = this->senddata(this->networkManager, QUrl("http://www.google.de"), 500);
return(ret.text);
}
ReturnData_t BuzzerConn::senddata(QUrl serviceUrl, int timeout)
bool BuzzerConn::refresh()
{
if(!this->connected){
return(false);
}
QList<double> times;
ReturnData_t ret = senddata(this->reloadNetworkManager, QUrl("http://192.168.4.1"), 1000);
times.append(double(ret.status_code));
if(ret.status_code == 200){
ret.text.replace("\n","");
ret.text.replace("\r","");
QStringList times_cache = ret.text.split("<br>");
times.append(times_cache[0].toDouble());
times.append(times_cache[1].toDouble());
calcoffset(times);
return(true);
}
else{
this->connected = false;
return(false);
}
}
ReturnData_t BuzzerConn::senddata(QNetworkAccessManager * NetMan, QUrl serviceUrl, int timeout)
{
ReturnData_t ret; //this is a custom type to store the returned data
@ -166,10 +192,10 @@ ReturnData_t BuzzerConn::senddata(QUrl serviceUrl, int timeout)
timer.setSingleShot(true);
loop.connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
loop.connect(this->networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
loop.connect(NetMan, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
timer.start(timeout);
reply = this->networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
reply = NetMan->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
loop.exec();
timer.stop();