summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/applet/bluezapplet.cpp31
-rw-r--r--noncore/net/opietooth/applet/bluezapplet.h8
-rw-r--r--noncore/net/opietooth/lib/device.cc5
3 files changed, 36 insertions, 8 deletions
diff --git a/noncore/net/opietooth/applet/bluezapplet.cpp b/noncore/net/opietooth/applet/bluezapplet.cpp
index f7774f0..127b0af 100644
--- a/noncore/net/opietooth/applet/bluezapplet.cpp
+++ b/noncore/net/opietooth/applet/bluezapplet.cpp
@@ -68,34 +68,36 @@ namespace OpieTooth {
bluezOnPixmap = OResource::loadImage( "bluetoothapplet/bluezon", OResource::SmallIcon );
bluezOffPixmap = OResource::loadImage( "bluetoothapplet/bluezoff", Opie::Core::OResource::SmallIcon );
bluezDiscoveryOnPixmap = OResource::loadImage( "bluetoothapplet/bluezondiscovery", Opie::Core::OResource::SmallIcon );
#endif
startTimer(2000);
btDevice = 0;
btManager = 0;
bluezactive = false;
bluezDiscoveryActive = false;
doListDevice = false;
isScanning = false;
m_wasOn = false;
+ m_sync = false;
// TODO: determine whether this channel has to be closed at destruction time.
QCopChannel* chan = new QCopChannel("QPE/Bluetooth", this );
connect(chan, SIGNAL(received(const QCString&,const QByteArray&) ),
this, SLOT(slotMessage(const QCString&,const QByteArray&) ) );
::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
}
BluezApplet::~BluezApplet() {
if ( btDevice ) {
+ ::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
delete btDevice;
}
if ( btManager ) {
delete btManager;
}
}
int BluezApplet::position()
{
return 6;
}
@@ -118,40 +120,38 @@ namespace OpieTooth {
int BluezApplet::setBluezStatus(int c, bool sync) {
if ( c == 1 ) {
switch ( ODevice::inst()->model() ) {
case Model_iPAQ_H39xx:
btDevice = new Device( "/dev/tts/1", "bcsp", "921600" );
break;
case Model_iPAQ_H5xxx:
btDevice = new Device( "/dev/tts/1", "any", "921600" );
break;
-#ifndef OPIE120
+#if OPIE_VERSION >= 102010
case Model_MyPal_716:
btDevice = new Device( "/dev/ttyS1", "bcsp", "921600" );
break;
#endif
default:
btDevice = new Device( "/dev/ttySB0", "bcsp", "230400" );
break;
}
- if (sync) {
- ::system("/etc/init.d/bluetooth start >/dev/null 2>/dev/null");
- } else {
- QCopEnvelope e("QPE/System", "execute(QString)");
- e << QString("/etc/init.d/bluetooth start");
- }
+ m_sync = sync;
+ connect(btDevice, SIGNAL(device(const QString&, bool)),
+ this, SLOT(slotDevice(const QString&, bool)));
+
} else {
::system("/etc/init.d/bluetooth stop >/dev/null 2>/dev/null");
if ( btManager ) {
delete btManager;
btManager = 0;
}
if ( btDevice ) {
delete btDevice;
btDevice = 0;
}
}
return 0;
@@ -327,17 +327,34 @@ namespace OpieTooth {
} else {
#if OPIE_VERSION < 102010
p.drawPixmap( 0, -1, bluezOffPixmap );
#else
p.drawPixmap( 0, 0, bluezOffPixmap );
#endif
}
if (bluezDiscoveryActive) {
p.drawPixmap( 0, 0, bluezDiscoveryOnPixmap );
}
}
+ /**
+ * Reacts on device up
+ * @param name device name
+ * @param up if device was brought up
+ */
+ void BluezApplet::slotDevice(const QString& name, bool up)
+ {
+ if (!up)
+ return;
+ odebug << name << " is up" << oendl;
+ if (m_sync) {
+ ::system("/etc/init.d/bluetooth start >/dev/null 2>/dev/null");
+ } else {
+ QCopEnvelope e("QPE/System", "execute(QString)");
+ e << QString("/etc/init.d/bluetooth start");
+ }
+ }
};
EXPORT_OPIE_APPLET_v1( OpieTooth::BluezApplet )
diff --git a/noncore/net/opietooth/applet/bluezapplet.h b/noncore/net/opietooth/applet/bluezapplet.h
index 1937934..b79ed5b 100644
--- a/noncore/net/opietooth/applet/bluezapplet.h
+++ b/noncore/net/opietooth/applet/bluezapplet.h
@@ -61,21 +61,29 @@ public slots:
private:
Device* btDevice;
Manager *btManager;
QPixmap bluezOnPixmap;
QPixmap bluezOffPixmap;
QPixmap bluezDiscoveryOnPixmap;
bool bluezactive;
bool bluezDiscoveryActive;
bool doListDevice; //If I have to list devices after bringing BT up?
bool isScanning; //If I'm scanning devices
bool m_wasOn; //If BT was started by menu?
+ protected:
+ bool m_sync; //If we have to bring BT synchronously
private slots:
void slotMessage( const QCString& , const QByteArray& );
+ /**
+ * Reacts on device up
+ * @param name device name
+ * @param up if device was brought up
+ */
+ void slotDevice(const QString&, bool);
};
};
#endif
diff --git a/noncore/net/opietooth/lib/device.cc b/noncore/net/opietooth/lib/device.cc
index 2f04d46..88d4cf9 100644
--- a/noncore/net/opietooth/lib/device.cc
+++ b/noncore/net/opietooth/lib/device.cc
@@ -117,49 +117,52 @@ void Device::slotExited( OProcess* proc)
owarn << "normalExit" << oendl;
int ret = m_process->exitStatus();
if( ret == 0 ){ // attached
owarn << "attached" << oendl;
owarn << "Output: " << m_output.data() << oendl;
pid = parsePid( m_output );
owarn << "Pid = " << pid << oendl;
// 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";
+ *m_hci << "hci0";
+ *m_hci << "up";
connect(m_hci, SIGNAL( processExited(Opie::Core::OProcess*) ),
this, SLOT( slotExited(Opie::Core::OProcess* ) ) );
if(!m_hci->start() ){
owarn << "could not start" << oendl;
m_attached = false;
emit device("hci0", false );
}
}else{
owarn << "crass" << oendl;
m_attached = false;
emit device("hci0", false );
}
}
delete m_process;
m_process = 0;
}else if(proc== m_hci ){
owarn << "M HCI exited" << oendl;
if( m_hci->normalExit() ){
owarn << "normal exit" << oendl;
int ret = m_hci->exitStatus();
if( ret == 0 ){
owarn << "attached really really attached" << oendl;
m_attached = true;
+ //Wait for a device to be brought up
+ ::sleep(1);
emit device("hci0", true );
}else{
owarn << "failed" << oendl;
emit device("hci0", false );
m_attached = false;
}
}// normal exit
delete m_hci;
m_hci = 0;
}
}
void Device::slotStdOut(OProcess* proc, char* chars, int len)