-rw-r--r-- | noncore/net/opietooth/lib/manager.cc | 65 | ||||
-rw-r--r-- | noncore/net/opietooth/lib/manager.h | 18 |
2 files changed, 83 insertions, 0 deletions
diff --git a/noncore/net/opietooth/lib/manager.cc b/noncore/net/opietooth/lib/manager.cc index 23506b3..2234333 100644 --- a/noncore/net/opietooth/lib/manager.cc +++ b/noncore/net/opietooth/lib/manager.cc | |||
@@ -163,64 +163,129 @@ void Manager::slotSDPExited( OProcess* proc) | |||
163 | } | 163 | } |
164 | } | 164 | } |
165 | emit foundServices( proc->name(), list ); | 165 | emit foundServices( proc->name(), list ); |
166 | delete proc; | 166 | delete proc; |
167 | } | 167 | } |
168 | Services::ValueList Manager::parseSDPOutput( const QString& out ) { | 168 | Services::ValueList Manager::parseSDPOutput( const QString& out ) { |
169 | Services::ValueList list; | 169 | Services::ValueList list; |
170 | qWarning("parsing output" ); | 170 | qWarning("parsing output" ); |
171 | Parser parser( out ); | 171 | Parser parser( out ); |
172 | list = parser.services(); | 172 | list = parser.services(); |
173 | return list; | 173 | return list; |
174 | } | 174 | } |
175 | 175 | ||
176 | void Manager::slotHCIExited(OProcess* proc ) { | 176 | void Manager::slotHCIExited(OProcess* proc ) { |
177 | qWarning("process exited"); | 177 | qWarning("process exited"); |
178 | RemoteDevice::ValueList list; | 178 | RemoteDevice::ValueList list; |
179 | if (proc->normalExit() ) { | 179 | if (proc->normalExit() ) { |
180 | qWarning("normalExit %s", proc->name() ); | 180 | qWarning("normalExit %s", proc->name() ); |
181 | QMap<QString, QString>::Iterator it = m_devices.find(proc->name() ); | 181 | QMap<QString, QString>::Iterator it = m_devices.find(proc->name() ); |
182 | if (it != m_devices.end() ) { | 182 | if (it != m_devices.end() ) { |
183 | qWarning("!= end ;)"); | 183 | qWarning("!= end ;)"); |
184 | list = parseHCIOutput( it.data() ); | 184 | list = parseHCIOutput( it.data() ); |
185 | m_devices.remove( it ); | 185 | m_devices.remove( it ); |
186 | } | 186 | } |
187 | } | 187 | } |
188 | emit foundDevices( proc->name(), list ); | 188 | emit foundDevices( proc->name(), list ); |
189 | delete proc; | 189 | delete proc; |
190 | } | 190 | } |
191 | void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { | 191 | void Manager::slotHCIOut(OProcess* proc, char* ch, int len) { |
192 | QCString str( ch, len+1 ); | 192 | QCString str( ch, len+1 ); |
193 | qWarning("hci: %s", str.data() ); | 193 | qWarning("hci: %s", str.data() ); |
194 | QMap<QString, QString>::Iterator it; | 194 | QMap<QString, QString>::Iterator it; |
195 | it = m_devices.find( proc->name() ); | 195 | it = m_devices.find( proc->name() ); |
196 | qWarning("proc->name %s", proc->name() ); | 196 | qWarning("proc->name %s", proc->name() ); |
197 | QString string; | 197 | QString string; |
198 | if (it != m_devices.end() ) { | 198 | if (it != m_devices.end() ) { |
199 | qWarning("slotHCIOut "); | 199 | qWarning("slotHCIOut "); |
200 | string = it.data(); | 200 | string = it.data(); |
201 | } | 201 | } |
202 | string.append( str ); | 202 | string.append( str ); |
203 | 203 | ||
204 | m_devices.replace( proc->name(), string ); | 204 | m_devices.replace( proc->name(), string ); |
205 | } | 205 | } |
206 | RemoteDevice::ValueList Manager::parseHCIOutput(const QString& output ) { | 206 | RemoteDevice::ValueList Manager::parseHCIOutput(const QString& output ) { |
207 | qWarning("parseHCI %s", output.latin1() ); | 207 | qWarning("parseHCI %s", output.latin1() ); |
208 | RemoteDevice::ValueList list; | 208 | RemoteDevice::ValueList list; |
209 | QStringList strList = QStringList::split('\n', output ); | 209 | QStringList strList = QStringList::split('\n', output ); |
210 | QStringList::Iterator it; | 210 | QStringList::Iterator it; |
211 | QString str; | 211 | QString str; |
212 | for ( it = strList.begin(); it != strList.end(); ++it ) { | 212 | for ( it = strList.begin(); it != strList.end(); ++it ) { |
213 | str = (*it).stripWhiteSpace(); | 213 | str = (*it).stripWhiteSpace(); |
214 | qWarning("OpieTooth %s", str.latin1() ); | 214 | qWarning("OpieTooth %s", str.latin1() ); |
215 | int pos = str.findRev(':' ); | 215 | int pos = str.findRev(':' ); |
216 | if ( pos > 0 ) { | 216 | if ( pos > 0 ) { |
217 | QString mac = str.left(17 ); | 217 | QString mac = str.left(17 ); |
218 | str.remove( 0, 17 ); | 218 | str.remove( 0, 17 ); |
219 | qWarning("mac %s", mac.latin1() ); | 219 | qWarning("mac %s", mac.latin1() ); |
220 | qWarning("rest:%s", str.latin1() ); | 220 | qWarning("rest:%s", str.latin1() ); |
221 | RemoteDevice rem( mac , str.stripWhiteSpace() ); | 221 | RemoteDevice rem( mac , str.stripWhiteSpace() ); |
222 | list.append( rem ); | 222 | list.append( rem ); |
223 | } | 223 | } |
224 | } | 224 | } |
225 | return list; | 225 | return list; |
226 | } | 226 | } |
227 | |||
228 | ////// hcitool cc and hcitool con | ||
229 | |||
230 | /** | ||
231 | * Create it on the stack as don't care | ||
232 | * so we don't need to care for it | ||
233 | * cause hcitool gets reparented | ||
234 | */ | ||
235 | void Manager::connectTo( const QString& mac) { | ||
236 | OProcess proc; | ||
237 | proc << "hcitool"; | ||
238 | proc << "cc"; | ||
239 | proc << "mac"; | ||
240 | proc.start(OProcess::DontCare); // the lib does not care at this point | ||
241 | } | ||
242 | |||
243 | |||
244 | void Manager::searchConnections() { | ||
245 | qWarning("searching connections?"); | ||
246 | OProcess* proc = new OProcess(); | ||
247 | m_hcitoolCon = QString::null; | ||
248 | |||
249 | connect(proc, SIGNAL(processExited(OProcess*) ), | ||
250 | this, SLOT(slotConnectionExited( OProcess*) ) ); | ||
251 | connect(proc, SIGNAL(receivedStdout(OProcess*, char*, int) ), | ||
252 | this, SLOT(slotConnectionOutput(OProcess*, char*, int) ) ); | ||
253 | *proc << "hcitool"; | ||
254 | *proc << "con"; | ||
255 | |||
256 | if (!proc->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { | ||
257 | Connection::ValueList list; | ||
258 | emit connections( list ); | ||
259 | delete proc; | ||
260 | } | ||
261 | } | ||
262 | void Manager::slotConnectionExited( OProcess* proc ) { | ||
263 | qWarning("exited"); | ||
264 | Connection::ValueList list; | ||
265 | list = parseConnections( m_hcitoolCon ); | ||
266 | emit connections(list ); | ||
267 | } | ||
268 | void Manager::slotConnectionOutput(OProcess* proc, char* cha, int len) { | ||
269 | QCString str(cha, len ); | ||
270 | m_hcitoolCon.append( str ); | ||
271 | delete proc; | ||
272 | } | ||
273 | Connection::ValueList Manager::parseConnections( const QString& out ) { | ||
274 | Connection::ValueList list2; | ||
275 | QStringList list = QStringList::split('\n', out ); | ||
276 | QStringList::Iterator it; | ||
277 | for (it = list.begin(); it != list.end(); ++it ) { | ||
278 | QString row = (*it).stripWhiteSpace(); | ||
279 | QStringList value = QStringList::split(' ', row ); | ||
280 | qWarning("0: %s", value[0].latin1() ); | ||
281 | qWarning("1: %s", value[1].latin1() ); | ||
282 | qWarning("2: %s", value[2].latin1() ); | ||
283 | qWarning("3: %s", value[3].latin1() ); | ||
284 | qWarning("4: %s", value[4].latin1() ); | ||
285 | qWarning("5: %s", value[5].latin1() ); | ||
286 | qWarning("6: %s", value[6].latin1() ); | ||
287 | qWarning("7: %s", value[7].latin1() ); | ||
288 | qWarning("8: %s", value[8].latin1() ); | ||
289 | } | ||
290 | return list2; | ||
291 | } | ||
diff --git a/noncore/net/opietooth/lib/manager.h b/noncore/net/opietooth/lib/manager.h index 2589e9b..b32327c 100644 --- a/noncore/net/opietooth/lib/manager.h +++ b/noncore/net/opietooth/lib/manager.h | |||
@@ -1,148 +1,166 @@ | |||
1 | 1 | ||
2 | #ifndef OpieToothManager_H | 2 | #ifndef OpieToothManager_H |
3 | #define OpieToothManager_H | 3 | #define OpieToothManager_H |
4 | 4 | ||
5 | #include <qobject.h> | 5 | #include <qobject.h> |
6 | #include <qstring.h> | 6 | #include <qstring.h> |
7 | #include <qmap.h> | 7 | #include <qmap.h> |
8 | #include <qvaluelist.h> | 8 | #include <qvaluelist.h> |
9 | 9 | ||
10 | #include "connection.h" | ||
10 | #include "remotedevice.h" | 11 | #include "remotedevice.h" |
11 | #include "services.h" | 12 | #include "services.h" |
12 | 13 | ||
13 | class OProcess; | 14 | class OProcess; |
14 | namespace OpieTooth { | 15 | namespace OpieTooth { |
15 | class Device; | 16 | class Device; |
16 | /** Manager manages a blueZ device (hci0 for example) | 17 | /** Manager manages a blueZ device (hci0 for example) |
17 | * without Manager you can control the things you | 18 | * without Manager you can control the things you |
18 | * could do from command line in a OO and asynchronus | 19 | * could do from command line in a OO and asynchronus |
19 | * way. | 20 | * way. |
20 | */ | 21 | */ |
21 | class Manager : public QObject { | 22 | class Manager : public QObject { |
22 | Q_OBJECT | 23 | Q_OBJECT |
23 | public: | 24 | public: |
24 | /** c'tor whichs create a new Manager | 25 | /** c'tor whichs create a new Manager |
25 | * @param device is the device to use. Either a mac or blueZ device name | 26 | * @param device is the device to use. Either a mac or blueZ device name |
26 | * | 27 | * |
27 | */ | 28 | */ |
28 | Manager( const QString &device ); | 29 | Manager( const QString &device ); |
29 | 30 | ||
30 | /** c'tor | 31 | /** c'tor |
31 | * @param dev The Device to be managed | 32 | * @param dev The Device to be managed |
32 | * We don't care of Device so you need to delete it | 33 | * We don't care of Device so you need to delete it |
33 | */ | 34 | */ |
34 | Manager( Device* dev ); | 35 | Manager( Device* dev ); |
35 | 36 | ||
36 | /** | 37 | /** |
37 | * c'tor | 38 | * c'tor |
38 | */ | 39 | */ |
39 | Manager(); | 40 | Manager(); |
40 | 41 | ||
41 | ~Manager(); | 42 | ~Manager(); |
42 | 43 | ||
43 | /** Set the manager to control a new device | 44 | /** Set the manager to control a new device |
44 | * @param device the new device to control (hci0 ) | 45 | * @param device the new device to control (hci0 ) |
45 | */ | 46 | */ |
46 | void setDevice( const QString& device ); | 47 | void setDevice( const QString& device ); |
47 | 48 | ||
48 | /** | 49 | /** |
49 | * Convience functions for setting a new device | 50 | * Convience functions for setting a new device |
50 | */ | 51 | */ |
51 | void setDevice( Device *dev ); | 52 | void setDevice( Device *dev ); |
52 | 53 | ||
53 | /** | 54 | /** |
54 | * Wether or not a device is connected. The function | 55 | * Wether or not a device is connected. The function |
55 | * is asynchron | 56 | * is asynchron |
56 | * If device is empty it will take the currently managed | 57 | * If device is empty it will take the currently managed |
57 | * device and see if it's up | 58 | * device and see if it's up |
58 | * for Remote devices it will ping and see. | 59 | * for Remote devices it will ping and see. |
59 | * @param either mac or hciX | 60 | * @param either mac or hciX |
60 | */ | 61 | */ |
61 | void isAvailable(const QString& device= QString::null ); | 62 | void isAvailable(const QString& device= QString::null ); |
62 | 63 | ||
63 | /** | 64 | /** |
64 | * same as above | 65 | * same as above |
65 | */ | 66 | */ |
66 | void isAvailable(Device *dev ); | 67 | void isAvailable(Device *dev ); |
67 | 68 | ||
68 | /** this searchs for devices reachable from the | 69 | /** this searchs for devices reachable from the |
69 | * currently managed device | 70 | * currently managed device |
70 | * or from device if @param device is not empty | 71 | * or from device if @param device is not empty |
71 | */ | 72 | */ |
72 | void searchDevices(const QString& device= QString::null ); | 73 | void searchDevices(const QString& device= QString::null ); |
73 | /** same as above | 74 | /** same as above |
74 | * | 75 | * |
75 | */ | 76 | */ |
76 | void searchDevices(Device *d ); | 77 | void searchDevices(Device *d ); |
77 | 78 | ||
78 | /** | 79 | /** |
79 | * This will add the service @param name | 80 | * This will add the service @param name |
80 | * to the sdpd daemon | 81 | * to the sdpd daemon |
81 | * It will start the daemon if necessary | 82 | * It will start the daemon if necessary |
82 | */ | 83 | */ |
83 | void addService(const QString &name ); | 84 | void addService(const QString &name ); |
84 | 85 | ||
85 | /** | 86 | /** |
86 | * This will add the services @param names | 87 | * This will add the services @param names |
87 | * to the sdpd daemon | 88 | * to the sdpd daemon |
88 | * It will start the daemon if necessary | 89 | * It will start the daemon if necessary |
89 | */ | 90 | */ |
90 | void addServices( const QStringList& names ); | 91 | void addServices( const QStringList& names ); |
91 | 92 | ||
92 | /** | 93 | /** |
93 | * This removes a service from the sdps | 94 | * This removes a service from the sdps |
94 | */ | 95 | */ |
95 | void removeService(const QString &name ); | 96 | void removeService(const QString &name ); |
96 | 97 | ||
97 | /** | 98 | /** |
98 | * Removes a list from the sdpd | 99 | * Removes a list from the sdpd |
99 | */ | 100 | */ |
100 | void removeServices(const QStringList& ); | 101 | void removeServices(const QStringList& ); |
101 | 102 | ||
102 | /** | 103 | /** |
103 | * search for services on a remote device | 104 | * search for services on a remote device |
104 | * | 105 | * |
105 | */ | 106 | */ |
106 | void searchServices( const QString& remDevice ); | 107 | void searchServices( const QString& remDevice ); |
107 | 108 | ||
108 | /** | 109 | /** |
109 | * search for services on a remote device | 110 | * search for services on a remote device |
110 | */ | 111 | */ |
111 | void searchServices( const RemoteDevice& ); | 112 | void searchServices( const RemoteDevice& ); |
113 | |||
114 | /** | ||
115 | * Starts to connect to the device | ||
116 | * in @param | ||
117 | */ | ||
118 | void connectTo(const QString& ); | ||
119 | |||
120 | /** | ||
121 | * Searches for active connections | ||
122 | * the result is emitted with the | ||
123 | * connections signal | ||
124 | */ | ||
125 | void searchConnections(); | ||
126 | |||
127 | //// not implemented yet | ||
112 | /*static*/ QString toDevice( const QString& mac ); | 128 | /*static*/ QString toDevice( const QString& mac ); |
113 | /*static*/ QString toMac( const QString &device ); | 129 | /*static*/ QString toMac( const QString &device ); |
130 | //// not implemented yet over | ||
114 | 131 | ||
115 | signals: | 132 | signals: |
116 | // device either mac or dev name | 133 | // device either mac or dev name |
117 | // the first device is the device which you access | 134 | // the first device is the device which you access |
118 | void available( const QString& device, bool connected ); | 135 | void available( const QString& device, bool connected ); |
119 | void addedService( const QString& service, bool added ); | 136 | void addedService( const QString& service, bool added ); |
120 | void removedService( const QString& service, bool removed ); | 137 | void removedService( const QString& service, bool removed ); |
121 | void foundServices( const QString& device, Services::ValueList ); | 138 | void foundServices( const QString& device, Services::ValueList ); |
122 | void foundDevices( const QString& device, RemoteDevice::ValueList ); | 139 | void foundDevices( const QString& device, RemoteDevice::ValueList ); |
123 | void connections( Connection::ValueList ); | 140 | void connections( Connection::ValueList ); |
124 | 141 | ||
125 | private slots: | 142 | private slots: |
126 | void slotProcessExited(OProcess* ); | 143 | void slotProcessExited(OProcess* ); |
127 | 144 | ||
128 | void slotSDPExited(OProcess*); | 145 | void slotSDPExited(OProcess*); |
129 | void slotSDPOut(OProcess*, char*, int); | 146 | void slotSDPOut(OProcess*, char*, int); |
130 | 147 | ||
131 | void slotHCIExited(OProcess* ); | 148 | void slotHCIExited(OProcess* ); |
132 | void slotHCIOut(OProcess*, char*, int ); | 149 | void slotHCIOut(OProcess*, char*, int ); |
133 | 150 | ||
134 | void slotConnectionExited(OProcess* ); | 151 | void slotConnectionExited(OProcess* ); |
135 | void slotConnectionOutput(OProcess*, char*, int ); | 152 | void slotConnectionOutput(OProcess*, char*, int ); |
136 | private: | 153 | private: |
137 | Services::ValueList parseSDPOutput( const QString& ); | 154 | Services::ValueList parseSDPOutput( const QString& ); |
138 | RemoteDevice::ValueList parseHCIOutput( const QString& ); | 155 | RemoteDevice::ValueList parseHCIOutput( const QString& ); |
156 | Connection::ValueList parseConnections( const QString& ); | ||
139 | OProcess *m_hcitool; | 157 | OProcess *m_hcitool; |
140 | OProcess *m_sdp; // not only one | 158 | OProcess *m_sdp; // not only one |
141 | QString m_device; | 159 | QString m_device; |
142 | QMap<QString, QString> m_out; | 160 | QMap<QString, QString> m_out; |
143 | QMap<QString, QString> m_devices; | 161 | QMap<QString, QString> m_devices; |
144 | QString m_hcitoolCon; | 162 | QString m_hcitoolCon; |
145 | }; | 163 | }; |
146 | }; | 164 | }; |
147 | 165 | ||
148 | #endif | 166 | #endif |