-rw-r--r-- | libopie2/opiebluez/obluetooth.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libopie2/opiebluez/obluetooth.cpp b/libopie2/opiebluez/obluetooth.cpp index fbc4f0a..b5df96e 100644 --- a/libopie2/opiebluez/obluetooth.cpp +++ b/libopie2/opiebluez/obluetooth.cpp @@ -68,89 +68,96 @@ OBluetooth::InterfaceIterator OBluetooth::iterator() const { return OBluetooth::InterfaceIterator( _interfaces ); } int OBluetooth::count() const { return _interfaces.count(); } OBluetoothInterface* OBluetooth::interface( const QString& iface ) const { return _interfaces[iface]; } void OBluetooth::synchronize() { odebug << "OBluetooth::synchronize() - gathering available HCI devices" << oendl; _interfaces.clear(); _fd = ::socket( AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI ); if ( _fd == -1 ) { owarn << "OBluetooth::synchronize() - can't open HCI control socket (" << strerror( errno ) << ")" << oendl; return; } struct hci_dev_list_req *dl; struct hci_dev_req *dr; struct hci_dev_info di; if (!(dl = (struct hci_dev_list_req*)malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t)))) { ofatal << "OBluetooth::synchronize() - can't allocate memory for HCI request" << oendl; return; } dl->dev_num = HCI_MAX_DEV; dr = dl->dev_req; if (ioctl( _fd, HCIGETDEVLIST, (void *) dl) == -1) { owarn << "OBluetooth::synchronize() - can't complete HCIGETDEVLIST (" << strerror( errno ) << ")" << oendl; return; } for ( int i = 0; i < dl->dev_num; ++i ) { di.dev_id = ( dr + i )->dev_id; - if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) < 0 ) + if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) == -1 ) + { + owarn << "OBluetooth::synchronize() - can't issue HCIGETDEVINFO on device " << i << " (" << strerror( errno ) << ") - skipping that device. " << oendl; continue; + } odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl; _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di ) ); } } /*====================================================================================== * OBluetoothInterface *======================================================================================*/ class OBluetoothInterface::Private { public: Private( struct hci_dev_info* di ) { ::memcpy( &devinfo, di, sizeof(struct hci_dev_info) ); } struct hci_dev_info devinfo; }; OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) + :QObject( parent, name ) { d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo ); } OBluetoothInterface::~OBluetoothInterface() { } QString OBluetoothInterface::macAddress() const { - char addr[18]; - //ba2str( &d->devinfo.bdaddr, addr); - //return addr; - return "BLA"; + return QString().sprintf( "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", + d->devinfo.bdaddr.b[5], + d->devinfo.bdaddr.b[4], + d->devinfo.bdaddr.b[3], + d->devinfo.bdaddr.b[2], + d->devinfo.bdaddr.b[1], + d->devinfo.bdaddr.b[0] ); } } } |