org.bluez.Call1(5)
π org.bluez.Call1 β the BlueZ D-Bus Telephony Call API, but make it make sense π¦
Okay bestie, buckle up, because this is the manual page for org.bluez.Call1, the BlueZ D-Bus Telephony Call API π
and it's lowkey iconic. It's giving phone-call plumbing, and if you're wiring up call handling over Bluetooth HFP then you need this in your life. Periodt.
β¨ INTERFACE β¨
Here's the vibe check on how your code actually finds this thing:
- Service β
org.bluez - Interface β
org.bluez.Call1[experimental] π§ͺ - Object path β
[variable prefix]/{hci0,hci1,...}/dev_{BDADDR}/telephony#/call# - Used by β
bluetoothctl-telephony(1)
So yeah, it hangs out under a variable prefix (the hci0, hci1, etc. device), then the device address, then the telephony tree, then an indexed call number. Deep nesting, but she's worth it. π
π οΈ METHODS π οΈ
π void Answer()
Answers an incoming call. Only valid if the state of the call is "incoming" β so don't try this on a call that's already active or held, it won't slay, it'll just error out. π
Possible Errors: :org.bluez.Error.InvalidState, :org.bluez.Error.Failed
Examples:
bluetoothctl
> telephony.answer <call>
βοΈ void Hangup()
Hangs up the call. Simple enough, bestie, but brace yourself, because the rules around this are a whole thing π
For an incoming call, the call is hung up using ATH or the equivalent. For a waiting call, the remote party gets notified via the User Determined User Busy (UDUB) condition β generally implemented using CHLD=0.
π¨ Now for the dramatic part: the GSM specification does not allow releasing a held call when a waiting call exists. Why? Because 27.007 permitsCHLD=1Xto operate only on active calls, fr fr. So a held call cannot be hung up without affecting the state of the incoming call (e.g. by using otherCHLDalternatives). π Most manufacturers provide vendor extensions that do allow the held call's state to be modified usingCHLD=1Xor equivalent β but heads up, Bluetooth HFP specifies the classic 27.007 behavior and does not allowCHLD=1Xto modify the state of held calls. No cap, that's the spec.
Based on all that above π, releasing a particular party of a held multiparty call might not be possible on some implementations. The manual straight-up recommends that applications structure their UI accordingly β like, design around it, bestie. π
NOTE: Releasing active calls does not produce side-effects β the state of held or waiting calls is not affected. Exception: in the case where a single active call and a waiting call are present, releasing the active call will result in the waiting call transitioning to the 'incoming' state. π
Possible Errors: :org.bluez.Error.InvalidState, :org.bluez.Error.Failed
Examples:
bluetoothctl
> telephony.hangup <call>
π PROPERTIES π
π string LineIdentification [readonly]
Contains the Line Identification info returned by the network, if present. For incoming calls this is basically the CLIP. For outgoing calls this attribute holds the dialed number, or the COLP if received by the audio gateway. π¦
Please note that COLP may be different from the dialed number β a special "withheld" value means the remote party refused to provide caller ID and the "override category" option was not provisioned for the current subscriber. iykyk π
π₯ string IncomingLine [readonly, optional]
Contains the Called Line Identification info returned by the network. Only available for incoming calls, and it tells you the local subscriber number that was dialed by the remote party. Super useful if you've got a multiple line service with your network provider and wanna know which line the call is coming in on. β¨
π·οΈ string Name [readonly]
Contains the Name Identification info returned by the network, if present. That's it, that's the property. πββοΈ
π― boolean Multiparty [readonly]
Tells you whether the call is part of a multiparty call or not. Notifications are sent if a call becomes part of, or leaves, a multiparty call. Obsessed with a property that keeps you posted. π₯
π string State [readonly]
Contains the state of the current call. The possible values are:
"active"β the call is active"held"β the call is on hold"dialing"β the call is being dialed"alerting"β the remote party is being alerted"incoming"β incoming call in progress"waiting"β call is waiting"response_and_hold"β incoming call has been set on hold"disconnected"β no further use of this object is allowed, it will be destroyed shortly π
And that's the whole page, bestie β go forth and handle calls like the main character you are. π
BlueZ Β· May 2025 Β· org.bluez.Call1(5) β mwah, ilysm for reading this far π«Άπ
π¦ where this page comes from
- arch rolling: bluez-utils 5.87-2 Β· GPL-2.0-only
- nixpkgs unstable: bluez 5.87
- ubuntu stonking: bluez 5.87-4 Β· GPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms