summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2005-07-11 15:23:48 (UTC)
committer mickeyl <mickeyl>2005-07-11 15:23:48 (UTC)
commit27646acf1280d2644b740d0fea03723030aa19cf (patch) (unidiff)
treeead5c3a90a33d6772083183458adc17bd18c0a22
parent43ab12c5f803c6dfa779608be71c188f9eb87282 (diff)
downloadopie-27646acf1280d2644b740d0fea03723030aa19cf.zip
opie-27646acf1280d2644b740d0fea03723030aa19cf.tar.gz
opie-27646acf1280d2644b740d0fea03723030aa19cf.tar.bz2
gather HCI mac address directly
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiebluez/obluetooth.cpp17
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
@@ -1,156 +1,163 @@
1/* 1/*
2 This file is part of the Opie Project 2 This file is part of the Opie Project
3 Copyright (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de> 3 Copyright (C) 2005 Michael 'Mickey' Lauer <mickey@Vanille.de>
4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org> 4 =. Copyright (C) The Opie Team <opie-devel@handhelds.org>
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; version 2 of the license. 11 - .   .-<_>     .<> Foundation; version 2 of the license.
12     ._= =}       : 12     ._= =}       :
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#include "obluetooth.h" 30#include "obluetooth.h"
31 31
32/* OPIE */ 32/* OPIE */
33#include <opie2/odebug.h> 33#include <opie2/odebug.h>
34using namespace Opie::Core; 34using namespace Opie::Core;
35 35
36/* STD */ 36/* STD */
37#include <bluetooth/bluetooth.h> 37#include <bluetooth/bluetooth.h>
38#include <bluetooth/hci.h> 38#include <bluetooth/hci.h>
39#include <bluetooth/hci_lib.h> 39#include <bluetooth/hci_lib.h>
40#include <errno.h> 40#include <errno.h>
41#include <stdlib.h> 41#include <stdlib.h>
42#include <string.h> 42#include <string.h>
43#include <sys/ioctl.h> 43#include <sys/ioctl.h>
44#include <sys/types.h> 44#include <sys/types.h>
45#include <sys/socket.h> 45#include <sys/socket.h>
46 46
47namespace Opie { 47namespace Opie {
48namespace Bluez { 48namespace Bluez {
49 49
50/*====================================================================================== 50/*======================================================================================
51 * OBluetooth 51 * OBluetooth
52 *======================================================================================*/ 52 *======================================================================================*/
53 53
54OBluetooth* OBluetooth::_instance = 0; 54OBluetooth* OBluetooth::_instance = 0;
55 55
56OBluetooth::OBluetooth() 56OBluetooth::OBluetooth()
57{ 57{
58 synchronize(); 58 synchronize();
59} 59}
60 60
61OBluetooth* OBluetooth::instance() 61OBluetooth* OBluetooth::instance()
62{ 62{
63 if ( !_instance ) _instance = new OBluetooth(); 63 if ( !_instance ) _instance = new OBluetooth();
64 return _instance; 64 return _instance;
65} 65}
66 66
67OBluetooth::InterfaceIterator OBluetooth::iterator() const 67OBluetooth::InterfaceIterator OBluetooth::iterator() const
68{ 68{
69 return OBluetooth::InterfaceIterator( _interfaces ); 69 return OBluetooth::InterfaceIterator( _interfaces );
70} 70}
71 71
72int OBluetooth::count() const 72int OBluetooth::count() const
73{ 73{
74 return _interfaces.count(); 74 return _interfaces.count();
75} 75}
76 76
77OBluetoothInterface* OBluetooth::interface( const QString& iface ) const 77OBluetoothInterface* OBluetooth::interface( const QString& iface ) const
78{ 78{
79 return _interfaces[iface]; 79 return _interfaces[iface];
80} 80}
81 81
82void OBluetooth::synchronize() 82void OBluetooth::synchronize()
83{ 83{
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
127class OBluetoothInterface::Private 130class 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
137OBluetoothInterface::OBluetoothInterface( QObject* parent, const char* name, void* devinfo ) 140OBluetoothInterface::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
142OBluetoothInterface::~OBluetoothInterface() 146OBluetoothInterface::~OBluetoothInterface()
143{ 147{
144} 148}
145 149
146QString OBluetoothInterface::macAddress() const 150QString 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