Diffstat (limited to 'noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp index cd7bb4a..63b214e 100644 --- a/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp +++ b/noncore/settings/networksettings2/bluetooth/bluetoothRFCOMMrun.cpp @@ -1,21 +1,33 @@ #include <qapplication.h> #include <resources.h> + +#include <OTPeer.h> #include <OTDevice.h> #include <OTGateway.h> +#include <Opietooth.h> + +#include <qlistbox.h> +#include <qframe.h> +#include <qlabel.h> +#include <qlayout.h> +#include <qdialog.h> + #include "bluetoothRFCOMMrun.h" using Opietooth2::OTGateway; using Opietooth2::OTDevice; using Opietooth2::OTDeviceAddress; +using Opietooth2::OTScan; +using Opietooth2::OTPeer; BluetoothRFCOMMRun::~BluetoothRFCOMMRun( void ) { if( OT ) { OTGateway::releaseOTGateway(); } } State_t BluetoothRFCOMMRun::detectState( void ) { if( ! OT ) { OT = OTGateway::getOTGateway(); } @@ -46,61 +58,74 @@ QString BluetoothRFCOMMRun::setMyState( NetworkSetup *, if( Ch ) { // connect to this peer DeviceNr = OT->getFreeRFCommDevice(); QStringList S; S << "rfcomm" << "bind" << QString().setNum( DeviceNr ) << Ch->BDAddress << QString().setNum( Ch->Channel ); + // no longer needed + delete Ch; + 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 NetworkSetup" ); } 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; + + if( Data->Devices.count() == 0 ) { + OTPeer * Peer; + int Channel; + + if( OTScan::getDevice( Peer, Channel, OT ) == QDialog::Accepted ) { + Ch = new RFCOMMChannel; + Ch->BDAddress = Peer->address().toString(); + Ch->Name = Peer->name(); + Ch->Channel = Channel; + return Ch; + } + + return 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 ). @@ -111,25 +136,28 @@ RFCOMMChannel * BluetoothRFCOMMRun::getChannel( void ) { 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) ) { odebug << "Selected " << Data->Devices[i]->Name << oendl; - Ch = Data->Devices[i]; + Ch = new RFCOMMChannel; + Ch->BDAddress = Data->Devices[i]->BDAddress; + Ch->Name = Data->Devices[i]->Name; + Ch->Channel = Data->Devices[i]->Channel; break; } } } delete Dlg; return Ch; } QString BluetoothRFCOMMRun::deviceFile( void ) { if( deviceNrOfNetworkSetup() >= 0 ) { OTDevice * OTD = OT->getOTDevice(); |