summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am2
-rw-r--r--src/cprlisten.cc55
-rw-r--r--src/cprlisten.h15
-rw-r--r--src/cprquerydialog.cc37
-rw-r--r--src/cprquerydialog.h7
5 files changed, 98 insertions, 18 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index fa10241..37b0f98 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -19,6 +19,8 @@ miav_LDADD = $(shell ../tools/MocList o) $(QT_LIBS) $(IEC61883_LIBS) \
$(SDL_LIBS) $(DV_LIBS)
miav_SOURCES = \
+ aa_socket.cc \
+ cprlisten.cc \
aboutwindow.cc \
camera.cc \
cprquerydialog.cc \
diff --git a/src/cprlisten.cc b/src/cprlisten.cc
index 9a816d2..4cf8670 100644
--- a/src/cprlisten.cc
+++ b/src/cprlisten.cc
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: tab; c-basic-offset: 2 -*- */
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
* cprlisten.cc
*
@@ -26,36 +26,71 @@
*/
#include "cprlisten.h"
-#include "socket.h"
+#include "aa_socket.h"
#include <iostream>
#include <string>
+#include <stdio.h>
+
using namespace std;
+#define MAGIC_STOP_STRING "SHUTTHEFUCKUP"
+
CPRListen::CPRListen(unsigned short port)
{
this->port = port;
cpr = "N/A";
+ cprchanged = false;
+ running = true;
}
CPRListen::~CPRListen()
{
}
+void CPRListen::stop()
+{
+ running = false;
+ try {
+ AASocket socket;
+ socket.connect("localhost", port);
+ socket.send_string(MAGIC_STOP_STRING);
+ } catch(Network_error &e) {
+ //info->error("In stop(): %s.", e.error.c_str());
+ }
+}
+
void CPRListen::thread_main()
{
- while(1) {
+ //printf("Listening for CPRs.\n");
+ while(running) {
try {
- Socket socket;
+ string newcpr;
+ AASocket socket;
socket.listen(port);
- mutex.lock();
- cpr = socket.receive_string();
- mutex.unlock();
- cerr << "Got CPR: " << cpr << endl;
+ newcpr = socket.receive_string();
+
+ if(newcpr == MAGIC_STOP_STRING) {
+ running = false;
+ } else {
+ mutex.lock();
+ cprchanged = true;
+ cpr = newcpr;
+ mutex.unlock();
+ //printf("Got CPR: %s.\n", cpr.c_str());
+ }
+
} catch(Network_error &e) {
- cerr << e.error << endl;
+ //printf("In thread_main(): %s.\n", e.error.c_str());
+ running = false;
}
}
+ //printf("Stopped listening for CPRs.\n");
+}
+
+bool CPRListen::cprChanged()
+{
+ return cprchanged;
}
string CPRListen::getCpr()
@@ -66,5 +101,7 @@ string CPRListen::getCpr()
cpr_copy = cpr;
mutex.unlock();
+ cprchanged = false;
+
return cpr_copy;
}
diff --git a/src/cprlisten.h b/src/cprlisten.h
index 57551f5..d1862f8 100644
--- a/src/cprlisten.h
+++ b/src/cprlisten.h
@@ -1,4 +1,4 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: tab; c-basic-offset: 2 -*- */
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/***************************************************************************
* cprlisten.h
*
@@ -31,20 +31,29 @@
#include <string>
#include "thread.h"
-#include "mutex.h"
+#include <QMutex>
+
+#include "aa_socket.h"
class CPRListen: public Thread {
public:
CPRListen(unsigned short port);
~CPRListen();
+ bool cprChanged();
std::string getCpr();
void thread_main();
+ void stop(); // Stops the call to listen
+
private:
+ volatile bool running;
+ AASocket *socket;
+
+ bool cprchanged;
unsigned short port;
std::string cpr;
- Mutex mutex;
+ QMutex mutex;
};
#endif/*__AASIMON_FRAMEWORK_CPRLISTEN_H__*/
diff --git a/src/cprquerydialog.cc b/src/cprquerydialog.cc
index 8ea0986..c58a8ed 100644
--- a/src/cprquerydialog.cc
+++ b/src/cprquerydialog.cc
@@ -60,7 +60,8 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr,
cprSocket = new QTcpSocket(this);
connect(cprSocket, SIGNAL(readyRead()), SLOT(cprSocket_readyRead()));
connect(cprSocket, SIGNAL(connected()), SLOT(cprSocket_connected()));
- connect(cprSocket, SIGNAL(error(int)), SLOT(cprSocket_error(int)));
+ connect(cprSocket, SIGNAL(error(QAbstractSocket::SocketError)),
+ SLOT(cprSocket_error(QAbstractSocket::SocketError)));
lbl_cpr->setText("Indtast CPR");
@@ -113,11 +114,35 @@ CPRQueryDialog::CPRQueryDialog(QLabel *lcpr,
connect(bca,SIGNAL(clicked()), SLOT(b_c_clicked()));
this->move(175,150);
+
+ listen = new CPRListen(config->readInt("cprlisten_port"));
+ listen_timer = new QTimer(this);
+ connect(listen_timer, SIGNAL(timeout()), SLOT(listen_timeout()));
+ listen->run();
+ listen_timer->start(500); // Check every 500 ms
+
show();
}
CPRQueryDialog::~CPRQueryDialog()
{
+ // Cleanup after cpr listen
+ listen->stop();
+ // listen->wait_stop();
+ delete listen;
+}
+
+void CPRQueryDialog::listen_timeout()
+{
+ string newcpr;
+ if(listen->cprChanged()) {
+ char newcpr_buf[32];
+ newcpr = listen->getCpr();
+ sprintf(newcpr_buf, "%s-%s", newcpr.substr(0,6).c_str(), newcpr.substr(6,4).c_str());
+ //printf("cprbuf[%s]\n", newcpr_buf);
+ lbl_cpr->setText(newcpr_buf);
+ verifycpr(newcpr_buf);
+ }
}
/**
@@ -159,7 +184,7 @@ void CPRQueryDialog::b_c_clicked() { remove_all();}
void CPRQueryDialog::b_clicked(int value)
{
- printf("%d\n", value);
+ //printf("%d\n", value);
switch(value) {
case 10:
if (digits>0) digits--;
@@ -212,9 +237,9 @@ void CPRQueryDialog::remove_all()
*/
void CPRQueryDialog::insert_digit(int value)
{
- printf("insert_digit(%d)\n", value);
+ //printf("insert_digit(%d)\n", value);
char temp[3];
- printf("strlen(cpr) = %d cpr: '%s'\n", strlen(cpr), cpr);
+ //printf("strlen(cpr) = %d cpr: '%s'\n", strlen(cpr), cpr);
switch(strlen(cpr)) {
case 5: // Automaticaly add a hyphen after the sixth digit
sprintf(temp, "%d-", value);
@@ -327,8 +352,10 @@ int CPRQueryDialog::test_cpr(const char *s)
* Called if an error occurres in the corsocket connection.
* Writes out the appropriate error message.
*/
-void CPRQueryDialog::cprSocket_error(int errnum)
+void CPRQueryDialog::cprSocket_error(QAbstractSocket::SocketError err)
{
+ (void)err;
+
QString msg = QString("cprSocket encountered an error: ");
timer->stop();
diff --git a/src/cprquerydialog.h b/src/cprquerydialog.h
index 7a84f5e..da42d09 100644
--- a/src/cprquerydialog.h
+++ b/src/cprquerydialog.h
@@ -82,6 +82,7 @@ using namespace std;
#include <QStatusBar>
#include "messagebox.h"
+#include "cprlisten.h"
class CPRQueryDialog : public QDialog {
Q_OBJECT
@@ -101,12 +102,16 @@ public slots:
void insert_digit(int value);
void cprSocket_readyRead();
void cprSocket_connected();
- void cprSocket_error(int errnum);
+ void cprSocket_error(QAbstractSocket::SocketError err);
void cprSocket_timeout();
+ void listen_timeout();
private:
QStatusBar *statusbar;
+ CPRListen *listen;
+ QTimer *listen_timer;
+
QLabel *lbl_cpr;
QLabel *lbl_name;