summaryrefslogtreecommitdiff
path: root/noncore/settings/networksettings2/opietooth2
authorwimpie <wimpie>2005-01-09 00:32:10 (UTC)
committer wimpie <wimpie>2005-01-09 00:32:10 (UTC)
commite54346d28b19d3ac671802a25e8c03f346693291 (patch) (side-by-side diff)
tree0f8d6561e24a7ba36fd8a6ab1869aa470e1fdb36 /noncore/settings/networksettings2/opietooth2
parent60a617583d0ccc793d9ea4465998d90ec208db58 (diff)
downloadopie-e54346d28b19d3ac671802a25e8c03f346693291.zip
opie-e54346d28b19d3ac671802a25e8c03f346693291.tar.gz
opie-e54346d28b19d3ac671802a25e8c03f346693291.tar.bz2
Updated dependencies
NS2->app requires OT2Lib and NS2Lib OT2Lib requires NS2Lib Most plugins only require NS2Lib Except BTPlugin which requires als OT2Lib Also renamed owarn -> odebug
Diffstat (limited to 'noncore/settings/networksettings2/opietooth2') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTDevice.cpp6
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTDriver.cpp16
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTDriverList.cpp4
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTGateway.cpp14
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTHCISocket.cpp14
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTInquiry.cpp18
-rw-r--r--noncore/settings/networksettings2/opietooth2/OTPeer.cpp20
-rw-r--r--noncore/settings/networksettings2/opietooth2/Opietooth.cpp12
-rw-r--r--noncore/settings/networksettings2/opietooth2/config.in4
-rwxr-xr-xnoncore/settings/networksettings2/opietooth2/libopietooth2.postinst2
-rw-r--r--noncore/settings/networksettings2/opietooth2/opietooth2.pro7
11 files changed, 62 insertions, 55 deletions
diff --git a/noncore/settings/networksettings2/opietooth2/OTDevice.cpp b/noncore/settings/networksettings2/opietooth2/OTDevice.cpp
index 62f17a0..c6f7d5e 100644
--- a/noncore/settings/networksettings2/opietooth2/OTDevice.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTDevice.cpp
@@ -58,199 +58,199 @@ bool OTDevice::attach(){
if( needsAttach() && m_hciattachPid == 0 ) {
QString Dev, Mode;
unsigned long Spd;
detectDeviceType( Dev, Mode, Spd );
// not yet started
m_hciattach = new OProcess();
*m_hciattach << "hciattach";
*m_hciattach << "-p"; // so that it prints its pid
*m_hciattach << Dev
<< Mode
<< QString().setNum(Spd);
connect( m_hciattach,
SIGNAL(receivedStdout(Opie::Core::OProcess*, char*, int ) ),
this, SLOT
(slotStdOut(Opie::Core::OProcess*,char*,int) ) );
connect( m_hciattach,
SIGNAL(receivedStderr(Opie::Core::OProcess*, char*, int ) ),
this, SLOT
(slotStdErr(Opie::Core::OProcess*,char*,int) ) );
// we need to start this in 'dontcare' mode because
// if qpe exists we want the hci to keep running
if( ! m_hciattach->start( OProcess::DontCare,
OProcess::AllOutput
) ){
emit error( tr( "Could not start hciattach" ) );
delete m_hciattach;
m_hciattach = 0;
return FALSE;
}
}
return TRUE;
}
bool OTDevice::detach(){
if( needsAttach() && m_hciattachPid ) {
if( m_hciattach ) {
delete m_hciattach;
m_hciattach = 0;
}
if( kill( m_hciattachPid, 9) < 0 ) {
- owarn << "could not stop " << errno << oendl;
+ odebug << "could not stop " << errno << oendl;
emit error( tr( "Could not stop process" ) );
return FALSE;
}
m_hciattachPid = 0;
emit isEnabled( m_deviceNr, 0 );
m_deviceNr = -1;
}
return TRUE;
}
bool OTDevice::isAttached()const{
return ! needsAttach() || m_hciattachPid != 0;
}
bool OTDevice::checkAttach(){
if( ! needsAttach() ) {
m_deviceNr = 0;
emit isEnabled( 0, 1 );
return TRUE;
}
if( m_hciattachPid ) {
QString S;
S.setNum( m_hciattachPid );
QDir D( "/proc" );
if( !D.exists( S ) ) {
// down
m_hciattachPid = 0;
emit isEnabled( m_deviceNr, 0 );
m_deviceNr = -1;
}
} else {
// check
m_hciattachPid = getPidOfHCIAttach();
if ( m_hciattachPid ) {
m_deviceNr = 0;
emit isEnabled( m_deviceNr, 1 );
}
}
return m_hciattachPid != 0;
}
void OTDevice::slotStdOut(OProcess* proc, char* , int ) {
if( proc == m_hciattach ) {
m_hciattach->detach();
// system enabled
// currently no way to figure out which attach produce which
// hci
if( m_deviceNr == -1 ) {
m_deviceNr = 0;
emit isEnabled( m_deviceNr, 1 );
}
}
}
void OTDevice::slotStdErr(OProcess* proc, char* chars, int len) {
if(proc == m_hciattach && len >= 1 ){
// collect output
QCString string( chars, len+1 ); // \0 == +1
QString m_output;
m_output.append( string.data() );
- owarn << m_output << oendl;
+ odebug << m_output << oendl;
}
}
pid_t OTDevice::getPidOfHCIAttach( void ) {
if( needsAttach() ) {
// not yet attached -> perhaps now ?
// load /proc dir and check if command name contains hciattach
QRegExp R("[0-9]+");
QDir ProcDir( "/proc" );
QFileInfo FI;
QStringList EL = ProcDir.entryList( QDir::Dirs );
// print it out
for ( QStringList::Iterator it = EL.begin();
it != EL.end();
++it ) {
if( R.match( (*it) ) >= 0 ) {
// is pid
// get command being executed
FI.setFile( ProcDir.path()+"/"+ (*it) + "/exe" );
// get the link
if( FI.readLink().right( 9 ) == "hciattach" ) {
// this is hci attach process
return (*it).toULong();
break;
}
}
}
}
return 0;
}
void OTDevice::detectDeviceType( QString & Device,
QString & Mode,
unsigned long & Speed ) {
// detect device type and determine parms
- owarn << "Detecting device" << oendl;
+ odebug << "Detecting device" << oendl;
switch ( ODevice::inst()->model() ) {
case Model_iPAQ_H39xx:
Device = "/dev/tts/1";
Mode = "bcsp";
Speed = 921600;
NeedsAttach = 1;
break;
case Model_iPAQ_H5xxx:
Device = "/dev/tts/1";
Mode = "any";
Speed = 921600;
NeedsAttach = 1;
break;
case Model_GenuineIntel :
Device = "";
Mode = "";
Speed = 0;
NeedsAttach = 0;
break;
default:
Device = "/dev/ttySB0";
Mode = "bcsp";
Speed = 230400;
NeedsAttach = 1;
break;
}
}
QString OTDevice::getRFCommDevicePattern( void ) {
QDir D( "/dev/bluetooth/rfcomm" );
if( D.exists() ) {
// devfs
return QString( "/dev/bluetooth/rfcomm/%1" );
}
// regular 'dev' directory
return QString( "/dev/rfcomm%1" );
}
diff --git a/noncore/settings/networksettings2/opietooth2/OTDriver.cpp b/noncore/settings/networksettings2/opietooth2/OTDriver.cpp
index 8bd7919..a7ee662 100644
--- a/noncore/settings/networksettings2/opietooth2/OTDriver.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTDriver.cpp
@@ -105,97 +105,97 @@ static ClassMap_t MapAVClass[] = {
{ 4, "Microphone" },
{ 5, "Loudspeaker" },
{ 6, "Headphones" },
{ 7, "Portable Audio" },
{ 8, "Car Audio" },
{ 9, "Set-top box" },
{ 10, "HiFi Audio Device" },
{ 11, "VCR" },
{ 12, "Video Camera" },
{ 13, "Camcorder" },
{ 14, "Video Monitor" },
{ 15, "Video Display and Loudspeaker" },
{ 16, "Video Conferencing" },
{ 17, 0 },
{ 18, "Gaming/Toy" },
{ -1, 0 }
};
static ClassMap_t MapPeripheralClass[] = {
{ 16, "Keyboard" },
{ 32, "Pointing device" },
{ 48, "Combo keyboard/pointing device" },
{ -1, 0 }
};
typedef struct {
int Major;
ClassMap_t * Map;
} MainClassMap_t;
static MainClassMap_t MainClasses[] = {
{ 0, MapMiscClass },
{ 1, MapComputerClass },
{ 2, MapPhoneClass },
{ 3, 0 }, // special case
{ 4, MapAVClass },
{ 5, MapPeripheralClass },
{ 6, 0 }, // special case
{ 63, MapUnclassifiedClass },
{ -1, 0 }
};
OTDriver::OTDriver( OTGateway * _OT, struct hci_dev_info* di) : QObject( _OT ), Address() {
OT = _OT;
IsUp = 0;
Socket = 0;
init(di);
- owarn << "Driver " << devname() << oendl;
+ odebug << "Driver " << devname() << oendl;
AutoClose = new QTimer( this );
connect( AutoClose,
SIGNAL( timeout() ),
this,
SLOT( SLOT_CloseFd() )
);
}
OTDriver::~OTDriver() {
closeSocket();
SLOT_CloseFd();
}
void OTDriver::SLOT_CloseFd( void ){
if ( isOpen() ) {
AutoClose->stop();
::close( fd() );
setfd( -1 );
}
}
void OTDriver::init(struct hci_dev_info* di) {
Dev = di->name;
setDevId(di->dev_id);
setType(di->type);
setFlags(di->flags);
Address.setBDAddr( di->bdaddr );
setFeatures(di->features);
setfd( -1 ); // not open
Manufacturer = "";
}
// internal reinitialize
void OTDriver::reinit() {
bool Old;
Old = IsUp;
if( currentState() < 0 )
return;
if( Old != IsUp ) {
// state changes
emit stateChange( this, IsUp );
}
@@ -340,120 +340,120 @@ QString OTDriver::getRevEricsson() {
return QString();
}
return QString( revision+1 );
}
QString OTDriver::getRevCsr( unsigned short rev) {
int i;
for (i = 0; csr_map[i].str; i++)
if (csr_map[i].rev == rev) {
return QString( csr_map[i].str );
}
return tr( "Unknown firmware" );
}
int OTDriver::reset() {
if( ! open() ) {
return 0;
}
if( ioctl(fd(), HCIDEVRESET, devId()) < 0 ) {
if( errno != EALREADY ) {
emit error( tr( "Reset failed for %1. %2 : %3" ).
arg( devname() ).
arg( errno ).
arg( strerror(errno) ) );
if (errno == EACCES) {
return EACCES;
}
}
}
return 0;
}
void OTDriver::setUp( bool M ) {
if( M && ! isUp() ) {
bringUp();
} else if( ! M && isUp() ) {
bringDown();
}
}
void OTDriver::bringUp() {
- owarn << "bringUp : " << Dev << oendl;
+ odebug << "bringUp : " << Dev << oendl;
if( ! open() ) {
return;
}
if (! isUp()) {
if( ioctl(fd(), HCIDEVUP, devId()) < 0 ) {
if( errno != EALREADY ) {
emit error( tr( "Cannot bring interface %1 up. %2 : %3" ).
arg( devname() ).
arg( errno ).
arg( strerror(errno) ) );
}
return;
}
// have to wait a bit for the 'up' to become active
QTimer::singleShot( 3000, this, SLOT( reinit() ) );
}
}
void OTDriver::bringDown() {
- owarn << "bringDown : " << Dev << oendl;
+ odebug << "bringDown : " << Dev << oendl;
if( ! open() ) {
return;
}
if ( isUp() ) {
if( ioctl(fd(), HCIDEVDOWN, devId()) < 0 ) {
if( errno != EALREADY ) {
emit error( tr( "Cannot bring interface %1 down. %2 : %3" ).
arg( devname() ).
arg( errno ).
arg( strerror(errno) ) );
}
return;
}
reinit();
}
}
void OTDriver::setScanMode(bool iscan, bool pscan) {
struct hci_dev_req dr;
if( ! open() ) {
return;
}
dr.dev_id = devId();
dr.dev_opt = SCAN_DISABLED;
if( iscan&&(!pscan) )
dr.dev_opt = SCAN_INQUIRY;
else if( pscan&&(!iscan) )
dr.dev_opt = SCAN_PAGE;
else if( pscan&&iscan )
dr.dev_opt = SCAN_PAGE | SCAN_INQUIRY;
if( ioctl(fd(), HCISETSCAN, (unsigned long)&dr) < 0 ) {
if( errno != EALREADY ) {
emit error( tr( "Can't set scan mode on %1. %2 : %3" ).
arg( devname() ).
arg( errno ).
arg( strerror(errno) ) );
}
return;
}
reinit();
@@ -616,129 +616,129 @@ void OTDriver::getClass( QString & service,
device = "50-67% utilized";
break;
case 5:
device = "67-83% utilized";
break;
case 6:
device = "83-99% utilized";
break;
case 7:
device = "No service available";
break;
}
}
} else if( major == 6 ) { /* imaging */
if (minor & 4)
device = "Display";
if (minor & 8)
device = "Camera";
if (minor & 16)
device = "Scanner";
if (minor & 32)
device = "Printer";
}
}
break;
}
MCM ++;
}
if( MCM->Major == -1 ) {
device = "Unknown (reserved) minor device class";
}
}
QString OTDriver::strType() {
return QString( hci_dtypetostr(Type) );
}
void OTDriver::setFeatures( unsigned char * _f) {
Features = lmp_featurestostr(_f, NULL, 255);
}
void OTDriver::setManufacturer(int compid) {
Manufacturer = bt_compidtostr(compid);
}
OTHCISocket * OTDriver::openSocket( void ) {
if( ! Socket ) {
- owarn << "Open HCI socket to " << devname() << oendl;
+ odebug << "Open HCI socket to " << devname() << oendl;
Socket = new OTHCISocket( this );
}
return Socket;
}
void OTDriver::closeSocket( void ) {
if( Socket ) {
- owarn << "Close HCI socket to " << devname() << oendl;
+ odebug << "Close HCI socket to " << devname() << oendl;
delete Socket;
Socket = 0;
}
}
QString OTDriver::getPeerName( const OTDeviceAddress & PAddr ) {
QString S;
char name[100 ];
if( ! open() ) {
return QString("N/A");
}
if( hci_read_remote_name( fd(),
&(PAddr.getBDAddr()),
sizeof(name),
name,
100000 ) < 0 ) {
return QString( "N/A" );
}
return QString( name );
}
long OTDriver::getLinkQuality( const OTDeviceAddress & Addr ) {
struct hci_conn_info_req *cr;
struct hci_request rq;
read_rssi_rp rp;
uint16_t handle;
if( ! open() ) {
return 0;
}
cr = (struct hci_conn_info_req *)malloc(
sizeof(*cr) + sizeof(struct hci_conn_info));
if (!cr)
return 0;
bacpy( &(cr->bdaddr), &(Addr.getBDAddr()) );
cr->type = ACL_LINK;
if (ioctl( fd(), HCIGETCONNINFO, (unsigned long) cr) < 0) {
- owarn << "Get connection info failed" << oendl;
+ odebug << "Get connection info failed" << oendl;
free(cr);
return 0;
}
handle = htobs(cr->conn_info->handle);
free(cr);
memset(&rq, 0, sizeof(rq));
rq.ogf = OGF_STATUS_PARAM;
rq.ocf = OCF_READ_RSSI;
rq.cparam = &handle;
rq.clen = 2;
rq.rparam = &rp;
rq.rlen = GET_LINK_QUALITY_RP_SIZE;
if (hci_send_req( fd(), &rq, 100) < 0) {
- owarn << "Get connection info failed" << oendl;
+ odebug << "Get connection info failed" << oendl;
return 0;
}
if( rp.status ) {
- owarn << QString().sprintf("HCI get_link_quality cmd failed (0x%2.2X)", rp.status) << oendl;
+ odebug << QString().sprintf("HCI get_link_quality cmd failed (0x%2.2X)", rp.status) << oendl;
return 0;
}
return rp.rssi+50;
}
diff --git a/noncore/settings/networksettings2/opietooth2/OTDriverList.cpp b/noncore/settings/networksettings2/opietooth2/OTDriverList.cpp
index f703834..e5af742 100644
--- a/noncore/settings/networksettings2/opietooth2/OTDriverList.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTDriverList.cpp
@@ -8,79 +8,79 @@
* (at your option) any later version. *
***************************************************************************/
#include <malloc.h>
#include <bluezlib.h>
#include <opie2/odebug.h>
#include <OTDriverList.h>
#include <OTGateway.h>
#include <OTDriver.h>
using namespace Opietooth2;
OTDriverList::OTDriverList( OTGateway * _OT ) : QVector<OTDriver>() {
OT = _OT;
setAutoDelete( true );
}
OTDriverList::~OTDriverList() {
}
void OTDriverList::update() {
struct hci_dev_list_req *dl;
struct hci_dev_req *dr;
struct hci_dev_info di;
int cur;
dl = 0;
cur = 0;
do {
cur += 5;
dl = (struct hci_dev_list_req*)
::realloc( dl, sizeof( struct hci_dev_list_req ) +
( cur * sizeof(struct hci_dev_req) )
);
if( dl == 0 ) {
// memory problem
exit(1);
}
dl->dev_num = cur;
if( ioctl( OT->getSocket(), HCIGETDEVLIST, (void*)dl) ) {
- owarn << "WARNING : cannot read device list. "
+ odebug << "WARNING : cannot read device list. "
<< errno
<< strerror( errno ) << oendl;
return;
}
// if num == cur perhaps we did not get all devices yet
} while( dl->dev_num == cur );
if( dl->dev_num != count() ) {
// new or missing devices
clear();
dr = dl->dev_req;
resize( dl->dev_num );
for( cur=0; cur < dl->dev_num; cur ++) {
memset( &di, 0, sizeof( di ) );
di.dev_id = (dr+cur)->dev_id;
// get device info
if( ioctl( OT->getSocket(), HCIGETDEVINFO, (void*)&di) != 0 )
continue; // uh ?
insert( cur, new OTDriver( OT, &di ) );
}
- owarn << "Found " << count() << " devices" << oendl;
+ odebug << "Found " << count() << " devices" << oendl;
::free( dl );
}
}
diff --git a/noncore/settings/networksettings2/opietooth2/OTGateway.cpp b/noncore/settings/networksettings2/opietooth2/OTGateway.cpp
index 6531cf6..e8137dd 100644
--- a/noncore/settings/networksettings2/opietooth2/OTGateway.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTGateway.cpp
@@ -109,334 +109,334 @@ OTDevice * OTGateway::getOTDevice( ) {
TheOTDevice = new OTDevice( this );
connect( TheOTDevice,
SIGNAL( isEnabled( int, bool ) ),
this,
SLOT( SLOT_Enabled( int, bool ) ) );
connect( TheOTDevice,
SIGNAL( error( const QString & ) ),
this,
SLOT( SLOT_ShowError( const QString & ) ) );
}
return TheOTDevice;
}
// start bluetooth (if stopped)
// return TRUE if started
void OTGateway::SLOT_SetEnabled( bool Mode ) {
if( Mode ) {
SLOT_Enable();
return;
}
SLOT_Disable();
}
void OTGateway::SLOT_Enable() {
getOTDevice()->attach();
}
void OTGateway::SLOT_Disable() {
getOTDevice()->detach();
}
bool OTGateway::needsEnabling() {
return getOTDevice()->needsAttach();
}
bool OTGateway::isEnabled() {
if( getOTDevice()->deviceNr() >= 0 &&
driver( getOTDevice()->deviceNr() )->isUp() )
return TRUE;
// else check system
return getOTDevice()->isAttached();
}
void OTGateway::SLOT_ShowError( const QString & S ) {
- owarn << S << oendl;
+ odebug << S << oendl;
if( ErrorConnectCount > 0 ) {
// pass error
emit error( QString( "<p>" ) + S + "</p>" );
return;
}
QMessageBox::warning( 0,
tr("OTGateway error"),
S );
}
void OTGateway::connectNotify( const char * S ) {
if( S && strcmp( S, "error(const QString&)" ) == 0 ) {
ErrorConnectCount ++;
}
}
void OTGateway::disconnectNotify( const char * S ) {
if( S && strcmp( S, "error(const QString&)" ) == 0 ) {
ErrorConnectCount --;
}
}
void OTGateway::timerEvent( QTimerEvent * ) {
OTDriver * D;
unsigned int oldc = AllDrivers.count();
bool old;
AllDrivers.update();
if( oldc != AllDrivers.count() ) {
updateDrivers();
} else {
for( unsigned int i = 0;
i < AllDrivers.count();
i ++ ) {
D = AllDrivers[i];
old = D->isUp();
if( D->currentState() >= 0 ) {
if( old != D->isUp() ) {
emit stateChange( D, D->isUp() );
}
} else {
// if one driver is unable to provide info
// we refresh all devices
updateDrivers();
return;
}
}
}
}
void OTGateway::SLOT_Enabled( int id, bool Up ) {
- owarn << "device " << id << " state " << Up << oendl;
+ odebug << "device " << id << " state " << Up << oendl;
if( Up ) {
// device is up -> detect it
updateDrivers();
if( (unsigned)id >= AllDrivers.count() ) {
// to make sure that the driver really IS detected
AllDrivers[id]->bringUp();
}
} // if DOWN device already down
emit deviceEnabled( Up );
}
void OTGateway::updateDrivers( void ) {
OTDriver * D;
AllDrivers.update();
- owarn << "updated drivers. now " << AllDrivers.count() << oendl;
+ odebug << "updated drivers. now " << AllDrivers.count() << oendl;
// connect signals for each driver
for( unsigned int i = 0;
i < AllDrivers.count();
i ++ ) {
D = AllDrivers[i];
connect( D,
SIGNAL( error( const QString & ) ),
this,
SLOT( SLOT_ShowError( const QString & ) )
);
connect( D,
SIGNAL( stateChange( OTDriver *, bool ) ),
this,
SIGNAL( stateChange( OTDriver *, bool ) )
);
connect( D,
SIGNAL( driverDisappeared( OTDriver * ) ),
this,
SLOT( SLOT_DriverDisappeared( OTDriver * ) )
);
}
// verify main device too
if( TheOTDevice )
TheOTDevice->checkAttach();
// set to default scanning hardware
setScanWith( 0 );
emit driverListChanged();
}
void OTGateway::SLOT_DriverDisappeared( OTDriver * D ) {
- owarn << "Driver " << D->devname() << " when offline" << oendl;
+ odebug << "Driver " << D->devname() << " when offline" << oendl;
updateDrivers();
}
void OTGateway::scanNeighbourhood( OTDriver * D ) {
if( Scanning ) {
stopScanOfNeighbourhood();
}
if( D ) {
setScanWith( D );
}
Scanning = new OTInquiry( scanWith() );
connect( Scanning,
SIGNAL( peerFound( OTPeer *, bool )),
this,
SLOT( SLOT_PeerDetected( OTPeer *, bool ) )
);
connect( Scanning,
SIGNAL( finished()),
this,
SLOT( SLOT_FinishedDetecting() )
);
// start scanning
Scanning->inquire( 30.0 );
}
OTPeer* OTGateway::findPeer( const OTDeviceAddress & Addr ) {
for( unsigned int i = 0 ; i < AllPeers.count(); i ++ ) {
if( AllPeers[i]->address() == Addr ) {
return AllPeers[i];
}
}
return 0;
}
OTDriver* OTGateway::findDriver( const OTDeviceAddress & Addr ) {
for( unsigned int i = 0 ; i < AllDrivers.count(); i ++ ) {
if( AllDrivers[i]->address() == Addr ) {
return AllDrivers[i];
}
}
return 0;
}
void OTGateway::SLOT_PeerDetected( OTPeer * P, bool IsNew ) {
if( IsNew ) {
// new peer
- owarn << "New peer " << P->name() << oendl;
+ odebug << "New peer " << P->name() << oendl;
addPeer( P );
}
emit detectedPeer( P, IsNew );
}
void OTGateway::addPeer( OTPeer * P ) {
AllPeers.resize( AllPeers.size()+1);
AllPeers.insert( AllPeers.size()-1, P );
AllPeersModified = 1;
}
void OTGateway::removePeer( OTPeer * P ) {
int i = AllPeers.find( P );
if( i ) {
AllPeers.remove( i );
AllPeersModified = 1;
}
}
void OTGateway::stopScanOfNeighbourhood( void ) {
if( Scanning ) {
delete Scanning;
Scanning = 0;
}
}
void OTGateway::SLOT_FinishedDetecting() {
stopScanOfNeighbourhood();
emit finishedDetecting();
}
const char * OTGateway::deviceTypeToName( int cls ) {
switch ( (cls & 0x001F00) >> 8) {
case 0x00:
return "misc";
case 0x01:
return "computer";
case 0x02:
return "phone";
case 0x03:
return "lan";
case 0x04:
return "av";
case 0x05:
return "peripheral";
case 0x06:
return "imaging";
case 0x07:
default :
break;
}
return "unknown";
}
PANConnectionVector OTGateway::getPANConnections( void ) {
PANConnectionVector V;
struct bnep_connlist_req req;
struct bnep_conninfo ci[48];
V.setAutoDelete(TRUE);
int ctl = socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_BNEP);
if (ctl < 0) {
- owarn << "Failed to open control socket" << oendl;
+ odebug << "Failed to open control socket" << oendl;
return V;
}
req.cnum = 48;
req.ci = ci;
if (ioctl(ctl, BNEPGETCONNLIST, &req)) {
- owarn << "Failed to get connection list" << oendl;
+ odebug << "Failed to get connection list" << oendl;
::close( ctl );
return V;
}
for ( unsigned i=0; i < req.cnum; i++) {
V.resize( V.size() + 1 );
if( ci[i].role == BNEP_SVC_PANU ) {
// we are the client
V.insert( V.size()-1, new OTPANConnection(
ci[i].device,
batostr((bdaddr_t *) ci[i].dst)
) );
}
}
::close( ctl );
return V;
}
struct link_key {
bdaddr_t sba;
bdaddr_t dba;
uint8_t key[16];
uint8_t type;
time_t time;
};
void OTGateway::readLinkKeys( void ) {
struct link_key k;
int rv;
AllKeys.truncate(0);
QFile F( "/etc/bluetooth/link_key" );
if( ! F.open( IO_ReadOnly ) ) {
emit error( tr("Cannot open link_key file") );
return;
}
while( 1 ) {
rv = F.readBlock( (char *)&k, sizeof( k ) );
if( rv == 0 )
// EOF
break;
if( rv < 0 ) {
diff --git a/noncore/settings/networksettings2/opietooth2/OTHCISocket.cpp b/noncore/settings/networksettings2/opietooth2/OTHCISocket.cpp
index 471c3bf..1997b44 100644
--- a/noncore/settings/networksettings2/opietooth2/OTHCISocket.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTHCISocket.cpp
@@ -1,97 +1,97 @@
//-*-c++-*-
/***************************************************************************
* Copyright (C) 2003 by Fred Schaettgen *
* kdebluetooth@schaettgen.de *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#include <qbuffer.h>
#include <qtimer.h>
#include <qdatastream.h>
#include <opie2/odebug.h>
#include <bluezlib.h>
// #include "deviceaddress.h"
#include <OTHCISocket.h>
#include <OTDriver.h>
using namespace Opietooth2;
OTHCISocket::OTHCISocket( OTDriver * D ) :
QObject( D, D->devname() ) {
BStatusSet = false;
Driver = D;
HCIReadNotifier = 0;
}
OTHCISocket::~OTHCISocket() {
close();
}
void OTHCISocket::close() {
- owarn << "OTHCISocket::close()" << oendl;
+ odebug << "OTHCISocket::close()" << oendl;
if( HCIReadNotifier ) {
delete HCIReadNotifier;
}
if( HCISocket.isValid() ) {
HCISocket.close();
}
}
bool OTHCISocket::open() {
- owarn << "OTHCISocket::open()" << oendl;
+ odebug << "OTHCISocket::open()" << oendl;
int s;
s = ::socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
if (s < 0) {
emit error( tr( "Error creating socket on %1 : %2 %3").
arg( Driver->devname() ).
arg( errno ).
arg( strerror(errno) )
);
return false;
}
/* Bind socket to the HCI device */
struct sockaddr_hci sa;
sa.hci_family = AF_BLUETOOTH;
sa.hci_dev = Driver->devId();
if (bind(s, (struct sockaddr *)&sa, sizeof(sa)) < 0) {
::close(s);
emit error( tr( "Error binding to socket to %1 : %2 %3").
arg( Driver->devname() ).
arg( errno ).
arg( strerror(errno) )
);
return false;
}
struct hci_filter flt;
hci_filter_clear(&flt);
hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
hci_filter_all_events(&flt);
if( setsockopt(s, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0 ) {
::close(s);
emit error( tr( "HCI filter setup failed on %1 : %2 %3").
arg( Driver->devname() ).
arg( errno ).
arg( strerror(errno) )
);
return false;
}
if( HCIReadNotifier ) {
delete HCIReadNotifier;
}
HCISocket.setSocket(s, QSocketDevice::Datagram);
HCIReadNotifier = new QSocketNotifier(
s, QSocketNotifier::Read, this);
@@ -106,169 +106,169 @@ bool OTHCISocket::open() {
// this, SLOT(slotSocketError(int)));
//connect(hciSocket, SIGNAL(connectionClosed()),
// this, SLOT(slotConnectionClosed()));
//hciSocket->setSocket(s);
return true;
}
void OTHCISocket::slotSocketError(int e) {
close();
emit error( tr( "HCI socket error 0x%1 on %1 : %2 %3").
arg(e,2,16).
arg( Driver->devname() ).
arg( errno ).
arg( strerror(errno) )
);
}
void OTHCISocket::slotSocketActivated() {
QSocketDevice::Error err = HCISocket.error();
if( (err == QSocketDevice::NoError ) &&
( HCISocket.isValid() ) ) {
//kdDebug() << "HCI socket ready read." << endl;
unsigned char buf[512];
int psize = HCISocket.readBlock((char*)buf, 512);
if (psize <= 0) {
slotSocketError(HCISocket.error());
HCISocket.close();
return;
}
//unsigned char packetType = buf[0];
unsigned char eventCode = buf[1];
unsigned char len = buf[2];
if (psize-3 == len) {
QByteArray databuf;
databuf.duplicate((char*)(buf+3), len);
emit event(eventCode, databuf);
if (eventCode == EVT_CMD_STATUS) {
updateStatus( databuf );
}
} else {
- owarn << "Error reading hci packet: packetSize("
+ odebug << "Error reading hci packet: packetSize("
<< psize
<< ")-3 != dataSize("
<< len
<< ")"
<< oendl;
}
} else if (err == QSocketDevice::NoError) {
slotConnectionClosed();
} else {
HCISocket.close();
slotSocketError(err);
}
}
void OTHCISocket::updateStatus(const QByteArray& data) {
QDataStream stream(data, IO_ReadOnly);
stream.setByteOrder(QDataStream::LittleEndian);
Q_UINT8 status, dummy;
Q_UINT16 opcode;
BStatusSet = true;
stream >> status >> dummy >> opcode;
//kdDebug() << "updatestatus opcode=" << uint32_t(opcode) << endl;
LastStatus = status;
LastStatusOgf = cmd_opcode_ogf(opcode);
LastStatusOcf = cmd_opcode_ocf(opcode);
}
void OTHCISocket::slotConnectionClosed() {
- owarn << "HCI connection closed." << oendl;
+ odebug << "HCI connection closed." << oendl;
emit connectionClosed();
}
void OTHCISocket::readEvent() {
if (HCIReadNotifier) {
slotSocketActivated();
}
}
bool OTHCISocket::sendCommand( unsigned char ogf,
unsigned short ocf,
QByteArray buf
) {
QBuffer packet;
QDataStream stream(&packet);
stream.setByteOrder(QDataStream::LittleEndian);
packet.open(IO_WriteOnly);
if (buf.size() > 255) return false;
//kdDebug() << "sendCommand. ogf=" << ogf << " ocf=" << ocf << endl;
Q_UINT16 opcode = cmd_opcode_pack(ogf, ocf);
Q_UINT8 pType = HCI_COMMAND_PKT;
Q_UINT8 buflen = buf.size();
stream << pType << opcode << buflen;
stream.writeRawBytes(buf.data(), buflen);
packet.close();
HCISocket.writeBlock((const char*)packet.buffer(),
packet.buffer().size());
return true;
}
bool OTHCISocket::readStatus( unsigned char ogf,
unsigned short ocf,
int *status,
int timeout_ms) {
QTimer timer;
timer.start(timeout_ms, true);
BStatusSet = false;
while (timer.isActive() && HCISocket.isValid()) {
- owarn << "OTHCISocket::readStatus()" << oendl;
+ odebug << "OTHCISocket::readStatus()" << oendl;
bool timeout = false;
if( HCISocket.bytesAvailable() == 0) {
int rv = HCISocket.waitForMore(timeout_ms);
timeout = (rv == 0);
}
if (!timeout) {
slotSocketActivated();
}
if( BStatusSet == true &&
ogf == LastStatusOgf &&
ocf == LastStatusOcf) {
*status = LastStatus;
- owarn << "OTHCISocket::readStatus(ogf="
+ odebug << "OTHCISocket::readStatus(ogf="
<< ogf
<< ",ocf="
<< ocf
<< ",timeout="
<< LastStatus
<< ")"
<< oendl;
return true;
}
}
- owarn << "OTHCISocket::readStatus(ogf="
+ odebug << "OTHCISocket::readStatus(ogf="
<< ogf
<< ",ocf="
<< ocf
<< ",timeout="
<< LastStatus
<< ") : timeout "
<< oendl;
return false;
}
int OTHCISocket::socket() {
return HCISocket.socket();
}
diff --git a/noncore/settings/networksettings2/opietooth2/OTInquiry.cpp b/noncore/settings/networksettings2/opietooth2/OTInquiry.cpp
index 8e94bbc..2bc63c7 100644
--- a/noncore/settings/networksettings2/opietooth2/OTInquiry.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTInquiry.cpp
@@ -14,206 +14,206 @@
#include <qsocket.h>
#include <qdatetime.h>
#include <qtimer.h>
#include <qthread.h>
#include <qapplication.h>
#include <bluezlib.h>
#include <OTGateway.h>
#include <OTDriver.h>
#include <OTPeer.h>
#include <OTHCISocket.h>
#include <OTInquiry.h>
#include <opie2/odebug.h>
using namespace Opietooth2;
#define max(a,b) (((a)>(b)) ? (a) : (b))
#define min(a,b) (((a)>(b)) ? (b) : (a))
OTInquiry::OTInquiry( OTDriver * Drv ) : QObject( Drv ) {
reset();
InquiryTimeoutTimer = new QTimer(this);
connect( InquiryTimeoutTimer,
SIGNAL(timeout()),
this,
SLOT(slotInquiryTimeout()));
Driver = Drv;
Socket = Drv->openSocket();
Socket->open();
connect( Socket,
SIGNAL( event(unsigned char, QByteArray)),
this,
SLOT(slotHCIEvent(unsigned char, QByteArray)));
}
OTInquiry::~OTInquiry() {
stopInquiring();
}
void OTInquiry::stopInquiring( void ) {
if( Socket ) {
- owarn << "Stop inquiry" << oendl;
+ odebug << "Stop inquiry" << oendl;
Driver->closeSocket();
Socket = 0;
}
}
bool OTInquiry::inquire( double timeout, int numResponses, int lap) {
QByteArray cmdBuf(5);
cmdBuf[0] = lap & 0xFF;
cmdBuf[1] = (lap >> 8) & 0xFF;
cmdBuf[2] = (lap >> 16) & 0xFF;
cmdBuf[3] = max(0x01, min(0x30, int(timeout/1.28)));
cmdBuf[4] = (unsigned char)numResponses;
- owarn << "Send HCI inquiry command. wait for " << cmdBuf[3] << oendl;
+ odebug << "Send HCI inquiry command. wait for " << cmdBuf[3] << oendl;
Socket->sendCommand(0x01, 0x0001, cmdBuf);
int status;
if( Socket->readStatus(0x01, 0x0001, &status)) {
if (status == 0) {
SuccessfullyStarted = true;
InquiryTimeoutTimer->start( int(1000*(timeout+1.0)), true);
return true;
}
else {
QString S =QString().sprintf( "%x", status );
- owarn << "OTInquiry::inquiry() failed: 0x" << S << oendl;
+ odebug << "OTInquiry::inquiry() failed: 0x" << S << oendl;
emit finished();
return false;
}
} else {
- owarn << "OTInquiry::inquiry(): Timeout." << oendl;
+ odebug << "OTInquiry::inquiry(): Timeout." << oendl;
return false;
}
}
bool OTInquiry::isInquiring() {
return InquiryTimeoutTimer->isActive();
}
bool OTInquiry::isFinished() {
return SuccessfullyStarted && SuccessfullyEnded;
}
void OTInquiry::reset() {
SuccessfullyStarted = false;
SuccessfullyEnded = false;
//addrCache.clear();
//infoQueue.clear();
}
void OTInquiry::onPeerFound( OTPeer * Peer, bool IsNew ) {
emit peerFound( Peer, IsNew );
}
void OTInquiry::slotInquiryTimeout() {
emit error( tr( "Timeout while waiting for end of inquiry.") );
}
void OTInquiry::slotHCIEvent(unsigned char eventCode, QByteArray buf) {
- owarn << "OTInquiry: hci packet received: eventCode="
+ odebug << "OTInquiry: hci packet received: eventCode="
<< (unsigned int)eventCode
<< " packetLength="
<< (unsigned int)buf.size()
<< oendl;
unsigned char *data = (unsigned char*)buf.data();
switch (eventCode) {
case EVT_INQUIRY_COMPLETE:
{ unsigned char status = data[0];
- owarn << "EVT_INQUIRY_COMPLETE status=" << status << oendl;
+ odebug << "EVT_INQUIRY_COMPLETE status=" << status << oendl;
InquiryTimeoutTimer->stop();
if (status == 0) {
if( SuccessfullyStarted == true) {
- owarn << "OTInquiry ended successfully" << oendl;
+ odebug << "OTInquiry ended successfully" << oendl;
SuccessfullyEnded = true;
}
emit finished();
}
else {
emit error( tr( "OTInquiry completed with error (code %1)" ).
arg(status));
}
}
break;
case EVT_INQUIRY_RESULT:
{ int numResults = data[0];
OTPeer * P = 0;
bool IsNew;
OTDeviceAddress Addr;
QString N;
inquiry_info *results = (inquiry_info*)(data+1);
for (int n=0; n<numResults; n++) {
Addr.setBDAddr( results[n].bdaddr );
- owarn << "INQUIRY_RESULT: "
+ odebug << "INQUIRY_RESULT: "
<< Addr.toString()
<< oendl;
P = Driver->gateway()->findPeer( Addr );
if( P ) {
// peer known
if( P->state() != OTPeer::Peer_Up ) {
P->setState( OTPeer::Peer_Up );
}
IsNew = 0;
} else {
IsNew = 1;
// push the address to the address queue
// where it can be consumed by nextNeighbour()
P = new OTPeer( Driver->gateway() );
P->setState( OTPeer::Peer_Up ); // we just detected it
P->setAddress( Addr );
//if( addrCache.find(info.addr) == addrCache.end()) {
// addrCache.insert(info.addr);
P->setDeviceClass( (results[n].dev_class[0] << 16) |
(results[n].dev_class[1] << 8) |
(results[n].dev_class[2] << 0) );
// infoQueue.push_back(info);
P->setName( Driver->getPeerName( Addr ) );
}
// call the handler. Emits a signal if not overwritten
onPeerFound( P, IsNew );
// }
}
}
break;
case EVT_CMD_STATUS :
{ int status = data[0];
int numHciCmdPkts = data[1];
int cmdOpcode = *((uint16_t*)(data+2));
- owarn << "EVT_CMD_STATUS status="
+ odebug << "EVT_CMD_STATUS status="
<< status
<< " numPkts="
<< numHciCmdPkts
<< " cmdOpcode="
<< cmdOpcode
<< oendl;
if (cmdOpcode == OCF_INQUIRY) {
}
}
break;
}
}
diff --git a/noncore/settings/networksettings2/opietooth2/OTPeer.cpp b/noncore/settings/networksettings2/opietooth2/OTPeer.cpp
index 0d7e943..2272f04 100644
--- a/noncore/settings/networksettings2/opietooth2/OTPeer.cpp
+++ b/noncore/settings/networksettings2/opietooth2/OTPeer.cpp
@@ -6,361 +6,361 @@
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#include <assert.h>
#include <sys/poll.h>
#include <string.h>
#include <bluezlib.h>
#include <qarray.h>
#include <qtextstream.h>
#include <opie2/odebug.h>
#include <OTDeviceAddress.h>
#include <OTSDPAttribute.h>
#include <OTSDPService.h>
#include <OTPeer.h>
#include <OTGateway.h>
#include <OTDriver.h>
using namespace Opietooth2;
OTPeer::OTPeer( OTGateway * _OT ) {
OT = _OT;
State = Peer_Unknown;
ConnectedTo = 0;
}
OTPeer::OTPeer( QTextStream & TS, OTGateway * _OT ) {
OT = _OT;
State = Peer_Unknown;
ConnectedTo = 0;
load( TS );
}
OTPeer::~OTPeer( ) {
}
void OTPeer::updateServices( void ) {
sdp_session_t *session;
serviceList.clear();
- owarn << "Get services from " << Addr.toString() << oendl;
+ odebug << "Get services from " << Addr.toString() << oendl;
session = sdp_connect( &(OTDeviceAddress::any.getBDAddr()),
&(Addr.getBDAddr()),
0);
if (!session) {
- owarn << "sdp_connect("
+ odebug << "sdp_connect("
<< Addr.toString()
<< ") failed"
<< oendl;
return; // error
}
uint32_t range = 0x0000ffff;
sdp_list_t* attrId = sdp_list_append(0, &range);
// search all public features
uuid_t grp;
sdp_uuid16_create( &grp, PUBLIC_BROWSE_GROUP );
sdp_list_t * search = sdp_list_append(0, &grp );
// get data from peer
sdp_list_t* seq;
if (sdp_service_search_attr_req( session,
search,
SDP_ATTR_REQ_RANGE,
attrId,
&seq ) ) {
- owarn << "Service Search failed" << oendl;
+ odebug << "Service Search failed" << oendl;
sdp_close(session);
return;
}
sdp_list_free(attrId, 0);
sdp_list_free(search, 0);
// process result
sdp_list_t* next = NULL;
for (; seq; seq = next) {
sdp_record_t *rec = (sdp_record_t *) seq->data;
sdp_list_t* attrlist = rec->attrlist;
AttributeVector alist;
OTSDPService * service;
service = new OTSDPService();
for (; attrlist; attrlist = attrlist->next) {
int attrID = ((sdp_data_t*)(attrlist->data))->attrId;
service->addAttribute(
attrID,
new OTSDPAttribute( (sdp_data_t*)(attrlist->data) )
);
}
serviceList.resize( serviceList.size() + 1 );
serviceList.insert( serviceList.size() - 1, service );
next = seq->next;
free(seq);
sdp_record_free(rec);
}
sdp_close(session);
}
bool OTPeer::hasServiceClassID( const OTUUID & uuid) {
for( unsigned int i = 0;
i < serviceList.count();
i ++ ) {
if( serviceList[i]->hasClassID(uuid))
return true;
}
return false;
}
/** Get a vector of Rfcomm channels of the services having "uuid" in the class ID List*/
QArray<int> OTPeer::rfcommList( const OTUUID & uuid) {
QArray<int> rfcommList;
unsigned int channel;
for( unsigned int i = 0;
i < serviceList.count();
i ++ ) {
if( serviceList[i]->hasClassID(uuid)) {
if( serviceList[i]->rfcommChannel(channel) ) {
rfcommList.resize( rfcommList.size()+1 );
rfcommList[rfcommList.size()-1] = channel;
}
}
}
return rfcommList;
}
void OTPeer::save( QTextStream & TS ) {
TS << "bdaddr " << address().toString() << endl;
TS << "name " << name() << endl;
TS << "class " << deviceClass() << endl;
}
void OTPeer::load( QTextStream & TS ) {
QString S;
S = TS.readLine();
setAddress( OTDeviceAddress( S.mid( 7 ) ) );
S = TS.readLine();
setName( S.mid( 5 ) );
S = TS.readLine();
setDeviceClass( S.mid( 6 ).toLong() );
}
#define MAGICNR -99999
#define POLLDELAY 1000
#define PREMAGICNR (MAGICNR+POLLDELAY)
void OTPeer::findOutState( int timeoutInSec, bool Force ) {
ProbeFD = -1;
if( Force && ConnectedTo == 0 ) {
State = OTPeer::Peer_Unknown;
} // else keep state or is connected to us
if( State == OTPeer::Peer_Unknown ) {
ProbePhase = 0;
ProbeTimeout = timeoutInSec*1000;
- owarn << "Ping " << address().toString() << oendl;
+ odebug << "Ping " << address().toString() << oendl;
startTimer( POLLDELAY );
} else {
ProbeTimeout = 0;
startTimer( 0 );
}
}
#define PINGSIZE 20
void OTPeer::timerEvent( QTimerEvent * ev ) {
ProbeTimeout -= POLLDELAY;
if( State == OTPeer::Peer_Unknown ) {
switch( ProbePhase ) {
case 0 : // connect nonblock
{ struct sockaddr_l2 addr;
if (( ProbeFD = ::socket(PF_BLUETOOTH, SOCK_RAW, BTPROTO_L2CAP)) < 0) {
ProbeTimeout = 0;
break;
}
memset(&addr, 0, sizeof(addr));
addr.l2_family = AF_BLUETOOTH;
addr.l2_bdaddr = OTDeviceAddress::any.getBDAddr();
if( ::bind( ProbeFD, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
ProbeTimeout = 0;
break;
}
// non blocking
if( ::fcntl( ProbeFD, F_SETFL, O_NONBLOCK ) < 0 ) {
ProbeTimeout = 0;
break;
}
// to this peer
addr.l2_bdaddr = address().getBDAddr();
if( ::connect( ProbeFD, (struct sockaddr *) &addr, sizeof(addr)) < 0) {
if( errno != EAGAIN && errno != EINPROGRESS ) {
ProbeTimeout = 0;
break;
} // wait for connect to fail or succeed
}
}
ProbePhase = 1; // wait for connect
break;
case 1 :
{ struct pollfd pf[1];
char buf[L2CAP_CMD_HDR_SIZE + PINGSIZE + 20];
int n;
pf[0].fd = ProbeFD;
pf[0].events = POLLOUT;
if( (n = ::poll(pf, 1, 0)) < 0 ) {
- owarn << address().toString()
+ odebug << address().toString()
<< " : errno "
<< errno
<< " "
<< strerror(errno)<<oendl;
ProbeTimeout = 0;
break;
}
if( ! n ) {
// not ready -> try again
break;
}
// send ping
for( unsigned int i = L2CAP_CMD_HDR_SIZE; i < sizeof(buf); i++)
buf[i] = (i % 40) + 'A';
l2cap_cmd_hdr *cmd = (l2cap_cmd_hdr *) buf;
/* Build command header */
cmd->code = L2CAP_ECHO_REQ;
cmd->ident = *(char *)this; // get some byte
cmd->len = PINGSIZE;
/* Send Echo Request */
if( ::send(ProbeFD, buf, PINGSIZE + L2CAP_CMD_HDR_SIZE, 0) <= 0) {
if( errno == EACCES ) {
// permission denied means that we could not
// connect because the device does not allow us
// but it is UP
- owarn << address().toString()
+ odebug << address().toString()
<< " good send error "
<< errno
<< " "
<< strerror( errno)
<< oendl;
State = OTPeer::Peer_Up;
ProbeTimeout = 0;
break;
} else if( errno != EBUSY ) {
- owarn << address().toString()
+ odebug << address().toString()
<< " : errno "
<< errno
<< " "
<< strerror(errno)
<< oendl;
ProbeTimeout = 0;
break;
} // else want some more
}
ProbePhase = 2; // wait for ping reply
}
break;
case 2 : // wait for reply
{ struct pollfd pf[1];
char buf[L2CAP_CMD_HDR_SIZE + PINGSIZE + 20];
l2cap_cmd_hdr *cmd = (l2cap_cmd_hdr *) buf;
int n;
pf[0].fd = ProbeFD;
pf[0].events = POLLIN;
if( (n = ::poll(pf, 1, 0)) < 0 ) {
- owarn << address().toString()
+ odebug << address().toString()
<< " : errno "
<< errno
<< " "
<< strerror(errno)
<<oendl;
ProbeTimeout = 0;
break;
}
if( ! n ) {
// not ready -> try again
break;
}
if( (n = ::recv( ProbeFD, buf, sizeof(buf), 0)) < 0) {
- owarn << address().toString()
+ odebug << address().toString()
<< "errno "
<< errno
<< " "
<< strerror(errno)
<< oendl;
ProbeTimeout = 0;
break;
}
/* Check for our id */
if( cmd->ident != *(char *)this )
// not our reply
break;
- owarn << "reply from "
+ odebug << "reply from "
<< address().toString()
<< oendl;
// whatever reply we get is a valid reply
State = OTPeer::Peer_Up;
ProbeTimeout = 0;
}
break;
}
if( State != OTPeer::Peer_Unknown ) {
ProbeTimeout = 0;
}
}
if( ProbeTimeout <= 0 ) {
// regular timeout
emit peerStateReport( this );
if( State == Peer_Unknown ) {
State = Peer_Down;
}
if( ProbeFD >= 0 ) {
// requested to stop by caller -> stop probing
::close( ProbeFD );
}
// no more waiting
killTimer( ev->timerId() );
} // else sleep some more
}
void OTPeer::stopFindingOutState( void ) {
ProbeTimeout = PREMAGICNR;
}
diff --git a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp
index b14cc2f..8323549 100644
--- a/noncore/settings/networksettings2/opietooth2/Opietooth.cpp
+++ b/noncore/settings/networksettings2/opietooth2/Opietooth.cpp
@@ -492,166 +492,166 @@ int OTScan::getDevice( OTPeer *& Peer,
delete Dlg;
return rv;
}
void OTScan::setScanFilter( const UUIDVector & V ) {
Filter = V;
}
void OTScan::resetScanFilter( void ) {
Filter.truncate(0);
}
void OTScan::SLOT_DoScan( bool DoIt ) {
if( DoIt ) {
OT->scanNeighbourhood();
} else {
OT->stopScanOfNeighbourhood();
}
scanMode( DoIt );
}
// double clicked on a device
void OTScan::SLOT_Selected( QListViewItem * it ) {
if( ! it )
return;
if( Filter.count() > 0 ) {
// filter on service
if( it->depth() == 0 ) {
// select a service and not a device
return;
}
// store result
SelectedPeer = ((PeerLVI *)it->parent())->peer();
SelectedChannel = ((ChannelLVI *)it)->channel();
} else {
// click on device
if( it->depth() != 0 ) {
return;
}
SelectedPeer = ((PeerLVI *)it)->peer();
SelectedChannel = 0;
}
- owarn << "Selected " << SelectedPeer->address().toString() <<
+ odebug << "Selected " << SelectedPeer->address().toString() <<
" Channel " << SelectedChannel << oendl;
emit selected();
}
void OTScan::SLOT_FinishedDetecting( ) {
scanMode( false );
}
void OTScan::SLOT_CleanupOld( ) {
// iterate over all peers and find those that
// are down and have no pairing info
OTPeer * TheP;
const LinkKeyArray & Keys = OT->getLinkKeys();
QListViewItem * Lit = DetectedPeers_LV->firstChild();
while( Lit ) {
TheP = ((PeerLVI *)Lit)->peer();
if( TheP->state() == OTPeer::Peer_Down ) {
unsigned int k;
// what about linkkeys ?
for( k = 0; k < Keys.count(); k ++ ) {
if( TheP->address() == Keys[k].to() ||
TheP->address() == Keys[k].from()
) {
// part of linkkey
- owarn << "LINKKEY " << TheP->address().toString() << oendl;
+ odebug << "LINKKEY " << TheP->address().toString() << oendl;
break;
}
}
if( k == Keys.count() ) {
- owarn << "RM LINKKEY " << TheP->address().toString() << oendl;
+ odebug << "RM LINKKEY " << TheP->address().toString() << oendl;
// not found -> remember to remove this peer
QListViewItem * Nit;
OT->removePeer( TheP );
Nit = Lit->nextSibling();
delete Lit;
Lit = Nit;
continue;
}
} else {
- owarn << "NODOWN " << TheP->address().toString() << oendl;
+ odebug << "NODOWN " << TheP->address().toString() << oendl;
}
Lit = Lit->nextSibling();
}
}
void OTScan::SLOT_NewPeer( OTPeer * P, bool IsNew ){
PeerLVI * it = 0;
if( IsNew ) {
it = new PeerLVI( P, DetectedPeers_LV );
} else {
// find peer in table
QListViewItem * Lit = DetectedPeers_LV->firstChild();
while( Lit ) {
if( ((PeerLVI *)Lit)->peer() == P ) {
// this item
it = (PeerLVI *)Lit;
break;
}
Lit = Lit->nextSibling();
}
if( ! it ) {
- owarn << "Should not occur" << oendl;
+ odebug << "Should not occur" << oendl;
return;
}
}
// update/show info
it->setText( 0, P->name() );
it->setPixmap(0, Icons->deviceIcon(
OT->deviceTypeToName( P->deviceClass() ) ) );
// tell peer to report its state async
connect( P,
SIGNAL( peerStateReport( OTPeer *)),
this,
SLOT( SLOT_PeerState( OTPeer *))
);
if( IsNew ) {
// find state
refreshState( (PeerLVI *)it, 1 );
} else {
// update staet
SLOT_PeerState( P );
}
}
void OTScan::SLOT_PeerState( OTPeer * P ) {
PeerLVI * it = (PeerLVI *)DetectedPeers_LV->firstChild();
while( it ) {
if( it->peer() == P ) {
break;
}
it = (PeerLVI * )it->nextSibling();
}
if( ! it )
return;
switch( P->state() ) {
case OTPeer::Peer_Unknown :
case OTPeer::Peer_Down :
it->setPixmap( 1, 0 );
break;
case OTPeer::Peer_Up :
it->setPixmap( 1, Icons->loadPixmap(
( P->connectedTo() ) ? "connected" : "notconnected" ) );
if( it == Current && ! StrengthTimer->isActive() ) {
// start showing strength
StrengthTimer->start( 1000, FALSE );
@@ -884,97 +884,97 @@ void OTScan::scanMode( bool M ) {
//
//
OTManage::OTManage( QWidget * parent, OTIcons * _IC ) :
OTManageGUI( parent ) {
OT = OTGateway::getOTGateway();
Icons = (_IC ) ? _IC : new OTIcons();
MyIcons = (_IC == 0 );
AllDrivers_LV->setSorting(-1);
connect( OT,
SIGNAL( driverListChanged() ),
this,
SLOT( SLOT_DriverListChanged() )
);
connect( OT,
SIGNAL( stateChange( OTDriver *, bool ) ),
this,
SLOT( SLOT_StateChange( OTDriver *, bool ) )
);
SLOT_DriverListChanged();
AllDrivers_LV->header()->hide();
}
OTManage::~OTManage() {
if( MyIcons )
delete Icons;
OTGateway::releaseOTGateway();
}
void OTManage::SLOT_ShowDriver( QListViewItem * It ) {
if( It == 0 || It->depth() > 0 )
// not toplevel
return;
DriverLVI * it = (DriverLVI *) It;
DriverIsUp_CB->setChecked( it->driver()->isUp() );
}
void OTManage::SLOT_UpDriver( bool Up ) {
QListViewItem * it = AllDrivers_LV->firstChild();
while( it ) {
if( it->isSelected() ) {
OTDriver * D = ((DriverLVI *)it)->driver();
- owarn << "UP driver " << D->devname() << oendl;
+ odebug << "UP driver " << D->devname() << oendl;
// this
D->setUp( Up );
return;
}
it = it->nextSibling();
}
}
void OTManage::SLOT_StateChange( OTDriver * D, bool Up ) {
QListViewItem * it = AllDrivers_LV->firstChild();
while( it ) {
if( ((DriverLVI *)it)->driver() == D ) {
it->setPixmap( 0,
Icons->loadPixmap( ( Up ) ? "bluezon" : "bluezoff" ) );
return;
}
it = it->nextSibling();
}
}
void OTManage::SLOT_DriverListChanged( ) {
DriverLVI * It;
QListViewItem * Sub;
QListViewItem * First = 0;
OTDriver* D;
OTDriverList & DL = OT->getDriverList();
AllDrivers_LV->clear();
for( unsigned int i = 0;
i < DL.count();
i ++ ) {
D = DL[i];
It = new DriverLVI( D, AllDrivers_LV );
if( ! First )
First = It;
It->setText( 0, D->devname() );
It->setPixmap( 0,
Icons->loadPixmap( (D->isUp()) ?
"bluezon" : "bluezoff" ) );
Sub = new QListViewItem( It );
Sub->setText( 0, tr( "Name" ) );
Sub->setText( 1, D->name() );
Sub = new QListViewItem( It );
Sub->setText( 0, tr( "Address" ) );
diff --git a/noncore/settings/networksettings2/opietooth2/config.in b/noncore/settings/networksettings2/opietooth2/config.in
index 720f49a..084e8c0 100644
--- a/noncore/settings/networksettings2/opietooth2/config.in
+++ b/noncore/settings/networksettings2/opietooth2/config.in
@@ -1,5 +1,5 @@
config NS2OPIETOOTH
- boolean "opie-networksettings2 bluetooth library"
+ boolean "Opietooth2 bluetooth library"
default "y"
- depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE
+ depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBBLUEZ_DEP && NS2CORE
diff --git a/noncore/settings/networksettings2/opietooth2/libopietooth2.postinst b/noncore/settings/networksettings2/opietooth2/libopietooth2.postinst
index cd605c2..2713c61 100755
--- a/noncore/settings/networksettings2/opietooth2/libopietooth2.postinst
+++ b/noncore/settings/networksettings2/opietooth2/libopietooth2.postinst
@@ -1,10 +1,10 @@
#!/bin/sh
QTPB=/opt/QtPalmtop/bin
[ ! -L ${QTPB}/networksettings2-opietooth ] && ln -sf ${QTPB}/networksettings2 ${QTPB}/networksettings2-opietooth
# qcop QPE/Taskbar "linkChanged(opietooth)"
-qcop QPE/Taskbar "reloadApps()"
+${QTPB}/qcop QPE/Taskbar "reloadApps()"
exit 0
diff --git a/noncore/settings/networksettings2/opietooth2/opietooth2.pro b/noncore/settings/networksettings2/opietooth2/opietooth2.pro
index e0057a9..16277cf 100644
--- a/noncore/settings/networksettings2/opietooth2/opietooth2.pro
+++ b/noncore/settings/networksettings2/opietooth2/opietooth2.pro
@@ -1,37 +1,44 @@
TEMPLATE = lib
CONFIG += qt warn_on release
#CONFIG += qt warn_on debug
DESTDIR = $(OPIEDIR)/lib$(PROJMAK)
HEADERS = OTDevice.h \
OTDriver.h \
OTGateway.h \
OTHCISocket.h \
OTInquiry.h \
OTDeviceAddress.h \
OTIcons.h \
OTUUID.h \
OTSDPAttribute.h \
OTSDPService.h \
OTPeer.h \
Opietooth.h
SOURCES = OTDevice.cpp \
OTDriver.cpp \
OTDriverList.cpp \
OTHCISocket.cpp \
OTInquiry.cpp \
OTDeviceAddress.cpp \
OTUUID.cpp \
OTSDPAttribute.cpp \
OTSDPService.cpp \
OTIcons.cpp \
OTPeer.cpp \
OTGateway.cpp \
Opietooth.cpp
INCLUDEPATH += $(OPIEDIR)/include ../networksettings2
DEPENDPATH += $(OPIEDIR)/include
LIBS += -lqpe -lopiecore2 -lbluetooth -lnetworksettings2
INTERFACES = OTMainGUI.ui OTSniffGUI.ui OTScanGUI.ui OTManageGUI.ui OTPairingGUI.ui
TARGET = opietooth2
VERSION = 1.0.0
include ( $(OPIEDIR)/include.pro )
+
+!isEmpty( LIBBLUEZ_INC_DIR ) {
+ INCLUDEPATH += $$LIBBLUEZ_INC_DIR
+}
+!isEmpty( LIBBLUEZ_LIB_DIR ) {
+ LIBS += -L$$LIBBLUEZ_LIB_DIR
+}