1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
|
D-Bus API description for BlueZ
*******************************
Copyright (C) 2004-2006 Marcel Holtmann <marcel@holtmann.org>
Error hierarchy
===============
Interface org.bluez.Error
Errors Failed
An unknown error occured. The error messages is
taken from the strerror(errno) function.
InvalidArguments
Error returned when the argument list is invalid or
out of specification for the method.
OutOfMemory
Error returned when a memory allocation via malloc()
fails. This error is similar to ENOMEM.
NoSuchAdapter
Error returned when the requested adapter doesn't
exists. This error is similar to ENODEV.
UnknownAddress
Error returned when the remote address haven't been
seen by a discovery procedure so far.
NotAvailable
Error returned when a specified record is not
available.
NotConnected
Error returned when the remote device isn't connected
at the moment.
ConnectionAttemptFailed
BondingAlreadyExists
BondingDoesNotExists
BondingInProgress
AuthenticationFailed
AuthenticationTimeout
AuthenticationRejected
AuthenticationCanceled
UnsupportedMajorClass
Manager hierarchy
=================
Service org.bluez
Interface org.bluez.Manager
Object path /org/bluez/Manager/
Methods uint32 InterfaceVersion()
Returns the current interface version. At the moment
only version 0 is supported.
array{string} ListAdapters()
Returns list of object paths under /org/bluez/Adapter/
string DefaultAdapter()
Returns object path for the default adapter.
Signals void AdapterAdded(string path)
Parameter is object path of added adapter.
void AdapterRemoved(string path)
Parameter is object path of removed adapter.
Adapter hierarchy
=================
Service org.bluez
Interface org.bluez.Adapter
Object path /org/bluez/Adapter/{hci0,hci1,...}/
Methods string GetAddress()
Returns the device address for a given path.
Example: "00:11:22:33:44:55"
Possible errors: none
string GetVersion()
Returns the version of the Bluetooth chip. This version
is compiled from the LMP version. In case of EDR the
features attribute must be checked.
Example: "Bluetooth 2.0 + EDR"
Possible errors: none
string GetRevision()
Returns the revision of the Bluetooth chip. This is a
vendor specific value and in most cases it represents
the firmware version. This might derive from the HCI
revision and LMP subversion values or via extra vendor
specific commands.
In case the revision of a chip is not available. This
method should return the LMP subversion value as a
string.
Example: "HCI 19.2"
Possible errors: none
string GetManufacturer()
Returns the manufacturer of the Bluetooth chip. If
the company id is not know the sting "Company ID %d"
where %d should be replaced with the numeric value
from the manufacturer field.
Example: "Cambridge Silicon Radio"
Possible errors: none
string GetCompany()
Returns the company name from the OUI database of the
Bluetooth device address. This function will need a
valid and up-to-date oui.txt from the IEEE. This value
will be different from the manufacturer string in the
most cases.
If the oui.txt file is not present or the OUI part of
the BD_ADDR is not listed, it should return the
string "OUI %s" where %s is the actual OUI.
Example: "Apple Computer"
Possible errors: none
string GetMode()
Returns the current mode of a adapter.
Valid modes: "off", "connectable", "discoverable"
Possible errors: none
void SetMode(string mode)
Sets mode of the adapter. See GetMode for valid strings
for the mode parameter.
Possible errors: org.bluez.Error.Failed
uint32 GetDiscoverableTimeout()
Returns the discoverable timeout in seconds. A value
of zero means that the timeout is disabled and it will
stay in discoverable mode forever.
The default value for the discoverable timeout should
be 180 seconds (3 minutes).
Possible errors: none
void SetDiscoverableTimeout(uint32 timeout)
Sets the discoverable timeout in seconds. A value of
zero disables the timeout and the adapter would be
always discoverable.
Changing this value doesn't set the adapter into
discoverable mode. The SetMode method must be used.
Possible errors: org.bluez.Error.Failed
boolean IsConnectable()
Returns true if the local adapter is connectable and
false if it is switched off.
It is also possible to use GetMode to retrieve this
information.
Possible errors: none
boolean IsDiscoverable()
Returns true if the local adapter is discoverable and
false if it is only connectable or switched off.
It is also possible to use GetMode to retrieve this
information.
Possible errors: none
string GetMajorClass()
Returns the current major class value for this
system. This value is set to "computer" for now.
If the major class can't be matched by a string
the decimal value as string should be returned.
Possible errors: none
array{string} ListAvailableMinorClasses()
Returns a list of available minor classes for the
currently used major class. At the moment this should
only return a list of minor classes if the major
class is set to "computer".
If the major class is not "computer" an error should
be returned.
Possible errors: org.bluez.Error.UnsupportedMajorClass
string GetMinorClass()
Returns the current minor class value for this
system where the default major class is "computer".
If the major class is not "computer" an error should
be returned.
Valid values: "uncategorized", "desktop", "server",
"laptop", "handheld", "palm", "wearable"
The default value is "uncategorized".
Possible errors: org.bluez.Error.UnsupportedMajorClass
void SetMinorClass(string minor)
Sets the local minor class and on success it sends
a MinorClassChanged signal.
If the major class is not "computer" an error should
be returned.
Possible errors: org.bluez.Error.UnsupportedMajorClass
array{string} GetServiceClasses()
Returns the current set of service classes.
In the case no service classes are set (when no
service has been registered) an empty list should
be returned.
Valid values: "positioning", "networking", "rendering",
"capturing", "object transfer", "audio",
"telephony", "information"
Possible errors: none
string GetName()
Returns the local adapter name (friendly name) in UTF-8.
Possible errors: none
void SetName(string name)
Sets the local adapter name. If EIR is supported by
the local hardware this modifies also the extended
response data value.
Possible errors: org.bluez.Error.Failed
Questions: What to do (in case of EIR) if one
low-level API call fails.
string GetRemoteVersion(string address)
Get the version info for a remote device. This request
returns always this information based on its cached
data. The base for this string is the LMP version
value and the features for EDR support.
In case the remote address is unknown, it should
return the error UnkownAddress and if the data is
not available it should return NotAvailable.
Example: "Bluetooth 2.0 + EDR"
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
string GetRemoteRevision(string address)
Get the revision of the Bluetooth chip. This is a
vendor specific value and in most cases it represents
the firmware version. This derives only from the LMP
subversion value.
Example: "HCI 19.2"
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
string GetRemoteManufacturer(string address)
Get the manufacturer of the chip for a remote device.
Example: "Nokia Mobile Phones"
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
string GetRemoteCompany(string address)
Get the company name from the OUI database of the
Bluetooth device address. This function will need a
valid and up-to-date oui.txt from the IEEE. This value
will be different from the manufacturer string in the
most cases.
Example: "Microsoft Corporation"
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
string GetRemoteName(string address)
Get adapter name for a remote device. This request
returns always a cached name. The service daemon is
responsible for updating the cache.
If no remote name is available, then this function
will return RequestDeferred. In this case the service
daemon will try to resolve the name at the next
possible opportunity. On success a RemoteNameUpdated
signal will be send and if a failure happens it will
be indicated by a RemoteNameFailed signal.
If this is an empty string, the UI might want to
display the BD_ADDR instead.
Example: "00:11:22:33:44:55", "Nokia 770"
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
org.bluez.Error.RequestDeferred
string GetRemoteAlias(string address)
Returns alias name for remote device. If this is
an empty string value, the UI should show the
remote name instead.
An alias should supersede the remote name.
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotAvailable
void SetRemoteAlias(string address, string alias)
Sets alias name for remote device. If alias name is
empty, then no alias is set.
On success the SetRemoteAlias method will produce a
RemoteAliasChanged signal which applications can use
to update their current display of the remote device
name.
Possible errors: org.bluez.Error.Failed
org.bluez.Error.UnknownAddress
void ClearRemoteAlias(string address)
Resets alias name for remote device. If there is no
alias set for the device this method will silently
succeed, but no RemoteAliasCleared signal has to be
sent in this case.
On success the ClearRemoteAlias method will produce
a RemoteAliasCleared signal.
Possible errors: org.bluez.Error.Failed
org.bluez.Error.UnknownAddress
string LastSeen(string address)
Returns the date and time when the adapter has been
seen by a discover procedure.
Example: "2006-02-08 12:00:00 GMT"
Question: Can we find a better name?
string LastUsed(string address)
Returns the date and time of the last time when the
adapter has been connected.
Example: "2006-02-08 12:00:00 GMT"
Question: Can we find a better name?
void CreateBonding(string address)
This method creates a bonding with a remote device.
If a link key for this adapter already exists, this
procedure should fail instead of trying to create a
new pairing.
If no connection to the remote device exists, a
low-level ACL connection must be created.
This function will block and the calling application
should take care of setting are higher timeout. This
might be needed in case of a page timeout from the
low-level HCI commands.
In case of success it will send a BondingCreated
signal.
Possible errors: org.bluez.Error.Failed
org.bluez.Error.UnknownAddress
org.bluez.Error.BondingAlreadyExists
org.bluez.Error.BondingInProgress
org.bluez.Error.ConnectionAttemptFailed
org.bluez.Error.AuthenticationFailed
org.bluez.Error.AuthenticationTimeout
org.bluez.Error.AuthenticationRejected
org.bluez.Error.AuthenticationCanceled
void CancelBondingProcess(string address)
This method will cancel the CreateBonding process.
The CreateBonding method will return
AuthenticationCanceled to signal that an attempt to
create a bonding has been canceled.
Possible errors: org.bluez.Error.UnknownAddress
void RemoveBonding(string address)
This method removes the bonding with a remote device.
For security reasons this includes removing the actual
link key and also disconnecting any open connections
for the remote device.
If the link key was stored on the Bluetooth chip, it
must be removed from there, too.
After deleting the link key this method will send a
BondingRemoved signal.
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.BondingDoesNotExists
boolean HasBonding(string address)
Returns true if the remote device is bonded and false
if no link key is available.
Possible errors: org.bluez.Error.UnknownAddress
array{string} ListBondings()
List device addresses of currently bonded adapter.
Possible errors: none
uint8 GetPinCodeLength(string address)
Returns the PIN code length that was used in the
pairing process.
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.BondingDoesNotExists
uint8 GetEncryptionKeySize(string address)
Returns the currently used encryption key size.
This method will fail if no connection to the address
has been established.
Possible errors: org.bluez.Error.UnknownAddress
org.bluez.Error.NotConnected
org.bluez.Error.BondingDoesNotExists
void DiscoverDevices()
This method starts the device discovery procedure. This
includes an inquiry procedure and remote device name
resolving.
On start up this process will generate a DiscoveryStart
signal and then return RemoteDeviceFound and also
RemoteNameUpdated signals. If the procedure has been
finished an DiscoveryCompleted signal will be sent.
Possible errors: org.bluez.Error.InProgress
void DiscoverDevicesWithoutNameResolving()
This method starts the device discovery procedure. This
includes an inquiry and an optional remote device name
resolving. The remote names can be retrieved with
GetRemoteName and in the case a name doesn't exist it
will be queued for later resolving and GetRemoteName
will return an error.
While this procedure is running every found device
will be returned with RemoteDeviceFound. While
DiscoverDevices() automatically resolves unknown
devices names and sends RemoteNameUpdated in this
case it will only happen if GetRemoteName has been
called and no previously stored name is available.
Possible errors: org.bluez.Error.InProgress
void CancelDiscovery()
This method will cancel any previous DiscoverDevices
or DiscoverDevicesWithoutNameResolving actions.
Possible errors: org.bluez.Error.InProgress
Signals void ModeChanged(string mode)
If the current mode is changed with SetMode this signal
will inform about the new mode.
This signal can also be triggered by low-level HCI
commands.
void MinorClassChanged(string minor)
After changing the minor class with SetMinorClass this
signal will provide the new class value.
void NameChanged(string name)
After changing the local adapter name with SetName this
signal will provide the new name.
This signal can also be triggered by low-level HCI
commands.
void DiscoveryStarted()
This signal indicates that a device discovery
procedure has been started.
void DiscoveryCompleted()
This signal indicates that a device discovery
procedure has been completed.
void RemoteDeviceFound(string address, int16 rssi,
string major, string minor, string service)
This signal will be send every time an inquiry result
has been found by the service daemon. In general they
only appear during a device discovery.
void RemoteNameUpdated(string address, string name)
This signal will be send every time the service daemon
detect a new name for a remote device.
void RemoteNameFailed(string address)
This signal will be sent every time the service daemon
tries to resolve a remote and this fails.
void RemoteAliasChanged(string address, string alias)
After changing an alias with SetRemoteAlias this
signal will indicate the new alias.
void RemoteAliasCleared(string address)
After removing an alias with ClearRemoteAlias this
signal will indicate that the alias is no longer
valid.
void BondingCreated(string address)
Signals that a successful bonding has been created.
void BondingRemoved(string address)
Signals that a bonding was removed.
RFCOMM hierarchy
================
Service org.bluez
Interface org.bluez.RFCOMM
Object path /org/bluez/Adapter/{hci0,hci1,...}/
Methods string Connect(string address, string service)
This creates a connection to a remote RFCOMM based
service. The service string can either be a UUID-16,
a UUID-32, a UUID-128 or a service abbreviation.
The return value will be the path of the newly
created RFCOMM TTY device (for example /dev/rfcomm0).
If the application disconnects from the D-Bus this
connection will be terminated.
Valid service values: "vcp", "map", "pbap", "sap",
"ftp", "bpp", "bip", "synch",
"dun", "opp", "fax", "spp"
string ConnectByChannel(string address, byte channel)
This creates a connection to a remote RFCOMM based
service. In contrast to Connect a channel number is
needed.
The return value will be the path of the newly
creates RFCOMM TTY device (for example /dev/rfcomm0).
If the application disconnects from the D-Bus this
connection will be terminated.
void Disconnect(string device)
This will disconnect a previously connected RFCOMM
service. The device parameter must be the return value
from a previous Connect or ConnectByChannel method
call (for example /dev/rfcomm0).
string Bind(string address, string service)
string BindByChannel(string address, byte channel)
void Release(string device)
array{string} ListBindings()
Signals void Connected(string address, byte channel, string service)
This signal will be issued once a RFCOMM connection
has been established through Connect or ConnectByChannel
and the service will be translated into a profile if
it is known. Otherwise the UUID will be listed. If
no UUID or service name is available it will be an
empty string.
void Disconnected(string address, byte channel, string service)
This signal will be issued if a RFCOMM connection
gets terminated through Disconnect or of the caller
application disconnects from the D-Bus.
|