summaryrefslogtreecommitdiff
path: root/noncore/net/opietooth/applet/bluezapplet.cpp
authorkorovkin <korovkin>2006-04-24 16:05:26 (UTC)
committer korovkin <korovkin>2006-04-24 16:05:26 (UTC)
commit71722eacaa44f3b738318d68dc6148c9e2ff643d (patch) (side-by-side diff)
tree2c8eed7019d47db0885c1a0ba0ff6dc0fc16effb /noncore/net/opietooth/applet/bluezapplet.cpp
parent2457dde10b8108a74f160b5d1c6bdbb877e0099a (diff)
downloadopie-71722eacaa44f3b738318d68dc6148c9e2ff643d.zip
opie-71722eacaa44f3b738318d68dc6148c9e2ff643d.tar.gz
opie-71722eacaa44f3b738318d68dc6148c9e2ff643d.tar.bz2
On start runs /etc/init.d/bluetooth stop.
On setBluezStatus runs /etc/init.d/bluetooth start or stop. If "listDevices()" is called prior to "enableBluetooth()", postpone the action. If BT was enabled befor "enableBluetooth()" was received, do not disable it on "disableBluetooth()". Timer period became twice shorter. When "listDevices()" received, show browsing icon. Added OPIE120 for compatibility.
Diffstat (limited to 'noncore/net/opietooth/applet/bluezapplet.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/opietooth/applet/bluezapplet.cpp143
1 files changed, 109 insertions, 34 deletions
diff --git a/noncore/net/opietooth/applet/bluezapplet.cpp b/noncore/net/opietooth/applet/bluezapplet.cpp
index 5676e4f..9c6c71d 100644
--- a/noncore/net/opietooth/applet/bluezapplet.cpp
+++ b/noncore/net/opietooth/applet/bluezapplet.cpp
@@ -36,2 +36,3 @@
#include <opie2/oresource.h>
+#include <opie2/oprocess.h>
#include <qpe/applnk.h>
@@ -51,2 +52,3 @@ using namespace Opie::Core;
#include <qpopupmenu.h>
+#include <qmessagebox.h>
@@ -55,4 +57,5 @@ using namespace Opie::Core;
-namespace OpieTooth {
+// #define OPIE120 // undefine it fo the latest OPIE
+namespace OpieTooth {
BluezApplet::BluezApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) {
@@ -60,2 +63,7 @@ namespace OpieTooth {
setFixedWidth( AppLnk::smallIconSize() );
+#ifdef OPIE120
+ bluezOnPixmap = Resource::loadPixmap( "bluetoothapplet/bluezon" );
+ bluezOffPixmap = Resource::loadPixmap( "bluetoothapplet/bluezoff" );
+ bluezDiscoveryOnPixmap = Resource::loadPixmap( "bluetoothapplet/magglass.png" );
+#else
bluezOnPixmap = OResource::loadImage( "bluetoothapplet/bluezon", OResource::SmallIcon );
@@ -63,3 +71,4 @@ namespace OpieTooth {
bluezDiscoveryOnPixmap = OResource::loadImage( "bluetoothapplet/bluezondiscovery", Opie::Core::OResource::SmallIcon );
- startTimer(4000);
+#endif
+ startTimer(2000);
btDevice = 0;
@@ -68,2 +77,5 @@ namespace OpieTooth {
bluezDiscoveryActive = false;
+ doListDevice = false;
+ isScanning = false;
+ m_wasOn = false;
@@ -73,2 +85,12 @@ namespace OpieTooth {
this, SLOT(slotMessage(const QCString&,const QByteArray&) ) );
+
+ OProcess* btstart = new OProcess();
+ *btstart << "/etc/init.d/bluetooth" << "stop";
+ btstart->setUseShell(true);
+ if (!btstart->start(OProcess::DontCare, OProcess::AllOutput))
+ delete btstart;
+ else {
+ connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)),
+ this, SLOT(slotProcessExited(Opie::Core::OProcess*)));
+ }
}
@@ -104,2 +126,3 @@ int BluezApplet::position()
+ OProcess* btstart = new OProcess();
if ( c == 1 ) {
@@ -110,6 +133,7 @@ int BluezApplet::position()
- case Model_iPAQ_H5xxx:
- btDevice = new Device( "/dev/tts/1", "any", "921600" );
- break;
+ case Model_iPAQ_H5xxx:
+ btDevice = new Device( "/dev/tts/1", "any", "921600" );
+ break;
+#ifndef OPIE120
case Model_MyPal_716:
@@ -117,2 +141,3 @@ int BluezApplet::position()
break;
+#endif
@@ -122,3 +147,19 @@ int BluezApplet::position()
}
+ *btstart << "/etc/init.d/bluetooth" << "start";
+ btstart->setUseShell(true);
+ if (!btstart->start(OProcess::DontCare, OProcess::AllOutput))
+ delete btstart;
+ else {
+ connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)),
+ this, SLOT(slotProcessExited(Opie::Core::OProcess*)));
+ }
} else {
+ *btstart << "/etc/init.d/bluetooth" << "stop";
+ btstart->setUseShell(true);
+ if (!btstart->start(OProcess::DontCare, OProcess::AllOutput))
+ delete btstart;
+ else {
+ connect(btstart, SIGNAL(processExited(Opie::Core::OProcess*)),
+ this, SLOT(slotProcessExited(Opie::Core::OProcess*)));
+ }
if ( btDevice ) {
@@ -132,3 +173,3 @@ int BluezApplet::position()
int BluezApplet::checkBluezDiscoveryStatus() {
- return bluezDiscoveryActive;
+ return isScanning;
}
@@ -136,3 +177,3 @@ int BluezApplet::position()
int BluezApplet::setBluezDiscoveryStatus(int d) {
- return bluezDiscoveryActive=d;
+ return bluezDiscoveryActive = d;
}
@@ -143,20 +184,33 @@ int BluezApplet::position()
{
- if ( str == "enableBluetooth()") {
- if (!checkBluezStatus()) {
- setBluezStatus(1);
- }
- } else if ( str == "disableBluetooth()") {
- if (checkBluezStatus()) {
- // setBluezStatus(0);
- }
- } else if ( str == "listDevices()") {
- if (!btManager)
- {
- btManager = new Manager("hci0");
- connect( btManager, SIGNAL( foundDevices(const QString&,RemoteDevice::ValueList) ),
- this, SLOT( fillList(const QString&,RemoteDevice::ValueList) ) ) ;
+ if ( str == "enableBluetooth()") {
+ m_wasOn = checkBluezStatus();
+ if (!m_wasOn) {
+ setBluezStatus(1);
+ sleep(2);
+ }
+ }
+ else if ( str == "disableBluetooth()") {
+ /*
+ * We can down BT only if it was started by qcop. We don't want
+ * to down BT started from menu an break our networking connection
+ */
+ if (checkBluezStatus() && !m_wasOn)
+ setBluezStatus(0);
+ doListDevice = false;
}
-
- btManager->searchDevices();
- }
+ else if ( str == "listDevices()") {
+ if (checkBluezStatus()) {
+ doListDevice = false;
+ timerEvent(0);
+ if (!btManager) {
+ btManager = new Manager("hci0");
+ connect( btManager,
+ SIGNAL( foundDevices(const QString&, RemoteDevice::ValueList) ),
+ this, SLOT( fillList(const QString&, RemoteDevice::ValueList) ) ) ;
+ }
+ btManager->searchDevices();
+ isScanning = true;
+ } else
+ doListDevice = true;
+ }
}
@@ -166,6 +220,5 @@ int BluezApplet::position()
{
- QCopEnvelope e("QPE/BluetoothBack", "devices(QStringMap)");
+ QCopEnvelope e("QPE/BluetoothBack", "devices(QStringMap)");
- QStringList list;
- QMap<QString, QString> btmap;
+ QMap<QString, QString> btmap;
@@ -173,7 +226,7 @@ int BluezApplet::position()
for( it = deviceList.begin(); it != deviceList.end(); ++it )
- {
- btmap[(*it).name()] = (*it).mac();
- }
+ btmap[(*it).name()] = (*it).mac();
- e << btmap;
+ e << btmap;
+ isScanning = false;
+ timerEvent( 0 );
}
@@ -262,4 +315,8 @@ int BluezApplet::position()
- if ((bluezactive != oldactive) || (bluezDiscoveryActive != olddiscovery)) {
+ if ((bluezactive != oldactive) ||
+ (bluezDiscoveryActive != olddiscovery))
update();
+ if (bluezactive && doListDevice) {
+ const QByteArray arr;
+ slotMessage("listDevices()", arr);
}
@@ -275,9 +332,17 @@ int BluezApplet::position()
- if (bluezactive > 0) {
+ if (bluezactive) {
+#ifdef OPIE120
+ p.drawPixmap( 0, -1, bluezOnPixmap );
+#else
p.drawPixmap( 0, 0, bluezOnPixmap );
+#endif
} else {
+#ifdef OPIE120
+ p.drawPixmap( 0, -1, bluezOffPixmap );
+#else
p.drawPixmap( 0, 0, bluezOffPixmap );
+#endif
}
- if (bluezDiscoveryActive > 0) {
+ if (bluezDiscoveryActive) {
p.drawPixmap( 0, 0, bluezDiscoveryOnPixmap );
@@ -285,4 +350,14 @@ int BluezApplet::position()
}
+
+/**
+ * Implementation of the process finish
+ * @param the finished process
+ */
+ void BluezApplet::slotProcessExited(OProcess* proc)
+ {
+ delete proc;
+ }
};
+
EXPORT_OPIE_APPLET_v1( OpieTooth::BluezApplet )