summaryrefslogtreecommitdiff
path: root/libopie2/opiebluez
authormickeyl <mickeyl>2005-07-14 10:34:55 (UTC)
committer mickeyl <mickeyl>2005-07-14 10:34:55 (UTC)
commit237cf3ec5134e299a9da0ce7deb533383f3d11f0 (patch) (side-by-side diff)
tree299215ea1616d3625b7294744ecfebbb2b0b1d7e /libopie2/opiebluez
parent27646acf1280d2644b740d0fea03723030aa19cf (diff)
downloadopie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.zip
opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.gz
opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.bz2
- add bool OBluetoothInterface::setUp( bool )
- add void OBluetoothInterface::isUp() const
Diffstat (limited to 'libopie2/opiebluez') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiebluez/obluetooth.cpp43
-rw-r--r--libopie2/opiebluez/obluetooth.h10
2 files changed, 46 insertions, 7 deletions
diff --git a/libopie2/opiebluez/obluetooth.cpp b/libopie2/opiebluez/obluetooth.cpp
index b5df96e..c99a822 100644
--- a/libopie2/opiebluez/obluetooth.cpp
+++ b/libopie2/opiebluez/obluetooth.cpp
@@ -105,5 +105,5 @@ void OBluetooth::synchronize()
dr = dl->dev_req;
- if (ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1)
+ if (::ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1)
{
owarn << "OBluetooth::synchronize() - can't complete HCIGETDEVLIST (" << strerror( errno ) << ")" << oendl;
@@ -114,5 +114,5 @@ void OBluetooth::synchronize()
{
di.dev_id = ( dr + i )->dev_id;
- if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) == -1 )
+ if ( ::ioctl( _fd, HCIGETDEVINFO, (void *) &di ) == -1 )
{
owarn << "OBluetooth::synchronize() - can't issue HCIGETDEVINFO on device " << i << " (" << strerror( errno ) << ") - skipping that device. " << oendl;
@@ -120,5 +120,5 @@ void OBluetooth::synchronize()
}
odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl;
- _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di ) );
+ _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di, _fd ) );
}
}
@@ -131,15 +131,25 @@ class OBluetoothInterface::Private
{
public:
- Private( struct hci_dev_info* di )
+ Private( struct hci_dev_info* di, int fd )
{
::memcpy( &devinfo, di, sizeof(struct hci_dev_info) );
+ ctlfd = fd;
+ }
+ void reloadInfo()
+ {
+ int result = ::ioctl( ctlfd, HCIGETDEVINFO, (void *) &devinfo );
+ if ( result == -1 )
+ {
+ owarn << "OBluetoothInterface::Private - can't reload device info (" << strerror( errno ) << ")" << oendl;
+ }
}
struct hci_dev_info devinfo;
+ int ctlfd;
};
-OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo )
+OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd )
:QObject( parent, name )
{
- d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo );
+ d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo, ctlfd );
}
@@ -159,4 +169,25 @@ QString OBluetoothInterface::macAddress() const
}
+bool OBluetoothInterface::setUp( bool b )
+{
+ int cmd = b ? HCIDEVUP : HCIDEVDOWN;
+ int result = ::ioctl( d->ctlfd, cmd, d->devinfo.dev_id );
+ if ( result == -1 && errno != EALREADY )
+ {
+ owarn << "OBluetoothInterface::setUp( " << b << " ) - couldn't change interface state (" << strerror( errno ) << ")" << oendl;
+ return false;
+ }
+ else
+ {
+ d->reloadInfo();
+ return true;
+ }
+}
+
+bool OBluetoothInterface::isUp() const
+{
+ return hci_test_bit( HCI_UP, &d->devinfo.flags );
+}
+
}
}
diff --git a/libopie2/opiebluez/obluetooth.h b/libopie2/opiebluez/obluetooth.h
index 10c8c49..4423a55 100644
--- a/libopie2/opiebluez/obluetooth.h
+++ b/libopie2/opiebluez/obluetooth.h
@@ -119,5 +119,5 @@ class OBluetoothInterface : public QObject
* but access them via @ref OBluetooth::interface().
*/
- OBluetoothInterface( QObject* parent, const char* name, void* devinfo );
+ OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd );
/**
* Destructor.
@@ -128,4 +128,12 @@ class OBluetoothInterface : public QObject
*/
QString macAddress() const;
+ /**
+ * Setting an interface to up enables it to receive packets.
+ */
+ bool setUp( bool );
+ /**
+ * @returns true if the interface is up.
+ */
+ bool isUp() const;
private: