summaryrefslogtreecommitdiff
path: root/noncore/net/opietooth/applet/bluezapplet.cpp
Side-by-side diff
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 )