author | mickeyl <mickeyl> | 2005-07-11 15:23:48 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2005-07-11 15:23:48 (UTC) |
commit | 27646acf1280d2644b740d0fea03723030aa19cf (patch) (unidiff) | |
tree | ead5c3a90a33d6772083183458adc17bd18c0a22 | |
parent | 43ab12c5f803c6dfa779608be71c188f9eb87282 (diff) | |
download | opie-27646acf1280d2644b740d0fea03723030aa19cf.zip opie-27646acf1280d2644b740d0fea03723030aa19cf.tar.gz opie-27646acf1280d2644b740d0fea03723030aa19cf.tar.bz2 |
gather HCI mac address directly
-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 | |||
@@ -84,73 +84,80 @@ void OBluetooth::synchronize() | |||
84 | odebug << "OBluetooth::synchronize() - gathering available HCI devices" << oendl; | 84 | odebug << "OBluetooth::synchronize() - gathering available HCI devices" << oendl; |
85 | _interfaces.clear(); | 85 | _interfaces.clear(); |
86 | 86 | ||
87 | _fd = ::socket( AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI ); | 87 | _fd = ::socket( AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI ); |
88 | if ( _fd == -1 ) | 88 | if ( _fd == -1 ) |
89 | { | 89 | { |
90 | owarn << "OBluetooth::synchronize() - can't open HCI control socket (" << strerror( errno ) << ")" << oendl; | 90 | owarn << "OBluetooth::synchronize() - can't open HCI control socket (" << strerror( errno ) << ")" << oendl; |
91 | return; | 91 | return; |
92 | } | 92 | } |
93 | 93 | ||
94 | struct hci_dev_list_req *dl; | 94 | struct hci_dev_list_req *dl; |
95 | struct hci_dev_req *dr; | 95 | struct hci_dev_req *dr; |
96 | struct hci_dev_info di; | 96 | struct hci_dev_info di; |
97 | 97 | ||
98 | if (!(dl = (struct hci_dev_list_req*)malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t)))) | 98 | if (!(dl = (struct hci_dev_list_req*)malloc(HCI_MAX_DEV * sizeof(struct hci_dev_req) + sizeof(uint16_t)))) |
99 | { | 99 | { |
100 | ofatal << "OBluetooth::synchronize() - can't allocate memory for HCI request" << oendl; | 100 | ofatal << "OBluetooth::synchronize() - can't allocate memory for HCI request" << oendl; |
101 | return; | 101 | return; |
102 | } | 102 | } |
103 | 103 | ||
104 | dl->dev_num = HCI_MAX_DEV; | 104 | dl->dev_num = HCI_MAX_DEV; |
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; |
110 | return; | 110 | return; |
111 | } | 111 | } |
112 | 112 | ||
113 | for ( int i = 0; i < dl->dev_num; ++i ) | 113 | for ( int i = 0; i < dl->dev_num; ++i ) |
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) < 0 ) | 116 | if ( ioctl( _fd, HCIGETDEVINFO, (void *) &di) == -1 ) |
117 | { | ||
118 | owarn << "OBluetooth::synchronize() - can't issue HCIGETDEVINFO on device " << i << " (" << strerror( errno ) << ") - skipping that device. " << oendl; | ||
117 | continue; | 119 | continue; |
120 | } | ||
118 | odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl; | 121 | odebug << "OBluetooth::synchronize() - found device #" << di.dev_id << oendl; |
119 | _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di ) ); | 122 | _interfaces.insert( di.name, new OBluetoothInterface( this, di.name, (void*) &di ) ); |
120 | } | 123 | } |
121 | } | 124 | } |
122 | 125 | ||
123 | /*====================================================================================== | 126 | /*====================================================================================== |
124 | * OBluetoothInterface | 127 | * OBluetoothInterface |
125 | *======================================================================================*/ | 128 | *======================================================================================*/ |
126 | 129 | ||
127 | class OBluetoothInterface::Private | 130 | class OBluetoothInterface::Private |
128 | { | 131 | { |
129 | public: | 132 | public: |
130 | Private( struct hci_dev_info* di ) | 133 | Private( struct hci_dev_info* di ) |
131 | { | 134 | { |
132 | ::memcpy( &devinfo, di, sizeof(struct hci_dev_info) ); | 135 | ::memcpy( &devinfo, di, sizeof(struct hci_dev_info) ); |
133 | } | 136 | } |
134 | struct hci_dev_info devinfo; | 137 | struct hci_dev_info devinfo; |
135 | }; | 138 | }; |
136 | 139 | ||
137 | OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) | 140 | OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) |
141 | :QObject( parent, name ) | ||
138 | { | 142 | { |
139 | d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo ); | 143 | d = new OBluetoothInterface::Private( (struct hci_dev_info*) devinfo ); |
140 | } | 144 | } |
141 | 145 | ||
142 | OBluetoothInterface::~OBluetoothInterface() | 146 | OBluetoothInterface::~OBluetoothInterface() |
143 | { | 147 | { |
144 | } | 148 | } |
145 | 149 | ||
146 | QString OBluetoothInterface::macAddress() const | 150 | QString OBluetoothInterface::macAddress() const |
147 | { | 151 | { |
148 | char addr[18]; | 152 | return QString().sprintf( "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X", |
149 | //ba2str( &d->devinfo.bdaddr, addr); | 153 | d->devinfo.bdaddr.b[5], |
150 | //return addr; | 154 | d->devinfo.bdaddr.b[4], |
151 | return "BLA"; | 155 | d->devinfo.bdaddr.b[3], |
156 | d->devinfo.bdaddr.b[2], | ||
157 | d->devinfo.bdaddr.b[1], | ||
158 | d->devinfo.bdaddr.b[0] ); | ||
152 | } | 159 | } |
153 | 160 | ||
154 | } | 161 | } |
155 | } | 162 | } |
156 | 163 | ||