-rw-r--r-- | noncore/net/opietooth/applet/bluezapplet.cpp | 2 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/device.cc | 11 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/lib.pro | 2 |
3 files changed, 11 insertions, 4 deletions
diff --git a/noncore/net/opietooth/applet/bluezapplet.cpp b/noncore/net/opietooth/applet/bluezapplet.cpp index a380ac7..6e5ee82 100644 --- a/noncore/net/opietooth/applet/bluezapplet.cpp +++ b/noncore/net/opietooth/applet/bluezapplet.cpp @@ -1,205 +1,205 @@ /* =. This file is part of the OPIE Project .=l. Copyright (c) 2002 Maximilian Reiss <max.reiss@gmx.de> .>+-= _;:, .> :=|. This library is free software; you can .> <, > . <= redistribute it and/or modify it under :=1 )Y*s>-.-- : the terms of the GNU Library General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%+i> _;_. .i_,=:_. -<s. This library is distributed in the hope that + . -:. = it will be useful, but WITHOUT ANY WARRANTY; : .. .:, . . . without even the implied warranty of =_ + =;=| MERCHANTABILITY or FITNESS FOR A _.=:. : :=>: PARTICULAR PURPOSE. See the GNU ..}^=.= = ; Library General Public License for more ++= -. . .: details. : = ...= . :.=- -. .:....=;==+<; You should have received a copy of the GNU -_. . . )=. = Library General Public License along with -- :-= this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "bluezapplet.h" #include <qapplication.h> #include <qpe/resource.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qpoint.h> #include <qpainter.h> #include <qlayout.h> #include <qframe.h> #include <qpixmap.h> #include <qstring.h> #include <qtimer.h> #include <qpopupmenu.h> #include <device.h> namespace OpieTooth { BluezApplet::BluezApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) { setFixedHeight( 18 ); setFixedWidth( 14 ); bluezOnPixmap = Resource::loadPixmap( "bluetoothapplet/bluezon" ); bluezOffPixmap = Resource::loadPixmap( "bluetoothapplet/bluezoff" ); // bluezDiscoveryOnPixmap = Resource::loadPixmap( "bluetoothapplet/magglass" ); startTimer(5000); timerEvent(NULL); } BluezApplet::~BluezApplet() { } int BluezApplet::checkBluezStatus() { if (btDevice) { if (btDevice->isLoaded() ) { return 1; } else { return 0; } } else { return 0; } } int BluezApplet::setBluezStatus(int c) { if (c == 1) { - btDevice = new Device("/dev/ttySB0", "scr" ); + btDevice = new Device("/dev/ttySB0", "csr" ); // system("hciattach /dev/ttySB0 csr"); //system("hcid"); } else { if (btDevice) { delete btDevice; } //system("killall hciattach"); //system("killall hcid"); } return 0; } int BluezApplet::checkBluezDiscoveryStatus() { } int BluezApplet::setBluezDiscoveryStatus(int d) { } void BluezApplet::mousePressEvent( QMouseEvent *) { QPopupMenu *menu = new QPopupMenu(); QPopupMenu *signal = new QPopupMenu(); int ret=0; /* Refresh active state */ timerEvent(NULL); if (bluezactive) { menu->insertItem( tr("Disable Bluetooth"), 0 ); } else { menu->insertItem( tr("Enable Bluetooth"), 1 ); } menu->insertItem( tr("Launch manager"), 2 ); menu->insertSeparator(6); menu->insertItem( tr("Signal strength"), signal, 5); menu->insertSeparator(8); if (bluezDiscoveryActive) { menu->insertItem( tr("Disable discovery"), 3 ); } else { menu->insertItem( tr("Enable discovery"), 4 ); } //menu->insertItem( tr("More..."), 7 ) QPoint p = mapToGlobal( QPoint(1, -menu->sizeHint().height()-1) ); ret = menu->exec(p, 0); // qDebug("ret was %d\n", ret); switch(ret) { case 0: setBluezStatus(0); timerEvent(NULL); break; case 1: setBluezStatus(1); timerEvent(NULL); break; case 2: // start bluetoothmanager launchManager(); timerEvent(NULL); break; case 3: setBluezDiscoveryStatus(0); timerEvent(NULL); break; case 4: setBluezDiscoveryStatus(1); timerEvent(NULL); break; //case 7: // With table of currently-detected devices. } delete menu; } /** * Launches the bluetooth manager */ void BluezApplet::launchManager() { QCopEnvelope e("QPE/System", "execute(QString)"); e << QString("bluetooth-manager"); } /** * Refresh timer * @param the timer event */ void BluezApplet::timerEvent( QTimerEvent * ) { int oldactive = bluezactive; int olddiscovery = bluezDiscoveryActive; bluezactive = checkBluezStatus(); bluezDiscoveryActive = checkBluezDiscoveryStatus(); if ((bluezactive != oldactive) || (bluezDiscoveryActive != olddiscovery)) { paintEvent(NULL); } } /** * Implementation of the paint event * @param the QPaintEvent */ void BluezApplet::paintEvent( QPaintEvent* ) { QPainter p(this); qDebug("paint bluetooth pixmap"); p.eraseRect ( 0, 0, this->width(), this->height() ); if (bluezactive > 0) { p.drawPixmap( 0, 1, bluezOnPixmap ); } else { p.drawPixmap( 0, 1, bluezOffPixmap ); } if (bluezDiscoveryActive > 0) { p.drawPixmap( 0, 1, bluezDiscoveryOnPixmap ); } } }; diff --git a/noncore/net/opietooth/lib/device.cc b/noncore/net/opietooth/lib/device.cc index 5234996..5edfc03 100644 --- a/noncore/net/opietooth/lib/device.cc +++ b/noncore/net/opietooth/lib/device.cc @@ -1,142 +1,149 @@ #include <signal.h> #include <opie/oprocess.h> #include "device.h" using namespace OpieTooth; namespace { int parsePid( const QCString& par ){ int id=0; QString string( par ); QStringList list = QStringList::split( '\n', string ); for( QStringList::Iterator it = list.begin(); it != list.end(); ++it ){ + qWarning("parsePID: %s", (*it).latin1() ); if( !(*it).startsWith("CSR") ){ id = (*it).toInt(); break; } } return id; } } Device::Device(const QString &device, const QString &mode ) : QObject(0, "device" ) { qWarning("OpieTooth::Device create" ); m_hci = 0; m_process = 0; m_attached = false; m_device = device; m_mode = mode; attach(); } Device::~Device(){ detach(); } void Device::attach(){ qWarning("attaching %s %s", m_device.latin1(), m_mode.latin1() ); if(m_process == 0 ){ m_output.resize(0); qWarning("new process to create" ); m_process = new OProcess(); *m_process << "hciattach"; *m_process << "-p"; *m_process << m_device << m_mode; connect(m_process, SIGNAL( processExited(OProcess*) ), this, SLOT( slotExited(OProcess* ) ) ); connect(m_process, SIGNAL( receivedStdout(OProcess*, char*, int) ), this, SLOT(slotStdOut(OProcess*,char*,int ) ) ); connect(m_process, SIGNAL(receivedStderr(OProcess*, char*, int ) ), this, SLOT(slotStdErr(OProcess*,char*,int) ) ); if(!m_process->start(OProcess::NotifyOnExit, OProcess::AllOutput ) ){ qWarning("Could not start" ); delete m_process; m_process = 0; } }; } void Device::detach(){ delete m_hci; delete m_process; // kill the pid we got if(m_attached ){ //kill the pid qWarning( "killing" ); kill(pid, 9); } qWarning("detached" ); } bool Device::isLoaded()const{ return m_attached; } QString Device::devName()const { return QString::fromLatin1("hci0"); }; void Device::slotExited( OProcess* proc) { qWarning("prcess exited" ); if(proc== m_process ){ + qWarning("proc == m_process" ); if( m_process->normalExit() ){ // normal exit + qWarning("normalExit" ); int ret = m_process->exitStatus(); if( ret == 0 ){ // attached qWarning("attached" ); qWarning("Output: %s", m_output.data() ); pid = parsePid( m_output ); qWarning("Pid = %d", pid ); // now hciconfig hci0 up ( determine hciX FIXME) // and call hciconfig hci0 up // FIXME hardcoded to hci0 now :( m_hci = new OProcess( ); *m_hci << "hciconfig"; *m_hci << "hci0 up"; connect(m_hci, SIGNAL( processExited(OProcess*) ), this, SLOT( slotExited(OProcess* ) ) ); if(!m_hci->start() ){ qWarning("could not start" ); m_attached = false; emit device("hci0", false ); } }else{ + qWarning("crass" ); m_attached = false; emit device("hci0", false ); } } delete m_process; m_process = 0; }else if(proc== m_hci ){ qWarning("M HCI exited" ); if( m_hci->normalExit() ){ qWarning("normal exit" ); int ret = m_hci->exitStatus(); if( ret == 0 ){ qWarning("attached really really attached" ); m_attached = true; emit device("hci0", true ); }else{ qWarning( "failed" ); emit device("hci0", false ); m_attached = false; } }// normal exit delete m_hci; m_hci = 0; } } void Device::slotStdOut(OProcess* proc, char* chars, int len) { qWarning("std out" ); - if( len <1 ) + if( len <1 ){ + qWarning( "len < 1 " ); return; + } if(proc == m_process ){ QCString string( chars, len+1 ); // \0 == +1 qWarning("output: %s", string.data() ); m_output.append( string.data() ); } } -void Device::slotStdErr(OProcess*, char*, int ) +void Device::slotStdErr(OProcess* proc, char* chars, int len) { qWarning("std err" ); + slotStdOut( proc, chars, len ); } diff --git a/noncore/net/opietooth/lib/lib.pro b/noncore/net/opietooth/lib/lib.pro index f2cde06..ce36d66 100644 --- a/noncore/net/opietooth/lib/lib.pro +++ b/noncore/net/opietooth/lib/lib.pro @@ -1,9 +1,9 @@ TEMPLATE = lib CONFIG += qte warn_on release HEADERS = device.h manager.h remotedevice.h services.h SOURCES = device.cc manager.cc remotedevice.cc services.cc TARGET = opietooth INCLUDEPATH += $(OPIEDIR)/include DESTDIR = $(QTDIR)/lib$(PROJMAK) -LIBS = -lopie +LIBS += -lopie #VERSION = 0.0.0 |