blob: 3cbd3832e168755d01a5b48e2aaec9aa1cfe2805 [file] [log] [blame]
/*
* Copyright (c) 2016, The OpenThread Authors.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the copyright holder nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file
* @brief
* This file defines the top-level functions for the OpenThread library.
*/
#ifndef OPENTHREAD_H_
#define OPENTHREAD_H_
#include <openthread-types.h>
#include "openthread/crypto.h"
#include "openthread/ip6.h"
#include "openthread/message.h"
#include "openthread/tasklet.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup api API
* @brief
* This module includes the application programming interface to the OpenThread stack.
*
* @{
*
* @defgroup execution Execution
* @defgroup commands Commands
* @defgroup config Configuration
* @defgroup diags Diagnostics
* @defgroup messages Message Buffers
* @defgroup ip6 IPv6
* @defgroup udp UDP
* @defgroup coap CoAP
*
* @}
*
*/
/**
* @defgroup platform Platform Abstraction
* @brief
* This module includes the platform abstraction used by the OpenThread stack.
*
* @{
* @}
*
*/
/**
* @defgroup core Core
* @brief
* This module includes the core OpenThread stack.
*
* @{
*
* @defgroup core-6lowpan 6LoWPAN
* @defgroup core-coap CoAP
* @defgroup core-global-address Global IPv6 Address
* @defgroup core-ipv6 IPv6
* @defgroup core-mac MAC
* @defgroup core-mesh-forwarding Mesh Forwarding
* @defgroup core-message Message
* @defgroup core-mle MLE
* @defgroup core-netdata Network Data
* @defgroup core-netif Network Interface
* @defgroup core-arp RLOC Mapping
* @defgroup core-security Security
* @defgroup core-tasklet Tasklet
* @defgroup core-timer Timer
* @defgroup core-udp UDP
* @defgroup core-tcp TCP
* @defgroup core-link-quality Link Quality
*
* @}
*
*/
/**
* @addtogroup commands Commands
*
* @brief
* This module includes functions for OpenThread commands.
*
* @{
*
*/
/**
* Get the OpenThread version string.
*
* @returns A pointer to the OpenThread version.
*
*/
OTAPI const char *OTCALL otGetVersionString(void);
#ifdef OTDLL
/**
* This function initializes a new instance of the OpenThread library.
*
* @retval otApiInstance* The new OpenThread context structure.
*
* @sa otApiFinalize
*
*/
OTAPI otApiInstance *OTCALL otApiInit(void);
/**
* This function uninitializes the OpenThread library.
*
* Call this function when OpenThread is no longer in use.
*
* @param[in] aApiInstance The OpenThread api instance.
*
*/
OTAPI void OTCALL otApiFinalize(otApiInstance *aApiInstance);
/**
* This function frees any memory returned/allocated by the library.
*
* @param[in] aMem The memory to free.
*
*/
OTAPI void OTCALL otFreeMemory(const void *aMem);
/**
* This function registers a callback to indicate OpenThread devices come and go.
*
* @param[in] aApiInstance The OpenThread api instance.
* @param[in] aCallback A pointer to a function that is called with the state changes.
* @param[in] aContextContext A pointer to application-specific context.
*
*/
OTAPI void OTCALL otSetDeviceAvailabilityChangedCallback(otApiInstance *aApiInstance,
otDeviceAvailabilityChangedCallback aCallback, void *aCallbackContext);
/**
* This function querys the list of OpenThread device contexts on the system.
*
* @param[in] aApiInstance The OpenThread api instance.
*
* @sa otFreeMemory
*/
OTAPI otDeviceList *OTCALL otEnumerateDevices(otApiInstance *aApiInstance);
/**
* This function initializes an OpenThread context for a device.
*
* @param[in] aApiInstance The OpenThread api instance.
* @param[in] aDeviceGuid The device guid to create an OpenThread context for.
*
* @retval otInstance* The new OpenThread device instance structure for the device.
*
* @sa otFreeMemory
*
*/
OTAPI otInstance *OTCALL otInstanceInit(otApiInstance *aApiInstance, const GUID *aDeviceGuid);
/**
* This queries the Windows device/interface GUID for the otContext.
*
* @param[in] aContext The OpenThread context structure.
*
* @retval GUID The device GUID.
*
*/
OTAPI GUID OTCALL otGetDeviceGuid(otInstance *aInstance);
/**
* This queries the Windows device/interface IfIndex for the otContext.
*
* @param[in] aContext The OpenThread context structure.
*
* @retval uint32_t The device IfIndex.
*
*/
OTAPI uint32_t OTCALL otGetDeviceIfIndex(otInstance *aInstance);
/**
* This queries the Windows Compartment ID for the otContext.
*
* @param[in] aContext The OpenThread context structure.
*
* @retval uint32_t The compartment ID.
*
*/
OTAPI uint32_t OTCALL otGetCompartmentId(otInstance *aInstance);
#else
#ifdef OPENTHREAD_MULTIPLE_INSTANCE
/**
* This function initializes the OpenThread library.
*
* This function initializes OpenThread and prepares it for subsequent OpenThread API calls. This function must be
* called before any other calls to OpenThread. By default, OpenThread is initialized in the 'enabled' state.
*
* @param[in] aInstanceBuffer The buffer for OpenThread to use for allocating the otInstance structure.
* @param[inout] aInstanceBufferSize On input, the size of aInstanceBuffer. On output, if not enough space for otInstance,
the number of bytes required for otInstance.
*
* @retval otInstance* The new OpenThread instance structure.
*
* @sa otContextFinalize
*
*/
otInstance *otInstanceInit(void *aInstanceBuffer, size_t *aInstanceBufferSize);
#else
/**
* This function initializes the static instance of the OpenThread library.
*
* This function initializes OpenThread and prepares it for subsequent OpenThread API calls. This function must be
* called before any other calls to OpenThread. By default, OpenThread is initialized in the 'enabled' state.
*
* @retval otInstance* The new OpenThread instance structure.
*
*/
otInstance *otInstanceInit(void);
#endif
/**
* This function disables the OpenThread library.
*
* Call this function when OpenThread is no longer in use.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
*/
void otInstanceFinalize(otInstance *aInstance);
#endif
/**
* This function starts Thread protocol operation.
*
* The interface must be up when calling this function.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadError_None Successfully started Thread protocol operation.
* @retval kThreadError_InvalidState The network interface was not not up.
*
*/
OTAPI ThreadError OTCALL otThreadStart(otInstance *aInstance);
/**
* This function stops Thread protocol operation.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadError_None Successfully stopped Thread protocol operation.
*
*/
OTAPI ThreadError OTCALL otThreadStop(otInstance *aInstance);
/**
* This function configures the Thread stack to automatically start on reinitialization.
* It has no effect on the current Thread state.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aStartAutomatically TRUE to automatically start; FALSE to not automatically start.
*
*/
OTAPI ThreadError OTCALL otThreadSetAutoStart(otInstance *aInstance, bool aStartAutomatically);
/**
* This function queries if the Thread stack is configured to automatically start on reinitialization.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval TRUE It is configured to automatically start.
* @retval FALSE It is not configured to automatically start.
*
*/
OTAPI bool OTCALL otThreadGetAutoStart(otInstance *aInstance);
/**
* This function indicates whether a node is the only router on the network.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval TRUE It is the only router in the network.
* @retval FALSE It is a child or is not a single router in the network.
*
*/
OTAPI bool OTCALL otIsSingleton(otInstance *aInstance);
/**
* This function starts an IEEE 802.15.4 Active Scan
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aScanChannels A bit vector indicating which channels to scan (e.g. OT_CHANNEL_11_MASK).
* @param[in] aScanDuration The time in milliseconds to spend scanning each channel.
* @param[in] aCallback A pointer to a function called on receiving a beacon or scan completes.
* @param[in] aCallbackContext A pointer to application-specific context.
*
* @retval kThreadError_None Accepted the Active Scan request.
* @retval kThreadError_Busy Already performing an Active Scan.
*
*/
OTAPI ThreadError OTCALL otActiveScan(otInstance *aInstance, uint32_t aScanChannels, uint16_t aScanDuration,
otHandleActiveScanResult aCallback, void *aCallbackContext);
/**
* This function indicates whether or not an IEEE 802.15.4 Active Scan is currently in progress.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns true if an IEEE 802.15.4 Active Scan is in progress, false otherwise.
*/
OTAPI bool OTCALL otIsActiveScanInProgress(otInstance *aInstance);
/**
* This function starts an IEEE 802.15.4 Energy Scan
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aScanChannels A bit vector indicating on which channels to perform energy scan.
* @param[in] aScanDuration The time in milliseconds to spend scanning each channel.
* @param[in] aCallback A pointer to a function called to pass on scan result on indicate scan completion.
* @param[in] aCallbackContext A pointer to application-specific context.
*
* @retval kThreadError_None Accepted the Energy Scan request.
* @retval kThreadError_Busy Could not start the energy scan.
*
*/
OTAPI ThreadError OTCALL otEnergyScan(otInstance *aInstance, uint32_t aScanChannels, uint16_t aScanDuration,
otHandleEnergyScanResult aCallback, void *aCallbackContext);
/**
* This function indicates whether or not an IEEE 802.15.4 Energy Scan is currently in progress.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns true if an IEEE 802.15.4 Energy Scan is in progress, false otherwise.
*
*/
OTAPI bool OTCALL otIsEnergyScanInProgress(otInstance *aInstance);
/**
* This function starts a Thread Discovery scan.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aScanChannels A bit vector indicating which channels to scan (e.g. OT_CHANNEL_11_MASK).
* @param[in] aScanDuration The time in milliseconds to spend scanning each channel.
* @param[in] aPanId The PAN ID filter (set to Broadcast PAN to disable filter).
* @param[in] aCallback A pointer to a function called on receiving an MLE Discovery Response or scan completes.
* @param[in] aCallbackContext A pointer to application-specific context.
*
* @retval kThreadError_None Accepted the Thread Discovery request.
* @retval kThreadError_Busy Already performing an Thread Discovery.
*
*/
OTAPI ThreadError OTCALL otDiscover(otInstance *aInstance, uint32_t aScanChannels, uint16_t aScanDuration,
uint16_t aPanid,
otHandleActiveScanResult aCallback, void *aCallbackContext);
/**
* This function determines if an MLE Thread Discovery is currently in progress.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
*/
OTAPI bool OTCALL otIsDiscoverInProgress(otInstance *aInstance);
/**
* This function enqueues an IEEE 802.15.4 Data Request message for transmission.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadError_None Successfully enqueued an IEEE 802.15.4 Data Request message.
* @retval kThreadError_Already An IEEE 802.15.4 Data Request message is already enqueued.
* @retval kThreadError_InvalidState Device is not in rx-off-when-idle mode.
* @retval kThreadError_NoBufs Insufficient message buffers available.
*
*/
OTAPI ThreadError OTCALL otSendMacDataRequest(otInstance *aInstance);
/**
* @}
*
*/
/**
* @addtogroup config Configuration
*
* @brief
* This module includes functions for configuration.
*
* @{
*
*/
/**
* @defgroup config-general General
*
* @brief
* This module includes functions that manage configuration parameters for the Thread Child, Router, and Leader roles.
*
* @{
*
*/
/**
* Get the IEEE 802.15.4 channel.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The IEEE 802.15.4 channel.
*
* @sa otSetChannel
*/
OTAPI uint8_t OTCALL otGetChannel(otInstance *aInstance);
/**
* Set the IEEE 802.15.4 channel
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aChannel The IEEE 802.15.4 channel.
*
* @retval kThreadError_None Successfully set the channel.
* @retval kThreadError_InvalidArgs If @p aChannel is not in the range [11, 26].
*
* @sa otGetChannel
*/
OTAPI ThreadError OTCALL otSetChannel(otInstance *aInstance, uint8_t aChannel);
/**
* Set minimal delay timer.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDelayTimerMinimal The value of minimal delay timer (in ms).
*
* @retval kThreadError_None Successfully set minimal delay timer.
* @retval kThreadError_InvalidArgs If @p aDelayTimerMinimal is not valid.
*
*/
OTAPI ThreadError OTCALL otSetDelayTimerMinimal(otInstance *aInstance, uint32_t aDelayTimerMinimal);
/**
* Get minimal delay timer.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval the value of minimal delay timer (in ms).
*
*/
OTAPI uint32_t OTCALL otGetDelayTimerMinimal(otInstance *aInstance);
/**
* Get the maximum number of children currently allowed.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The maximum number of children currently allowed.
*
* @sa otSetMaxAllowedChildren
*/
OTAPI uint8_t OTCALL otGetMaxAllowedChildren(otInstance *aInstance);
/**
* Set the maximum number of children currently allowed.
*
* This parameter can only be set when Thread protocol operation
* has been stopped.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aMaxChildren The maximum allowed children.
*
* @retval kThreadErrorNone Successfully set the max.
* @retval kThreadError_InvalidArgs If @p aMaxChildren is not in the range [1, OPENTHREAD_CONFIG_MAX_CHILDREN].
* @retval kThreadError_InvalidState If Thread isn't stopped.
*
* @sa otGetMaxAllowedChildren, otThreadStop
*/
OTAPI ThreadError OTCALL otSetMaxAllowedChildren(otInstance *aInstance, uint8_t aMaxChildren);
/**
* Get the Thread Child Timeout used when operating in the Child role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Thread Child Timeout value.
*
* @sa otSetChildTimeout
*/
OTAPI uint32_t OTCALL otGetChildTimeout(otInstance *aInstance);
/**
* Set the Thread Child Timeout used when operating in the Child role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otSetChildTimeout
*/
OTAPI void OTCALL otSetChildTimeout(otInstance *aInstance, uint32_t aTimeout);
/**
* Get the IEEE 802.15.4 Extended Address.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the IEEE 802.15.4 Extended Address.
*/
OTAPI const uint8_t *OTCALL otGetExtendedAddress(otInstance *aInstance);
/**
* This function sets the IEEE 802.15.4 Extended Address.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtendedAddress A pointer to the IEEE 802.15.4 Extended Address.
*
* @retval kThreadError_None Successfully set the IEEE 802.15.4 Extended Address.
* @retval kThreadError_InvalidArgs @p aExtendedAddress was NULL.
*
*/
OTAPI ThreadError OTCALL otSetExtendedAddress(otInstance *aInstance, const otExtAddress *aExtendedAddress);
/**
* Get the IEEE 802.15.4 Extended PAN ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the IEEE 802.15.4 Extended PAN ID.
*
* @sa otSetExtendedPanId
*/
OTAPI const uint8_t *OTCALL otGetExtendedPanId(otInstance *aInstance);
/**
* Set the IEEE 802.15.4 Extended PAN ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtendedPanId A pointer to the IEEE 802.15.4 Extended PAN ID.
*
* @sa otGetExtendedPanId
*/
OTAPI void OTCALL otSetExtendedPanId(otInstance *aInstance, const uint8_t *aExtendedPanId);
/**
* Get the factory-assigned IEEE EUI-64.
*
* @param[in] aInstance A pointer to the OpenThread instance.
* @param[out] aEui64 A pointer to where the factory-assigned IEEE EUI-64 is placed.
*
*/
OTAPI void OTCALL otGetFactoryAssignedIeeeEui64(otInstance *aInstance, otExtAddress *aEui64);
/**
* Get the Hash Mac Address.
*
* Hash Mac Address is the first 64 bits of the result of computing SHA-256 over factory-assigned
* IEEE EUI-64, which is used as IEEE 802.15.4 Extended Address during commissioning process.
*
* @param[in] aInstance A pointer to the OpenThread instance.
* @param[out] aHashMacAddress A pointer to where the Hash Mac Address is placed.
*
*/
OTAPI void OTCALL otGetHashMacAddress(otInstance *aInstance, otExtAddress *aHashMacAddress);
/**
* This function returns a pointer to the Leader's RLOC.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aLeaderRloc A pointer to where the Leader's RLOC will be written.
*
* @retval kThreadError_None The Leader's RLOC was successfully written to @p aLeaderRloc.
* @retval kThreadError_InvalidArgs @p aLeaderRloc was NULL.
* @retval kThreadError_Detached Not currently attached to a Thread Partition.
*
*/
OTAPI ThreadError OTCALL otGetLeaderRloc(otInstance *aInstance, otIp6Address *aLeaderRloc);
/**
* Get the MLE Link Mode configuration.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The MLE Link Mode configuration.
*
* @sa otSetLinkMode
*/
OTAPI otLinkModeConfig OTCALL otGetLinkMode(otInstance *aInstance);
/**
* Set the MLE Link Mode configuration.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aConfig A pointer to the Link Mode configuration.
*
* @retval kThreadErrorNone Successfully set the MLE Link Mode configuration.
*
* @sa otGetLinkMode
*/
OTAPI ThreadError OTCALL otSetLinkMode(otInstance *aInstance, otLinkModeConfig aConfig);
/**
* Get the thrMasterKey.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aKeyLength A pointer to an unsigned 8-bit value that the function will set to the number of bytes that
* represent the thrMasterKey. Caller may set to NULL.
*
* @returns A pointer to a buffer containing the thrMasterKey.
*
* @sa otSetMasterKey
*/
OTAPI const uint8_t *OTCALL otGetMasterKey(otInstance *aInstance, uint8_t *aKeyLength);
/**
* Set the thrMasterKey.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aKey A pointer to a buffer containing the thrMasterKey.
* @param[in] aKeyLength Number of bytes representing the thrMasterKey stored at aKey. Valid range is [0, 16].
*
* @retval kThreadErrorNone Successfully set the thrMasterKey.
* @retval kThreadErrorInvalidArgs If aKeyLength is larger than 16.
*
* @sa otGetMasterKey
*/
OTAPI ThreadError OTCALL otSetMasterKey(otInstance *aInstance, const uint8_t *aKey, uint8_t aKeyLength);
/**
* This function returns the maximum transmit power setting in dBm.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The maximum transmit power setting.
*
*/
OTAPI int8_t OTCALL otGetMaxTransmitPower(otInstance *aInstance);
/**
* This function sets the maximum transmit power in dBm.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPower The maximum transmit power in dBm.
*
*/
OTAPI void OTCALL otSetMaxTransmitPower(otInstance *aInstance, int8_t aPower);
/**
* This function returns a pointer to the Mesh Local EID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the Mesh Local EID.
*
*/
OTAPI const otIp6Address *OTCALL otGetMeshLocalEid(otInstance *aInstance);
/**
* This function returns a pointer to the Mesh Local Prefix.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the Mesh Local Prefix.
*
*/
OTAPI const uint8_t *OTCALL otGetMeshLocalPrefix(otInstance *aInstance);
/**
* This function sets the Mesh Local Prefix.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aMeshLocalPrefix A pointer to the Mesh Local Prefix.
*
* @retval kThreadError_None Successfully set the Mesh Local Prefix.
*
*/
OTAPI ThreadError OTCALL otSetMeshLocalPrefix(otInstance *aInstance, const uint8_t *aMeshLocalPrefix);
/**
* This method provides a full or stable copy of the Leader's Thread Network Data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aStable TRUE when copying the stable version, FALSE when copying the full version.
* @param[out] aData A pointer to the data buffer.
* @param[inout] aDataLength On entry, size of the data buffer pointed to by @p aData.
* On exit, number of copied bytes.
*/
OTAPI ThreadError OTCALL otGetNetworkDataLeader(otInstance *aInstance, bool aStable, uint8_t *aData,
uint8_t *aDataLength);
/**
* This method provides a full or stable copy of the local Thread Network Data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aStable TRUE when copying the stable version, FALSE when copying the full version.
* @param[out] aData A pointer to the data buffer.
* @param[inout] aDataLength On entry, size of the data buffer pointed to by @p aData.
* On exit, number of copied bytes.
*/
OTAPI ThreadError OTCALL otGetNetworkDataLocal(otInstance *aInstance, bool aStable, uint8_t *aData,
uint8_t *aDataLength);
/**
* Get the Thread Network Name.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the Thread Network Name.
*
* @sa otSetNetworkName
*/
OTAPI const char *OTCALL otGetNetworkName(otInstance *aInstance);
/**
* Set the Thread Network Name.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aNetworkName A pointer to the Thread Network Name.
*
* @retval kThreadErrorNone Successfully set the Thread Network Name.
*
* @sa otGetNetworkName
*/
OTAPI ThreadError OTCALL otSetNetworkName(otInstance *aInstance, const char *aNetworkName);
/**
* This function gets the next On Mesh Prefix in the Network Data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aLocal TRUE to retrieve from the local Network Data, FALSE for partition's Network Data
* @param[inout] aIterator A pointer to the Network Data iterator context. To get the first on-mesh entry
it should be set to OT_NETWORK_DATA_ITERATOR_INIT.
* @param[out] aConfig A pointer to where the On Mesh Prefix information will be placed.
*
* @retval kThreadError_None Successfully found the next On Mesh prefix.
* @retval kThreadError_NotFound No subsequent On Mesh prefix exists in the Thread Network Data.
*
*/
OTAPI ThreadError OTCALL otGetNextOnMeshPrefix(otInstance *aInstance, bool aLocal, otNetworkDataIterator *aIterator,
otBorderRouterConfig *aConfig);
/**
* Get the IEEE 802.15.4 PAN ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The IEEE 802.15.4 PAN ID.
*
* @sa otSetPanId
*/
OTAPI otPanId OTCALL otGetPanId(otInstance *aInstance);
/**
* Set the IEEE 802.15.4 PAN ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPanId The IEEE 802.15.4 PAN ID.
*
* @retval kThreadErrorNone Successfully set the PAN ID.
* @retval kThreadErrorInvalidArgs If aPanId is not in the range [0, 65534].
*
* @sa otGetPanId
*/
OTAPI ThreadError OTCALL otSetPanId(otInstance *aInstance, otPanId aPanId);
/**
* This function indicates whether or not the Router Role is enabled.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval TRUE If the Router Role is enabled.
* @retval FALSE If the Router Role is not enabled.
*
*/
OTAPI bool OTCALL otIsRouterRoleEnabled(otInstance *aInstance);
/**
* This function sets whether or not the Router Role is enabled.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aEnabled TRUE if the Router Role is enabled, FALSE otherwise.
*
*/
OTAPI void OTCALL otSetRouterRoleEnabled(otInstance *aInstance, bool aEnabled);
/**
* Get the IEEE 802.15.4 Short Address.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the IEEE 802.15.4 Short Address.
*/
OTAPI otShortAddress OTCALL otGetShortAddress(otInstance *aInstance);
/**
* This function registers a callback to indicate when certain configuration or state changes within OpenThread.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aCallback A pointer to a function that is called with certain configuration or state changes.
* @param[in] aContext A pointer to application-specific context.
*
* @retval kThreadError_None Added the callback to the list of callbacks.
* @retval kThreadError_NoBufs Could not add the callback due to resource constraints.
*
*/
OTAPI ThreadError OTCALL otSetStateChangedCallback(otInstance *aInstance, otStateChangedCallback aCallback,
void *aContext);
/**
* This function removes a callback to indicate when certain configuration or state changes within OpenThread.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aCallback A pointer to a function that is called with certain configuration or state changes.
* @param[in] aContext A pointer to application-specific context.
*
*/
OTAPI void OTCALL otRemoveStateChangeCallback(otInstance *aInstance, otStateChangedCallback aCallback,
void *aCallbackContext);
/**
* This function gets the Active Operational Dataset.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aDataset A pointer to where the Active Operational Dataset will be placed.
*
* @retval kThreadError_None Successfully retrieved the Active Operational Dataset.
* @retval kThreadError_InvalidArgs @p aDataset was NULL.
*
*/
OTAPI ThreadError OTCALL otGetActiveDataset(otInstance *aInstance, otOperationalDataset *aDataset);
/**
* This function sets the Active Operational Dataset.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDataset A pointer to the Active Operational Dataset.
*
* @retval kThreadError_None Successfully set the Active Operational Dataset.
* @retval kThreadError_NoBufs Insufficient buffer space to set the Active Operational Datset.
* @retval kThreadError_InvalidArgs @p aDataset was NULL.
*
*/
OTAPI ThreadError OTCALL otSetActiveDataset(otInstance *aInstance, const otOperationalDataset *aDataset);
/**
* This function indicates whether a valid network is present in the Active Operational Dataset or not.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns TRUE if a valid network is present in the Active Operational Dataset, FALSE otherwise.
*
*/
OTAPI bool OTCALL otIsNodeCommissioned(otInstance *aInstance);
/**
* This function gets the Pending Operational Dataset.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aDataset A pointer to where the Pending Operational Dataset will be placed.
*
* @retval kThreadError_None Successfully retrieved the Pending Operational Dataset.
* @retval kThreadError_InvalidArgs @p aDataset was NULL.
*
*/
OTAPI ThreadError OTCALL otGetPendingDataset(otInstance *aInstance, otOperationalDataset *aDataset);
/**
* This function sets the Pending Operational Dataset.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDataset A pointer to the Pending Operational Dataset.
*
* @retval kThreadError_None Successfully set the Pending Operational Dataset.
* @retval kThreadError_NoBufs Insufficient buffer space to set the Pending Operational Dataset.
* @retval kThreadError_InvalidArgs @p aDataset was NULL.
*
*/
OTAPI ThreadError OTCALL otSetPendingDataset(otInstance *aInstance, const otOperationalDataset *aDataset);
/**
* This function sends MGMT_ACTIVE_GET.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aTlvTypes A pointer to the TLV Types.
* @param[in] aLength The length of TLV Types.
* @param[in] aAddress A pointer to the IPv6 destination, if it is NULL, will use Leader ALOC as default.
*
* @retval kThreadError_None Successfully send the meshcop dataset command.
* @retval kThreadError_NoBufs Insufficient buffer space to send.
*
*/
OTAPI ThreadError OTCALL otSendActiveGet(otInstance *aInstance, const uint8_t *aTlvTypes, uint8_t aLength,
const otIp6Address *aAddress);
/**
* This function sends MGMT_ACTIVE_SET.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDataset A pointer to operational dataset.
* @param[in] aTlvs A pointer to TLVs.
* @param[in] aLength The length of TLVs.
*
* @retval kThreadError_None Successfully send the meshcop dataset command.
* @retval kThreadError_NoBufs Insufficient buffer space to send.
*
*/
OTAPI ThreadError OTCALL otSendActiveSet(otInstance *aInstance, const otOperationalDataset *aDataset,
const uint8_t *aTlvs, uint8_t aLength);
/**
* This function sends MGMT_PENDING_GET.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aTlvTypes A pointer to the TLV Types.
* @param[in] aLength The length of TLV Types.
* @param[in] aAddress A pointer to the IPv6 destination, if it is NULL, will use Leader ALOC as default.
*
* @retval kThreadError_None Successfully send the meshcop dataset command.
* @retval kThreadError_NoBufs Insufficient buffer space to send.
*
*/
OTAPI ThreadError OTCALL otSendPendingGet(otInstance *aInstance, const uint8_t *aTlvTypes, uint8_t aLength,
const otIp6Address *aAddress);
/**
* This function sends MGMT_PENDING_SET.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDataset A pointer to operational dataset.
* @param[in] aTlvs A pointer to TLVs.
* @param[in] aLength The length of TLVs.
*
* @retval kThreadError_None Successfully send the meshcop dataset command.
* @retval kThreadError_NoBufs Insufficient buffer space to send.
*
*/
OTAPI ThreadError OTCALL otSendPendingSet(otInstance *aInstance, const otOperationalDataset *aDataset,
const uint8_t *aTlvs, uint8_t aLength);
/**
* Get the data poll period of sleepy end device.
*
* @note This function updates only poll period of sleepy end device. To update child timeout the function
* otGetChildTimeout() shall be called.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The data poll period of sleepy end device.
*
* @sa otSetPollPeriod
*/
OTAPI uint32_t OTCALL otGetPollPeriod(otInstance *aInstance);
/**
* Set the data poll period for sleepy end device.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPollPeriod data poll period.
*
* @sa otGetPollPeriod
*/
OTAPI void OTCALL otSetPollPeriod(otInstance *aInstance, uint32_t aPollPeriod);
/**
* Set the preferred Router Id.
*
* Upon becoming a router/leader the node attempts to use this Router Id. If the
* preferred Router Id is not set or if it can not be used, a randomly generated
* router id is picked. This property can be set only when the device role is
* either detached or disabled.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aRouterId The preferred Router Id.
*
* @retval kThreadError_None Successfully set the preferred Router Id.
* @retval kThreadError_InvalidState Could not set (role is not detached or disabled)
*
*/
ThreadError otSetPreferredRouterId(otInstance *aInstance, uint8_t aRouterId);
/**
* @}
*/
/**
* @defgroup config-router Router/Leader
*
* @brief
* This module includes functions that manage configuration parameters for the Thread Router and Leader roles.
*
* @{
*
*/
/**
* Get the Thread Leader Weight used when operating in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Thread Leader Weight value.
*
* @sa otSetLeaderWeight
*/
OTAPI uint8_t OTCALL otGetLocalLeaderWeight(otInstance *aInstance);
/**
* Set the Thread Leader Weight used when operating in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aWeight The Thread Leader Weight value..
*
* @sa otGetLeaderWeight
*/
OTAPI void OTCALL otSetLocalLeaderWeight(otInstance *aInstance, uint8_t aWeight);
/**
* Get the Thread Leader Partition Id used when operating in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Thread Leader Partition Id value.
*
*/
OTAPI uint32_t OTCALL otGetLocalLeaderPartitionId(otInstance *aInstance);
/**
* Set the Thread Leader Partition Id used when operating in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPartitionId The Thread Leader Partition Id value.
*
*/
OTAPI void OTCALL otSetLocalLeaderPartitionId(otInstance *aInstance, uint32_t aPartitionId);
/**
* Get the Joiner UDP Port.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Joiner UDP Port number.
*
* @sa otSetJoinerUdpPort
*/
OTAPI uint16_t OTCALL otGetJoinerUdpPort(otInstance *aInstance);
/**
* Set the Joiner UDP Port
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aJoinerUdpPort The Joiner UDP Port number.
*
* @retval kThreadErrorNone Successfully set the Joiner UDP Port.
*
* @sa otGetJoinerUdpPort
*/
OTAPI ThreadError OTCALL otSetJoinerUdpPort(otInstance *aInstance, uint16_t aJoinerUdpPort);
/**
* @}
*/
/**
* @defgroup config-br Border Router
*
* @brief
* This module includes functions that manage configuration parameters that apply to the Thread Border Router role.
*
* @{
*
*/
/**
* Add a border router configuration to the local network data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aConfig A pointer to the border router configuration.
*
* @retval kThreadErrorNone Successfully added the configuration to the local network data.
* @retval kThreadErrorInvalidArgs One or more configuration parameters were invalid.
* @retval kThreadErrorSize Not enough room is available to add the configuration to the local network data.
*
* @sa otRemoveBorderRouter
* @sa otSendServerData
*/
OTAPI ThreadError OTCALL otAddBorderRouter(otInstance *aInstance, const otBorderRouterConfig *aConfig);
/**
* Remove a border router configuration from the local network data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPrefix A pointer to an IPv6 prefix.
*
* @retval kThreadErrorNone Successfully removed the configuration from the local network data.
*
* @sa otAddBorderRouter
* @sa otSendServerData
*/
OTAPI ThreadError OTCALL otRemoveBorderRouter(otInstance *aInstance, const otIp6Prefix *aPrefix);
/**
* Add an external route configuration to the local network data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aConfig A pointer to the external route configuration.
*
* @retval kThreadErrorNone Successfully added the configuration to the local network data.
* @retval kThreadErrorInvalidArgs One or more configuration parameters were invalid.
* @retval kThreadErrorSize Not enough room is available to add the configuration to the local network data.
*
* @sa otRemoveExternalRoute
* @sa otSendServerData
*/
OTAPI ThreadError OTCALL otAddExternalRoute(otInstance *aInstance, const otExternalRouteConfig *aConfig);
/**
* Remove an external route configuration from the local network data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aPrefix A pointer to an IPv6 prefix.
*
* @retval kThreadErrorNone Successfully removed the configuration from the local network data.
*
* @sa otAddExternalRoute
* @sa otSendServerData
*/
OTAPI ThreadError OTCALL otRemoveExternalRoute(otInstance *aInstance, const otIp6Prefix *aPrefix);
/**
* Immediately register the local network data with the Leader.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* retval kThreadErrorNone Successfully queued a Server Data Request message for delivery.
*
* @sa otAddBorderRouter
* @sa otRemoveBorderRouter
* @sa otAddExternalRoute
* @sa otRemoveExternalRoute
*/
OTAPI ThreadError OTCALL otSendServerData(otInstance *aInstance);
/**
* @}
*
*/
/**
* @defgroup config-test Test
*
* @brief
* This module includes functions that manage configuration parameters required for Thread Certification testing.
*
* @{
*
*/
/**
* Get the CONTEXT_ID_REUSE_DELAY parameter used in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The CONTEXT_ID_REUSE_DELAY value.
*
* @sa otSetContextIdReuseDelay
*/
OTAPI uint32_t OTCALL otGetContextIdReuseDelay(otInstance *aInstance);
/**
* Set the CONTEXT_ID_REUSE_DELAY parameter used in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDelay The CONTEXT_ID_REUSE_DELAY value.
*
* @sa otGetContextIdReuseDelay
*/
OTAPI void OTCALL otSetContextIdReuseDelay(otInstance *aInstance, uint32_t aDelay);
/**
* Get the thrKeySequenceCounter.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The thrKeySequenceCounter value.
*
* @sa otSetKeySequenceCounter
*/
OTAPI uint32_t OTCALL otGetKeySequenceCounter(otInstance *aInstance);
/**
* Set the thrKeySequenceCounter.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aKeySequenceCounter The thrKeySequenceCounter value.
*
* @sa otGetKeySequenceCounter
*/
OTAPI void OTCALL otSetKeySequenceCounter(otInstance *aInstance, uint32_t aKeySequenceCounter);
/**
* Get the thrKeySwitchGuardTime
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The thrKeySwitchGuardTime value (in hours).
*
* @sa otSetKeySwitchGuardTime
*/
OTAPI uint32_t OTCALL otGetKeySwitchGuardTime(otInstance *aInstance);
/**
* Set the thrKeySwitchGuardTime
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aKeySwitchGuardTime The thrKeySwitchGuardTime value (in hours).
*
* @sa otGetKeySwitchGuardTime
*/
OTAPI void OTCALL otSetKeySwitchGuardTime(otInstance *aInstance, uint32_t aKeySwitchGuardTime);
/**
* Get the NETWORK_ID_TIMEOUT parameter used in the Router role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The NETWORK_ID_TIMEOUT value.
*
* @sa otSetNetworkIdTimeout
*/
OTAPI uint8_t OTCALL otGetNetworkIdTimeout(otInstance *aInstance);
/**
* Set the NETWORK_ID_TIMEOUT parameter used in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aTimeout The NETWORK_ID_TIMEOUT value.
*
* @sa otGetNetworkIdTimeout
*/
OTAPI void OTCALL otSetNetworkIdTimeout(otInstance *aInstance, uint8_t aTimeout);
/**
* Get the ROUTER_UPGRADE_THRESHOLD parameter used in the REED role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The ROUTER_UPGRADE_THRESHOLD value.
*
* @sa otSetRouterUpgradeThreshold
*/
OTAPI uint8_t OTCALL otGetRouterUpgradeThreshold(otInstance *aInstance);
/**
* Set the ROUTER_UPGRADE_THRESHOLD parameter used in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aThreshold The ROUTER_UPGRADE_THRESHOLD value.
*
* @sa otGetRouterUpgradeThreshold
*/
OTAPI void OTCALL otSetRouterUpgradeThreshold(otInstance *aInstance, uint8_t aThreshold);
/**
* Release a Router ID that has been allocated by the device in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aRouterId The Router ID to release. Valid range is [0, 62].
*
* @retval kThreadErrorNone Successfully released the Router ID specified by aRouterId.
*/
OTAPI ThreadError OTCALL otReleaseRouterId(otInstance *aInstance, uint8_t aRouterId);
/**
* Add an IEEE 802.15.4 Extended Address to the MAC whitelist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
*
* @retval kThreadErrorNone Successfully added to the MAC whitelist.
* @retval kThreadErrorNoBufs No buffers available for a new MAC whitelist entry.
*
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
* @sa otEnableMacWhitelist
*/
OTAPI ThreadError OTCALL otAddMacWhitelist(otInstance *aInstance, const uint8_t *aExtAddr);
/**
* Add an IEEE 802.15.4 Extended Address to the MAC whitelist and fix the RSSI value.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
* @param[in] aRssi The RSSI in dBm to use when receiving messages from aExtAddr.
*
* @retval kThreadErrorNone Successfully added to the MAC whitelist.
* @retval kThreadErrorNoBufs No buffers available for a new MAC whitelist entry.
*
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
* @sa otEnableMacWhitelist
*/
OTAPI ThreadError OTCALL otAddMacWhitelistRssi(otInstance *aInstance, const uint8_t *aExtAddr, int8_t aRssi);
/**
* Remove an IEEE 802.15.4 Extended Address from the MAC whitelist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
*
* @sa otAddMacWhitelist
* @sa otAddMacWhitelistRssi
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
* @sa otEnableMacWhitelist
*/
OTAPI void OTCALL otRemoveMacWhitelist(otInstance *aInstance, const uint8_t *aExtAddr);
/**
* This function gets a MAC whitelist entry.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aIndex An index into the MAC whitelist table.
* @param[out] aEntry A pointer to where the information is placed.
*
* @retval kThreadError_None Successfully retrieved the MAC whitelist entry.
* @retval kThreadError_InvalidArgs @p aIndex is out of bounds or @p aEntry is NULL.
*
*/
OTAPI ThreadError OTCALL otGetMacWhitelistEntry(otInstance *aInstance, uint8_t aIndex, otMacWhitelistEntry *aEntry);
/**
* Remove all entries from the MAC whitelist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otAddMacWhitelist
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
* @sa otEnableMacWhitelist
*/
OTAPI void OTCALL otClearMacWhitelist(otInstance *aInstance);
/**
* Disable MAC whitelist filtering.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otAddMacWhitelist
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otEnableMacWhitelist
*/
OTAPI void OTCALL otDisableMacWhitelist(otInstance *aInstance);
/**
* Enable MAC whitelist filtering.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otAddMacWhitelist
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
*/
OTAPI void OTCALL otEnableMacWhitelist(otInstance *aInstance);
/**
* This function indicates whether or not the MAC whitelist is enabled.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns TRUE if the MAC whitelist is enabled, FALSE otherwise.
*
* @sa otAddMacWhitelist
* @sa otAddMacWhitelistRssi
* @sa otRemoveMacWhitelist
* @sa otClearMacWhitelist
* @sa otGetMacWhitelistEntry
* @sa otDisableMacWhitelist
* @sa otEnableMacWhitelist
*
*/
OTAPI bool OTCALL otIsMacWhitelistEnabled(otInstance *aInstance);
/**
* Detach from the Thread network.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadErrorNone Successfully detached from the Thread network.
* @retval kThreadErrorInvalidState Thread is disabled.
*/
OTAPI ThreadError OTCALL otBecomeDetached(otInstance *aInstance);
/**
* Attempt to reattach as a child.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aFilter Identifies whether to join any, same, or better partition.
*
* @retval kThreadErrorNone Successfully begin attempt to become a child.
* @retval kThreadErrorInvalidState Thread is disabled.
*/
OTAPI ThreadError OTCALL otBecomeChild(otInstance *aInstance, otMleAttachFilter aFilter);
/**
* Attempt to become a router.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadErrorNone Successfully begin attempt to become a router.
* @retval kThreadErrorInvalidState Thread is disabled.
*/
OTAPI ThreadError OTCALL otBecomeRouter(otInstance *aInstance);
/**
* Become a leader and start a new partition.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadErrorNone Successfully became a leader and started a new partition.
* @retval kThreadErrorInvalidState Thread is disabled.
*/
OTAPI ThreadError OTCALL otBecomeLeader(otInstance *aInstance);
/**
* Add an IEEE 802.15.4 Extended Address to the MAC blacklist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
*
* @retval kThreadErrorNone Successfully added to the MAC blacklist.
* @retval kThreadErrorNoBufs No buffers available for a new MAC blacklist entry.
*
* @sa otRemoveMacBlacklist
* @sa otClearMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otDisableMacBlacklist
* @sa otEnableMacBlacklist
*/
OTAPI ThreadError OTCALL otAddMacBlacklist(otInstance *aInstance, const uint8_t *aExtAddr);
/**
* Remove an IEEE 802.15.4 Extended Address from the MAC blacklist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
*
* @sa otAddMacBlacklist
* @sa otClearMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otDisableMacBlacklist
* @sa otEnableMacBlacklist
*/
OTAPI void OTCALL otRemoveMacBlacklist(otInstance *aInstance, const uint8_t *aExtAddr);
/**
* This function gets a MAC Blacklist entry.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aIndex An index into the MAC Blacklist table.
* @param[out] aEntry A pointer to where the information is placed.
*
* @retval kThreadError_None Successfully retrieved the MAC Blacklist entry.
* @retval kThreadError_InvalidArgs @p aIndex is out of bounds or @p aEntry is NULL.
*
*/
OTAPI ThreadError OTCALL otGetMacBlacklistEntry(otInstance *aInstance, uint8_t aIndex, otMacBlacklistEntry *aEntry);
/**
* Remove all entries from the MAC Blacklist.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otAddMacBlacklist
* @sa otRemoveMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otDisableMacBlacklist
* @sa otEnableMacBlacklist
*/
OTAPI void OTCALL otClearMacBlacklist(otInstance *aInstance);
/**
* Disable MAC blacklist filtering.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
*
* @sa otAddMacBlacklist
* @sa otRemoveMacBlacklist
* @sa otClearMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otEnableMacBlacklist
*/
OTAPI void OTCALL otDisableMacBlacklist(otInstance *aInstance);
/**
* Enable MAC Blacklist filtering.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @sa otAddMacBlacklist
* @sa otRemoveMacBlacklist
* @sa otClearMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otDisableMacBlacklist
*/
OTAPI void OTCALL otEnableMacBlacklist(otInstance *aInstance);
/**
* This function indicates whether or not the MAC Blacklist is enabled.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns TRUE if the MAC Blacklist is enabled, FALSE otherwise.
*
* @sa otAddMacBlacklist
* @sa otRemoveMacBlacklist
* @sa otClearMacBlacklist
* @sa otGetMacBlacklistEntry
* @sa otDisableMacBlacklist
* @sa otEnableMacBlacklist
*
*/
OTAPI bool OTCALL otIsMacBlacklistEnabled(otInstance *aInstance);
/**
* Get the assigned link quality which is on the link to a given extended address.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
* @param[in] aLinkQuality A pointer to the assigned link quality.
*
* @retval kThreadError_None Successfully retrieved the link quality to aLinkQuality.
* @retval kThreadError_InvalidState No attached child matches with a given extended address.
*
* @sa otSetAssignLinkQuality
*/
OTAPI ThreadError OTCALL otGetAssignLinkQuality(otInstance *aInstance, const uint8_t *aExtAddr, uint8_t *aLinkQuality);
/**
* Set the link quality which is on the link to a given extended address.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aExtAddr A pointer to the IEEE 802.15.4 Extended Address.
* @param[in] aLinkQuality The link quality to be set on the link.
*
* @sa otGetAssignLinkQuality
*/
OTAPI void OTCALL otSetAssignLinkQuality(otInstance *aInstance, const uint8_t *aExtAddr, uint8_t aLinkQuality);
/**
* This method triggers a platform reset.
*
* 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.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*/
OTAPI void OTCALL otPlatformReset(otInstance *aInstance);
/**
* This method deletes all the settings stored on non-volatile memory, and then triggers platform reset.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*/
OTAPI void OTCALL otFactoryReset(otInstance *aInstance);
/**
* This function erases all the OpenThread persistent info (network settings) stored on non-volatile memory.
* Erase is successful only if the device is in `disabled` state/role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval kThreadError_None All persistent info/state was erased successfully.
* @retval kThreadError_InvalidState Device is not in `disabled` state/role.
*
*/
ThreadError otPersistentInfoErase(otInstance *aInstance);
/**
* Get the ROUTER_DOWNGRADE_THRESHOLD parameter used in the Router role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The ROUTER_DOWNGRADE_THRESHOLD value.
*
* @sa otSetRouterDowngradeThreshold
*/
OTAPI uint8_t OTCALL otGetRouterDowngradeThreshold(otInstance *aInstance);
/**
* Set the ROUTER_DOWNGRADE_THRESHOLD parameter used in the Leader role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aThreshold The ROUTER_DOWNGRADE_THRESHOLD value.
*
* @sa otGetRouterDowngradeThreshold
*/
OTAPI void OTCALL otSetRouterDowngradeThreshold(otInstance *aInstance, uint8_t aThreshold);
/**
* Get the ROUTER_SELECTION_JITTER parameter used in the REED/Router role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The ROUTER_SELECTION_JITTER value.
*
* @sa otSetRouterSelectionJitter
*/
OTAPI uint8_t OTCALL otGetRouterSelectionJitter(otInstance *aInstance);
/**
* Set the ROUTER_SELECTION_JITTER parameter used in the REED/Router role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aRouterJitter The ROUTER_SELECTION_JITTER value.
*
* @sa otGetRouterSelectionJitter
*/
OTAPI void OTCALL otSetRouterSelectionJitter(otInstance *aInstance, uint8_t aRouterJitter);
/**
* @}
*
*/
/**
* @}
*
*/
/**
* @addtogroup diags Diagnostics
*
* @brief
* This module includes functions that expose internal state.
*
* @{
*
*/
/**
* The function retains diagnostic information for an attached Child by its Child ID or RLOC16.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aChildId The Child ID or RLOC16 for the attached child.
* @param[out] aChildInfo A pointer to where the child information is placed.
*
* @retavl kThreadError_None @p aChildInfo was successfully updated with the info for the given ID.
* @retval kThreadError_NotFound No valid child with this Child ID.
* @retavl kThreadError_InvalidArgs If @p aChildInfo is NULL.
*
*/
OTAPI ThreadError OTCALL otGetChildInfoById(otInstance *aInstance, uint16_t aChildId, otChildInfo *aChildInfo);
/**
* The function retains diagnostic information for an attached Child by the internal table index.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aChildIndex The table index.
* @param[out] aChildInfo A pointer to where the child information is placed.
*
* @retavl kThreadError_None @p aChildInfo was successfully updated with the info for the given index.
* @retval kThreadError_NotFound No valid child at this index.
* @retavl kThreadError_InvalidArgs Either @p aChildInfo is NULL, or @p aChildIndex is out of range (higher
* than max table index).
*
* @sa otGetMaxAllowedChildren
*
*/
OTAPI ThreadError OTCALL otGetChildInfoByIndex(otInstance *aInstance, uint8_t aChildIndex, otChildInfo *aChildInfo);
/**
* This function gets the next neighbor information. It is used to go through the entries of
* the neighbor table.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[inout] aIterator A pointer to the iterator context. To get the first neighbor entry
it should be set to OT_NEIGHBOR_INFO_ITERATOR_INIT.
* @param[out] aInfo A pointer to where the neighbor information will be placed.
*
* @retval kThreadError_None Successfully found the next neighbor entry in table.
* @retval kThreadError_NotFound No subsequent neighbor entry exists in the table.
* @retval kThreadError_InvalidArgs @p aIterator or @p aInfo was NULL.
*
*/
OTAPI ThreadError OTCALL otGetNextNeighborInfo(otInstance *aInstance, otNeighborInfoIterator *aIterator,
otNeighborInfo *aInfo);
/**
* Get the device role.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @retval ::kDeviceRoleDisabled The Thread stack is disabled.
* @retval ::kDeviceRoleDetached The device is not currently participating in a Thread network/partition.
* @retval ::kDeviceRoleChild The device is currently operating as a Thread Child.
* @retval ::kDeviceRoleRouter The device is currently operating as a Thread Router.
* @retval ::kDeviceRoleLeader The device is currently operating as a Thread Leader.
*/
OTAPI otDeviceRole OTCALL otGetDeviceRole(otInstance *aInstance);
/**
* This function gets an EID cache entry.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aIndex An index into the EID cache table.
* @param[out] aEntry A pointer to where the EID information is placed.
*
* @retval kThreadError_None Successfully retrieved the EID cache entry.
* @retval kThreadError_InvalidArgs @p aIndex was out of bounds or @p aEntry was NULL.
*
*/
OTAPI ThreadError OTCALL otGetEidCacheEntry(otInstance *aInstance, uint8_t aIndex, otEidCacheEntry *aEntry);
/**
* This function get the Thread Leader Data.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aLeaderData A pointer to where the leader data is placed.
*
* @retval kThreadError_None Successfully retrieved the leader data.
* @retval kThreadError_Detached Not currently attached.
* @retval kThreadError_InvalidArgs @p aLeaderData is NULL.
*
*/
OTAPI ThreadError OTCALL otGetLeaderData(otInstance *aInstance, otLeaderData *aLeaderData);
/**
* Get the Leader's Router ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Leader's Router ID.
*/
OTAPI uint8_t OTCALL otGetLeaderRouterId(otInstance *aInstance);
/**
* Get the Leader's Weight.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Leader's Weight.
*/
OTAPI uint8_t OTCALL otGetLeaderWeight(otInstance *aInstance);
/**
* Get the Network Data Version.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Network Data Version.
*/
OTAPI uint8_t OTCALL otGetNetworkDataVersion(otInstance *aInstance);
/**
* Get the Partition ID.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Partition ID.
*/
OTAPI uint32_t OTCALL otGetPartitionId(otInstance *aInstance);
/**
* Get the RLOC16.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The RLOC16.
*/
OTAPI uint16_t OTCALL otGetRloc16(otInstance *aInstance);
/**
* Get the current Router ID Sequence.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Router ID Sequence.
*/
OTAPI uint8_t OTCALL otGetRouterIdSequence(otInstance *aInstance);
/**
* The function retains diagnostic information for a given Thread Router.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aRouterId The router ID or RLOC16 for a given router.
* @param[out] aRouterInfo A pointer to where the router information is placed.
*
*/
OTAPI ThreadError OTCALL otGetRouterInfo(otInstance *aInstance, uint16_t aRouterId, otRouterInfo *aRouterInfo);
/**
* The function retrieves diagnostic information for a Thread Router as parent.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aParentInfo A pointer to where the parent router information is placed.
*
*/
OTAPI ThreadError OTCALL otGetParentInfo(otInstance *aInstance, otRouterInfo *aParentInfo);
/**
* The function retrieves the average RSSI for the Thread Parent.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[out] aParentInfo A pointer to where the parent rssi should be placed.
*
*/
OTAPI ThreadError OTCALL otGetParentAverageRssi(otInstance *aInstance, int8_t *aParentRssi);
/**
* Get the Stable Network Data Version.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns The Stable Network Data Version.
*/
OTAPI uint8_t OTCALL otGetStableNetworkDataVersion(otInstance *aInstance);
/**
* This function registers a callback to provide received raw Network Diagnostic Get response payload.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aCallback A pointer to a function that is called when Network Diagnostic Get response
* is received or NULL to disable the callback.
* @param[in] aCallbackContext A pointer to application-specific context.
*
*/
void otSetReceiveDiagnosticGetCallback(otInstance *aInstance, otReceiveDiagnosticGetCallback aCallback,
void *aCallbackContext);
/**
* Send a Network Diagnostic Get request.
*
* @param[in] aDestination A pointer to destination address.
* @param[in] aTlvTypes An array of Network Diagnostic TLV types.
* @param[in] aCount Number of types in aTlvTypes
*/
OTAPI ThreadError OTCALL otSendDiagnosticGet(otInstance *aInstance, const otIp6Address *aDestination,
const uint8_t aTlvTypes[], uint8_t aCount);
/**
* Send a Network Diagnostic Reset request.
*
* @param[in] aInstance A pointer to an OpenThread instance.
* @param[in] aDestination A pointer to destination address.
* @param[in] aTlvTypes An array of Network Diagnostic TLV types. Currently only Type 9 is allowed.
* @param[in] aCount Number of types in aTlvTypes
*/
OTAPI ThreadError OTCALL otSendDiagnosticReset(otInstance *aInstance, const otIp6Address *aDestination,
const uint8_t aTlvTypes[], uint8_t aCount);
/**
* Get the MAC layer counters.
*
* @param[in] aInstance A pointer to an OpenThread instance.
*
* @returns A pointer to the MAC layer counters.
*/
OTAPI const otMacCounters *OTCALL otGetMacCounters(otInstance *aInstance);
/**
* @}
*
*/
/**
* This function converts a ThreadError enum into a string.
*
* @param[in] aError A ThreadError enum.
*
* @returns A string representation of a ThreadError.
*
*/
OTAPI const char *OTCALL otThreadErrorToString(ThreadError aError);
#ifdef __cplusplus
} // extern "C"
#endif
#endif // OPENTHREAD_H_