summaryrefslogtreecommitdiff
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
parent27646acf1280d2644b740d0fea03723030aa19cf (diff)
downloadopie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.zip
opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.gz
opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.bz2
- add bool OBluetoothInterface::setUp( bool )
- add void OBluetoothInterface::isUp() const
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--examples/opiebluez/oblueztest/main.cpp3
-rw-r--r--libopie2/opiebluez/obluetooth.cpp43
-rw-r--r--libopie2/opiebluez/obluetooth.h10
3 files changed, 49 insertions, 7 deletions
diff --git a/examples/opiebluez/oblueztest/main.cpp b/examples/opiebluez/oblueztest/main.cpp
index 2e66d9a..361dbd8 100644
--- a/examples/opiebluez/oblueztest/main.cpp
+++ b/examples/opiebluez/oblueztest/main.cpp
@@ -15,2 +15,5 @@ int main( int argc, char** argv )
odebug << "APP: Bluetooth host controller interface '" << it.current()->name() << "' has MAC '" << it.current()->macAddress() << "'" << oendl;
+ odebug << "APP: Interface is " << ( it.current()->isUp() ? "UP" : "DOWN" ) << ". Trying to toggle state..." << oendl;
+ it.current()->setUp( !it.current()->isUp() );
+ odebug << "APP: Interface is " << ( it.current()->isUp() ? "UP" : "DOWN" ) << "." << oendl;
++it;
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
@@ -106,3 +106,3 @@ void OBluetooth::synchronize()
- if (ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1)
+ if (::ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1)
{
@@ -115,3 +115,3 @@ void OBluetooth::synchronize()
di.dev_id = ( dr + i )->dev_id;
- if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) == -1 )
+ if ( ::ioctl( _fd, HCIGETDEVINFO, (void *) &di ) == -1 )
{
@@ -121,3 +121,3 @@ 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 ) );
}
@@ -132,13 +132,23 @@ 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 );
}
@@ -160,2 +170,23 @@ 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
@@ -120,3 +120,3 @@ class OBluetoothInterface : public QObject
*/
- OBluetoothInterface( QObject* parent, const char* name, void* devinfo );
+ OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd );
/**
@@ -129,2 +129,10 @@ 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;