Diffstat (limited to 'noncore/apps/opie-console/dialer.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/apps/opie-console/dialer.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/noncore/apps/opie-console/dialer.cpp b/noncore/apps/opie-console/dialer.cpp index 67ad10e..7010594 100644 --- a/noncore/apps/opie-console/dialer.cpp +++ b/noncore/apps/opie-console/dialer.cpp | |||
@@ -1,41 +1,46 @@ | |||
1 | #include "dialer.h" | 1 | #include "dialer.h" |
2 | #include "io_modem.h" | ||
3 | |||
4 | /* OPIE */ | ||
5 | #include <opie2/odebug.h> | ||
6 | using namespace Opie::Core; | ||
2 | 7 | ||
8 | /* QT */ | ||
3 | #include <qlayout.h> | 9 | #include <qlayout.h> |
4 | #include <qprogressbar.h> | 10 | #include <qprogressbar.h> |
5 | #include <qlabel.h> | 11 | #include <qlabel.h> |
6 | #include <qpushbutton.h> | 12 | #include <qpushbutton.h> |
7 | #include <qapp.h> | 13 | #include <qapp.h> |
8 | #include <qtimer.h> | 14 | #include <qtimer.h> |
9 | #include <qmessagebox.h> | 15 | #include <qmessagebox.h> |
10 | 16 | ||
17 | /* STD */ | ||
11 | #include <unistd.h> | 18 | #include <unistd.h> |
12 | #include <string.h> | 19 | #include <string.h> |
13 | #include <fcntl.h> | 20 | #include <fcntl.h> |
14 | #include <errno.h> | 21 | #include <errno.h> |
15 | 22 | ||
16 | #include "io_modem.h" | ||
17 | |||
18 | // State machine: | When an error occurs, we don't have to | 23 | // State machine: | When an error occurs, we don't have to |
19 | // | reset everything. | 24 | // | reset everything. |
20 | // (init) <------+ | But if the user wants to reset, | 25 | // (init) <------+ | But if the user wants to reset, |
21 | // | | | we stop dialing immediately. | 26 | // | | | we stop dialing immediately. |
22 | // v | | | 27 | // v | | |
23 | // (options) ----+ | Following the state machine is necessary | 28 | // (options) ----+ | Following the state machine is necessary |
24 | // | \ | to get determinable results. | 29 | // | \ | to get determinable results. |
25 | // v ^ | | 30 | // v ^ | |
26 | // (dial) ----+ | | 31 | // (dial) ----+ | |
27 | // | ^ | | 32 | // | ^ | |
28 | // v | | | 33 | // v | | |
29 | // (online) --+ | | 34 | // (online) --+ | |
30 | // | | | 35 | // | | |
31 | // v | | 36 | // v | |
32 | 37 | ||
33 | 38 | ||
34 | // from atconfigdialog | 39 | // from atconfigdialog |
35 | //initStringLine->setText( config.readEntry("InitString", MODEM_DEFAULT_INIT_STRING ) ); | 40 | //initStringLine->setText( config.readEntry("InitString", MODEM_DEFAULT_INIT_STRING ) ); |
36 | //resetStringLine->setText( config.readEntry("ResetString", MODEM_DEFAULT_RESET_STRING ) ); | 41 | //resetStringLine->setText( config.readEntry("ResetString", MODEM_DEFAULT_RESET_STRING ) ); |
37 | //dialPref1Line->setText( config.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 ) ); | 42 | //dialPref1Line->setText( config.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 ) ); |
38 | //dialSuf1Line->setText( config.readEntry("DialSuffix1", MODEM_DEFAULT_DIAL_SUFFIX1 ) ); | 43 | //dialSuf1Line->setText( config.readEntry("DialSuffix1", MODEM_DEFAULT_DIAL_SUFFIX1 ) ); |
39 | //dialPref2Line->setText( config.readEntry("DialPrefix2", MODEM_DEFAULT_DIAL_PREFIX1 ) ); | 44 | //dialPref2Line->setText( config.readEntry("DialPrefix2", MODEM_DEFAULT_DIAL_PREFIX1 ) ); |
40 | //dialSuf2Line->setText( config.readEntry("DialSuffix2", MODEM_DEFAULT_DIAL_SUFFIX1 ) ); | 45 | //dialSuf2Line->setText( config.readEntry("DialSuffix2", MODEM_DEFAULT_DIAL_SUFFIX1 ) ); |
41 | //dialPref3Line->setText( config.readEntry("DialPrefix3", MODEM_DEFAULT_DIAL_PREFIX1 ) ); | 46 | //dialPref3Line->setText( config.readEntry("DialPrefix3", MODEM_DEFAULT_DIAL_PREFIX1 ) ); |
@@ -83,196 +88,196 @@ Dialer::~Dialer() | |||
83 | { | 88 | { |
84 | } | 89 | } |
85 | 90 | ||
86 | void Dialer::setHangupOnly() | 91 | void Dialer::setHangupOnly() |
87 | { | 92 | { |
88 | state = state_cancel; | 93 | state = state_cancel; |
89 | usercancel = 1; | 94 | usercancel = 1; |
90 | send( m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING )+"\r" ); | 95 | send( m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING )+"\r" ); |
91 | } | 96 | } |
92 | 97 | ||
93 | void Dialer::slotCancel() | 98 | void Dialer::slotCancel() |
94 | { | 99 | { |
95 | if(state != state_online) | 100 | if(state != state_online) |
96 | { | 101 | { |
97 | usercancel = 1; | 102 | usercancel = 1; |
98 | reset(); | 103 | reset(); |
99 | } | 104 | } |
100 | else { | 105 | else { |
101 | accept(); | 106 | accept(); |
102 | } | 107 | } |
103 | } | 108 | } |
104 | 109 | ||
105 | void Dialer::reset() | 110 | void Dialer::reset() |
106 | { | 111 | { |
107 | qWarning("reset"); | 112 | owarn << "reset" << oendl; |
108 | switchState(state_cancel); | 113 | switchState(state_cancel); |
109 | } | 114 | } |
110 | 115 | ||
111 | void Dialer::slotAutostart() | 116 | void Dialer::slotAutostart() |
112 | { | 117 | { |
113 | //state = state_preinit; | 118 | //state = state_preinit; |
114 | dial(m_profile.readEntry("Number")); | 119 | dial(m_profile.readEntry("Number")); |
115 | } | 120 | } |
116 | 121 | ||
117 | void Dialer::dial(const QString& number) | 122 | void Dialer::dial(const QString& number) |
118 | { | 123 | { |
119 | while(state != state_online) | 124 | while(state != state_online) |
120 | { | 125 | { |
121 | if(!usercancel) | 126 | if(!usercancel) |
122 | { | 127 | { |
123 | state = state_preinit; | 128 | state = state_preinit; |
124 | trydial(number); | 129 | trydial(number); |
125 | } | 130 | } |
126 | else break; | 131 | else break; |
127 | } | 132 | } |
128 | 133 | ||
129 | if(usercancel) | 134 | if(usercancel) |
130 | { | 135 | { |
131 | // modem hangup | 136 | // modem hangup |
132 | trydial(QString::null); | 137 | trydial(QString::null); |
133 | reject(); | 138 | reject(); |
134 | } | 139 | } |
135 | } | 140 | } |
136 | 141 | ||
137 | void Dialer::trydial(const QString& number) | 142 | void Dialer::trydial(const QString& number) |
138 | { | 143 | { |
139 | qWarning("TryDial:%s", number.latin1() ); | 144 | owarn << "TryDial:" << number.latin1() << "" << oendl; |
140 | if(state != state_cancel) switchState(state_preinit); | 145 | if(state != state_cancel) switchState(state_preinit); |
141 | if(cleanshutdown) | 146 | if(cleanshutdown) |
142 | { | 147 | { |
143 | qWarning("HangupString " + m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING)); | 148 | owarn << "HangupString " << m_profile.readEntry("HangupString") << oendl; |
144 | send(m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING ) + "\r"); | 149 | send(m_profile.readEntry("HangupString", MODEM_DEFAULT_HANGUP_STRING ) + "\r"); |
145 | } | 150 | } |
146 | 151 | ||
147 | if(state != state_cancel) | 152 | if(state != state_cancel) |
148 | { | 153 | { |
149 | switchState(state_init); | 154 | switchState(state_init); |
150 | // qWarning("Init String " + m_profile.readEntry("InitString") ); | 155 | // owarn << "Init String " + m_profile.readEntry("InitString") << oendl; |
151 | send(m_profile.readEntry("InitString",MODEM_DEFAULT_INIT_STRING ) + "\r"); | 156 | send(m_profile.readEntry("InitString",MODEM_DEFAULT_INIT_STRING ) + "\r"); |
152 | QString response2 = receive(); | 157 | QString response2 = receive(); |
153 | if(!response2.contains("\nOK\r")) | 158 | if(!response2.contains("\nOK\r")) |
154 | reset(); | 159 | reset(); |
155 | } | 160 | } |
156 | 161 | ||
157 | /*if(state != state_cancel) | 162 | /*if(state != state_cancel) |
158 | { | 163 | { |
159 | switchState(state_options); | 164 | switchState(state_options); |
160 | 165 | ||
161 | qWarning("ATM3l3"); | 166 | owarn << "ATM3l3" << oendl; |
162 | send("ATM3L3\r"); | 167 | send("ATM3L3\r"); |
163 | QString response3 = receive(); | 168 | QString response3 = receive(); |
164 | if(!response3.contains("\nOK\r")) | 169 | if(!response3.contains("\nOK\r")) |
165 | reset(); | 170 | reset(); |
166 | } | 171 | } |
167 | */ | 172 | */ |
168 | 173 | ||
169 | if(state != state_cancel) | 174 | if(state != state_cancel) |
170 | { | 175 | { |
171 | switchState(state_dialtone); | 176 | switchState(state_dialtone); |
172 | 177 | ||
173 | send("ATX1\r"); | 178 | send("ATX1\r"); |
174 | QString response4 = receive(); | 179 | QString response4 = receive(); |
175 | if(!response4.contains("\nOK\r")) | 180 | if(!response4.contains("\nOK\r")) |
176 | reset(); | 181 | reset(); |
177 | } | 182 | } |
178 | 183 | ||
179 | if(state != state_cancel) | 184 | if(state != state_cancel) |
180 | { | 185 | { |
181 | qWarning("progress"); | 186 | owarn << "progress" << oendl; |
182 | switchState(state_dialing); | 187 | switchState(state_dialing); |
183 | 188 | ||
184 | // send(QString("ATDT %1\r").arg(number)); | 189 | // send(QString("ATDT %1\r").arg(number)); |
185 | send(QString("%1 %2\r").arg(m_profile.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 )) | 190 | send(QString("%1 %2\r").arg(m_profile.readEntry("DialPrefix1", MODEM_DEFAULT_DIAL_PREFIX1 )) |
186 | .arg(number)); | 191 | .arg(number)); |
187 | 192 | ||
188 | QString response5 = receive(); | 193 | QString response5 = receive(); |
189 | if(!response5.contains("CONNECT") ) | 194 | if(!response5.contains("CONNECT") ) |
190 | { | 195 | { |
191 | if(response5.contains("BUSY")) | 196 | if(response5.contains("BUSY")) |
192 | switchState(state_dialing); | 197 | switchState(state_dialing); |
193 | else | 198 | else |
194 | { | 199 | { |
195 | QMessageBox::warning(this, | 200 | QMessageBox::warning(this, |
196 | QObject::tr("Failure"), | 201 | QObject::tr("Failure"), |
197 | QObject::tr("Dialing the number failed.")); | 202 | QObject::tr("Dialing the number failed.")); |
198 | slotCancel(); | 203 | slotCancel(); |
199 | } | 204 | } |
200 | } | 205 | } |
201 | } | 206 | } |
202 | 207 | ||
203 | 208 | ||
204 | if(state != state_cancel) | 209 | if(state != state_cancel) |
205 | { | 210 | { |
206 | state = state_online; | 211 | state = state_online; |
207 | slotCancel(); | 212 | slotCancel(); |
208 | } | 213 | } |
209 | } | 214 | } |
210 | 215 | ||
211 | void Dialer::send(const QString& msg) | 216 | void Dialer::send(const QString& msg) |
212 | { | 217 | { |
213 | QString m = msg; | 218 | QString m = msg; |
214 | int bytes; | 219 | int bytes; |
215 | QString termination; | 220 | QString termination; |
216 | 221 | ||
217 | qWarning("Sending: %s", m.latin1()); | 222 | owarn << "Sending: " << m.latin1() << "" << oendl; |
218 | 223 | ||
219 | /*termination = "\r"; | 224 | /*termination = "\r"; |
220 | //termination = m_profile.readEntry("Termination"); | 225 | //termination = m_profile.readEntry("Termination"); |
221 | if(termination == "\n") m = m + "\n"; | 226 | if(termination == "\n") m = m + "\n"; |
222 | else if(termination == "\r") m = m + "\r"; | 227 | else if(termination == "\r") m = m + "\r"; |
223 | else m = m + "\r\n"; | 228 | else m = m + "\r\n"; |
224 | */ | 229 | */ |
225 | m = m.replace(QRegExp("\n"), "\r"); | 230 | m = m.replace(QRegExp("\n"), "\r"); |
226 | 231 | ||
227 | bytes = ::write(m_fd, m.local8Bit(), strlen(m.local8Bit())); | 232 | bytes = ::write(m_fd, m.local8Bit(), strlen(m.local8Bit())); |
228 | if(bytes < 0) | 233 | if(bytes < 0) |
229 | { | 234 | { |
230 | reset(); | 235 | reset(); |
231 | } | 236 | } |
232 | } | 237 | } |
233 | 238 | ||
234 | QString Dialer::receive() | 239 | QString Dialer::receive() |
235 | { | 240 | { |
236 | QString buf; | 241 | QString buf; |
237 | char buffer[1024]; | 242 | char buffer[1024]; |
238 | int ret; | 243 | int ret; |
239 | int counter = 0; | 244 | int counter = 0; |
240 | 245 | ||
241 | while(1) | 246 | while(1) |
242 | { | 247 | { |
243 | ret = ::read(m_fd, buffer, sizeof(buffer)); | 248 | ret = ::read(m_fd, buffer, sizeof(buffer)); |
244 | 249 | ||
245 | if(ret > 0) | 250 | if(ret > 0) |
246 | { | 251 | { |
247 | for(int i = 0; i < ret; i++) | 252 | for(int i = 0; i < ret; i++) |
248 | buffer[i] = buffer[i] & 0x7F; | 253 | buffer[i] = buffer[i] & 0x7F; |
249 | buffer[ret] = 0; | 254 | buffer[ret] = 0; |
250 | qWarning("Got: %s", buffer); | 255 | owarn << "Got: " << buffer << "" << oendl; |
251 | buf.append(QString(buffer)); | 256 | buf.append(QString(buffer)); |
252 | if(buf.contains("OK") || buf.contains("ERROR") || buf.contains("CONNECT") || (buf.contains("BUSY"))) | 257 | if(buf.contains("OK") || buf.contains("ERROR") || buf.contains("CONNECT") || (buf.contains("BUSY"))) |
253 | { | 258 | { |
254 | //qWarning("Receiving: '%s'", buf.latin1()); | 259 | //owarn << "Receiving: '" << buf.latin1() << "'" << oendl; |
255 | cleanshutdown = 1; | 260 | cleanshutdown = 1; |
256 | return buf; | 261 | return buf; |
257 | }else if (buf.contains("NO CARRIER") || buf.contains("NO DIALTONE") ) { | 262 | }else if (buf.contains("NO CARRIER") || buf.contains("NO DIALTONE") ) { |
258 | cleanshutdown = 1; | 263 | cleanshutdown = 1; |
259 | return QString::null; | 264 | return QString::null; |
260 | } | 265 | } |
261 | } | 266 | } |
262 | else if(ret < 0) | 267 | else if(ret < 0) |
263 | { | 268 | { |
264 | if(errno != EAGAIN) reset(); | 269 | if(errno != EAGAIN) reset(); |
265 | else if(!(counter++ % 100)) qApp->processEvents(); | 270 | else if(!(counter++ % 100)) qApp->processEvents(); |
266 | } | 271 | } |
267 | else if(!(counter++ % 100)) qApp->processEvents(); | 272 | else if(!(counter++ % 100)) qApp->processEvents(); |
268 | 273 | ||
269 | if(usercancel) return QString::null; | 274 | if(usercancel) return QString::null; |
270 | } | 275 | } |
271 | 276 | ||
272 | cleanshutdown = 1; | 277 | cleanshutdown = 1; |
273 | return QString::null; | 278 | return QString::null; |
274 | } | 279 | } |
275 | 280 | ||
276 | void Dialer::switchState(int newstate) | 281 | void Dialer::switchState(int newstate) |
277 | { | 282 | { |
278 | int oldstate = state; | 283 | int oldstate = state; |