author | josef <josef> | 2002-10-18 09:31:09 (UTC) |
---|---|---|
committer | josef <josef> | 2002-10-18 09:31:09 (UTC) |
commit | 997c466fd91843699280a770cbf34e6917dcee8a (patch) (side-by-side diff) | |
tree | 5de950d62700508673b5d79e7bf6b402a3ba49f0 | |
parent | 07a1cb4baaf544e0e594040bbe8e5872ccb34c0f (diff) | |
download | opie-997c466fd91843699280a770cbf34e6917dcee8a.zip opie-997c466fd91843699280a770cbf34e6917dcee8a.tar.gz opie-997c466fd91843699280a770cbf34e6917dcee8a.tar.bz2 |
- improve dialer
It works now correctly for me :)
But a few details must be changed (i.e. no hardcoded values)
-rw-r--r-- | noncore/apps/opie-console/dialer.cpp | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/noncore/apps/opie-console/dialer.cpp b/noncore/apps/opie-console/dialer.cpp index 10c16ef..bd6b50f 100644 --- a/noncore/apps/opie-console/dialer.cpp +++ b/noncore/apps/opie-console/dialer.cpp @@ -74,203 +74,216 @@ Dialer::Dialer(const Profile& profile, int fd, QWidget *parent, const char *name vbox->add(cancel); connect(cancel, SIGNAL(clicked()), SLOT(slotCancel())); show(); QTimer::singleShot(500, this, SLOT(slotAutostart())); } Dialer::~Dialer() { } void Dialer::slotCancel() { if(state != state_online) { usercancel = 1; reset(); } else accept(); } void Dialer::reset() { switchState(state_cancel); } void Dialer::slotAutostart() { //state = state_preinit; dial(m_profile.readEntry("Number")); } void Dialer::dial(const QString& number) { while(state != state_online) { if(!usercancel) { state = state_preinit; trydial(number); } else break; } if(usercancel) { + // modem hangup + trydial(QString::null); reject(); } } void Dialer::trydial(const QString& number) { - if(state != state_cancel) - { - switchState(state_preinit); + //if(state != state_cancel) + //{ + if(state != state_cancel) switchState(state_preinit); send("+++ATH"); send(""); //QString response = receive(); - } + //} if(state != state_cancel) { switchState(state_init); send("ATZ"); //send(m_profile.readEntry("InitString")); QString response2 = receive(); if(!response2.contains("\nOK\r")) reset(); } if(state != state_cancel) { switchState(state_options); - send("ATM0L0"); + send("ATM3L3"); QString response3 = receive(); if(!response3.contains("\nOK\r")) reset(); } if(state != state_cancel) { switchState(state_dialtone); send("ATX1"); QString response4 = receive(); if(!response4.contains("\nOK\r")) reset(); } if(state != state_cancel) { switchState(state_dialing); send(QString("ATDT %1").arg(number)); //send(QString("%1 %2").arg(m_profile.readEntry("DialPrefix1")).arg(number)); QString response5 = receive(); - if(!response5.contains("\nOK\r")) + if(!response5.contains("\nCONNECT")) + { + if(response5.contains("BUSY")) + switchState(state_dialing); + else { QMessageBox::warning(this, QObject::tr("Failure"), QObject::tr("Dialing the number failed.")); slotCancel(); } } + } if(state != state_cancel) { switchState(state_online); } } void Dialer::send(const QString& msg) { QString m = msg; int bytes; QString termination; qWarning("Sending: '%s'", m.latin1()); termination = "\r"; //termination = m_profile.readEntry("Termination"); if(termination == "\n") m = m + "\n"; else if(termination == "\r") m = m + "\r"; else m = m + "\r\n"; bytes = ::write(m_fd, m.local8Bit(), strlen(m.local8Bit())); if(bytes < 0) { reset(); } } QString Dialer::receive() { + QString buf; char buffer[1024]; int ret; + qApp->processEvents(); + while(1) { ret = ::read(m_fd, buffer, sizeof(buffer)); if(ret > 0) { for(int i = 0; i < ret; i++) buffer[i] = buffer[i] & 0x7F; buffer[ret] = 0; - qWarning("Receiving: '%s'", buffer); - return QString(buffer); +qWarning("Got: '%s'", buffer); + buf.append(QString(buffer)); + if(buf.contains("OK") || buf.contains("ERROR") || buf.contains("CONNECT") || (buf.contains("BUSY"))) +{ +qWarning("Receiving: '%s'", buf.latin1()); + return buf; +} } else if(ret < 0) { if(errno != EAGAIN) reset(); } } - //for(int i = 0; i < 200000;i++) - // qApp->processEvents(); return QString::null; } void Dialer::switchState(int newstate) { int oldstate = state; state = newstate; switch(state) { case state_cancel: status->setText(QObject::tr("Cancelling...")); progress->setProgress(0); break; case state_preinit: status->setText(QObject::tr("Searching modem")); progress->setProgress(10); break; case state_init: status->setText(QObject::tr("Initializing...")); progress->setProgress(20); break; case state_options: status->setText(QObject::tr("Reset speakers")); progress->setProgress(30); break; case state_dialtone: status->setText(QObject::tr("Turning off dialtone")); progress->setProgress(40); break; case state_dialing: if(oldstate != state_dialing) status->setText(QObject::tr("Dial number")); else status->setText(QObject::tr("Line busy, redialing number")); progress->setProgress(50); break; case state_online: status->setText(QObject::tr("Connection established")); progress->setProgress(100); cancel->setText(QObject::tr("Dismiss")); break; } } |