author | mickeyl <mickeyl> | 2005-07-14 10:34:55 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2005-07-14 10:34:55 (UTC) |
commit | 237cf3ec5134e299a9da0ce7deb533383f3d11f0 (patch) (unidiff) | |
tree | 299215ea1616d3625b7294744ecfebbb2b0b1d7e | |
parent | 27646acf1280d2644b740d0fea03723030aa19cf (diff) | |
download | opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.zip opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.gz opie-237cf3ec5134e299a9da0ce7deb533383f3d11f0.tar.bz2 |
- add bool OBluetoothInterface::setUp( bool )
- add void OBluetoothInterface::isUp() const
-rw-r--r-- | examples/opiebluez/oblueztest/main.cpp | 3 | ||||
-rw-r--r-- | libopie2/opiebluez/obluetooth.cpp | 43 | ||||
-rw-r--r-- | libopie2/opiebluez/obluetooth.h | 10 |
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 | |||
@@ -14,4 +14,7 @@ int main( int argc, char** argv ) | |||
14 | { | 14 | { |
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; |
17 | } | 20 | } |
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() | |||
105 | dr = dl->dev_req; | 105 | dr = dl->dev_req; |
106 | 106 | ||
107 | if (ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1) | 107 | if (::ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1) |
108 | { | 108 | { |
109 | owarn << "OBluetooth::synchronize() - can't complete HCIGETDEVLIST (" << strerror( errno ) << ")" << oendl; | 109 | owarn << "OBluetooth::synchronize() - can't complete HCIGETDEVLIST (" << strerror( errno ) << ")" << oendl; |
@@ -114,5 +114,5 @@ void OBluetooth::synchronize() | |||
114 | { | 114 | { |
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 | { |
118 | owarn << "OBluetooth::synchronize() - can't issue HCIGETDEVINFO on device " << i << " (" << strerror( errno ) << ") - skipping that device. " << oendl; | 118 | owarn << "OBluetooth::synchronize() - can't issue HCIGETDEVINFO on device " << i << " (" << strerror( errno ) << ") - skipping that device. " << oendl; |
@@ -120,5 +120,5 @@ void OBluetooth::synchronize() | |||
120 | } | 120 | } |
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 | } |
124 | } | 124 | } |
@@ -131,15 +131,25 @@ class OBluetoothInterface::Private | |||
131 | { | 131 | { |
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 | ||
140 | OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) | 150 | OBluetoothInterface::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 | } |
145 | 155 | ||
@@ -159,4 +169,25 @@ QString OBluetoothInterface::macAddress() const | |||
159 | } | 169 | } |
160 | 170 | ||
171 | bool 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 | |||
187 | bool OBluetoothInterface::isUp() const | ||
188 | { | ||
189 | return hci_test_bit( HCI_UP, &d->devinfo.flags ); | ||
190 | } | ||
191 | |||
161 | } | 192 | } |
162 | } | 193 | } |
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 | |||
119 | * but access them via @ref OBluetooth::interface(). | 119 | * but access them via @ref OBluetooth::interface(). |
120 | */ | 120 | */ |
121 | OBluetoothInterface( QObject* parent, const char* name, void* devinfo ); | 121 | OBluetoothInterface( QObject* parent, const char* name, void* devinfo, int ctlfd ); |
122 | /** | 122 | /** |
123 | * Destructor. | 123 | * Destructor. |
@@ -128,4 +128,12 @@ class OBluetoothInterface : public QObject | |||
128 | */ | 128 | */ |
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 | ||
131 | private: | 139 | private: |