-rw-r--r-- | noncore/unsupported/gsmtool/gsmtool.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/noncore/unsupported/gsmtool/gsmtool.cpp b/noncore/unsupported/gsmtool/gsmtool.cpp index e6122ad..5940b0e 100644 --- a/noncore/unsupported/gsmtool/gsmtool.cpp +++ b/noncore/unsupported/gsmtool/gsmtool.cpp | |||
@@ -1,269 +1,270 @@ | |||
1 | #include "gsmtool.h" | 1 | #include "gsmtool.h" |
2 | #include <qpushbutton.h> | 2 | #include <qpushbutton.h> |
3 | #include <qcombobox.h> | 3 | #include <qcombobox.h> |
4 | #include <qlineedit.h> | 4 | #include <qlineedit.h> |
5 | #include <qlabel.h> | 5 | #include <qlabel.h> |
6 | #include <qtabwidget.h> | 6 | #include <qtabwidget.h> |
7 | #include <qlistview.h> | 7 | #include <qlistview.h> |
8 | #include <qtextbrowser.h> | 8 | #include <qtextbrowser.h> |
9 | #include <qmultilineedit.h> | 9 | #include <qmultilineedit.h> |
10 | 10 | ||
11 | #include <termios.h> | 11 | #include <termios.h> |
12 | 12 | ||
13 | #include <gsmlib/gsm_me_ta.h> | 13 | #include <gsmlib/gsm_me_ta.h> |
14 | #include <gsmlib/gsm_unix_serial.h> | 14 | #include <gsmlib/gsm_unix_serial.h> |
15 | #include <gsmlib/gsm_sms.h> | 15 | #include <gsmlib/gsm_sms.h> |
16 | #include <gsmlib/gsm_sorted_sms_store.h> | 16 | #include <gsmlib/gsm_sorted_sms_store.h> |
17 | 17 | ||
18 | using namespace gsmlib; | 18 | using namespace gsmlib; |
19 | 19 | ||
20 | 20 | ||
21 | /* | 21 | /* |
22 | * Constructs a GSMTool which is a child of 'parent', with the | 22 | * Constructs a GSMTool which is a child of 'parent', with the |
23 | * name 'name' and widget flags set to 'f' | 23 | * name 'name' and widget flags set to 'f' |
24 | */ | 24 | */ |
25 | GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl ) | 25 | GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl ) |
26 | : GSMToolBase( parent, name, fl ) | 26 | : GSMToolBase( parent, name, fl ) |
27 | { | 27 | { |
28 | devicelocked = 0; | 28 | devicelocked = 0; |
29 | me = NULL; | 29 | me = NULL; |
30 | sms_store = NULL; | 30 | sms_store = NULL; |
31 | setConnected(FALSE); | 31 | setConnected(FALSE); |
32 | /* FIXME: Persistent settings for device/baudrate */ | 32 | /* FIXME: Persistent settings for device/baudrate */ |
33 | connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton())); | 33 | connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton())); |
34 | connect(SMSDeleteButton, SIGNAL(clicked()), this, SLOT(doSMSDeleteButton())); | 34 | connect(SMSDeleteButton, SIGNAL(clicked()), this, SLOT(doSMSDeleteButton())); |
35 | connect(SMSSendButton, SIGNAL(clicked()), this, SLOT(doSMSSendButton())); | 35 | connect(SMSSendButton, SIGNAL(clicked()), this, SLOT(doSMSSendButton())); |
36 | connect(NewSMSClearButton, SIGNAL(clicked()), this, SLOT(doNewSMSClearButton())); | 36 | connect(NewSMSClearButton, SIGNAL(clicked()), this, SLOT(doNewSMSClearButton())); |
37 | connect(NewSMSSaveButton, SIGNAL(clicked()), this, SLOT(doNewSMSSaveButton())); | 37 | connect(NewSMSSaveButton, SIGNAL(clicked()), this, SLOT(doNewSMSSaveButton())); |
38 | connect(NewSMSSendButton, SIGNAL(clicked()), this, SLOT(doNewSMSSendButton())); | 38 | connect(NewSMSSendButton, SIGNAL(clicked()), this, SLOT(doNewSMSSendButton())); |
39 | connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton())); | 39 | connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton())); |
40 | connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged())); | 40 | connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged())); |
41 | connect(SMSStoreList, SIGNAL(activated(int)), this, SLOT(doSMSStoreChanged())); | 41 | connect(SMSStoreList, SIGNAL(activated(int)), this, SLOT(doSMSStoreChanged())); |
42 | connect(SMSViewType, SIGNAL(activated(int)), this, SLOT(doSMSTypeChanged())); | 42 | connect(SMSViewType, SIGNAL(activated(int)), this, SLOT(doSMSTypeChanged())); |
43 | connect(SMSList, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(doSelectedSMSChanged(QListViewItem *))); | 43 | connect(SMSList, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(doSelectedSMSChanged(QListViewItem *))); |
44 | timerid = -1; // Is this not possible normally? | 44 | timerid = -1; // Is this not possible normally? |
45 | } | 45 | } |
46 | 46 | ||
47 | /* | 47 | /* |
48 | * Destroys the object and frees any allocated resources | 48 | * Destroys the object and frees any allocated resources |
49 | */ | 49 | */ |
50 | GSMTool::~GSMTool() | 50 | GSMTool::~GSMTool() |
51 | { | 51 | { |
52 | // no need to delete child widgets, Qt does it all for us | 52 | // no need to delete child widgets, Qt does it all for us |
53 | if (devicelocked) | 53 | if (devicelocked) |
54 | unlockDevice(); | 54 | unlockDevice(); |
55 | } | 55 | } |
56 | const speed_t GSMTool::baudrates[12] = { | 56 | const speed_t GSMTool::baudrates[12] = { |
57 | B300, B600, B1200, B2400, B4800, B9600, B19200, | 57 | B300, B600, B1200, B2400, B4800, B9600, B19200, |
58 | B38400, B57600, B115200, B230400, B460800 | 58 | B38400, B57600, B115200, B230400, B460800 |
59 | }; | 59 | }; |
60 | 60 | ||
61 | int GSMTool::lockDevice( ) | 61 | int GSMTool::lockDevice( ) |
62 | { | 62 | { |
63 | devicelocked = 1; | 63 | devicelocked = 1; |
64 | /* FIXME */ | 64 | /* FIXME */ |
65 | return 0; | 65 | return 0; |
66 | } | 66 | } |
67 | 67 | ||
68 | void GSMTool::unlockDevice( ) | 68 | void GSMTool::unlockDevice( ) |
69 | { | 69 | { |
70 | devicelocked = 0; | 70 | devicelocked = 0; |
71 | } | 71 | } |
72 | 72 | ||
73 | void GSMTool::setConnected( bool conn ) | 73 | void GSMTool::setConnected( bool conn ) |
74 | { | 74 | { |
75 | TabWidget2->setTabEnabled(tab_2, conn); | 75 | TabWidget2->setTabEnabled(tab_2, conn); |
76 | TabWidget2->setTabEnabled(tab_3, conn); | 76 | TabWidget2->setTabEnabled(tab_3, conn); |
77 | TabWidget2->setTabEnabled(tab_4, conn); | 77 | //TabWidget2->setTabEnabled(tab_4, conn); |
78 | NewSMSSendButton->setEnabled(conn); | ||
78 | MfrLabel->setEnabled(conn); | 79 | MfrLabel->setEnabled(conn); |
79 | MfrText->setEnabled(conn); | 80 | MfrText->setEnabled(conn); |
80 | ModelLabel->setEnabled(conn); | 81 | ModelLabel->setEnabled(conn); |
81 | ModelText->setEnabled(conn); | 82 | ModelText->setEnabled(conn); |
82 | RevisionLabel->setEnabled(conn); | 83 | RevisionLabel->setEnabled(conn); |
83 | RevisionText->setEnabled(conn); | 84 | RevisionText->setEnabled(conn); |
84 | SerialLabel->setEnabled(conn); | 85 | SerialLabel->setEnabled(conn); |
85 | SerialText->setEnabled(conn); | 86 | SerialText->setEnabled(conn); |
86 | 87 | ||
87 | } | 88 | } |
88 | void GSMTool::doTabChanged() | 89 | void GSMTool::doTabChanged() |
89 | { | 90 | { |
90 | int index = TabWidget2->currentPageIndex(); | 91 | int index = TabWidget2->currentPageIndex(); |
91 | qDebug("tab changed to %d", index); | 92 | qDebug("tab changed to %d", index); |
92 | 93 | ||
93 | if (index == 1) { | 94 | if (index == 1) { |
94 | timerid = startTimer(5000); | 95 | timerid = startTimer(5000); |
95 | timerEvent(NULL); | 96 | timerEvent(NULL); |
96 | } else if (timerid != -1) { | 97 | } else if (timerid != -1) { |
97 | killTimer(timerid); | 98 | killTimer(timerid); |
98 | timerid = -1; | 99 | timerid = -1; |
99 | } | 100 | } |
100 | } | 101 | } |
101 | 102 | ||
102 | void GSMTool::timerEvent( QTimerEvent * ) | 103 | void GSMTool::timerEvent( QTimerEvent * ) |
103 | { | 104 | { |
104 | OPInfo opi; | 105 | OPInfo opi; |
105 | 106 | ||
106 | opi = me->getCurrentOPInfo(); | 107 | opi = me->getCurrentOPInfo(); |
107 | 108 | ||
108 | if (opi._numericName == NOT_SET) { | 109 | if (opi._numericName == NOT_SET) { |
109 | NetStatText->setText("No network"); | 110 | NetStatText->setText("No network"); |
110 | NetworkLabel->setEnabled(FALSE); | 111 | NetworkLabel->setEnabled(FALSE); |
111 | NetworkText->setEnabled(FALSE); | 112 | NetworkText->setEnabled(FALSE); |
112 | NetworkText->setText(""); | 113 | NetworkText->setText(""); |
113 | SigStrText->setEnabled(FALSE); | 114 | SigStrText->setEnabled(FALSE); |
114 | SigStrText->setText(""); | 115 | SigStrText->setText(""); |
115 | dB->setEnabled(FALSE); | 116 | dB->setEnabled(FALSE); |
116 | SigStrLabel->setEnabled(FALSE); | 117 | SigStrLabel->setEnabled(FALSE); |
117 | } else { | 118 | } else { |
118 | // FIXME: Add 'roaming' info from AT+CFUN | 119 | // FIXME: Add 'roaming' info from AT+CFUN |
119 | qDebug("network"); | 120 | qDebug("network"); |
120 | NetStatText->setText("Registered"); | 121 | NetStatText->setText("Registered"); |
121 | NetworkLabel->setEnabled(TRUE); | 122 | NetworkLabel->setEnabled(TRUE); |
122 | NetworkText->setEnabled(TRUE); | 123 | NetworkText->setEnabled(TRUE); |
123 | NetworkText->setText(opi._longName.c_str()); | 124 | NetworkText->setText(opi._longName.c_str()); |
124 | SigStrText->setEnabled(TRUE); | 125 | SigStrText->setEnabled(TRUE); |
125 | 126 | ||
126 | qDebug("get sig str"); | 127 | qDebug("get sig str"); |
127 | int csq = me->getSignalStrength(); | 128 | int csq = me->getSignalStrength(); |
128 | if (csq == 0) { | 129 | if (csq == 0) { |
129 | SigStrText->setText("<= -113"); | 130 | SigStrText->setText("<= -113"); |
130 | dB->setEnabled(TRUE); | 131 | dB->setEnabled(TRUE); |
131 | SigStrLabel->setEnabled(TRUE); | 132 | SigStrLabel->setEnabled(TRUE); |
132 | } else if (csq == 99) { | 133 | } else if (csq == 99) { |
133 | SigStrText->setText("Unknown"); | 134 | SigStrText->setText("Unknown"); |
134 | dB->setEnabled(FALSE); | 135 | dB->setEnabled(FALSE); |
135 | SigStrLabel->setEnabled(FALSE); | 136 | SigStrLabel->setEnabled(FALSE); |
136 | } else { | 137 | } else { |
137 | char buf[6]; | 138 | char buf[6]; |
138 | sprintf(buf, "%d", -113 + (2*csq)); | 139 | sprintf(buf, "%d", -113 + (2*csq)); |
139 | SigStrText->setText(buf); | 140 | SigStrText->setText(buf); |
140 | dB->setEnabled(TRUE); | 141 | dB->setEnabled(TRUE); |
141 | SigStrLabel->setEnabled(TRUE); | 142 | SigStrLabel->setEnabled(TRUE); |
142 | } | 143 | } |
143 | } | 144 | } |
144 | } | 145 | } |
145 | 146 | ||
146 | void GSMTool::doSMSStoreChanged() | 147 | void GSMTool::doSMSStoreChanged() |
147 | { | 148 | { |
148 | const char *storename = SMSStoreList->currentText().ascii(); | 149 | const char *storename = SMSStoreList->currentText().ascii(); |
149 | qDebug("Store Changed to '%s'", storename); | 150 | qDebug("Store Changed to '%s'", storename); |
150 | if (!strcmp(storename, "None")) { | 151 | if (!strcmp(storename, "None")) { |
151 | sms_store = NULL; | 152 | sms_store = NULL; |
152 | } else try { | 153 | } else try { |
153 | sms_store = new SortedSMSStore(me->getSMSStore(storename)); | 154 | sms_store = new SortedSMSStore(me->getSMSStore(storename)); |
154 | sms_store->setSortOrder(ByIndex); | 155 | sms_store->setSortOrder(ByIndex); |
155 | 156 | ||
156 | qDebug("got store of size %d", sms_store->size()); | 157 | qDebug("got store of size %d", sms_store->size()); |
157 | } catch (GsmException) { | 158 | } catch (GsmException) { |
158 | sms_store = NULL; | 159 | sms_store = NULL; |
159 | qDebug("get store failed"); | 160 | qDebug("get store failed"); |
160 | } | 161 | } |
161 | 162 | ||
162 | SMSList->setEnabled(!(sms_store == NULL)); | 163 | SMSList->setEnabled(!(sms_store == NULL)); |
163 | NewSMSSaveButton->setEnabled(!(sms_store == NULL)); | 164 | NewSMSSaveButton->setEnabled(!(sms_store == NULL)); |
164 | doSMSTypeChanged(); | 165 | doSMSTypeChanged(); |
165 | } | 166 | } |
166 | 167 | ||
167 | void GSMTool::doSMSTypeChanged() | 168 | void GSMTool::doSMSTypeChanged() |
168 | { | 169 | { |
169 | int direction = SMSViewType->currentItem(); | 170 | int direction = SMSViewType->currentItem(); |
170 | qDebug("direction %s\n", direction?"outgoing":"incoming"); | 171 | qDebug("direction %s\n", direction?"outgoing":"incoming"); |
171 | if (direction) | 172 | if (direction) |
172 | SMSSendButton->setText("Send"); | 173 | SMSSendButton->setText("Send"); |
173 | else | 174 | else |
174 | SMSSendButton->setText("Reply"); | 175 | SMSSendButton->setText("Reply"); |
175 | 176 | ||
176 | SMSList->clear(); | 177 | SMSList->clear(); |
177 | doSelectedSMSChanged(NULL); | 178 | doSelectedSMSChanged(NULL); |
178 | 179 | ||
179 | if (sms_store == NULL) | 180 | if (sms_store == NULL) |
180 | return; | 181 | return; |
181 | for (SortedSMSStore::iterator e = sms_store->begin(); | 182 | for (SortedSMSStore::iterator e = sms_store->begin(); |
182 | e != sms_store->end(); e++) { | 183 | e != sms_store->end(); e++) { |
183 | // qDebug("Message %d", i); | 184 | // qDebug("Message %d", i); |
184 | qDebug("Is%sempty", e->empty()?" ":" not "); | 185 | qDebug("Is%sempty", e->empty()?" ":" not "); |
185 | if (e->empty()) | 186 | if (e->empty()) |
186 | continue; | 187 | continue; |
187 | 188 | ||
188 | qDebug("Status %d", e->status()); | 189 | qDebug("Status %d", e->status()); |
189 | SMSMessageRef message = e->message(); | 190 | SMSMessageRef message = e->message(); |
190 | qDebug("Got message."); | 191 | qDebug("Got message."); |
191 | 192 | ||
192 | // qDebug(message->toString().c_str()); | 193 | // qDebug(message->toString().c_str()); |
193 | if (direction == message->messageType()) { | 194 | if (direction == message->messageType()) { |
194 | qDebug("yes\n"); | 195 | qDebug("yes\n"); |
195 | char buf[3]; | 196 | char buf[3]; |
196 | snprintf(buf, 3, "%d", e->index()); | 197 | snprintf(buf, 3, "%d", e->index()); |
197 | new QListViewItem(SMSList, message->address()._number.c_str(), message->serviceCentreTimestamp().toString().c_str(), buf); | 198 | new QListViewItem(SMSList, message->address()._number.c_str(), message->serviceCentreTimestamp().toString().c_str(), buf); |
198 | } | 199 | } |
199 | } | 200 | } |
200 | } | 201 | } |
201 | 202 | ||
202 | void GSMTool::doSelectedSMSChanged(QListViewItem *item) | 203 | void GSMTool::doSelectedSMSChanged(QListViewItem *item) |
203 | { | 204 | { |
204 | qDebug("message changed\n"); | 205 | qDebug("message changed\n"); |
205 | 206 | ||
206 | if (!item || sms_store == NULL) { | 207 | if (!item || sms_store == NULL) { |
207 | SMSText->setText(""); | 208 | SMSText->setText(""); |
208 | SMSText->setEnabled(FALSE); | 209 | SMSText->setEnabled(FALSE); |
209 | SMSDeleteButton->setEnabled(FALSE); | 210 | SMSDeleteButton->setEnabled(FALSE); |
210 | SMSSendButton->setEnabled(FALSE); | 211 | SMSSendButton->setEnabled(FALSE); |
211 | return; | 212 | return; |
212 | } | 213 | } |
213 | /* ARGH. This sucks. Surely there's an app-private pointer in the | 214 | /* ARGH. This sucks. Surely there's an app-private pointer in the |
214 | QListViewItem that I've failed to notice? | 215 | QListViewItem that I've failed to notice? |
215 | 216 | ||
216 | SMSMessageRef message = *(SMSMessageRef*)item->private; | 217 | SMSMessageRef message = *(SMSMessageRef*)item->private; |
217 | */ | 218 | */ |
218 | qDebug("item %p\n", item); | 219 | qDebug("item %p\n", item); |
219 | 220 | ||
220 | qDebug("text(2) is %s\n", item->text(2).ascii()); | 221 | qDebug("text(2) is %s\n", item->text(2).ascii()); |
221 | int index = atoi(item->text(2).ascii()); | 222 | int index = atoi(item->text(2).ascii()); |
222 | qDebug("index %d\n", index); | 223 | qDebug("index %d\n", index); |
223 | SMSMessageRef message = sms_store->find(index)->message(); | 224 | SMSMessageRef message = sms_store->find(index)->message(); |
224 | 225 | ||
225 | SMSText->setText(message->userData().c_str()); | 226 | SMSText->setText(message->userData().c_str()); |
226 | SMSText->setEnabled(TRUE); | 227 | SMSText->setEnabled(TRUE); |
227 | SMSDeleteButton->setEnabled(TRUE); | 228 | SMSDeleteButton->setEnabled(TRUE); |
228 | SMSSendButton->setEnabled(TRUE); | 229 | SMSSendButton->setEnabled(TRUE); |
229 | 230 | ||
230 | } | 231 | } |
231 | 232 | ||
232 | void GSMTool::doSMSSendButton() | 233 | void GSMTool::doSMSSendButton() |
233 | { | 234 | { |
234 | qDebug("SMSSendButton"); | 235 | qDebug("SMSSendButton"); |
235 | 236 | ||
236 | QListViewItem *item = SMSList->currentItem(); | 237 | QListViewItem *item = SMSList->currentItem(); |
237 | if (!item) | 238 | if (!item) |
238 | return; | 239 | return; |
239 | 240 | ||
240 | int index = atoi(item->text(2).ascii()); | 241 | int index = atoi(item->text(2).ascii()); |
241 | qDebug("index %d\n", index); | 242 | qDebug("index %d\n", index); |
242 | 243 | ||
243 | int direction = SMSViewType->currentItem(); | 244 | int direction = SMSViewType->currentItem(); |
244 | qDebug("direction %s\n", direction?"outgoing":"incoming"); | 245 | qDebug("direction %s\n", direction?"outgoing":"incoming"); |
245 | 246 | ||
246 | SMSMessageRef message = sms_store->find(index)->message(); | 247 | SMSMessageRef message = sms_store->find(index)->message(); |
247 | 248 | ||
248 | if (direction) | 249 | if (direction) |
249 | NewSMSText->setText(message->userData().c_str()); | 250 | NewSMSText->setText(message->userData().c_str()); |
250 | else | 251 | else |
251 | NewSMSText->setText(""); | 252 | NewSMSText->setText(""); |
252 | NewSMSToBox->insertItem(message->address()._number.c_str(), 0); | 253 | NewSMSToBox->insertItem(message->address()._number.c_str(), 0); |
253 | TabWidget2->setCurrentPage(3); | 254 | TabWidget2->setCurrentPage(3); |
254 | 255 | ||
255 | } | 256 | } |
256 | 257 | ||
257 | void GSMTool::doNewSMSClearButton() | 258 | void GSMTool::doNewSMSClearButton() |
258 | { | 259 | { |
259 | NewSMSText->setText(""); | 260 | NewSMSText->setText(""); |
260 | } | 261 | } |
261 | 262 | ||
262 | void GSMTool::doNewSMSSaveButton() | 263 | void GSMTool::doNewSMSSaveButton() |
263 | { | 264 | { |
264 | qDebug("NewSMSSaveButton"); | 265 | qDebug("NewSMSSaveButton"); |
265 | const char *msgtext = strdup(NewSMSText->text().local8Bit()); | 266 | const char *msgtext = strdup(NewSMSText->text().local8Bit()); |
266 | const char *dest = NewSMSToBox->currentText().ascii(); | 267 | const char *dest = NewSMSToBox->currentText().ascii(); |
267 | 268 | ||
268 | NewSMSStatusLabel->setText("Sending..."); | 269 | NewSMSStatusLabel->setText("Sending..."); |
269 | me->setMessageService(1); | 270 | me->setMessageService(1); |