SILICON LABS RS9116 API Reference User Guide

SILICON-LABS-LOGO

SILICON LABS RS9116 API Reference

SILICON-LABS-RS9116-API-Reference-PRODUCT

API Reference Guide (OpenThread)
This guide describes the OpenThread application programming interface and key modules (e.g., error handling, instance management, networking, and Thread Joiner). It also notes important calling-context and error-handling rules for safe API usage.

Key Specifications

Item Specification
OpenThread re-entrancy The OpenThread stack is not re-entrant; public APIs/platform APIs/callbacks MUST be invoked from the same OS context (same thread/process or same RTOS task), unless explicitly documented.
Instance uptime string OT_UPTIME_STRING_SIZE = 24 (recommended size for uptime string representation).
Joiner discerner maximum length OT_JOINER_MAX_DISCERNER_LENGTH = 64 (maximum length of a Joiner Discerner in bits).
Operational Dataset key/name sizes OT_NETWORK_KEY_SIZE = 16 bytes; OT_NETWORK_NAME_MAX_SIZE = 16 bytes; OT_EXT_PAN_ID_SIZE = 8 bytes; OT_PSKC_MAX_SIZE = 16 bytes.
Mesh local prefix size OT_MESH_LOCAL_PREFIX_SIZE = OT_IP6_PREFIX_SIZE (bytes).

Basic Setup and Use (Instance + Joiner)

  1. Initialize OpenThread by calling one of the instance initialization functions (e.g., otInstanceInit, otInstanceInitSingle, or otInstanceInitMultiple).
  2. (Optional) Register a state/configuration change callback with otSetStateChangedCallback.
  3. To enable Thread Joiner role, call otJoinerStart with required parameters (including aInstance and aPskd, and providing a provisioning URL and vendor fields; the URL and vendor fields may be NULL).
  4. To stop the Joiner role, call otJoinerStop.
  5. To check Joiner state, call otJoinerGetState.
Loading PDF…
Download PDF

Troubleshooting

  • Unexpected behavior when calling APIs from different contexts: Ensure all OpenThread public APIs, platform APIs, and callbacks are invoked from the same OS context (same thread/process or same RTOS task). The stack is not re-entrant, and deviations can cause undefined/unexpected behavior.
  • Output parameters not updated after an error: If an API call returns an error status (anything other than success), assume any output parameters may have been modified and are in an indeterminate state—do not rely on outputs remaining unchanged on error.
  • Joiner not completing as expected: Use the Joiner callback (otJoinerCallback) to determine completion outcome. The callback reports OT_ERROR_NONE on success and specific failure causes such as OT_ERROR_SECURITY, OT_ERROR_NOT_FOUND, or OT_ERROR_RESPONSE_TIMEOUT.

API Reference
This module includes the application programming interface to the OpenThread stack.
Important note: The OpenThread stack is not re-entrant. All OpenThread public APIs, platform APIs, and
callbacks MUST be invoked from the same OS context (e.g., the same thread/process or the same task in an
RTOS). Any exceptions to this rule, where an API can be called from a different context, will be explicitly
documented in that API’s reference. Failure to follow this rule can lead to undefined and unexpected
behaviors.
If an API call returns an error status (any value other than success), the caller MUST assume any of the output
parameters passed to the API may have been modified and are in an indeterminate state. Assuming that an
output parameter remains unchanged upon error is invalid. If an API deviates from this default behavior (e.g.,
by guaranteeing parameters are untouched on error), it will be explicitly documented. Otherwise, developers
MUST NOT make this assumption.
Modules
Error
Execution
IPv6 Networking
Link
Message
Multi Radio Link
TREL – Thread Stack
Thread
Add-Ons
Provisional

Error
This module includes error definitions used in OpenThread.
Typedefs
typedef enum
OT_MUST_USE_
RESULTotError
otError
Represents error codes used throughout OpenThread.
Functions
const char * otThreadErrorToString(otError aError)
Converts an otError enum into a string.
Typedef Documentation
otError
enum OT_MUST_USE_RESULT otError
Represents error codes used throughout OpenThread.
Function Documentation
otThreadErrorToString
const char * otThreadErrorToString (otError aError)
Converts an otError enum into a string.
Parameters
Type Direction Argument Name Description
otError [in] aError An otError enum.
Returns
A string representation of an otError.

