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 permits CHLD=1X to 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 other CHLD alternatives). πŸ™ˆ Most manufacturers provide vendor extensions that do allow the held call's state to be modified using CHLD=1X or equivalent β€” but heads up, Bluetooth HFP specifies the classic 27.007 behavior and does not allow CHLD=1X to 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