summaryrefslogtreecommitdiff
path: root/noncore/unsupported/gsmtool/gsmtool.cpp
Unidiff
Diffstat (limited to 'noncore/unsupported/gsmtool/gsmtool.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/unsupported/gsmtool/gsmtool.cpp208
1 files changed, 208 insertions, 0 deletions
diff --git a/noncore/unsupported/gsmtool/gsmtool.cpp b/noncore/unsupported/gsmtool/gsmtool.cpp
new file mode 100644
index 0000000..14ef368
--- a/dev/null
+++ b/noncore/unsupported/gsmtool/gsmtool.cpp
@@ -0,0 +1,208 @@
1#include "gsmtool.h"
2#include <qpushbutton.h>
3#include <qcombobox.h>
4#include <qlineedit.h>
5#include <qlabel.h>
6#include <qtabwidget.h>
7
8#include <termios.h>
9
10#include <gsmlib/gsm_me_ta.h>
11#include <gsmlib/gsm_unix_serial.h>
12
13using namespace gsmlib;
14
15
16/*
17 * Constructs a GSMTool which is a child of 'parent', with the
18 * name 'name' and widget flags set to 'f'
19 */
20GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl )
21 : GSMToolBase( parent, name, fl )
22{
23 devicelocked = 0;
24 me = NULL;
25 port = NULL;
26 setConnected(FALSE);
27 /* FIXME: Persistent settings for device/baudrate */
28 connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton()));
29 connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton()));
30 connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged()));
31 timerid = -1; // Is this not possible normally?
32}
33
34/*
35 * Destroys the object and frees any allocated resources
36 */
37GSMTool::~GSMTool()
38{
39 // no need to delete child widgets, Qt does it all for us
40 if (devicelocked)
41 unlockDevice();
42}
43const speed_t GSMTool::baudrates[12] = {
44 B300, B600, B1200, B2400, B4800, B9600, B19200,
45 B38400, B57600, B115200, B230400, B460800
46};
47
48int GSMTool::lockDevice( )
49{
50 devicelocked = 1;
51 /* FIXME */
52 return 0;
53}
54
55void GSMTool::unlockDevice( )
56{
57 devicelocked = 0;
58}
59
60void GSMTool::setConnected( bool conn )
61{
62 TabWidget2->setTabEnabled(tab_2, conn);
63 TabWidget2->setTabEnabled(tab_3, conn);
64 MfrLabel->setEnabled(conn);
65 MfrText->setEnabled(conn);
66 ModelLabel->setEnabled(conn);
67 ModelText->setEnabled(conn);
68 RevisionLabel->setEnabled(conn);
69 RevisionText->setEnabled(conn);
70 SerialLabel->setEnabled(conn);
71 SerialText->setEnabled(conn);
72
73}
74void GSMTool::doTabChanged()
75{
76 int index = TabWidget2->currentPageIndex();
77 qDebug("tab changed to %d", index);
78
79 if (index == 1) {
80 timerid = startTimer(5000);
81 timerEvent(NULL);
82 } else if (timerid != -1) {
83 killTimer(timerid);
84 timerid = -1;
85 }
86}
87
88void GSMTool::timerEvent( QTimerEvent * )
89{
90 OPInfo opi;
91
92 opi = me->getCurrentOPInfo();
93
94 if (opi._numericName == NOT_SET) {
95 NetStatText->setText("No network");
96 NetworkLabel->setEnabled(FALSE);
97 NetworkText->setEnabled(FALSE);
98 NetworkText->setText("");
99 SigStrText->setEnabled(FALSE);
100 SigStrText->setText("");
101 dB->setEnabled(FALSE);
102 SigStrLabel->setEnabled(FALSE);
103 } else {
104 // FIXME: Add 'roaming' info from AT+CFUN
105 qDebug("network");
106 NetStatText->setText("Registered");
107 NetworkLabel->setEnabled(TRUE);
108 NetworkText->setEnabled(TRUE);
109 NetworkText->setText(opi._longName.c_str());
110 SigStrText->setEnabled(TRUE);
111
112 qDebug("get sig str");
113 int csq = me->getSignalStrength();
114 if (csq == 0) {
115 SigStrText->setText("<= -113");
116 dB->setEnabled(TRUE);
117 SigStrLabel->setEnabled(TRUE);
118 } else if (csq == 99) {
119 SigStrText->setText("Unknown");
120 dB->setEnabled(FALSE);
121 SigStrLabel->setEnabled(FALSE);
122 } else {
123 char buf[6];
124 sprintf(buf, "%d", -113 + (2*csq));
125 SigStrText->setText(buf);
126 dB->setEnabled(TRUE);
127 SigStrLabel->setEnabled(TRUE);
128 }
129 }
130}
131
132void GSMTool::doScanButton()
133{
134 qDebug("ScanButton");
135}
136/*
137 * A simple slot... not very interesting.
138 */
139void GSMTool::doConnectButton()
140{
141 speed_t rate;
142 devicename = strdup(DeviceName->currentText().local8Bit().data());
143 rate = baudrates[BaudRate->currentItem()];
144
145 qDebug("Connect Button Pressed");
146 MfrText->setText("Opening...");
147 ModelText->setText("");
148 RevisionText->setText("");
149 SerialText->setText("");
150
151 setConnected(FALSE);
152 if (me) {
153 // delete me;
154 me = NULL;
155 }
156 if (port) {
157 // delete port;
158 port = NULL;
159 }
160
161 if (lockDevice()) {
162 qDebug("lockDevice() failed\n");
163 };
164
165 qDebug("Device name is %s\n", devicename);
166
167 try {
168 port = new UnixSerialPort(devicename, rate, DEFAULT_INIT_STRING, 0);
169 } catch (GsmException) {
170 qDebug("port failed");
171 return;
172 }
173 MfrText->setText("Initialising...");
174 qDebug("got port");
175 try {
176 me = new MeTa(port);
177 } catch (GsmException) {
178 qDebug("meta failed");
179 delete port;
180 port = NULL;
181 unlockDevice();
182 return;
183 }
184
185 qDebug("Opened");
186
187 MEInfo ifo;
188
189 MfrText->setText("Querying...");
190
191 try {
192 ifo = me->getMEInfo();
193 } catch (GsmException) {
194 qDebug("getMEInfo failed");
195 delete me;
196 me = NULL;
197 delete port;
198 port = NULL;
199 unlockDevice();
200 return;
201 }
202
203 MfrText->setText(ifo._manufacturer.c_str());
204 ModelText->setText(ifo._model.c_str());
205 RevisionText->setText(ifo._revision.c_str());
206 SerialText->setText(ifo._serialNumber.c_str());
207 setConnected(TRUE);
208}