author | dwmw2 <dwmw2> | 2002-04-02 00:02:59 (UTC) |
---|---|---|
committer | dwmw2 <dwmw2> | 2002-04-02 00:02:59 (UTC) |
commit | 2314955ff0127a570e25e7e7a10ce4d17a2de0e2 (patch) (unidiff) | |
tree | c19c960b4efa48c2238fefe743a28de418d382da /noncore/unsupported/gsmtool/gsmtool.cpp | |
parent | dd9e49cca8cd9a32a52edfc6b6a0683579612a75 (diff) | |
download | opie-2314955ff0127a570e25e7e7a10ce4d17a2de0e2.zip opie-2314955ff0127a570e25e7e7a10ce4d17a2de0e2.tar.gz opie-2314955ff0127a570e25e7e7a10ce4d17a2de0e2.tar.bz2 |
Start of GSM app. Still not decided what to do with gsmlib. Needs icon.
Diffstat (limited to 'noncore/unsupported/gsmtool/gsmtool.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/unsupported/gsmtool/gsmtool.cpp | 208 |
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 | |||
13 | using 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 | */ | ||
20 | GSMTool::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 | */ | ||
37 | GSMTool::~GSMTool() | ||
38 | { | ||
39 | // no need to delete child widgets, Qt does it all for us | ||
40 | if (devicelocked) | ||
41 | unlockDevice(); | ||
42 | } | ||
43 | const speed_t GSMTool::baudrates[12] = { | ||
44 | B300, B600, B1200, B2400, B4800, B9600, B19200, | ||
45 | B38400, B57600, B115200, B230400, B460800 | ||
46 | }; | ||
47 | |||
48 | int GSMTool::lockDevice( ) | ||
49 | { | ||
50 | devicelocked = 1; | ||
51 | /* FIXME */ | ||
52 | return 0; | ||
53 | } | ||
54 | |||
55 | void GSMTool::unlockDevice( ) | ||
56 | { | ||
57 | devicelocked = 0; | ||
58 | } | ||
59 | |||
60 | void 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 | } | ||
74 | void 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 | |||
88 | void 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 | |||
132 | void GSMTool::doScanButton() | ||
133 | { | ||
134 | qDebug("ScanButton"); | ||
135 | } | ||
136 | /* | ||
137 | * A simple slot... not very interesting. | ||
138 | */ | ||
139 | void 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 | } | ||