summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore 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 )
15 odebug << "APP: Bluetooth host controller interface '" << it.current()->name() << "' has MAC '" << it.current()->macAddress() << "'" << oendl; 15 odebug << "APP: Bluetooth host controller interface '" << it.current()->name() << "' has MAC '" << it.current()->macAddress() << "'" << oendl;
16 odebug << "APP: Interface is " << ( it.current()->isUp() ? "UP" : "DOWN" ) << ". Trying to toggle state..." << oendl;
17 it.current()->setUp( !it.current()->isUp() );
18 odebug << "APP: Interface is " << ( it.current()->isUp() ? "UP" : "DOWN" ) << "." << oendl;
16 ++it; 19 ++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()
106 106
107 if (ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1) 107 if (::ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1)
108 { 108 {
@@ -115,3 +115,3 @@ void OBluetooth::synchronize()
115 di.dev_id = ( dr + i )->dev_id; 115 di.dev_id = ( dr + i )->dev_id;
116 if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) == -1 ) 116 if ( ::ioctl( _fd, HCIGETDEVINFO, (void *) &di ) == -1 )
117 { 117 {
@@ -121,3 +121,3 @@ void OBluetooth::synchronize()
121 odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl; 121 odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl;
122 _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di ) ); 122 _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di, _fd ) );
123 } 123 }
@@ -132,13 +132,23 @@ class OBluetoothInterface::Private
132 public: 132 public:
133 Private( struct hci_dev_info* di ) 133 Private( struct hci_dev_info* di, int fd )
134 { 134 {
135 ::memcpy( &devinfo, di, sizeof(struct hci_dev_info) ); 135 ::memcpy( &devinfo, di, sizeof(struct hci_dev_info) );
136 ctlfd = fd;
137 }
138 void reloadInfo()
139 {
140 int result = ::ioctl( ctlfd, HCIGETDEVINFO, (void *) &devinfo );
141 if ( result == -1 )
142 {
143 owarn << "OBluetoothInterface::Private - can't reload device info (" << strerror( errno ) << ")" << oendl;
144 }
136 } 145 }
137 struct hci_dev_info devinfo; 146 struct hci_dev_info devinfo;
147 int ctlfd;
138}; 148};
139 149
140OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) 150OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd )
141 :QObject( parent, name ) 151 :QObject( parent, name )
142{ 152{
143 d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo ); 153 d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo, ctlfd );
144} 154}
@@ -160,2 +170,23 @@ QString OBluetoothInterface::macAddress() const
160 170
171bool OBluetoothInterface::setUp( bool b )
172{
173 int cmd = b ? HCIDEVUP : HCIDEVDOWN;
174 int result = ::ioctl( d->ctlfd, cmd, d->devinfo.dev_id );
175 if ( result == -1 && errno != EALREADY )
176 {
177 owarn << "OBluetoothInterface::setUp( " << b << " ) - couldn't change interface state (" << strerror( errno ) << ")" << oendl;
178 return false;
179 }
180 else
181 {
182 d->reloadInfo();
183 return true;
184 }
185}
186
187bool OBluetoothInterface::isUp() const
188{
189 return hci_test_bit( HCI_UP, &d->devinfo.flags );
190}
191
161} 192}
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
120 */ 120 */
121 OBluetoothInterface( QObject* parent, const char* name, void* devinfo ); 121 OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd );
122 /** 122 /**
@@ -129,2 +129,10 @@ class OBluetoothInterface : public QObject
129 QString macAddress() const; 129 QString macAddress() const;
130 /**
131 * Setting an interface to up enables it to receive packets.
132 */
133 bool setUp( bool );
134 /**
135 * @returns true if the interface is up.
136 */
137 bool isUp() const;
130 138