Table of Contents

DECT module

The DectModule is the entry point for to the DECT domain. DECT (Digital Enhanced Cordless Telecommunications) is a wireless communication standard that enables secure and reliable connections between devices, such as headsets and dongles. It operates in a dedicated frequency range, allowing for high-quality audio transmission and minimal interference. DECT technology is commonly used in office environments, providing users with the freedom to move around while maintaining a stable connection for calls and audio.

DECT pairing

While DECT supports several pairing types. Jabra dongles support the following types:

  • wireless (standard) - where the headset and dongle are paired using button presses on both devices
  • cabled (secure) - where there is additional exchange of pre shared key to ensure only an authorized device can connect

Wireless pairing relies on device button presses and does not involve programmatic device interaction. Cabled pairing relies on device button presses and does involve programmatic device interaction. Cabled pairing is recommended when wireless fails or there is a risk of pairing a wrong device.

Note that Jabra DECT devices with a base, like the Jabra Engage 65 and Jabra Engage 75, are pairing with the headset when the headset is docked. There is no need for programmatic interaction to pair those devices.

Cabled pairing

Cabled pairing requires both dongle and headset to be USB connected to the PC. by default the Jabra Engage headset will utilize only charging capabilities of USB port. For the headset to be discoverable by SDK it is required to enter special mode by holding the volume up [1] button while plugging it in.

As pairing requires DECT compatible devices (and additional preconditions) the following primitives: IDectDongle and IDectHeadsetOverUsb are introduced to guard against misuse of pairing method.

Having both devices connected, cabled pairing is relatively simple - it is just a matter of indicating which devices should be paired. Pairing is done by IDectDongle.PairWith method.

Note

The pairing method awaits for the headset to reconnect through the dongle and returns new instance of headset (the previous one is no longer valid as the USB connection will be terminated). As establishment of the DECT connection may fail (e.g. due to radio interference), the pairing method comes with a default timeout, but you can use overloads that support timeout or cancellation token for greater control. As the pairing is performed while the devices are USB connected, where the underlying key exchange is fast and reliable, it is the DECT connection that may fail.

For simple pairing flows where it is expected that the user will only have one set of DECT devices - one can use DectDeviceAwaiter for device selection.

public static async Task SimplePairing(IApi api)
{
    DectDeviceAwaiter awaiter = new DectDeviceAwaiter(api);

    IDectDongle dongle = await awaiter.FirstDongleAsync();
    IDectHeadsetOverUsb usbHeadset = await awaiter.FirstHeadsetOverUsbAsync();

    IDevice dectHeadset = await dongle.PairWith(usbHeadset);
}

For more complex pairing flows, where the user would like more control over device selection, one can use the following predicates (IsDectHeadsetOverUsb and IsDectDongle) and core device discovery capabilities (IApi.CurrentDevices and IApi.DeviceAdded).

public static async Task ComplexPairing(IApi api)
{
    var headsetTcs = new TaskCompletionSource<IDectHeadsetOverUsb>();
    var dongleTcs = new TaskCompletionSource<IDectDongle>();
    DectModule dectModule = new DectModule(api);

    api.DeviceAdded.Subscribe(async (device) =>
    {
        // customize per requirements
        if (await DectModule.IsDectDongle(device))
        {
            IDectDongle dongle = await dectModule.ConvertToDectDongle(device);
            dongleTcs.TrySetResult(dongle);
        }

        if (await DectModule.IsDectHeadsetOverUsb(device))
        {
            IDectHeadsetOverUsb headset = await dectModule.ConvertToDectHeadsetOverUsb(device);
            headsetTcs.TrySetResult(headset);
        }
    });

    IDectDongle dongle = await dongleTcs.Task;
    IDectHeadsetOverUsb headset = await headsetTcs.Task;

    IDevice dectHeadset = await dongle.PairWith(headset);
}

[1] What button to hold may vary based on device.