API Reference
This module includes the application programming interface to the OpenThread stack.
Important note: The OpenThread stack is not re-entrant. All OpenThread public APIs, platform APIs, and
callbacks MUST be invoked from the same OS context (e.g., the same thread/process or the same task in an
RTOS). Any exceptions to this rule, where an API can be called from a different context, will be explicitly
documented in that API’s reference. Failure to follow this rule can lead to undefined and unexpected
behaviors.
If an API call returns an error status (any value other than success), the caller MUST assume any of the output
parameters passed to the API may have been modified and are in an indeterminate state. Assuming that an
output parameter remains unchanged upon error is invalid. If an API deviates from this default behavior (e.g.,
by guaranteeing parameters are untouched on error), it will be explicitly documented. Otherwise, developers
MUST NOT make this assumption.
Modules
Error
Execution
IPv6 Networking
Link
Message
Multi Radio Link
TREL – Thread Stack
Thread
Add-Ons
Provisional
Copyright © 2026 Silicon Laboratories. All rights reserved. 9/1189
Error
Error
Error
This module includes error definitions used in OpenThread.
Typedefs
typedef enum
OT_MUST_USE_
RESULTotError
otError
Represents error codes used throughout OpenThread.
Functions
const char * otThreadErrorToString(otError aError)
Converts an otError enum into a string.
Typedef Documentation
otError
enum OT_MUST_USE_RESULT otError
Represents error codes used throughout OpenThread.
Function Documentation
otThreadErrorToString
const char * otThreadErrorToString (otError aError)
Converts an otError enum into a string.
Parameters
Type Direction Argument Name Description
otError [in] aError An otError enum.
Returns
A string representation of an otError.
Copyright © 2026 Silicon Laboratories. All rights reserved. 10/1189
Execution
Execution
Execution
Modules
Instance
Tasklets
Copyright © 2026 Silicon Laboratories. All rights reserved. 11/1189
Instance
Instance
Instance
This module includes functions that control the OpenThread Instance.
Typedefs
typedef struct
otInstance
otInstance
Represents the OpenThread instance structure.
typedef
uint32_t
otChangedFlags
Represents a bit-field indicating specific state/configuration that has changed.
typedef void(* otStateChangedCallback)(otChangedFlags aFlags, void *aContext)
Pointer is called to notify certain configuration or state changes within OpenThread.
Functions
otInstance * otInstanceInit(void *aInstanceBuffer, size_t *aInstanceBufferSize)
Initializes the OpenThread library.
otInstance * otInstanceInitSingle(void)
Initializes the static single instance of the OpenThread library.
otInstance * otInstanceGetSingle(void)
Gets the pointer to the single OpenThread instance when multiple instances are not in use.
otInstance * otInstanceInitMultiple(uint8_t aIdx)
Initializes the OpenThread instance.
otInstance * otInstanceGetInstance(uint8_t aIdx)
Gets the pointer to an OpenThread instance with the provided index when multiple instances are in use.
uint8_t otInstanceGetIndex(otInstance *aInstance)
Gets the index of the OpenThread instance when multiple instance is in use.
uint32_t otInstanceGetId(otInstance *aInstance)
Gets the instance identifier.
bool otInstanceIsInitialized(otInstance *aInstance)
Indicates whether or not the instance is valid/initialized.
void otInstanceFinalize(otInstance *aInstance)
Disables the OpenThread library.
uint64_t otInstanceGetUptime(otInstance *aInstance)
Returns the current instance uptime (in msec).
void otInstanceGetUptimeAsString(otInstance *aInstance, char *aBuffer, uint16_t aSize)
Returns the current instance uptime as a human-readable string.
otError otSetStateChangedCallback(otInstance *aInstance, otStateChangedCallback aCallback, void
*aContext)
Registers a callback to indicate when certain configuration or state changes within OpenThread.
void otRemoveStateChangeCallback(otInstance *aInstance, otStateChangedCallback aCallback,
void *aContext)
Removes a callback to indicate when certain configuration or state changes within OpenThread.
Copyright © 2026 Silicon Laboratories. All rights reserved. 12/1189
Instance
void otInstanceReset(otInstance *aInstance)
Triggers a platform reset.
otError otInstanceResetToBootloader(otInstance *aInstance)
Triggers a platform reset to bootloader mode, if supported.
void otInstanceFactoryReset(otInstance *aInstance)
Deletes all the settings stored on non-volatile memory, and then triggers a platform reset.
void otInstanceResetRadioStack(otInstance *aInstance)
Resets the internal states of the OpenThread radio stack.
otError otInstanceErasePersistentInfo(otInstance *aInstance)
Erases all the OpenThread persistent info (network settings) stored on non-volatile memory.
const char * otGetVersionString(void)
Gets the OpenThread version string.
const char * otGetRadioVersionString(otInstance *aInstance)
Gets the OpenThread radio version string.
Macros
#define OT_UPTIME_STRING_SIZE 24
Recommended size for string representation of uptime.
#define OT_CHANGED_IP6_ADDRESS_ADDED (1U << 0)
IPv6 address was added.
#define OT_CHANGED_IP6_ADDRESS_REMOVED (1U << 1)
IPv6 address was removed.
#define OT_CHANGED_THREAD_ROLE (1U << 2)
Role (disabled, detached, child, router, leader) changed.
#define OT_CHANGED_THREAD_LL_ADDR (1U << 3)
The link-local address changed.
#define OT_CHANGED_THREAD_ML_ADDR (1U << 4)
The mesh-local address changed.
#define OT_CHANGED_THREAD_RLOC_ADDED (1U << 5)
RLOC was added.
#define OT_CHANGED_THREAD_RLOC_REMOVED (1U << 6)
RLOC was removed.
#define OT_CHANGED_THREAD_PARTITION_ID (1U << 7)
Partition ID changed.
#define OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER (1U << 8)
Thread Key Sequence changed.
#define OT_CHANGED_THREAD_NETDATA (1U << 9)
Thread Network Data changed.
#define OT_CHANGED_THREAD_CHILD_ADDED (1U << 10)
Child was added.
#define OT_CHANGED_THREAD_CHILD_REMOVED (1U << 11)
Child was removed.
#define OT_CHANGED_IP6_MULTICAST_SUBSCRIBED (1U << 12)
Subscribed to a IPv6 multicast address.
#define OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED (1U << 13)
Unsubscribed from a IPv6 multicast address.
Copyright © 2026 Silicon Laboratories. All rights reserved. 13/1189
Instance
#define OT_CHANGED_THREAD_CHANNEL (1U << 14)
Thread network channel changed.
#define OT_CHANGED_THREAD_PANID (1U << 15)
Thread network PAN Id changed.
#define OT_CHANGED_THREAD_NETWORK_NAME (1U << 16)
Thread network name changed.
#define OT_CHANGED_THREAD_EXT_PANID (1U << 17)
Thread network extended PAN ID changed.
#define OT_CHANGED_NETWORK_KEY (1U << 18)
Network key changed.
#define OT_CHANGED_PSKC (1U << 19)
PSKc changed.
#define OT_CHANGED_SECURITY_POLICY (1U << 20)
Security Policy changed.
#define OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL (1U << 21)
Channel Manager new pending Thread channel changed.
#define OT_CHANGED_SUPPORTED_CHANNEL_MASK (1U << 22)
Supported channel mask changed.
#define OT_CHANGED_COMMISSIONER_STATE (1U << 23)
Commissioner state changed.
#define OT_CHANGED_THREAD_NETIF_STATE (1U << 24)
Thread network interface state changed.
#define OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE (1U << 25)
Backbone Router state changed.
#define OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL (1U << 26)
Local Backbone Router configuration changed.
#define OT_CHANGED_JOINER_STATE (1U << 27)
Joiner state changed.
#define OT_CHANGED_ACTIVE_DATASET (1U << 28)
Active Operational Dataset changed.
#define OT_CHANGED_PENDING_DATASET (1U << 29)
Pending Operational Dataset changed.
#define OT_CHANGED_NAT64_TRANSLATOR_STATE (1U << 30)
The state of NAT64 translator changed.
#define OT_CHANGED_PARENT_LINK_QUALITY (1U << 31)
Parent link quality changed.
Typedef Documentation
otInstance
typedef struct otInstance otInstance
Represents the OpenThread instance structure.
otChangedFlags
Copyright © 2026 Silicon Laboratories. All rights reserved. 14/1189
Instance
typedef uint32_t otChangedFlags
Represents a bit-field indicating specific state/configuration that has changed.
See OT_CHANGED_* definitions.
otStateChangedCallback
typedef void(* otStateChangedCallback) (otChangedFlags aFlags, void *aContext) )(otChangedFlags
aFlags, void *aContext)
Pointer is called to notify certain configuration or state changes within OpenThread.
Parameters
Type Direction Argument
Name Description
[in] aFlags A bit-field indicating specific state that has changed. See OT_CHANGED_*
definitions.
[in] aContext A pointer to application-specific context.
Function Documentation
otInstanceInit
otInstance * otInstanceInit (void * aInstanceBuffer, size_t * aInstanceBufferSize)
Initializes the OpenThread library.
Parameters
Type Direction Argument Name Description
void * [in] aInstanceBuffer The buffer for OpenThread to use for allocating the otInstance
structure.
size_t
*
[inout] aInstanceBufferSize On input, the size of aInstanceBuffer. On output, if not enough
space for otInstance, the number of bytes required for otInstance.
Initializes OpenThread and prepares it for subsequent OpenThread API calls. This function must be called
before any other calls to OpenThread.
Is available and can only be used when support for multiple OpenThread instances is enabled.
Returns
A pointer to the new OpenThread instance.
See Also
otInstanceFinalize
otInstanceInitSingle
otInstance * otInstanceInitSingle (void )
Copyright © 2026 Silicon Laboratories. All rights reserved. 15/1189
Instance
Initializes the static single instance of the OpenThread library.
Parameters
Type Direction Argument Name Description
void N/A
Initializes OpenThread and prepares it for subsequent OpenThread API calls. This function must be called
before any other calls to OpenThread.
Is available and can only be used when support for multiple OpenThread instances is disabled.
Returns
A pointer to the single OpenThread instance.
otInstanceGetSingle
otInstance * otInstanceGetSingle (void )
Gets the pointer to the single OpenThread instance when multiple instances are not in use.
Parameters
Type Direction Argument Name Description
void N/A
Is available and can only be used when support for multiple OpenThread instances is disabled.
Returns
A pointer to the single OpenThread instance.
otInstanceInitMultiple
otInstance * otInstanceInitMultiple (uint8_t aIdx)
Initializes the OpenThread instance.
Parameters
Type Direction Argument Name Description
uint8_t [in] aIdx The index of the OpenThread instance to initialize.
This function initializes OpenThread and prepares it for subsequent OpenThread API calls. This function must
be called before any other calls to OpenThread. This method utilizes static buffer to initialize the OpenThread
instance.
This function is available and can only be used when support for multiple OpenThread static instances is
enabled ( OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE )
Returns
A pointer to the new OpenThread instance.
otInstanceGetInstance
otInstance * otInstanceGetInstance (uint8_t aIdx)
Copyright © 2026 Silicon Laboratories. All rights reserved. 16/1189
Instance
Gets the pointer to an OpenThread instance with the provided index when multiple instances are in use.
Parameters
Type Direction Argument Name Description
uint8_t [in] aIdx The index of the OpenThread instance.
This function is available when both OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE and
OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE are enabled.
Returns
A pointer to the corresponding OpenThread instance, or NULL if aIdx is out of bounds.
otInstanceGetIndex
uint8_t otInstanceGetIndex (otInstance * aInstance)
Gets the index of the OpenThread instance when multiple instance is in use.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance The reference of the OpenThread instance to get index.
This function is available when both OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE and
OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE are enabled.
Returns
The index of the OpenThread instance.
otInstanceGetId
uint32_t otInstanceGetId (otInstance * aInstance)
Gets the instance identifier.
Parameters
Type Direction Argument Name Description
otInstance * N/A aInstance
The instance identifier is set to a random value when the instance is constructed, and then its value will not
change after initialization.
Returns
The instance identifier.
otInstanceIsInitialized
bool otInstanceIsInitialized (otInstance * aInstance)
Indicates whether or not the instance is valid/initialized.
Parameters
Copyright © 2026 Silicon Laboratories. All rights reserved. 17/1189
Instance
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
The instance is considered valid if it is acquired and initialized using either otInstanceInitSingle() (in single
instance case) or otInstanceInit() (in multi instance case). A subsequent call to otInstanceFinalize() causes
the instance to be considered as uninitialized.
Returns
TRUE if the given instance is valid/initialized, FALSE otherwise.
otInstanceFinalize
void otInstanceFinalize (otInstance * aInstance)
Disables the OpenThread library.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Call this function when OpenThread is no longer in use.
otInstanceGetUptime
uint64_t otInstanceGetUptime (otInstance * aInstance)
Returns the current instance uptime (in msec).
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Requires OPENTHREAD_CONFIG_UPTIME_ENABLE to be enabled.
The uptime is given as number of milliseconds since OpenThread instance was initialized.
Returns
The uptime (number of milliseconds).
otInstanceGetUptimeAsString
void otInstanceGetUptimeAsString (otInstance * aInstance, char * aBuffer, uint16_t aSize)
Returns the current instance uptime as a human-readable string.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
char * [out] aBuffer A pointer to a char array to output the string.
Copyright © 2026 Silicon Laboratories. All rights reserved. 18/1189
Instance
Type Direction Argument
Name Description
uint16_t [in] aSize The size of aBuffer (in bytes). Recommended to use
OT_UPTIME_STRING_SIZE .
Requires OPENTHREAD_CONFIG_UPTIME_ENABLE to be enabled.
The string follows the format “<hh>:<mm>:<ss>.<mmmm>” for hours, minutes, seconds and millisecond (if
uptime is shorter than one day) or “<dd>d.<hh>:<mm>:<ss>.<mmmm>” (if longer than a day).
If the resulting string does not fit in aBuffer (within its aSize characters), the string will be truncated but the
outputted string is always null-terminated.
otSetStateChangedCallback
otError otSetStateChangedCallback (otInstance * aInstance, otStateChangedCallback aCallback, void *
aContext)
Registers a callback to indicate when certain configuration or state changes within OpenThread.
Parameters
Type Direction Argument
Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otStateChangedCallback [in] aCallback A pointer to a function that is called with certain
configuration or state changes.
void * [in] aContext A pointer to application-specific context.
otRemoveStateChangeCallback
void otRemoveStateChangeCallback (otInstance * aInstance, otStateChangedCallback aCallback, void *
aContext)
Removes a callback to indicate when certain configuration or state changes within OpenThread.
Parameters
Type Direction Argument
Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otStateChangedCallback [in] aCallback A pointer to a function that is called with certain
configuration or state changes.
void * [in] aContext A pointer to application-specific context.
otInstanceReset
void otInstanceReset (otInstance * aInstance)
Triggers a platform reset.
Parameters
Copyright © 2026 Silicon Laboratories. All rights reserved. 19/1189
Instance
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
The reset process ensures that all the OpenThread state/info (stored in volatile memory) is erased. Note that
the otPlatformReset does not erase any persistent state/info saved in non-volatile memory.
otInstanceResetToBootloader
otError otInstanceResetToBootloader (otInstance * aInstance)
Triggers a platform reset to bootloader mode, if supported.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Requires OPENTHREAD_CONFIG_PLATFORM_BOOTLOADER_MODE_ENABLE .
otInstanceFactoryReset
void otInstanceFactoryReset (otInstance * aInstance)
Deletes all the settings stored on non-volatile memory, and then triggers a platform reset.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otInstanceResetRadioStack
void otInstanceResetRadioStack (otInstance * aInstance)
Resets the internal states of the OpenThread radio stack.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Callbacks and configurations are preserved.
This API is only available under radio builds ( OPENTHREAD_RADIO = 1 ).
otInstanceErasePersistentInfo
otError otInstanceErasePersistentInfo (otInstance * aInstance)
Erases all the OpenThread persistent info (network settings) stored on non-volatile memory.
Parameters
Copyright © 2026 Silicon Laboratories. All rights reserved. 20/1189
Instance
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Erase is successful only if the device is in disabled state/role.
otGetVersionString
const char * otGetVersionString (void )
Gets the OpenThread version string.
Parameters
Type Direction Argument Name Description
void N/A
Returns
A pointer to the OpenThread version.
otGetRadioVersionString
const char * otGetRadioVersionString (otInstance * aInstance)
Gets the OpenThread radio version string.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Returns
A pointer to the OpenThread radio version.
Macro Definition Documentation
OT_UPTIME_STRING_SIZE
#define OT_UPTIME_STRING_SIZE
Value:
24
Recommended size for string representation of uptime.
OT_CHANGED_IP6_ADDRESS_ADDED
#define OT_CHANGED_IP6_ADDRESS_ADDED
Value:
(1U << 0)
Copyright © 2026 Silicon Laboratories. All rights reserved. 21/1189
Instance
IPv6 address was added.
OT_CHANGED_IP6_ADDRESS_REMOVED
#define OT_CHANGED_IP6_ADDRESS_REMOVED
Value:
(1U << 1)
IPv6 address was removed.
OT_CHANGED_THREAD_ROLE
#define OT_CHANGED_THREAD_ROLE
Value:
(1U << 2)
Role (disabled, detached, child, router, leader) changed.
OT_CHANGED_THREAD_LL_ADDR
#define OT_CHANGED_THREAD_LL_ADDR
Value:
(1U << 3)
The link-local address changed.
OT_CHANGED_THREAD_ML_ADDR
#define OT_CHANGED_THREAD_ML_ADDR
Value:
(1U << 4)
The mesh-local address changed.
OT_CHANGED_THREAD_RLOC_ADDED
#define OT_CHANGED_THREAD_RLOC_ADDED
Value:
(1U << 5)
RLOC was

