From 2314955ff0127a570e25e7e7a10ce4d17a2de0e2 Mon Sep 17 00:00:00 2001 From: dwmw2 Date: Tue, 02 Apr 2002 00:02:59 +0000 Subject: Start of GSM app. Still not decided what to do with gsmlib. Needs icon. --- (limited to 'noncore/unsupported/gsmtool/gsmtool.cpp') 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 @@ +#include "gsmtool.h" +#include +#include +#include +#include +#include + +#include + +#include +#include + +using namespace gsmlib; + + +/* + * Constructs a GSMTool which is a child of 'parent', with the + * name 'name' and widget flags set to 'f' + */ +GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl ) + : GSMToolBase( parent, name, fl ) +{ + devicelocked = 0; + me = NULL; + port = NULL; + setConnected(FALSE); + /* FIXME: Persistent settings for device/baudrate */ + connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton())); + connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton())); + connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged())); + timerid = -1; // Is this not possible normally? +} + +/* + * Destroys the object and frees any allocated resources + */ +GSMTool::~GSMTool() +{ + // no need to delete child widgets, Qt does it all for us + if (devicelocked) + unlockDevice(); +} +const speed_t GSMTool::baudrates[12] = { + B300, B600, B1200, B2400, B4800, B9600, B19200, + B38400, B57600, B115200, B230400, B460800 +}; + +int GSMTool::lockDevice( ) +{ + devicelocked = 1; + /* FIXME */ + return 0; +} + +void GSMTool::unlockDevice( ) +{ + devicelocked = 0; +} + +void GSMTool::setConnected( bool conn ) +{ + TabWidget2->setTabEnabled(tab_2, conn); + TabWidget2->setTabEnabled(tab_3, conn); + MfrLabel->setEnabled(conn); + MfrText->setEnabled(conn); + ModelLabel->setEnabled(conn); + ModelText->setEnabled(conn); + RevisionLabel->setEnabled(conn); + RevisionText->setEnabled(conn); + SerialLabel->setEnabled(conn); + SerialText->setEnabled(conn); + +} +void GSMTool::doTabChanged() +{ + int index = TabWidget2->currentPageIndex(); + qDebug("tab changed to %d", index); + + if (index == 1) { + timerid = startTimer(5000); + timerEvent(NULL); + } else if (timerid != -1) { + killTimer(timerid); + timerid = -1; + } +} + +void GSMTool::timerEvent( QTimerEvent * ) +{ + OPInfo opi; + + opi = me->getCurrentOPInfo(); + + if (opi._numericName == NOT_SET) { + NetStatText->setText("No network"); + NetworkLabel->setEnabled(FALSE); + NetworkText->setEnabled(FALSE); + NetworkText->setText(""); + SigStrText->setEnabled(FALSE); + SigStrText->setText(""); + dB->setEnabled(FALSE); + SigStrLabel->setEnabled(FALSE); + } else { + // FIXME: Add 'roaming' info from AT+CFUN + qDebug("network"); + NetStatText->setText("Registered"); + NetworkLabel->setEnabled(TRUE); + NetworkText->setEnabled(TRUE); + NetworkText->setText(opi._longName.c_str()); + SigStrText->setEnabled(TRUE); + + qDebug("get sig str"); + int csq = me->getSignalStrength(); + if (csq == 0) { + SigStrText->setText("<= -113"); + dB->setEnabled(TRUE); + SigStrLabel->setEnabled(TRUE); + } else if (csq == 99) { + SigStrText->setText("Unknown"); + dB->setEnabled(FALSE); + SigStrLabel->setEnabled(FALSE); + } else { + char buf[6]; + sprintf(buf, "%d", -113 + (2*csq)); + SigStrText->setText(buf); + dB->setEnabled(TRUE); + SigStrLabel->setEnabled(TRUE); + } + } +} + +void GSMTool::doScanButton() +{ + qDebug("ScanButton"); +} +/* + * A simple slot... not very interesting. + */ +void GSMTool::doConnectButton() +{ + speed_t rate; + devicename = strdup(DeviceName->currentText().local8Bit().data()); + rate = baudrates[BaudRate->currentItem()]; + + qDebug("Connect Button Pressed"); + MfrText->setText("Opening..."); + ModelText->setText(""); + RevisionText->setText(""); + SerialText->setText(""); + + setConnected(FALSE); + if (me) { + // delete me; + me = NULL; + } + if (port) { + // delete port; + port = NULL; + } + + if (lockDevice()) { + qDebug("lockDevice() failed\n"); + }; + + qDebug("Device name is %s\n", devicename); + + try { + port = new UnixSerialPort(devicename, rate, DEFAULT_INIT_STRING, 0); + } catch (GsmException) { + qDebug("port failed"); + return; + } + MfrText->setText("Initialising..."); + qDebug("got port"); + try { + me = new MeTa(port); + } catch (GsmException) { + qDebug("meta failed"); + delete port; + port = NULL; + unlockDevice(); + return; + } + + qDebug("Opened"); + + MEInfo ifo; + + MfrText->setText("Querying..."); + + try { + ifo = me->getMEInfo(); + } catch (GsmException) { + qDebug("getMEInfo failed"); + delete me; + me = NULL; + delete port; + port = NULL; + unlockDevice(); + return; + } + + MfrText->setText(ifo._manufacturer.c_str()); + ModelText->setText(ifo._model.c_str()); + RevisionText->setText(ifo._revision.c_str()); + SerialText->setText(ifo._serialNumber.c_str()); + setConnected(TRUE); +} -- cgit v0.9.0.2