author | wimpie <wimpie> | 2005-01-04 01:39:32 (UTC) |
---|---|---|
committer | wimpie <wimpie> | 2005-01-04 01:39:32 (UTC) |
commit | 2a7afda8b7daf4a43e370dba09e43e7f5058ab49 (patch) (side-by-side diff) | |
tree | 1905b1afdf7a1364149c4d325c778a4dd4c629c1 /noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp | |
parent | f1a6369e3df58019891707a3964b20836e104d67 (diff) | |
download | opie-2a7afda8b7daf4a43e370dba09e43e7f5058ab49.zip opie-2a7afda8b7daf4a43e370dba09e43e7f5058ab49.tar.gz opie-2a7afda8b7daf4a43e370dba09e43e7f5058ab49.tar.bz2 |
More NS2 files
Diffstat (limited to 'noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp new file mode 100644 index 0000000..1e91ed1 --- a/dev/null +++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp @@ -0,0 +1,162 @@ +#include <qapplication.h> +#include <resources.h> +#include <OTDevice.h> +#include <OTGateway.h> +#include "bluetoothRFCOMMrun.h" + +using namespace Opietooth2; + +BluetoothRFCOMMRun::~BluetoothRFCOMMRun( void ) { + if( OT ) { + OTGateway::releaseOTGateway(); + } +} + +State_t BluetoothRFCOMMRun::detectState( void ) { + + if( ! OT ) { + OT = OTGateway::getOTGateway(); + } + + if( deviceNrOfConnection() >= 0 ) { + return Available; + } + + owarn << "Bluetooth " + << OT->isEnabled() + << oendl; + + return ( OT->isEnabled() ) ? Off : Unavailable; +} + +QString BluetoothRFCOMMRun::setMyState( NodeCollection *, + Action_t A, + bool ) { + + if( OT ) { + OTGateway::getOTGateway(); + } + + if( A == Activate ) { + // from OFF to Available + RFCOMMChannel * Ch = getChannel( ); + System & Sys = NSResources->system(); + + if( Ch ) { + // connect to this peer + DeviceNr = OT->getFreeRFCommDevice(); + QStringList S; + + S << "rfcomm" + << "bind" + << QString().setNum( DeviceNr ) + << Ch->BDAddress + << QString().setNum( Ch->Channel ); + + if( Sys.runAsRoot( S ) ) { + return QString( "Error starting %1").arg(S.join(" ")); + } + + // here rfcomm should be running -> we will detect state later + return QString(); + } else { + Log(( "No channel selected -> cancel\n" )); + return QString( "No channel selected. Operation cancelled" ); + } + } + + if( A == Deactivate ) { + if( DeviceNr >= 0 ) { + if( OT->releaseRFCommDevice( DeviceNr ) ) { + return QString( "Cannot release RFCOMM connection" ); + } + DeviceNr = -1; + } + } + return QString(); +} + +#include <qlistbox.h> +#include <qframe.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qdialog.h> + +RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { + + if( Data->Devices.count() == 1 ) { + // only one device -> return channel + return Data->Devices[0]; + } + + RFCOMMChannel * Ch = 0; + QDialog * Dlg = new QDialog( qApp->mainWidget(), 0, TRUE ); + QVBoxLayout * V = new QVBoxLayout( Dlg ); + + QLabel * L = new QLabel( + qApp->translate( "BluetoothRFCOMMRun", + "Select device to connect to"), + Dlg ); + QListBox * LB = new QListBox( Dlg ); + + for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { + LB->insertItem( QString( "%1 (%2 Chnl %3)" ). + arg( Data->Devices[i]->Name ). + arg( Data->Devices[i]->BDAddress ). + arg( Data->Devices[i]->Channel ) ); + } + + V->addWidget( L ); + V->addWidget( LB ); + + Dlg->resize( 100, 100 ); + Dlg->move( 20, + (qApp->desktop()->height()-100)/2 ); + + if( Dlg->exec() == QDialog::Accepted ) { + unsigned int i = 0; + for( i = 0; i < Data->Devices.count(); i ++ ) { + if( LB->isSelected(i) ) { + owarn << "Selected " << Data->Devices[i]->Name << oendl; + Ch = Data->Devices[i]; + break; + } + } + } + + delete Dlg; + return Ch; +} + +QString BluetoothRFCOMMRun::deviceFile( void ) { + if( deviceNrOfConnection() >= 0 ) { + OTDevice * OTD = OT->getOTDevice(); + // there is a connection + return OTD->getRFCommDevicePattern().arg(DeviceNr); + } + return QString(); +} + +int BluetoothRFCOMMRun::deviceNrOfConnection( void ) { + + if( ! OT ) { + OT = OTGateway::getOTGateway(); + } + + DeviceNr = -1; + for( unsigned int i = 0; i < Data->Devices.count(); i ++ ) { + owarn << "Check for rfcomm on " + << Data->Devices[i]->BDAddress + << " " + << Data->Devices[i]->Channel + << oendl; + if( ( DeviceNr = OT->connectedToRFCommChannel( + OTDeviceAddress( Data->Devices[i]->BDAddress ), + Data->Devices[i]->Channel ) ) >= 0 ) { + owarn << "Up " + << oendl; + break; + } + } + return DeviceNr; +} |