OT_CHANGED_THREAD_RLOC_REMOVED
#define OT_CHANGED_THREAD_RLOC_REMOVED
Value:
(1U << 6)
RLOC was removed.
OT_CHANGED_THREAD_PARTITION_ID
#define OT_CHANGED_THREAD_PARTITION_ID
Value:
(1U << 7)
Partition ID changed.
OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER
#define OT_CHANGED_THREAD_KEY_SEQUENCE_COUNTER
Value:
(1U << 8)
Thread Key Sequence changed.
OT_CHANGED_THREAD_NETDATA
#define OT_CHANGED_THREAD_NETDATA
Value:
(1U << 9)
Thread Network Data changed.
OT_CHANGED_THREAD_CHILD_ADDED
#define OT_CHANGED_THREAD_CHILD_ADDED
Value:
(1U << 10)
Child was added.
OT_CHANGED_THREAD_CHILD_REMOVED
Copyright © 2026 Silicon Laboratories. All rights reserved. 23/1189
Instance
#define OT_CHANGED_THREAD_CHILD_REMOVED
Value:
(1U << 11)
Child was removed.
OT_CHANGED_IP6_MULTICAST_SUBSCRIBED
#define OT_CHANGED_IP6_MULTICAST_SUBSCRIBED
Value:
(1U << 12)
Subscribed to a IPv6 multicast address.
OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED
#define OT_CHANGED_IP6_MULTICAST_UNSUBSCRIBED
Value:
(1U << 13)
Unsubscribed from a IPv6 multicast address.
OT_CHANGED_THREAD_CHANNEL
#define OT_CHANGED_THREAD_CHANNEL
Value:
(1U << 14)
Thread network channel changed.
OT_CHANGED_THREAD_PANID
#define OT_CHANGED_THREAD_PANID
Value:
(1U << 15)
Thread network PAN Id changed.
OT_CHANGED_THREAD_NETWORK_NAME
#define OT_CHANGED_THREAD_NETWORK_NAME
Copyright © 2026 Silicon Laboratories. All rights reserved. 24/1189
Instance
Value:
(1U << 16)
Thread network name changed.
OT_CHANGED_THREAD_EXT_PANID
#define OT_CHANGED_THREAD_EXT_PANID
Value:
(1U << 17)
Thread network extended PAN ID changed.
OT_CHANGED_NETWORK_KEY
#define OT_CHANGED_NETWORK_KEY
Value:
(1U << 18)
Network key changed.
OT_CHANGED_PSKC
#define OT_CHANGED_PSKC
Value:
(1U << 19)
PSKc changed.
OT_CHANGED_SECURITY_POLICY
#define OT_CHANGED_SECURITY_POLICY
Value:
(1U << 20)
Security Policy changed.
OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL
#define OT_CHANGED_CHANNEL_MANAGER_NEW_CHANNEL
Value:
(1U << 21)
Copyright © 2026 Silicon Laboratories. All rights reserved. 25/1189
Instance
Channel Manager new pending Thread channel changed.
OT_CHANGED_SUPPORTED_CHANNEL_MASK
#define OT_CHANGED_SUPPORTED_CHANNEL_MASK
Value:
(1U << 22)
Supported channel mask changed.
OT_CHANGED_COMMISSIONER_STATE
#define OT_CHANGED_COMMISSIONER_STATE
Value:
(1U << 23)
Commissioner state changed.
OT_CHANGED_THREAD_NETIF_STATE
#define OT_CHANGED_THREAD_NETIF_STATE
Value:
(1U << 24)
Thread network interface state changed.
OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE
#define OT_CHANGED_THREAD_BACKBONE_ROUTER_STATE
Value:
(1U << 25)
Backbone Router state changed.
OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL
#define OT_CHANGED_THREAD_BACKBONE_ROUTER_LOCAL
Value:
(1U << 26)
Local Backbone Router configuration changed.
Copyright © 2026 Silicon Laboratories. All rights reserved. 26/1189
Instance
OT_CHANGED_JOINER_STATE
#define OT_CHANGED_JOINER_STATE
Value:
(1U << 27)
Joiner state changed.
OT_CHANGED_ACTIVE_DATASET
#define OT_CHANGED_ACTIVE_DATASET
Value:
(1U << 28)
Active Operational Dataset changed.
OT_CHANGED_PENDING_DATASET
#define OT_CHANGED_PENDING_DATASET
Value:
(1U << 29)
Pending Operational Dataset changed.
OT_CHANGED_NAT64_TRANSLATOR_STATE
#define OT_CHANGED_NAT64_TRANSLATOR_STATE
Value:
(1U << 30)
The state of NAT64 translator changed.
OT_CHANGED_PARENT_LINK_QUALITY
#define OT_CHANGED_PARENT_LINK_QUALITY
Value:
(1U << 31)
Parent link quality changed.
Copyright © 2026 Silicon Laboratories. All rights reserved. 27/1189
Tasklets
Tasklets
Tasklets
This module includes functions that control the Thread stack’s execution.
Functions
void otTaskletsProcess(otInstance *aInstance)
Run all queued OpenThread tasklets at the time this is called.
bool otTaskletsArePending(otInstance *aInstance)
Indicates whether or not OpenThread has tasklets pending.
void otTaskletsSignalPending(otInstance *aInstance)
OpenThread calls this function when the tasklet queue transitions from empty to non-empty.
Function Documentation
otTaskletsProcess
void otTaskletsProcess (otInstance * aInstance)
Run all queued OpenThread tasklets at the time this is called.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otTaskletsArePending
bool otTaskletsArePending (otInstance * aInstance)
Indicates whether or not OpenThread has tasklets pending.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otTaskletsSignalPending
void otTaskletsSignalPending (otInstance * aInstance)
OpenThread calls this function when the tasklet queue transitions from empty to non-empty.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Copyright © 2026 Silicon Laboratories. All rights reserved. 28/1189
Tasklets
Copyright © 2026 Silicon Laboratories. All rights reserved. 29/1189
IPv6 Networking
IPv6 Networking
IPv6 Networking
Modules
BLE Secure
DNS
DNS-SD Server
ICMPv6
IPv6
Multicast DNS
NAT64
SRP
Ping Sender
TCP
UDP
Copyright © 2026 Silicon Laboratories. All rights reserved. 30/1189
BLE Secure
BLE Secure
BLE Secure
This module includes functions that control BLE Secure (TLS over BLE) communication.
This module includes functions that implement TCAT communication.
The functions in this module are available when BLE Secure API feature ( OPENTHREAD_CONFIG_BLE_TCAT_ENABLE ) is
enabled.
The functions in this module are available when TCAT feature ( OPENTHREAD_CONFIG_BLE_TCAT_ENABLE ) is enabled.
Modules
otTcatAdvertisedDeviceId
otTcatGeneralDeviceId
otTcatVendorInfo
Enumerations
enum otTcatStatusCode {
OT_TCAT_STATUS_SUCCESS = 0
OT_TCAT_STATUS_UNSUPPORTED = 1
OT_TCAT_STATUS_PARSE_ERROR = 2
OT_TCAT_STATUS_VALUE_ERROR = 3
OT_TCAT_STATUS_GENERAL_ERROR = 4
OT_TCAT_STATUS_BUSY = 5
OT_TCAT_STATUS_UNDEFINED = 6
OT_TCAT_STATUS_HASH_ERROR = 7
OT_TCAT_STATUS_INVALID_STATE = 8
OT_TCAT_STATUS_UNAUTHORIZED = 16
}
Represents TCAT status code.
enum otTcatApplicationProtocol {
OT_TCAT_APPLICATION_PROTOCOL_NONE = 0
OT_TCAT_APPLICATION_PROTOCOL_STATUS = 0x01
OT_TCAT_APPLICATION_PROTOCOL_RESPONSE = 0x02
OT_TCAT_APPLICATION_PROTOCOL_1 = 0x81
OT_TCAT_APPLICATION_PROTOCOL_2 = 0x82
OT_TCAT_APPLICATION_PROTOCOL_3 = 0x83
OT_TCAT_APPLICATION_PROTOCOL_4 = 0x84
OT_TCAT_APPLICATION_PROTOCOL_VENDOR = 0x9F
}
Represents TCAT application protocol options.
enum otTcatCommandClass {
OT_TCAT_COMMAND_CLASS_GENERAL = 0
OT_TCAT_COMMAND_CLASS_COMMISSIONING = 1
OT_TCAT_COMMAND_CLASS_EXTRACTION = 2
OT_TCAT_COMMAND_CLASS_DECOMMISSIONING = 3
OT_TCAT_COMMAND_CLASS_APPLICATION = 4
}
Represents a TCAT command class.
Copyright © 2026 Silicon Laboratories. All rights reserved. 31/1189
BLE Secure
enum otTcatAdvertisedDeviceIdType {
OT_TCAT_DEVICE_ID_EMPTY = 0
OT_TCAT_DEVICE_ID_OUI24 = 1
OT_TCAT_DEVICE_ID_OUI36 = 2
OT_TCAT_DEVICE_ID_DISCRIMINATOR = 3
OT_TCAT_DEVICE_ID_IANAPEN = 4
OT_TCAT_DEVICE_ID_MAX = 5
}
Represents Advertised Device ID type.
Typedefs
typedef void(* otHandleBleSecureConnect)(otInstance *aInstance, bool aConnected, bool
aBleConnectionOpen, void *aContext)
Pointer to call when ble secure connection state changes.
typedef
otHandleTcatAp
plicationDataRe
ceive
otHandleBleSecureReceive
Pointer to call when data was received over a BLE Secure TLS connection.
typedef enum
otTcatStatusCo
de
otTcatStatusCode
Represents TCAT status code.
typedef enum
otTcatApplicati
onProtocol
otTcatApplicationProtocol
Represents TCAT application protocol options.
typedef enum
otTcatComman
dClass
otTcatCommandClass
Represents a TCAT command class.
typedef enum
otTcatAdvertise
dDeviceIdType
otTcatAdvertisedDeviceIdType
Represents Advertised Device ID type.
typedef struct
otTcatAdvertise
dDeviceId
otTcatAdvertisedDeviceId
typedef struct
otTcatGeneralD
eviceId
otTcatGeneralDeviceId
Represents General Device ID type.
typedef struct
otTcatVendorInf
o
otTcatVendorInfo
This structure represents a TCAT vendor information.
typedef void(* otHandleTcatApplicationDataReceive)(otInstance *aInstance, const otMessage *aMessage,
int32_t aOffset, otTcatApplicationProtocol aTcatApplicationProtocol, void *aContext)
Pointer to call when application data or vendor-specific data was received over a TCAT TLS connection.
typedef void(* otHandleTcatJoin)(otError aError, void *aContext)
Pointer to call to notify the completion of a network join/leave operation performed under guidance of a TCAT
Commissioner.
Functions
otError otBleSecureStart(otInstance *aInstance, otHandleBleSecureConnect aConnectHandler,
otHandleBleSecureReceive aReceiveHandler, bool aTlvMode, void *aContext)
Starts the BLE Secure service.
otError otBleSecureSetTcatVendorInfo(otInstance *aInstance, const otTcatVendorInfo *aVendorInfo)
Sets TCAT vendor info.
otError otBleSecureTcatStart(otInstance *aInstance, otHandleTcatJoin aJoinHandler)
Enables the TCAT protocol over BLE Secure.
Copyright © 2026 Silicon Laboratories. All rights reserved. 32/1189
BLE Secure
void otBleSecureStop(otInstance *aInstance)
Stops the BLE Secure server.
otError otBleSecureSetTcatAgentState(otInstance *aInstance, bool aActive, uint32_t aDelayMs, uint32_t
aDurationMs)
Sets the TCAT agent over BLE Secure into active or standby state.
void otBleSecureSetPsk(otInstance *aInstance, const uint8_t *aPsk, uint16_t aPskLength, const
uint8_t *aPskIdentity, uint16_t aPskIdLength)
Sets the Pre-Shared Key (PSK) and cipher suite TLS_PSK_WITH_AES_128_CCM_8.
otError otBleSecureGetPeerCertificateBase64(otInstance *aInstance, unsigned char *aPeerCert, size_t
*aCertLength)
Returns the peer x509 certificate base64 encoded.
otError otBleSecureGetPeerCertificateDer(otInstance *aInstance, unsigned char *aPeerCert, size_t
*aCertLength)
Returns the DER encoded peer x509 certificate.
otError otBleSecureGetPeerSubjectAttributeByOid(otInstance *aInstance, const char *aOid, size_t
aOidLength, uint8_t *aAttributeBuffer, size_t *aAttributeLength, int *aAsn1Type)
Returns an attribute value identified by its OID from the subject of the peer x509 certificate.
otError otBleSecureGetThreadAttributeFromPeerCertificate(otInstance *aInstance, int
aThreadOidDescriptor, uint8_t *aAttributeBuffer, size_t *aAttributeLength)
Returns an attribute value for the OID 1.3.6.1.4.1.44970.x from the v3 extensions of the peer x509 certificate,
where the last digit x is set to aThreadOidDescriptor.
otError otBleSecureGetThreadAttributeFromOwnCertificate(otInstance *aInstance, int
aThreadOidDescriptor, uint8_t *aAttributeBuffer, size_t *aAttributeLength)
Returns an attribute value for the OID 1.3.6.1.4.1.44970.x from the v3 extensions of the own x509 certificate,
where the last digit x is set to aThreadOidDescriptor.
void otBleSecureSetSslAuthMode(otInstance *aInstance, bool aVerifyPeerCertificate)
Sets the authentication mode for the BLE secure connection.
void otBleSecureSetCertificate(otInstance *aInstance, const uint8_t *aX509Cert, uint32_t
aX509Length, const uint8_t *aPrivateKey, uint32_t aPrivateKeyLength)
Sets the local device’s X509 certificate and corresponding private key.
void otBleSecureSetCaCertificateChain(otInstance *aInstance, const uint8_t
*aX509CaCertificateChain, uint32_t aX509CaCertChainLength)
Sets the trusted top level CAs.
otError otBleSecureConnect(otInstance *aInstance)
Initializes TLS session with a peer using an already open BLE connection.
void otBleSecureDisconnect(otInstance *aInstance)
Stops the BLE and TLS connections.
bool otBleSecureIsConnectionActive(otInstance *aInstance)
Indicates whether or not the TLS session is active (connected or connecting).
bool otBleSecureIsConnected(otInstance *aInstance)
Indicates whether or not the TLS session is connected.
bool otBleSecureIsTcatAgentStarted(otInstance *aInstance)
Indicates whether or not the TCAT agent is started over BLE secure.
bool otBleSecureIsCommandClassAuthorized(otInstance *aInstance, otTcatCommandClass
aCommandClass)
Indicates whether or not a TCAT command class is authorized for the current TCAT Commissioner.
otError otBleSecureSendMessage(otInstance *aInstance, otMessage *aMessage)
Sends a secure BLE message.
otError otBleSecureSend(otInstance *aInstance, uint8_t *aBuf, uint16_t aLength)
Sends a secure BLE data packet.
Copyright © 2026 Silicon Laboratories. All rights reserved. 33/1189
BLE Secure
otError otBleSecureSendApplicationTlv(otInstance *aInstance, otTcatApplicationProtocol
aApplicationProtocol, uint8_t *aBuf, uint16_t aLength)
Sends a secure BLE data packet containing application data directed to the application layer
aApplicationProtocol or a response to the latest received application data packet.
otError otBleSecureFlush(otInstance *aInstance)
Flushes the send buffer.
bool otBleSecureGetInstallCodeVerifyStatus(otInstance *aInstance)
Gets the Install Code Verify Status during the current session.
Macros
#define OT_TCAT_SERVICE_NAME_MAX_LENGTH 15
Maximum string length of a UDP or TCP service name (does not include null char).
#define OT_TCAT_APPLICATION_LAYER_MAX_COUNT 4
Maximum number of application layer service names supported.
#define OT_TCAT_ADVERTISEMENT_MAX_LEN 29
Maximum length of TCAT advertisement.
#define OT_TCAT_OPCODE 0x2
TCAT Advertisement Operation Code.
#define OT_TCAT_MAX_ADVERTISED_DEVICEID_SIZE 5
TCAT max size of any type of advertised Device ID.
#define OT_TCAT_MAX_DEVICEID_SIZE 64
TCAT max size of device ID.
#define OT_TCAT_ENABLE_MAX 600
TCAT_ENABLE_MAX, default max TMF TCAT enable time, in seconds.
Enumeration Documentation
otTcatStatusCode
otTcatStatusCode
Represents TCAT status code.
Enumerator
OT_TCAT_STATUS_SUCCESS Command or request was successfully processed.
OT_TCAT_STATUS_UNSUPPORTED Requested command or received TLV is not supported.
OT_TCAT_STATUS_PARSE_ERROR Request / command could not be parsed correctly.
OT_TCAT_STATUS_VALUE_ERROR The value of the transmitted TLV has an error.
OT_TCAT_STATUS_GENERAL_ERROR An error not matching any other category occurred.
OT_TCAT_STATUS_BUSY Command cannot be executed because the resource is busy.
OT_TCAT_STATUS_UNDEFINED The requested value, data or service is not defined (currently) or not
present.
OT_TCAT_STATUS_HASH_ERROR The hash value presented by the commissioner was incorrect.
OT_TCAT_STATUS_INVALID_STATE The TCAT device is not in a correct state for the given command.
OT_TCAT_STATUS_UNAUTHORIZED Sender does not have sufficient authorization for the given command.
otTcatApplicationProtocol
Copyright © 2026 Silicon Laboratories. All rights reserved. 34/1189
BLE Secure
otTcatApplicationProtocol
Represents TCAT application protocol options.
Enumerator
OT_TCAT_APPLICATION_PROTOCOL_NONE Message which has been sent without activating the TCAT
agent.
OT_TCAT_APPLICATION_PROTOCOL_STATUS
OT_TCAT_APPLICATION_PROTOCOL_RESPONSE Message directed to any application protocol indicating a
response with status value (one byte otTcatStatusCode)
OT_TCAT_APPLICATION_PROTOCOL_1 Message directed to application protocol 1.
OT_TCAT_APPLICATION_PROTOCOL_2 Message directed to application protocol 2.
OT_TCAT_APPLICATION_PROTOCOL_3 Message directed to application protocol 3.
OT_TCAT_APPLICATION_PROTOCOL_4 Message directed to application protocol 4.
OT_TCAT_APPLICATION_PROTOCOL_VENDOR Message directed to a vendor specific application protocol.
otTcatCommandClass
otTcatCommandClass
Represents a TCAT command class.
Enumerator
OT_TCAT_COMMAND_CLASS_GENERAL TCAT commands related to general operations.
OT_TCAT_COMMAND_CLASS_COMMISSIONING TCAT commands related to commissioning.
OT_TCAT_COMMAND_CLASS_EXTRACTION TCAT commands related to key extraction.
OT_TCAT_COMMAND_CLASS_DECOMMISSIONING TCAT commands related to de-commissioning.
OT_TCAT_COMMAND_CLASS_APPLICATION TCAT commands related to application layer.
otTcatAdvertisedDeviceIdType
otTcatAdvertisedDeviceIdType
Represents Advertised Device ID type.
Used during TCAT advertisement.
Enumerator
OT_TCAT_DEVICE_ID_EMPTY Advertised device ID type not set.
OT_TCAT_DEVICE_ID_OUI24 Advertised device ID type IEEE OUI-24.
OT_TCAT_DEVICE_ID_OUI36 Advertised device ID type IEEE OUI-36.
OT_TCAT_DEVICE_ID_DISCRIMINATOR Advertised device ID type Device Discriminator.
OT_TCAT_DEVICE_ID_IANAPEN Advertised device ID type IANA PEN.
OT_TCAT_DEVICE_ID_MAX Advertised device ID max number of types.
Typedef Documentation
otHandleBleSecureConnect
Copyright © 2026 Silicon Laboratories. All rights reserved. 35/1189
BLE Secure
typedef void(* otHandleBleSecureConnect) (otInstance *aInstance, bool aConnected, bool
aBleConnectionOpen, void *aContext) )(otInstance *aInstance, bool aConnected, bool aBleConnectionOpen,
void *aContext)
Pointer to call when ble secure connection state changes.
Parameters
Type Direction Argument Name Description
[in] aInstance A pointer to an OpenThread instance.
[in] aConnected TRUE, if a secure connection was established, FALSE otherwise.
[in] aBleConnectionOpen TRUE if a BLE connection was established to carry a TLS data
stream, FALSE otherwise.
[in] aContext A pointer to arbitrary context information.
otHandleBleSecureReceive
typedef otHandleTcatApplicationDataReceive otHandleBleSecureReceive
Pointer to call when data was received over a BLE Secure TLS connection.
When TCAT has been started, the TCAT agent automatically responds with status
OT_TCAT_STATUS_UNSUPPORTED if no response has been generated or no handler is defined. The application
may generate a response to incoming TCAT application data or vendor-specific data by calling
otBleSecureSendApplicationTlv.
otTcatStatusCode
typedef enum otTcatStatusCode otTcatStatusCode
Represents TCAT status code.
otTcatApplicationProtocol
typedef enum otTcatApplicationProtocol otTcatApplicationProtocol
Represents TCAT application protocol options.
otTcatCommandClass
typedef enum otTcatCommandClass otTcatCommandClass
Represents a TCAT command class.
otTcatAdvertisedDeviceIdType
typedef enum otTcatAdvertisedDeviceIdType otTcatAdvertisedDeviceIdType
Copyright © 2026 Silicon Laboratories. All rights reserved. 36/1189
BLE Secure
Represents Advertised Device ID type.
Used during TCAT advertisement.
otTcatAdvertisedDeviceId
typedef struct otTcatAdvertisedDeviceId otTcatAdvertisedDeviceId
otTcatGeneralDeviceId
typedef struct otTcatGeneralDeviceId otTcatGeneralDeviceId
Represents General Device ID type.
otTcatVendorInfo
typedef struct otTcatVendorInfo otTcatVendorInfo
This structure represents a TCAT vendor information.
The content of this structure MUST persist and remain unchanged while a TCAT session is running.
otHandleTcatApplicationDataReceive
typedef void(* otHandleTcatApplicationDataReceive) (otInstance *

BLE Secure
Represents Advertised Device ID type.
Used during TCAT advertisement.
otTcatAdvertisedDeviceId
typedef struct otTcatAdvertisedDeviceId otTcatAdvertisedDeviceId
otTcatGeneralDeviceId
typedef struct otTcatGeneralDeviceId otTcatGeneralDeviceId
Represents General Device ID type.
otTcatVendorInfo
typedef struct otTcatVendorInfo otTcatVendorInfo
This structure represents a TCAT vendor information.
The content of this structure MUST persist and remain unchanged while a TCAT session is running.
otHandleTcatApplicationDataReceive
typedef void(* otHandleTcatApplicationDataReceive) (otInstance *aInstance, const otMessage *aMessage,
int32_t aOffset, otTcatApplicationProtocol aTcatApplicationProtocol, void *aContext) )(otInstance
*aInstance, const otMessage *aMessage, int32_t aOffset, otTcatApplicationProtocol
aTcatApplicationProtocol, void *aContext)
Pointer to call when application data or vendor-specific data was received over a TCAT TLS connection.
Parameters
Type Direction Argument Name Description
[in] aInstance A pointer to an OpenThread instance.
[in] aMessage A pointer to the message.
[in] aOffset The offset where the application data begins.
[in] aTcatApplicationProtocol The application protocol the message is targeted to.
[in] aContext A pointer to arbitrary context information.
The application may generate a response to an incoming TCAT application data packet. The TCAT agent
automatically responds with status OT_TCAT_STATUS_UNSUPPORTED if no response has been generated or no
handler is defined.
otHandleTcatJoin
typedef void(* otHandleTcatJoin) (otError aError, void *aContext) )(otError aError, void *aContext)
Copyright © 2026 Silicon Laboratories. All rights reserved. 37/1189
BLE Secure
Pointer to call to notify the completion of a network join/leave operation performed under guidance of a
TCAT Commissioner.
Parameters
Type Direction Argument
Name Description
[in] aError OT_ERROR_NONE if the network join/leave operation was successfully started.
OT_ERROR_INVALID_STATE if network join was requested but network
credentials were missing or incomplete. OT_ERROR_REJECTED if a network
join/leave operation was requested, but the TCAT Commissioner is not
authorized to make such a request. OT_ERROR_SECURITY is reserved for future
use for a failed join due to credential mismatch.
[in] aContext A pointer to arbitrary context information.
Function Documentation
otBleSecureStart
otError otBleSecureStart (otInstance * aInstance, otHandleBleSecureConnect aConnectHandler,
otHandleBleSecureReceive aReceiveHandler, bool aTlvMode, void * aContext)
Starts the BLE Secure service.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otHandleBleSecureConnect [in] aConnectHandler A pointer to a function that will be called when
the connection state changes.
otHandleBleSecureReceive [in] aReceiveHandler A pointer to a function that will be called once
data has been received over the TLS connection.
bool [in] aTlvMode A boolean value indicating if TLV mode (TRUE)
shall be activated, or line mode (FALSE).
void * [in] aContext A pointer to arbitrary context information. May
be NULL if not used.
When TLV mode is active, the function aReceiveHandler will be called once a complete TLV or line was received
and the message offset points to the TLV value.
otBleSecureSetTcatVendorInfo
otError otBleSecureSetTcatVendorInfo (otInstance * aInstance, const otTcatVendorInfo * aVendorInfo)
Sets TCAT vendor info.
Parameters
Type Direction Argument
Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
const
otTcatVendorInfo *
[in] aVendorInfo A pointer to the Vendor Information (MUST remain valid after
the method call).
Copyright © 2026 Silicon Laboratories. All rights reserved. 38/1189
BLE Secure
The vendor info is used for advertising in TCAT Advertisements, as well as for responding to particular TCAT
commands that supply vendor info to the TCAT Commissioner.
otBleSecureTcatStart
otError otBleSecureTcatStart (otInstance * aInstance, otHandleTcatJoin aJoinHandler)
Enables the TCAT protocol over BLE Secure.
Parameters
Type Direction Argument
Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otHandleTcatJoin [in] aJoinHandler A pointer to a function that is called when a network join or
leave operation is requested under guidance of the TCAT
Commissioner.
otBleSecureStop
void otBleSecureStop (otInstance * aInstance)
Stops the BLE Secure server.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
If the TCAT agent is active, it is also stopped and any ongoing connection is forcibly ended.
otBleSecureSetTcatAgentState
otError otBleSecureSetTcatAgentState (otInstance * aInstance, bool aActive, uint32_t aDelayMs, uint32_t
aDurationMs)
Sets the TCAT agent over BLE Secure into active or standby state.
Parameters
Type Direction Argument
Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
bool [in] aActive If TRUE, attempts to set TCAT agent to active state. If FALSE,
attempts to set TCAT agent to standby (inactive) state.
uint32_t [in] aDelayMs Delay in ms before activating TCAT agent. If 0, activate immediately.
uint32_t [in] aDurationMs Duration in ms of the activation of the TCAT agent. If 0, activate
indefinitely.
In standby state, no BLE advertisements are sent and TCAT Commissioners can’t connect. TCAT can be
automatically enabled via a TMF message while in standby.
Copyright © 2026 Silicon Laboratories. All rights reserved. 39/1189
BLE Secure
otBleSecureSetPsk
void otBleSecureSetPsk (otInstance * aInstance, const uint8_t * aPsk, uint16_t aPskLength, const uint8_t *
aPskIdentity, uint16_t aPskIdLength)
Sets the Pre-Shared Key (PSK) and cipher suite TLS_PSK_WITH_AES_128_CCM_8.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
const uint8_t * [in] aPsk A pointer to the PSK.
uint16_t [in] aPskLength The PSK length.
const uint8_t * [in] aPskIdentity The Identity Name for the PSK.
uint16_t [in] aPskIdLength The PSK Identity Length.
Note
Requires the build-time feature MBEDTLS_KEY_EXCHANGE_PSK_ENABLED to be enabled.
otBleSecureGetPeerCertificateBase64
otError otBleSecureGetPeerCertificateBase64 (otInstance * aInstance, unsigned char * aPeerCert, size_t *
aCertLength)
Returns the peer x509 certificate base64 encoded.
Parameters
Type Direction Argument
Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
unsigned
char *
[out] aPeerCert A pointer to the base64 encoded certificate buffer.
size_t * [inout] aCertLength On input, the size the max size of aPeerCert . On output, the length of
the base64 encoded peer certificate.
Note
Requires the build-time features MBEDTLS_BASE64_C and MBEDTLS_SSL_KEEP_PEER_CERTIFICATE to be enabled.
otBleSecureGetPeerCertificateDer
otError otBleSecureGetPeerCertificateDer (otInstance * aInstance, unsigned char * aPeerCert, size_t *
aCertLength)
Returns the DER encoded peer x509 certificate.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
unsigned char * [out] aPeerCert A pointer to the DER encoded certificate buffer.
Copyright © 2026 Silicon Laboratories. All rights reserved. 40/1189
BLE Secure
Type Direction Argument
Name Description
size_t
*
[inout] aCertLength On input, the size the max size of aPeerCert . On output, the length of the
DER encoded peer certificate.
Note
Requires the build-time feature MBEDTLS_SSL_KEEP_PEER_CERTIFICATE to be enabled.
otBleSecureGetPeerSubjectAttributeByOid
otError otBleSecureGetPeerSubjectAttributeByOid (otInstance * aInstance, const char * aOid, size_t
aOidLength, uint8_t * aAttributeBuffer, size_t * aAttributeLength, int * aAsn1Type)
Returns an attribute value identified by its OID from the subject of the peer x509 certificate.
Parameters
Type Direction Argument Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
const char
*
[in] aOid A pointer to the OID to be found.
size_t [in] aOidLength The length of the OID.
uint8_t * [out] aAttributeBuffer A pointer to the attribute buffer.
size_t * [inout] aAttributeLength On input, the size the max size of aAttributeBuffer . On output,
the length of the attribute written to the buffer.
int * [out] aAsn1Type A pointer to the ASN.1 type of the attribute written to the buffer.
The peer OID is provided in binary format. The attribute length is set if the attribute was successfully read or
zero if unsuccessful. The ASN.1 type as is set as defineded in the ITU-T X.690 standard if the attribute was
successfully read.
Note
Requires the build-time feature MBEDTLS_SSL_KEEP_PEER_CERTIFICATE to be enabled.
otBleSecureGetThreadAttributeFromPeerCertificate
otError otBleSecureGetThreadAttributeFromPeerCertificate (otInstance * aInstance, int
aThreadOidDescriptor, uint8_t * aAttributeBuffer, size_t * aAttributeLength)
Returns an attribute value for the OID 1.3.6.1.4.1.44970.x from the v3 extensions of the peer x509 certificate,
where the last digit x is set to aThreadOidDescriptor.
Parameters
Type Direction Argument Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
int [in] aThreadOidDescriptor The last digit of the Thread attribute OID.
uint8_t * [out] aAttributeBuffer A pointer to the attribute buffer.
size_t * [inout] aAttributeLength On input, the size the max size of aAttributeBuffer . On
output, the length of the attribute written to the buffer.
Copyright © 2026 Silicon Laboratories. All rights reserved. 41/1189
BLE Secure
The attribute length is set if the attribute was successfully read or zero if unsuccessful. Requires a
connection to be active.
Note
Requires the build-time feature MBEDTLS_SSL_KEEP_PEER_CERTIFICATE to be enabled.
otBleSecureGetThreadAttributeFromOwnCertificate
otError otBleSecureGetThreadAttributeFromOwnCertificate (otInstance * aInstance, int
aThreadOidDescriptor, uint8_t * aAttributeBuffer, size_t * aAttributeLength)
Returns an attribute value for the OID 1.3.6.1.4.1.44970.x from the v3 extensions of the own x509 certificate,
where the last digit x is set to aThreadOidDescriptor.
Parameters
Type Direction Argument Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
int [in] aThreadOidDescriptor The last digit of the Thread attribute OID.
uint8_t * [out] aAttributeBuffer A pointer to the attribute buffer.
size_t * [inout] aAttributeLength On input, the size the max size of aAttributeBuffer . On
output, the length of the attribute written to the buffer.
The attribute length is set if the attribute was successfully read or zero if unsuccessful. Requires a
connection to be active.
otBleSecureSetSslAuthMode
void otBleSecureSetSslAuthMode (otInstance * aInstance, bool aVerifyPeerCertificate)
Sets the authentication mode for the BLE secure connection.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
bool [in] aVerifyPeerCertificate true, to verify the peer certificate.
Disable or enable the verification of peer certificate. Must be called before start.
otBleSecureSetCertificate
void otBleSecureSetCertificate (otInstance * aInstance, const uint8_t * aX509Cert, uint32_t aX509Length,
const uint8_t * aPrivateKey, uint32_t aPrivateKeyLength)
Sets the local device’s X509 certificate and corresponding private key.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
const uint8_t * [in] aX509Cert A pointer to the PEM formatted X509 certificate.
Copyright © 2026 Silicon Laboratories. All rights reserved. 42/1189
BLE Secure
Type Direction Argument Name Description
uint32_t [in] aX509Length The length of certificate.
const uint8_t * [in] aPrivateKey A pointer to the PEM formatted private key.
uint32_t [in] aPrivateKeyLength The length of the private key.
Used for TLS sessions with cipher suite TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
Note
Requires MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=1 .
otBleSecureSetCaCertificateChain
void otBleSecureSetCaCertificateChain (otInstance * aInstance, const uint8_t * aX509CaCertificateChain,
uint32_t aX509CaCertChainLength)
Sets the trusted top level CAs.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
const uint8_t * [in] aX509CaCertificateChain A pointer to the PEM formatted X509 CA chain.
uint32_t [in] aX509CaCertChainLength The length of chain.
It is needed for validating the certificate of the peer via TLS.
Used for TLS sessions with cipher suite TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256.
Note
Requires MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED=1 .
otBleSecureConnect
otError otBleSecureConnect (otInstance * aInstance)
Initializes TLS session with a peer using an already open BLE connection.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otBleSecureDisconnect
void otBleSecureDisconnect (otInstance * aInstance)
Stops the BLE and TLS connections.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
Copyright © 2026 Silicon Laboratories. All rights reserved. 43/1189
BLE Secure
otBleSecureIsConnectionActive
bool otBleSecureIsConnectionActive (otInstance * aInstance)
Indicates whether or not the TLS session is active (connected or connecting).
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otBleSecureIsConnected
bool otBleSecureIsConnected (otInstance * aInstance)
Indicates whether or not the TLS session is connected.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otBleSecureIsTcatAgentStarted
bool otBleSecureIsTcatAgentStarted (otInstance * aInstance)
Indicates whether or not the TCAT agent is started over BLE secure.
Parameters
Type Direction Argument Name Description
otInstance * N/A aInstance
otBleSecureIsCommandClassAuthorized
bool otBleSecureIsCommandClassAuthorized (otInstance * aInstance, otTcatCommandClass
aCommandClass)
Indicates whether or not a TCAT command class is authorized for the current TCAT Commissioner.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otTcatCommandClass [in] aCommandClass A command class to check.
otBleSecureSendMessage
otError otBleSecureSendMessage (otInstance * aInstance, otMessage * aMessage)
Sends a secure BLE message.
Copyright © 2026 Silicon Laboratories. All rights reserved. 44/1189
BLE Secure
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otMessage * [in] aMessage A pointer to the message to send.
If the return value is OT_ERROR_NONE, OpenThread takes ownership of aMessage , and the caller should no
longer reference aMessage . If the return value is not OT_ERROR_NONE, the caller retains ownership of
aMessage , including freeing aMessage if the message buffer is no longer needed.
otBleSecureSend
otError otBleSecureSend (otInstance * aInstance, uint8_t * aBuf, uint16_t aLength)
Sends a secure BLE data packet.
Parameters
Type Direction Argument
Name Description
otInstance
*
[in] aInstance A pointer to an OpenThread instance.
uint8_t * [in] aBuf A pointer to the data to send as the Value of the TCAT Send
Application Data TLV.
uint16_t [in] aLength A number indicating the length of the data buffer.
otBleSecureSendApplicationTlv
otError otBleSecureSendApplicationTlv (otInstance * aInstance, otTcatApplicationProtocol
aApplicationProtocol, uint8_t * aBuf, uint16_t aLength)
Sends a secure BLE data packet containing application data directed to the application layer
aApplicationProtocol or a response to the latest received application data packet.
Parameters
Type Direction Argument Name Description
otInstance * [in] aInstance A pointer to an OpenThread instance.
otTcatApplicationProtocol [in] aApplicationProtocol An application protocol the data is directed
to.
uint8_t * [in] aBuf A pointer to the data to send as the Value

 

 

Documents / Resources

PDF thumbnailRS9116 API Reference
User Guide · v3.1.0, RS9116 API Reference, RS9116, API Reference

Ask a Question

Use this section to ask about setup, compatibility, troubleshooting, or anything missing from this manual.

Ask a Question

Ask about setup, compatibility, troubleshooting, or anything missing from this manual. Name and email are optional.