blob: 3e12d486ff13bed7170e16f75c241dcbbaa13bb4 [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.
*/
#ifndef SPINEL_HEADER_INCLUDED
#define SPINEL_HEADER_INCLUDED 1
#ifdef SPINEL_PLATFORM_HEADER
#include SPINEL_PLATFORM_HEADER
#else // ifdef SPINEL_PLATFORM_HEADER
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#endif // else SPINEL_PLATFORM_HEADER
// ----------------------------------------------------------------------------
#ifndef DOXYGEN_SHOULD_SKIP_THIS
# if defined(__GNUC__)
# define SPINEL_API_EXTERN extern __attribute__ ((visibility ("default")))
# define SPINEL_API_NONNULL_ALL __attribute__((nonnull))
# define SPINEL_API_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
# endif // ifdef __GNUC__
# if !defined(__BEGIN_DECLS) || !defined(__END_DECLS)
# if defined(__cplusplus)
# define __BEGIN_DECLS extern "C" {
# define __END_DECLS }
# else // if defined(__cplusplus)
# define __BEGIN_DECLS
# define __END_DECLS
# endif // else defined(__cplusplus)
# endif // if !defined(__BEGIN_DECLS) || !defined(__END_DECLS)
#endif // ifndef DOXYGEN_SHOULD_SKIP_THIS
#ifndef SPINEL_API_EXTERN
# define SPINEL_API_EXTERN extern
#endif
#ifndef SPINEL_API_NONNULL_ALL
# define SPINEL_API_NONNULL_ALL
#endif
#ifndef SPINEL_API_WARN_UNUSED_RESULT
# define SPINEL_API_WARN_UNUSED_RESULT
#endif
// ----------------------------------------------------------------------------
#define SPINEL_PROTOCOL_VERSION_THREAD_MAJOR 4
#define SPINEL_PROTOCOL_VERSION_THREAD_MINOR 3
#define SPINEL_FRAME_MAX_SIZE 1300
/// Macro for generating bit masks using bit index from the spec
#define SPINEL_BIT_MASK(bit_index,field_bit_count) \
( (1 << ((field_bit_count) - 1)) >> (bit_index) )
// ----------------------------------------------------------------------------
__BEGIN_DECLS
typedef enum
{
SPINEL_STATUS_OK = 0, ///< Operation has completed successfully.
SPINEL_STATUS_FAILURE = 1, ///< Operation has failed for some undefined reason.
SPINEL_STATUS_UNIMPLEMENTED = 2, ///< Given operation has not been implemented.
SPINEL_STATUS_INVALID_ARGUMENT = 3, ///< An argument to the operation is invalid.
SPINEL_STATUS_INVALID_STATE = 4, ///< This operation is invalid for the current device state.
SPINEL_STATUS_INVALID_COMMAND = 5, ///< This command is not recognized.
SPINEL_STATUS_INVALID_INTERFACE = 6, ///< This interface is not supported.
SPINEL_STATUS_INTERNAL_ERROR = 7, ///< An internal runtime error has occured.
SPINEL_STATUS_SECURITY_ERROR = 8, ///< A security/authentication error has occured.
SPINEL_STATUS_PARSE_ERROR = 9, ///< A error has occured while parsing the command.
SPINEL_STATUS_IN_PROGRESS = 10, ///< This operation is in progress.
SPINEL_STATUS_NOMEM = 11, ///< Operation prevented due to memory pressure.
SPINEL_STATUS_BUSY = 12, ///< The device is currently performing a mutually exclusive operation
SPINEL_STATUS_PROP_NOT_FOUND = 13, ///< The given property is not recognized.
SPINEL_STATUS_DROPPED = 14, ///< A/The packet was dropped.
SPINEL_STATUS_EMPTY = 15, ///< The result of the operation is empty.
SPINEL_STATUS_CMD_TOO_BIG = 16, ///< The command was too large to fit in the internal buffer.
SPINEL_STATUS_NO_ACK = 17, ///< The packet was not acknowledged.
SPINEL_STATUS_CCA_FAILURE = 18, ///< The packet was not sent due to a CCA failure.
SPINEL_STATUS_ALREADY = 19, ///< The operation is already in progress.
SPINEL_STATUS_ITEM_NOT_FOUND = 20, ///< The given item could not be found.
SPINEL_STATUS_INVALID_COMMAND_FOR_PROP
= 21, ///< The given command cannot be performed on this property.
SPINEL_STATUS_JOIN__BEGIN = 104,
/// Generic failure to associate with other peers.
/**
* This status error should not be used by implementors if
* enough information is available to determine that one of the
* later join failure status codes would be more accurate.
*
* \sa SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING
*/
SPINEL_STATUS_JOIN_FAILURE = SPINEL_STATUS_JOIN__BEGIN + 0,
/// The node found other peers but was unable to decode their packets.
/**
* Typically this error code indicates that the network
* key has been set incorrectly.
*
* \sa SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING
*/
SPINEL_STATUS_JOIN_SECURITY = SPINEL_STATUS_JOIN__BEGIN + 1,
/// The node was unable to find any other peers on the network.
/**
* \sa SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING
*/
SPINEL_STATUS_JOIN_NO_PEERS = SPINEL_STATUS_JOIN__BEGIN + 2,
/// The only potential peer nodes found are incompatible.
/**
* \sa SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING
*/
SPINEL_STATUS_JOIN_INCOMPATIBLE = SPINEL_STATUS_JOIN__BEGIN + 3,
SPINEL_STATUS_JOIN__END = 112,
SPINEL_STATUS_RESET__BEGIN = 112,
SPINEL_STATUS_RESET_POWER_ON = SPINEL_STATUS_RESET__BEGIN + 0,
SPINEL_STATUS_RESET_EXTERNAL = SPINEL_STATUS_RESET__BEGIN + 1,
SPINEL_STATUS_RESET_SOFTWARE = SPINEL_STATUS_RESET__BEGIN + 2,
SPINEL_STATUS_RESET_FAULT = SPINEL_STATUS_RESET__BEGIN + 3,
SPINEL_STATUS_RESET_CRASH = SPINEL_STATUS_RESET__BEGIN + 4,
SPINEL_STATUS_RESET_ASSERT = SPINEL_STATUS_RESET__BEGIN + 5,
SPINEL_STATUS_RESET_OTHER = SPINEL_STATUS_RESET__BEGIN + 6,
SPINEL_STATUS_RESET_UNKNOWN = SPINEL_STATUS_RESET__BEGIN + 7,
SPINEL_STATUS_RESET_WATCHDOG = SPINEL_STATUS_RESET__BEGIN + 8,
SPINEL_STATUS_RESET__END = 128,
SPINEL_STATUS_VENDOR__BEGIN = 15360,
SPINEL_STATUS_VENDOR__END = 16384,
SPINEL_STATUS_STACK_NATIVE__BEGIN = 16384,
SPINEL_STATUS_STACK_NATIVE__END = 81920,
SPINEL_STATUS_EXPERIMENTAL__BEGIN = 2000000,
SPINEL_STATUS_EXPERIMENTAL__END = 2097152,
} spinel_status_t;
typedef enum
{
SPINEL_NET_ROLE_DETACHED = 0,
SPINEL_NET_ROLE_CHILD = 1,
SPINEL_NET_ROLE_ROUTER = 2,
SPINEL_NET_ROLE_LEADER = 3,
} spinel_net_role_t;
typedef enum
{
SPINEL_SCAN_STATE_IDLE = 0,
SPINEL_SCAN_STATE_BEACON = 1,
SPINEL_SCAN_STATE_ENERGY = 2,
SPINEL_SCAN_STATE_DISCOVER = 3,
} spinel_scan_state_t;
typedef enum
{
SPINEL_POWER_STATE_OFFLINE = 0,
SPINEL_POWER_STATE_DEEP_SLEEP = 1,
SPINEL_POWER_STATE_STANDBY = 2,
SPINEL_POWER_STATE_LOW_POWER = 3,
SPINEL_POWER_STATE_ONLINE = 4,
} spinel_power_state_t;
typedef enum
{
SPINEL_HOST_POWER_STATE_OFFLINE = 0,
SPINEL_HOST_POWER_STATE_DEEP_SLEEP = 1,
SPINEL_HOST_POWER_STATE_RESERVED = 2,
SPINEL_HOST_POWER_STATE_LOW_POWER = 3,
SPINEL_HOST_POWER_STATE_ONLINE = 4,
} spinel_host_power_state_t;
enum
{
SPINEL_NET_FLAG_ON_MESH = (1 << 0),
SPINEL_NET_FLAG_DEFAULT_ROUTE = (1 << 1),
SPINEL_NET_FLAG_CONFIGURE = (1 << 2),
SPINEL_NET_FLAG_DHCP = (1 << 3),
SPINEL_NET_FLAG_SLAAC = (1 << 4),
SPINEL_NET_FLAG_PREFERRED = (1 << 5),
SPINEL_NET_FLAG_PREFERENCE_OFFSET = 6,
SPINEL_NET_FLAG_PREFERENCE_MASK = (3 << SPINEL_NET_FLAG_PREFERENCE_OFFSET),
};
enum
{
SPINEL_ROUTE_PREFERENCE_HIGH = (1 << SPINEL_NET_FLAG_PREFERENCE_OFFSET),
SPINEL_ROUTE_PREFERENCE_MEDIUM = (0 << SPINEL_NET_FLAG_PREFERENCE_OFFSET),
SPINEL_ROUTE_PREFERENCE_LOW = (3 << SPINEL_NET_FLAG_PREFERENCE_OFFSET),
};
enum
{
SPINEL_THREAD_MODE_FULL_NETWORK_DATA = (1 << 0),
SPINEL_THREAD_MODE_FULL_FUNCTION_DEV = (1 << 1),
SPINEL_THREAD_MODE_SECURE_DATA_REQUEST = (1 << 2),
SPINEL_THREAD_MODE_RX_ON_WHEN_IDLE = (1 << 3),
};
enum {
SPINEL_GPIO_FLAG_DIR_INPUT = 0,
SPINEL_GPIO_FLAG_DIR_OUTPUT = SPINEL_BIT_MASK(0, 8),
SPINEL_GPIO_FLAG_PULL_UP = SPINEL_BIT_MASK(1, 8),
SPINEL_GPIO_FLAG_PULL_DOWN = SPINEL_BIT_MASK(2, 8),
SPINEL_GPIO_FLAG_OPEN_DRAIN = SPINEL_BIT_MASK(2, 8),
SPINEL_GPIO_FLAG_TRIGGER_NONE = 0,
SPINEL_GPIO_FLAG_TRIGGER_RISING = SPINEL_BIT_MASK(3, 8),
SPINEL_GPIO_FLAG_TRIGGER_FALLING = SPINEL_BIT_MASK(4, 8),
SPINEL_GPIO_FLAG_TRIGGER_ANY = SPINEL_GPIO_FLAG_TRIGGER_RISING
| SPINEL_GPIO_FLAG_TRIGGER_FALLING,
};
enum
{
SPINEL_PROTOCOL_TYPE_BOOTLOADER = 0,
SPINEL_PROTOCOL_TYPE_ZIGBEE_IP = 2,
SPINEL_PROTOCOL_TYPE_THREAD = 3,
};
enum
{
SPINEL_MAC_PROMISCUOUS_MODE_OFF = 0, ///< Normal MAC filtering is in place.
SPINEL_MAC_PROMISCUOUS_MODE_NETWORK = 1, ///< All MAC packets matching network are passed up the stack.
SPINEL_MAC_PROMISCUOUS_MODE_FULL = 2, ///< All decoded MAC packets are passed up the stack.
};
enum
{
SPINEL_NCP_LOG_LEVEL_EMERG = 0,
SPINEL_NCP_LOG_LEVEL_ALERT = 1,
SPINEL_NCP_LOG_LEVEL_CRIT = 2,
SPINEL_NCP_LOG_LEVEL_ERR = 3,
SPINEL_NCP_LOG_LEVEL_WARN = 4,
SPINEL_NCP_LOG_LEVEL_NOTICE = 5,
SPINEL_NCP_LOG_LEVEL_INFO = 6,
SPINEL_NCP_LOG_LEVEL_DEBUG = 7,
};
typedef struct
{
uint8_t bytes[8];
} spinel_eui64_t;
typedef struct
{
uint8_t bytes[8];
} spinel_net_xpanid_t;
typedef struct
{
uint8_t bytes[16];
} spinel_net_pskc_t;
typedef struct
{
uint8_t bytes[6];
} spinel_eui48_t;
typedef struct
{
uint8_t bytes[16];
} spinel_ipv6addr_t;
typedef int spinel_ssize_t;
typedef unsigned int spinel_size_t;
typedef uint8_t spinel_tid_t;
typedef unsigned int spinel_cid_t;
enum
{
SPINEL_MD_FLAG_TX = 0x0001, //!< Packet was transmitted, not received.
SPINEL_MD_FLAG_BAD_FCS = 0x0004, //!< Packet was received with bad FCS
SPINEL_MD_FLAG_DUPE = 0x0008, //!< Packet seems to be a duplicate
SPINEL_MD_FLAG_RESERVED = 0xFFF2, //!< Flags reserved for future use.
};
enum
{
SPINEL_CMD_NOOP = 0,
SPINEL_CMD_RESET = 1,
SPINEL_CMD_PROP_VALUE_GET = 2,
SPINEL_CMD_PROP_VALUE_SET = 3,
SPINEL_CMD_PROP_VALUE_INSERT = 4,
SPINEL_CMD_PROP_VALUE_REMOVE = 5,
SPINEL_CMD_PROP_VALUE_IS = 6,
SPINEL_CMD_PROP_VALUE_INSERTED = 7,
SPINEL_CMD_PROP_VALUE_REMOVED = 8,
SPINEL_CMD_NET_SAVE = 9,
SPINEL_CMD_NET_CLEAR = 10,
SPINEL_CMD_NET_RECALL = 11,
SPINEL_CMD_HBO_OFFLOAD = 12,
SPINEL_CMD_HBO_RECLAIM = 13,
SPINEL_CMD_HBO_DROP = 14,
SPINEL_CMD_HBO_OFFLOADED = 15,
SPINEL_CMD_HBO_RECLAIMED = 16,
SPINEL_CMD_HBO_DROPED = 17,
SPINEL_CMD_PEEK = 18,
SPINEL_CMD_PEEK_RET = 19,
SPINEL_CMD_POKE = 20,
SPINEL_CMD_PROP_VALUE_MULTI_GET = 21,
SPINEL_CMD_PROP_VALUE_MULTI_SET = 22,
SPINEL_CMD_PROP_VALUES_ARE = 23,
SPINEL_CMD_NEST__BEGIN = 15296,
SPINEL_CMD_NEST__END = 15360,
SPINEL_CMD_VENDOR__BEGIN = 15360,
SPINEL_CMD_VENDOR__END = 16384,
SPINEL_CMD_EXPERIMENTAL__BEGIN = 2000000,
SPINEL_CMD_EXPERIMENTAL__END = 2097152,
};
enum
{
SPINEL_CAP_LOCK = 1,
SPINEL_CAP_NET_SAVE = 2,
SPINEL_CAP_HBO = 3,
SPINEL_CAP_POWER_SAVE = 4,
SPINEL_CAP_COUNTERS = 5,
SPINEL_CAP_JAM_DETECT = 6,
SPINEL_CAP_PEEK_POKE = 7,
SPINEL_CAP_WRITABLE_RAW_STREAM = 8,
SPINEL_CAP_GPIO = 9,
SPINEL_CAP_TRNG = 10,
SPINEL_CAP_CMD_MULTI = 11,
SPINEL_CAP_802_15_4__BEGIN = 16,
SPINEL_CAP_802_15_4_2003 = (SPINEL_CAP_802_15_4__BEGIN + 0),
SPINEL_CAP_802_15_4_2006 = (SPINEL_CAP_802_15_4__BEGIN + 1),
SPINEL_CAP_802_15_4_2011 = (SPINEL_CAP_802_15_4__BEGIN + 2),
SPINEL_CAP_802_15_4_PIB = (SPINEL_CAP_802_15_4__BEGIN + 5),
SPINEL_CAP_802_15_4_2450MHZ_OQPSK = (SPINEL_CAP_802_15_4__BEGIN + 8),
SPINEL_CAP_802_15_4_915MHZ_OQPSK = (SPINEL_CAP_802_15_4__BEGIN + 9),
SPINEL_CAP_802_15_4_868MHZ_OQPSK = (SPINEL_CAP_802_15_4__BEGIN + 10),
SPINEL_CAP_802_15_4_915MHZ_BPSK = (SPINEL_CAP_802_15_4__BEGIN + 11),
SPINEL_CAP_802_15_4_868MHZ_BPSK = (SPINEL_CAP_802_15_4__BEGIN + 12),
SPINEL_CAP_802_15_4_915MHZ_ASK = (SPINEL_CAP_802_15_4__BEGIN + 13),
SPINEL_CAP_802_15_4_868MHZ_ASK = (SPINEL_CAP_802_15_4__BEGIN + 14),
SPINEL_CAP_802_15_4__END = 32,
SPINEL_CAP_ROLE__BEGIN = 48,
SPINEL_CAP_ROLE_ROUTER = (SPINEL_CAP_ROLE__BEGIN + 0),
SPINEL_CAP_ROLE_SLEEPY = (SPINEL_CAP_ROLE__BEGIN + 1),
SPINEL_CAP_ROLE__END = 52,
SPINEL_CAP_NET__BEGIN = 52,
SPINEL_CAP_NET_THREAD_1_0 = (SPINEL_CAP_NET__BEGIN + 0),
SPINEL_CAP_NET__END = 64,
SPINEL_CAP_OPENTHREAD__BEGIN = 512,
SPINEL_CAP_MAC_WHITELIST = (SPINEL_CAP_OPENTHREAD__BEGIN + 0),
SPINEL_CAP_MAC_RAW = (SPINEL_CAP_OPENTHREAD__BEGIN + 1),
SPINEL_CAP_OOB_STEERING_DATA = (SPINEL_CAP_OPENTHREAD__BEGIN + 2),
SPINEL_CAP_OPENTHREAD__END = 640,
SPINEL_CAP_THREAD__BEGIN = 1024,
SPINEL_CAP_THREAD_COMMISSIONER = (SPINEL_CAP_THREAD__BEGIN + 0),
SPINEL_CAP_THREAD_TMF_PROXY = (SPINEL_CAP_THREAD__BEGIN + 1),
SPINEL_CAP_THREAD__END = 1152,
SPINEL_CAP_NEST__BEGIN = 15296,
SPINEL_CAP_NEST_LEGACY_INTERFACE = (SPINEL_CAP_NEST__BEGIN + 0),
SPINEL_CAP_NEST_LEGACY_NET_WAKE = (SPINEL_CAP_NEST__BEGIN + 1),
SPINEL_CAP_NEST_TRANSMIT_HOOK = (SPINEL_CAP_NEST__BEGIN + 2),
SPINEL_CAP_NEST__END = 15360,
SPINEL_CAP_VENDOR__BEGIN = 15360,
SPINEL_CAP_VENDOR__END = 16384,
SPINEL_CAP_EXPERIMENTAL__BEGIN = 2000000,
SPINEL_CAP_EXPERIMENTAL__END = 2097152,
};
typedef enum
{
SPINEL_PROP_LAST_STATUS = 0, ///< status [i]
SPINEL_PROP_PROTOCOL_VERSION = 1, ///< major, minor [i,i]
SPINEL_PROP_NCP_VERSION = 2, ///< version string [U]
SPINEL_PROP_INTERFACE_TYPE = 3, ///< [i]
SPINEL_PROP_VENDOR_ID = 4, ///< [i]
SPINEL_PROP_CAPS = 5, ///< capability list [A(i)]
SPINEL_PROP_INTERFACE_COUNT = 6, ///< Interface count [C]
SPINEL_PROP_POWER_STATE = 7, ///< PowerState [C]
SPINEL_PROP_HWADDR = 8, ///< PermEUI64 [E]
SPINEL_PROP_LOCK = 9, ///< PropLock [b]
SPINEL_PROP_HBO_MEM_MAX = 10, ///< Max offload mem [S]
SPINEL_PROP_HBO_BLOCK_MAX = 11, ///< Max offload block [S]
SPINEL_PROP_HOST_POWER_STATE = 12, ///< Host MCU power state [C]
SPINEL_PROP_BASE_EXT__BEGIN = 0x1000,
/// GPIO Configuration
/** Format: `A(CCU)`
* Type: Read-Only (Optionally Read-write using `CMD_PROP_VALUE_INSERT`)
*
* An array of structures which contain the following fields:
*
* * `C`: GPIO Number
* * `C`: GPIO Configuration Flags
* * `U`: Human-readable GPIO name
*
* GPIOs which do not have a corresponding entry are not supported.
*
* The configuration parameter contains the configuration flags for the
* GPIO:
*
* 0 1 2 3 4 5 6 7
* +---+---+---+---+---+---+---+---+
* |DIR|PUP|PDN|TRIGGER| RESERVED |
* +---+---+---+---+---+---+---+---+
* |O/D|
* +---+
*
* * `DIR`: Pin direction. Clear (0) for input, set (1) for output.
* * `PUP`: Pull-up enabled flag.
* * `PDN`/`O/D`: Flag meaning depends on pin direction:
* * Input: Pull-down enabled.
* * Output: Output is an open-drain.
* * `TRIGGER`: Enumeration describing how pin changes generate
* asynchronous notification commands (TBD) from the NCP to the host.
* * 0: Feature disabled for this pin
* * 1: Trigger on falling edge
* * 2: Trigger on rising edge
* * 3: Trigger on level change
* * `RESERVED`: Bits reserved for future use. Always cleared to zero
* and ignored when read.
*
* As an optional feature, the configuration of individual pins may be
* modified using the `CMD_PROP_VALUE_INSERT` command. Only the GPIO
* number and flags fields MUST be present, the GPIO name (if present)
* would be ignored. This command can only be used to modify the
* configuration of GPIOs which are already exposed---it cannot be used
* by the host to add additional GPIOs.
*/
SPINEL_PROP_GPIO_CONFIG = SPINEL_PROP_BASE_EXT__BEGIN + 0,
/// GPIO State Bitmask
/** Format: `D`
* Type: Read-Write
*
* Contains a bit field identifying the state of the GPIOs. The length of
* the data associated with these properties depends on the number of
* GPIOs. If you have 10 GPIOs, you'd have two bytes. GPIOs are numbered
* from most significant bit to least significant bit, so 0x80 is GPIO 0,
* 0x40 is GPIO 1, etc.
*
* For GPIOs configured as inputs:
*
* * `CMD_PROP_VAUE_GET`: The value of the associated bit describes the
* logic level read from the pin.
* * `CMD_PROP_VALUE_SET`: The value of the associated bit is ignored
* for these pins.
*
* For GPIOs configured as outputs:
*
* * `CMD_PROP_VAUE_GET`: The value of the associated bit is
* implementation specific.
* * `CMD_PROP_VALUE_SET`: The value of the associated bit determines
* the new logic level of the output. If this pin is configured as an
* open-drain, setting the associated bit to 1 will cause the pin to
* enter a Hi-Z state.
*
* For GPIOs which are not specified in `PROP_GPIO_CONFIG`:
*
* * `CMD_PROP_VAUE_GET`: The value of the associated bit is
* implementation specific.
* * `CMD_PROP_VALUE_SET`: The value of the associated bit MUST be
* ignored by the NCP.
*
* When writing, unspecified bits are assumed to be zero.
*/
SPINEL_PROP_GPIO_STATE = SPINEL_PROP_BASE_EXT__BEGIN + 2,
/// GPIO State Set-Only Bitmask
/** Format: `D`
* Type: Write-Only
*
* Allows for the state of various output GPIOs to be set without affecting
* other GPIO states. Contains a bit field identifying the output GPIOs that
* should have their state set to 1.
*
* When writing, unspecified bits are assumed to be zero. The value of
* any bits for GPIOs which are not specified in `PROP_GPIO_CONFIG` MUST
* be ignored.
*/
SPINEL_PROP_GPIO_STATE_SET = SPINEL_PROP_BASE_EXT__BEGIN + 3,
/// GPIO State Clear-Only Bitmask
/** Format: `D`
* Type: Write-Only
*
* Allows for the state of various output GPIOs to be cleared without affecting
* other GPIO states. Contains a bit field identifying the output GPIOs that
* should have their state cleared to 0.
*
* When writing, unspecified bits are assumed to be zero. The value of
* any bits for GPIOs which are not specified in `PROP_GPIO_CONFIG` MUST
* be ignored.
*/
SPINEL_PROP_GPIO_STATE_CLEAR = SPINEL_PROP_BASE_EXT__BEGIN + 4,
/// 32-bit random number from TRNG, ready-to-use.
SPINEL_PROP_TRNG_32 = SPINEL_PROP_BASE_EXT__BEGIN + 5,
/// 16 random bytes from TRNG, ready-to-use.
SPINEL_PROP_TRNG_128 = SPINEL_PROP_BASE_EXT__BEGIN + 6,
/// Raw samples from TRNG entropy source representing 32 bits of entropy.
SPINEL_PROP_TRNG_RAW_32 = SPINEL_PROP_BASE_EXT__BEGIN + 7,
SPINEL_PROP_BASE_EXT__END = 0x1100,
SPINEL_PROP_PHY__BEGIN = 0x20,
SPINEL_PROP_PHY_ENABLED = SPINEL_PROP_PHY__BEGIN + 0, ///< [b]
SPINEL_PROP_PHY_CHAN = SPINEL_PROP_PHY__BEGIN + 1, ///< [C]
SPINEL_PROP_PHY_CHAN_SUPPORTED = SPINEL_PROP_PHY__BEGIN + 2, ///< [A(C)]
SPINEL_PROP_PHY_FREQ = SPINEL_PROP_PHY__BEGIN + 3, ///< kHz [L]
SPINEL_PROP_PHY_CCA_THRESHOLD = SPINEL_PROP_PHY__BEGIN + 4, ///< dBm [c]
SPINEL_PROP_PHY_TX_POWER = SPINEL_PROP_PHY__BEGIN + 5, ///< [c]
SPINEL_PROP_PHY_RSSI = SPINEL_PROP_PHY__BEGIN + 6, ///< dBm [c]
SPINEL_PROP_PHY_RX_SENSITIVITY = SPINEL_PROP_PHY__BEGIN + 7, ///< dBm [c]
SPINEL_PROP_PHY__END = 0x30,
SPINEL_PROP_PHY_EXT__BEGIN = 0x1200,
/// Signal Jamming Detection Enable
/** Format: `b`
*
* Indicates if jamming detection is enabled or disabled. Set to true
* to enable jamming detection.
*/
SPINEL_PROP_JAM_DETECT_ENABLE = SPINEL_PROP_PHY_EXT__BEGIN + 0,
/// Signal Jamming Detected Indicator
/** Format: `b` (Read-Only)
*
* Set to true if radio jamming is detected. Set to false otherwise.
*
* When jamming detection is enabled, changes to the value of this
* property are emitted asynchronously via `CMD_PROP_VALUE_IS`.
*/
SPINEL_PROP_JAM_DETECTED = SPINEL_PROP_PHY_EXT__BEGIN + 1,
/// Jamming detection RSSI threshold
/** Format: `c`
* Units: dBm
*
* This parameter describes the threshold RSSI level (measured in
* dBm) above which the jamming detection will consider the
* channel blocked.
*/
SPINEL_PROP_JAM_DETECT_RSSI_THRESHOLD
= SPINEL_PROP_PHY_EXT__BEGIN + 2,
/// Jamming detection window size
/** Format: `C`
* Units: Seconds (1-63)
*
* This parameter describes the window period for signal jamming
* detection.
*/
SPINEL_PROP_JAM_DETECT_WINDOW = SPINEL_PROP_PHY_EXT__BEGIN + 3,
/// Jamming detection busy period
/** Format: `C`
* Units: Seconds (1-63)
*
* This parameter describes the number of aggregate seconds within
* the detection window where the RSSI must be above
* `PROP_JAM_DETECT_RSSI_THRESHOLD` to trigger detection.
*
* The behavior of the jamming detection feature when `PROP_JAM_DETECT_BUSY`
* is larger than `PROP_JAM_DETECT_WINDOW` is undefined.
*/
SPINEL_PROP_JAM_DETECT_BUSY = SPINEL_PROP_PHY_EXT__BEGIN + 4,
/// Jamming detection history bitmap (for debugging)
/** Format: `LL` (read-only)
*
* This value provides information about current state of jamming detection
* module for monitoring/debugging purpose. It returns a 64-bit value where
* each bit corresponds to one second interval starting with bit 0 for the
* most recent interval and bit 63 for the oldest intervals (63 sec earlier).
* The bit is set to 1 if the jamming detection module observed/detected
* high signal level during the corresponding one second interval.
*
* The value is read-only and is encoded as two uint32 values in
* little-endian format (first uint32 gives the lower bits corresponding to
* more recent history).
*/
SPINEL_PROP_JAM_DETECT_HISTORY_BITMAP
= SPINEL_PROP_PHY_EXT__BEGIN + 5,
SPINEL_PROP_PHY_EXT__END = 0x1300,
SPINEL_PROP_MAC__BEGIN = 0x30,
SPINEL_PROP_MAC_SCAN_STATE = SPINEL_PROP_MAC__BEGIN + 0, ///< [C]
SPINEL_PROP_MAC_SCAN_MASK = SPINEL_PROP_MAC__BEGIN + 1, ///< [A(C)]
SPINEL_PROP_MAC_SCAN_PERIOD = SPINEL_PROP_MAC__BEGIN + 2, ///< ms-per-channel [S]
SPINEL_PROP_MAC_SCAN_BEACON = SPINEL_PROP_MAC__BEGIN + 3, ///< chan,rssi,mac_data,net_data [CcdD]
SPINEL_PROP_MAC_15_4_LADDR = SPINEL_PROP_MAC__BEGIN + 4, ///< [E]
SPINEL_PROP_MAC_15_4_SADDR = SPINEL_PROP_MAC__BEGIN + 5, ///< [S]
SPINEL_PROP_MAC_15_4_PANID = SPINEL_PROP_MAC__BEGIN + 6, ///< [S]
SPINEL_PROP_MAC_RAW_STREAM_ENABLED = SPINEL_PROP_MAC__BEGIN + 7, ///< [C]
SPINEL_PROP_MAC_PROMISCUOUS_MODE = SPINEL_PROP_MAC__BEGIN + 8, ///< [C]
SPINEL_PROP_MAC_ENERGY_SCAN_RESULT = SPINEL_PROP_MAC__BEGIN + 9, ///< chan,maxRssi [Cc]
SPINEL_PROP_MAC_DATA_POLL_PERIOD = SPINEL_PROP_MAC__BEGIN + 10, ///< pollPeriod (in ms) [L]
SPINEL_PROP_MAC__END = 0x40,
SPINEL_PROP_MAC_EXT__BEGIN = 0x1300,
/// MAC Whitelist
/** Format: `A(t(Ec))`
*
* Structure Parameters:
*
* * `E`: EUI64 address of node
* * `c`: Optional fixed RSSI. 127 means not set.
*/
SPINEL_PROP_MAC_WHITELIST = SPINEL_PROP_MAC_EXT__BEGIN + 0,
/// MAC Whitelist Enabled Flag
/** Format: `b`
*/
SPINEL_PROP_MAC_WHITELIST_ENABLED = SPINEL_PROP_MAC_EXT__BEGIN + 1,
/// MAC Extended Address
/** Format: `E`
*
* Specified by Thread. Randomly-chosen, but non-volatile EUI-64.
*/
SPINEL_PROP_MAC_EXTENDED_ADDR = SPINEL_PROP_MAC_EXT__BEGIN + 2,
/// MAC Source Match Enabled Flag
/** Format: `b`
*/
SPINEL_PROP_MAC_SRC_MATCH_ENABLED = SPINEL_PROP_MAC_EXT__BEGIN + 3,
/// MAC Source Match Short Address List
/** Format: `A(S)`
*/
SPINEL_PROP_MAC_SRC_MATCH_SHORT_ADDRESSES
= SPINEL_PROP_MAC_EXT__BEGIN + 4,
/// MAC Source Match Extended Address List
/** Format: `A(E)`
*/
SPINEL_PROP_MAC_SRC_MATCH_EXTENDED_ADDRESSES
= SPINEL_PROP_MAC_EXT__BEGIN + 5,
/// MAC Blacklist
/** Format: `A(t(E))`
*
* Structure Parameters:
*
* * `E`: EUI64 address of node
*/
SPINEL_PROP_MAC_BLACKLIST = SPINEL_PROP_MAC_EXT__BEGIN + 6,
/// MAC Blacklist Enabled Flag
/** Format: `b`
*/
SPINEL_PROP_MAC_BLACKLIST_ENABLED = SPINEL_PROP_MAC_EXT__BEGIN + 7,
SPINEL_PROP_MAC_EXT__END = 0x1400,
SPINEL_PROP_NET__BEGIN = 0x40,
SPINEL_PROP_NET_SAVED = SPINEL_PROP_NET__BEGIN + 0, ///< [b]
SPINEL_PROP_NET_IF_UP = SPINEL_PROP_NET__BEGIN + 1, ///< [b]
SPINEL_PROP_NET_STACK_UP = SPINEL_PROP_NET__BEGIN + 2, ///< [b]
SPINEL_PROP_NET_ROLE = SPINEL_PROP_NET__BEGIN + 3, ///< [C]
SPINEL_PROP_NET_NETWORK_NAME = SPINEL_PROP_NET__BEGIN + 4, ///< [U]
SPINEL_PROP_NET_XPANID = SPINEL_PROP_NET__BEGIN + 5, ///< [D]
SPINEL_PROP_NET_MASTER_KEY = SPINEL_PROP_NET__BEGIN + 6, ///< [D]
SPINEL_PROP_NET_KEY_SEQUENCE_COUNTER
= SPINEL_PROP_NET__BEGIN + 7, ///< [L]
SPINEL_PROP_NET_PARTITION_ID = SPINEL_PROP_NET__BEGIN + 8, ///< [L]
/// Require Join Existing
/** Format: `b`
* Default Value: `false`
*
* This flag is typically used for nodes that are associating with an
* existing network for the first time. If this is set to `true` before
* `PROP_NET_STACK_UP` is set to `true`, the
* creation of a new partition at association is prevented. If the node
* cannot associate with an existing partition, `PROP_LAST_STATUS` will
* emit a status that indicates why the association failed and
* `PROP_NET_STACK_UP` will automatically revert to `false`.
*
* Once associated with an existing partition, this flag automatically
* reverts to `false`.
*
* The behavior of this property being set to `true` when
* `PROP_NET_STACK_UP` is already set to `true` is undefined.
*/
SPINEL_PROP_NET_REQUIRE_JOIN_EXISTING
= SPINEL_PROP_NET__BEGIN + 9,
SPINEL_PROP_NET_KEY_SWITCH_GUARDTIME
= SPINEL_PROP_NET__BEGIN + 10, ///< [L]
SPINEL_PROP_NET_PSKC = SPINEL_PROP_NET__BEGIN + 11, ///< [D]
SPINEL_PROP_NET__END = 0x50,
SPINEL_PROP_THREAD__BEGIN = 0x50,
SPINEL_PROP_THREAD_LEADER_ADDR = SPINEL_PROP_THREAD__BEGIN + 0, ///< [6]
SPINEL_PROP_THREAD_PARENT = SPINEL_PROP_THREAD__BEGIN + 1, ///< LADDR, SADDR [ES]
SPINEL_PROP_THREAD_CHILD_TABLE = SPINEL_PROP_THREAD__BEGIN + 2, ///< array(EUI64,rloc16,timeout,age,netDataVer,inLqi,aveRSS,mode) [A(t(ESLLCCcC))]
SPINEL_PROP_THREAD_LEADER_RID = SPINEL_PROP_THREAD__BEGIN + 3, ///< [C]
SPINEL_PROP_THREAD_LEADER_WEIGHT = SPINEL_PROP_THREAD__BEGIN + 4, ///< [C]
SPINEL_PROP_THREAD_LOCAL_LEADER_WEIGHT
= SPINEL_PROP_THREAD__BEGIN + 5, ///< [C]
SPINEL_PROP_THREAD_NETWORK_DATA = SPINEL_PROP_THREAD__BEGIN + 6, ///< [D]
SPINEL_PROP_THREAD_NETWORK_DATA_VERSION
= SPINEL_PROP_THREAD__BEGIN + 7, ///< [S]
SPINEL_PROP_THREAD_STABLE_NETWORK_DATA
= SPINEL_PROP_THREAD__BEGIN + 8, ///< [D]
SPINEL_PROP_THREAD_STABLE_NETWORK_DATA_VERSION
= SPINEL_PROP_THREAD__BEGIN + 9, ///< [S]
SPINEL_PROP_THREAD_ON_MESH_NETS = SPINEL_PROP_THREAD__BEGIN + 10, ///< array(ipv6prefix,prefixlen,stable,flags,isLocal) [A(t(6CbCb))]
/// Off-mesh routes
/** Format: [A(t(6CbCbb))]
*
* Data per item is:
*
* `6`: Route Prefix
* `C`: Prefix length in bits
* `b`: Stable flag
* `C`: Route preference flags
* `b`: "Is defined locally" flag. Set if this route info was locally
* defined as part of local network data. Assumed to be true for set,
* insert and replace. Clear if the route is part of partition's network
* data.
* `b`: "Next hop is this device" flag. Set if the next hop for the
* route is this device itself (i.e., route was added by this device)
* This value is ignored when adding an external route. For any added
* route the next hop is this device.
*
*/
SPINEL_PROP_THREAD_OFF_MESH_ROUTES = SPINEL_PROP_THREAD__BEGIN + 11,
SPINEL_PROP_THREAD_ASSISTING_PORTS = SPINEL_PROP_THREAD__BEGIN + 12, ///< array(portn) [A(S)]
SPINEL_PROP_THREAD_ALLOW_LOCAL_NET_DATA_CHANGE
= SPINEL_PROP_THREAD__BEGIN + 13, ///< [b]
/// Thread Mode
/** Format: `C`
*
* This property contains the value of the mode
* TLV for this node. The meaning of the bits in this
* bitfield are defined by section 4.5.2 of the Thread
* specification.
*/
SPINEL_PROP_THREAD_MODE = SPINEL_PROP_THREAD__BEGIN + 14,
SPINEL_PROP_THREAD__END = 0x60,
SPINEL_PROP_THREAD_EXT__BEGIN = 0x1500,
/// Thread Child Timeout
/** Format: `L`
*
* Used when operating in the Child role.
*/
SPINEL_PROP_THREAD_CHILD_TIMEOUT = SPINEL_PROP_THREAD_EXT__BEGIN + 0,
/// Thread RLOC16
/** Format: `S`
*/
SPINEL_PROP_THREAD_RLOC16 = SPINEL_PROP_THREAD_EXT__BEGIN + 1,
/// Thread Router Upgrade Threshold
/** Format: `C`
*/
SPINEL_PROP_THREAD_ROUTER_UPGRADE_THRESHOLD
= SPINEL_PROP_THREAD_EXT__BEGIN + 2,
/// Thread Context Reuse Delay
/** Format: `L`
*/
SPINEL_PROP_THREAD_CONTEXT_REUSE_DELAY
= SPINEL_PROP_THREAD_EXT__BEGIN + 3,
/// Thread Network ID Timeout
/** Format: `C`
*/
SPINEL_PROP_THREAD_NETWORK_ID_TIMEOUT
= SPINEL_PROP_THREAD_EXT__BEGIN + 4,
/// List of active thread router ids
/** Format: `A(C)`
*
* Note that some implementations may not support CMD_GET_VALUE
* routerids, but may support CMD_REMOVE_VALUE when the node is
* a leader.
*/
SPINEL_PROP_THREAD_ACTIVE_ROUTER_IDS
= SPINEL_PROP_THREAD_EXT__BEGIN + 5,
/// Forward IPv6 packets that use RLOC16 addresses to HOST.
/** Format: `b`
*/
SPINEL_PROP_THREAD_RLOC16_DEBUG_PASSTHRU
= SPINEL_PROP_THREAD_EXT__BEGIN + 6,
/// This property indicates whether or not the `Router Role` is enabled.
/** Format `b`
*/
SPINEL_PROP_THREAD_ROUTER_ROLE_ENABLED
= SPINEL_PROP_THREAD_EXT__BEGIN + 7,
/// Thread Router Downgrade Threshold
/** Format: `C`
*/
SPINEL_PROP_THREAD_ROUTER_DOWNGRADE_THRESHOLD
= SPINEL_PROP_THREAD_EXT__BEGIN + 8,
/// Thread Router Selection Jitter
/** Format: `C`
*/
SPINEL_PROP_THREAD_ROUTER_SELECTION_JITTER
= SPINEL_PROP_THREAD_EXT__BEGIN + 9,
/// Thread Preferred Router Id
/** Format: `C` - Write only
*/
SPINEL_PROP_THREAD_PREFERRED_ROUTER_ID
= SPINEL_PROP_THREAD_EXT__BEGIN + 10,
/// Thread Neighbor Table
/** Format: `A(t(ESLCcCbLL))`
* eui64, rloc16, age, inLqi ,aveRSS, mode, isChild. linkFrameCounter, mleCounter
*/
SPINEL_PROP_THREAD_NEIGHBOR_TABLE = SPINEL_PROP_THREAD_EXT__BEGIN + 11,
/// Thread Max Child Count
/** Format: `C`
*/
SPINEL_PROP_THREAD_CHILD_COUNT_MAX = SPINEL_PROP_THREAD_EXT__BEGIN + 12,
/// Leader network data
/** Format: `D` - Read only
*/
SPINEL_PROP_THREAD_LEADER_NETWORK_DATA
= SPINEL_PROP_THREAD_EXT__BEGIN + 13,
/// Stable leader network data
/** Format: `D` - Read only
*/
SPINEL_PROP_THREAD_STABLE_LEADER_NETWORK_DATA
= SPINEL_PROP_THREAD_EXT__BEGIN + 14,
/// Thread joiner data
/** Format `A(T(ULE))`
* PSKd, joiner timeout, eui64 (optional)
*/
SPINEL_PROP_THREAD_JOINERS = SPINEL_PROP_THREAD_EXT__BEGIN + 15,
/// Thread commissioner enable
/** Format `b`
*
* Default value is `false`.
*/
SPINEL_PROP_THREAD_COMMISSIONER_ENABLED
= SPINEL_PROP_THREAD_EXT__BEGIN + 16,
/// Thread TMF proxy enable
/** Format `b`
*
* Default value is `false`.
*/
SPINEL_PROP_THREAD_TMF_PROXY_ENABLED
= SPINEL_PROP_THREAD_EXT__BEGIN + 17,
/// Thread TMF proxy stream
/** Format `dSS`
*/
SPINEL_PROP_THREAD_TMF_PROXY_STREAM = SPINEL_PROP_THREAD_EXT__BEGIN + 18,
/// Thread "joiner" flag used during discovery scan operation
/** Format `b`
*
* This property defines the Joiner Flag value in the Discovery Request TLV.
*
* Default value is `false`.
*/
SPINEL_PROP_THREAD_DISCOVERY_SCAN_JOINER_FLAG
= SPINEL_PROP_THREAD_EXT__BEGIN + 19,
/// Enable EUI64 filtering for discovery scan operation.
/** Format `b`
*
* Default value is `false`
*/
SPINEL_PROP_THREAD_DISCOVERY_SCAN_ENABLE_FILTERING
= SPINEL_PROP_THREAD_EXT__BEGIN + 20,
/// PANID used for Discovery scan operation (used for PANID filtering).
/** Format: `S`
*
* Default value is 0xffff (Broadcast PAN) to disable PANID filtering
*
*/
SPINEL_PROP_THREAD_DISCOVERY_SCAN_PANID
= SPINEL_PROP_THREAD_EXT__BEGIN + 21,
/// Thread (out of band) steering data for MLE Discovery Response.
/** Format `E` - Write only
*
* Required capability: SPINEL_CAP_OOB_STEERING_DATA.
*
* Writing to this property allows to set/update the the MLE Discovery Response steering data out of band.
*
* - All zeros to clear the steering data (indicating that there is no steering data).
* - All 0xFFs to set steering data/bloom filter to accept/allow all.
* - A specific EUI64 which is then added to current steering data/bloom filter.
*
*/
SPINEL_PROP_THREAD_STEERING_DATA = SPINEL_PROP_THREAD_EXT__BEGIN + 22,
SPINEL_PROP_THREAD_EXT__END = 0x1600,
SPINEL_PROP_IPV6__BEGIN = 0x60,
SPINEL_PROP_IPV6_LL_ADDR = SPINEL_PROP_IPV6__BEGIN + 0, ///< [6]
SPINEL_PROP_IPV6_ML_ADDR = SPINEL_PROP_IPV6__BEGIN + 1, ///< [6C]
SPINEL_PROP_IPV6_ML_PREFIX = SPINEL_PROP_IPV6__BEGIN + 2, ///< [6C]
SPINEL_PROP_IPV6_ADDRESS_TABLE = SPINEL_PROP_IPV6__BEGIN + 3, ///< array(ipv6addr,prefixlen,valid,preferred,flags) [A(t(6CLLC))]
SPINEL_PROP_IPV6_ROUTE_TABLE = SPINEL_PROP_IPV6__BEGIN + 4, ///< array(ipv6prefix,prefixlen,iface,flags) [A(t(6CCC))]
/// IPv6 ICMP Ping Offload
/** Format: `b`
*
* Allow the NCP to directly respond to ICMP ping requests. If this is
* turned on, ping request ICMP packets will not be passed to the host.
*
* Default value is `false`.
*/
SPINEL_PROP_IPV6_ICMP_PING_OFFLOAD = SPINEL_PROP_IPV6__BEGIN + 5, ///< [b]
SPINEL_PROP_IPV6__END = 0x70,
SPINEL_PROP_STREAM__BEGIN = 0x70,
SPINEL_PROP_STREAM_DEBUG = SPINEL_PROP_STREAM__BEGIN + 0, ///< [U]
SPINEL_PROP_STREAM_RAW = SPINEL_PROP_STREAM__BEGIN + 1, ///< [dD]
SPINEL_PROP_STREAM_NET = SPINEL_PROP_STREAM__BEGIN + 2, ///< [dD]
SPINEL_PROP_STREAM_NET_INSECURE = SPINEL_PROP_STREAM__BEGIN + 3, ///< [dD]
SPINEL_PROP_STREAM__END = 0x80,
/// UART Bitrate
/** Format: `L`
*
* If the NCP is using a UART to communicate with the host,
* this property allows the host to change the bitrate
* of the serial connection. The value encoding is `L`,
* which is a little-endian 32-bit unsigned integer.
* The host should not assume that all possible numeric values
* are supported.
*
* If implemented by the NCP, this property should be persistent
* across software resets and forgotten upon hardware resets.
*
* This property is only implemented when a UART is being
* used for Spinel. This property is optional.
*
* When changing the bitrate, all frames will be received
* at the previous bitrate until the response frame to this command
* is received. Once a successful response frame is received by
* the host, all further frames will be transmitted at the new
* bitrate.
*/
SPINEL_PROP_UART_BITRATE = 0x100,
/// UART Software Flow Control
/** Format: `b`
*
* If the NCP is using a UART to communicate with the host,
* this property allows the host to determine if software flow
* control (XON/XOFF style) should be used and (optionally) to
* turn it on or off.
*
* This property is only implemented when a UART is being
* used for Spinel. This property is optional.
*/
SPINEL_PROP_UART_XON_XOFF = 0x101,
SPINEL_PROP_15_4_PIB__BEGIN = 1024,
// For direct access to the 802.15.4 PID.
// Individual registers are fetched using
// `SPINEL_PROP_15_4_PIB__BEGIN+[PIB_IDENTIFIER]`
// Only supported if SPINEL_CAP_15_4_PIB is set.
//
// For brevity, the entire 802.15.4 PIB space is
// not defined here, but a few choice attributes
// are defined for illustration and convenience.
SPINEL_PROP_15_4_PIB_PHY_CHANNELS_SUPPORTED
= SPINEL_PROP_15_4_PIB__BEGIN + 0x01, ///< [A(L)]
SPINEL_PROP_15_4_PIB_MAC_PROMISCUOUS_MODE
= SPINEL_PROP_15_4_PIB__BEGIN + 0x51, ///< [b]
SPINEL_PROP_15_4_PIB_MAC_SECURITY_ENABLED
= SPINEL_PROP_15_4_PIB__BEGIN + 0x5d, ///< [b]
SPINEL_PROP_15_4_PIB__END = 1280,
SPINEL_PROP_CNTR__BEGIN = 1280,
/// Counter reset behavior
/** Format: `C`
* Writing a '1' to this property will reset
* all of the counters to zero. */
SPINEL_PROP_CNTR_RESET = SPINEL_PROP_CNTR__BEGIN + 0,
/// The total number of transmissions.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_TOTAL = SPINEL_PROP_CNTR__BEGIN + 1,
/// The number of transmissions with ack request.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_ACK_REQ = SPINEL_PROP_CNTR__BEGIN + 2,
/// The number of transmissions that were acked.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_ACKED = SPINEL_PROP_CNTR__BEGIN + 3,
/// The number of transmissions without ack request.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_NO_ACK_REQ = SPINEL_PROP_CNTR__BEGIN + 4,
/// The number of transmitted data.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_DATA = SPINEL_PROP_CNTR__BEGIN + 5,
/// The number of transmitted data poll.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_DATA_POLL = SPINEL_PROP_CNTR__BEGIN + 6,
/// The number of transmitted beacon.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_BEACON = SPINEL_PROP_CNTR__BEGIN + 7,
/// The number of transmitted beacon request.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_BEACON_REQ = SPINEL_PROP_CNTR__BEGIN + 8,
/// The number of transmitted other types of frames.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_OTHER = SPINEL_PROP_CNTR__BEGIN + 9,
/// The number of retransmission times.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_RETRY = SPINEL_PROP_CNTR__BEGIN + 10,
/// The number of CCA failure times.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_ERR_CCA = SPINEL_PROP_CNTR__BEGIN + 11,
/// The number of unicast packets transmitted.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_UNICAST = SPINEL_PROP_CNTR__BEGIN + 12,
/// The number of broadcast packets transmitted.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_PKT_BROADCAST = SPINEL_PROP_CNTR__BEGIN + 13,
/// The number of frame transmission failures due to abort error.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_ERR_ABORT = SPINEL_PROP_CNTR__BEGIN + 14,
/// The total number of received packets.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_TOTAL = SPINEL_PROP_CNTR__BEGIN + 100,
/// The number of received data.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_DATA = SPINEL_PROP_CNTR__BEGIN + 101,
/// The number of received data poll.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_DATA_POLL = SPINEL_PROP_CNTR__BEGIN + 102,
/// The number of received beacon.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_BEACON = SPINEL_PROP_CNTR__BEGIN + 103,
/// The number of received beacon request.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_BEACON_REQ = SPINEL_PROP_CNTR__BEGIN + 104,
/// The number of received other types of frames.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_OTHER = SPINEL_PROP_CNTR__BEGIN + 105,
/// The number of received packets filtered by whitelist.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_FILT_WL = SPINEL_PROP_CNTR__BEGIN + 106,
/// The number of received packets filtered by destination check.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_FILT_DA = SPINEL_PROP_CNTR__BEGIN + 107,
/// The number of received packets that are empty.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_EMPTY = SPINEL_PROP_CNTR__BEGIN + 108,
/// The number of received packets from an unknown neighbor.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_UKWN_NBR = SPINEL_PROP_CNTR__BEGIN + 109,
/// The number of received packets whose source address is invalid.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_NVLD_SADDR = SPINEL_PROP_CNTR__BEGIN + 110,
/// The number of received packets with a security error.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_SECURITY = SPINEL_PROP_CNTR__BEGIN + 111,
/// The number of received packets with a checksum error.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_BAD_FCS = SPINEL_PROP_CNTR__BEGIN + 112,
/// The number of received packets with other errors.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_ERR_OTHER = SPINEL_PROP_CNTR__BEGIN + 113,
/// The number of received duplicated.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_DUP = SPINEL_PROP_CNTR__BEGIN + 114,
/// The number of unicast packets received.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_UNICAST = SPINEL_PROP_CNTR__BEGIN + 115,
/// The number of broadcast packets received.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_PKT_BROADCAST = SPINEL_PROP_CNTR__BEGIN + 116,
/// The total number of secure transmitted IP messages.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_IP_SEC_TOTAL = SPINEL_PROP_CNTR__BEGIN + 200,
/// The total number of insecure transmitted IP messages.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_IP_INSEC_TOTAL = SPINEL_PROP_CNTR__BEGIN + 201,
/// The number of dropped (not transmitted) IP messages.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_IP_DROPPED = SPINEL_PROP_CNTR__BEGIN + 202,
/// The total number of secure received IP message.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_IP_SEC_TOTAL = SPINEL_PROP_CNTR__BEGIN + 203,
/// The total number of insecure received IP message.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_IP_INSEC_TOTAL = SPINEL_PROP_CNTR__BEGIN + 204,
/// The number of dropped received IP messages.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_IP_DROPPED = SPINEL_PROP_CNTR__BEGIN + 205,
/// The number of transmitted spinel frames.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_TX_SPINEL_TOTAL = SPINEL_PROP_CNTR__BEGIN + 300,
/// The number of received spinel frames.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_SPINEL_TOTAL = SPINEL_PROP_CNTR__BEGIN + 301,
/// The number of received spinel frames with error.
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_SPINEL_ERR = SPINEL_PROP_CNTR__BEGIN + 302,
/// Number of out of order received spinel frames (tid increase by more than 1).
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_RX_SPINEL_OUT_OF_ORDER_TID
= SPINEL_PROP_CNTR__BEGIN + 303,
/// The number of successful Tx IP packets
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_IP_TX_SUCCESS = SPINEL_PROP_CNTR__BEGIN + 304,
/// The number of successful Rx IP packets
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_IP_RX_SUCCESS = SPINEL_PROP_CNTR__BEGIN + 305,
/// The number of failed Tx IP packets
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_IP_TX_FAILURE = SPINEL_PROP_CNTR__BEGIN + 306,
/// The number of failed Rx IP packets
/** Format: `L` (Read-only) */
SPINEL_PROP_CNTR_IP_RX_FAILURE = SPINEL_PROP_CNTR__BEGIN + 307,
/// The message buffer counter info
/** Format: `SSSSSSSSSSSSSSSS` (Read-only)
* `S`, (TotalBuffers) The number of buffers in the pool.
* `S`, (FreeBuffers) The number of free message buffers.
* `S`, (6loSendMessages) The number of messages in the 6lo send queue.
* `S`, (6loSendBuffers) The number of buffers in the 6lo send queue.
* `S`, (6loReassemblyMessages) The number of messages in the 6LoWPAN reassembly queue.
* `S`, (6loReassemblyBuffers) The number of buffers in the 6LoWPAN reassembly queue.
* `S`, (Ip6Messages) The number of messages in the IPv6 send queue.
* `S`, (Ip6Buffers) The number of buffers in the IPv6 send queue.
* `S`, (MplMessages) The number of messages in the MPL send queue.
* `S`, (MplBuffers) The number of buffers in the MPL send queue.
* `S`, (MleMessages) The number of messages in the MLE send queue.
* `S`, (MleBuffers) The number of buffers in the MLE send queue.
* `S`, (ArpMessages) The number of messages in the ARP send queue.
* `S`, (ArpBuffers) The number of buffers in the ARP send queue.
* `S`, (CoapMessages) The number of messages in the CoAP send queue.
* `S`, (CoapBuffers) The number of buffers in the CoAP send queue.
*/
SPINEL_PROP_MSG_BUFFER_COUNTERS = SPINEL_PROP_CNTR__BEGIN + 400,
SPINEL_PROP_CNTR__END = 2048,
SPINEL_PROP_NEST__BEGIN = 15296,
SPINEL_PROP_NEST_STREAM_MFG = SPINEL_PROP_NEST__BEGIN + 0,
/// The legacy network ULA prefix (8 bytes)
/** Format: 'D' */
SPINEL_PROP_NEST_LEGACY_ULA_PREFIX = SPINEL_PROP_NEST__BEGIN + 1,
/// A (newly) joined legacy node (this is signaled from NCP)
/** Format: 'E' */
SPINEL_PROP_NEST_LEGACY_JOINED_NODE = SPINEL_PROP_NEST__BEGIN + 2,
SPINEL_PROP_NEST__END = 15360,
SPINEL_PROP_VENDOR__BEGIN = 15360,
SPINEL_PROP_VENDOR__END = 16384,
SPINEL_PROP_DEBUG__BEGIN = 16384,
/// Reading this property will cause an assert on the NCP.
/// This is intended for testing the assert functionality of
/// underlying platform/NCP. Assert should ideally cause the
/// NCP to reset, but if this is not supported a `false` boolean
/// is returned in response.
/** Format: 'b' (read-only) */
SPINEL_PROP_DEBUG_TEST_ASSERT = SPINEL_PROP_DEBUG__BEGIN + 0,
/// The NCP log level.
/** Format: `C` */
SPINEL_PROP_DEBUG_NCP_LOG_LEVEL = SPINEL_PROP_DEBUG__BEGIN + 1,
SPINEL_PROP_DEBUG__END = 17408,
SPINEL_PROP_EXPERIMENTAL__BEGIN = 2000000,
SPINEL_PROP_EXPERIMENTAL__END = 2097152,
} spinel_prop_key_t;
// ----------------------------------------------------------------------------
#define SPINEL_HEADER_FLAG 0x80
#define SPINEL_HEADER_TID_SHIFT 0
#define SPINEL_HEADER_TID_MASK (15 << SPINEL_HEADER_TID_SHIFT)
#define SPINEL_HEADER_IID_SHIFT 4
#define SPINEL_HEADER_IID_MASK (3 << SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_IID_0 (0 << SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_IID_1 (1 << SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_IID_2 (2 << SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_IID_3 (3 << SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_GET_IID(x) (((x) & SPINEL_HEADER_IID_MASK) >> SPINEL_HEADER_IID_SHIFT)
#define SPINEL_HEADER_GET_TID(x) (spinel_tid_t)(((x)&SPINEL_HEADER_TID_MASK)>>SPINEL_HEADER_TID_SHIFT)
#define SPINEL_GET_NEXT_TID(x) (spinel_tid_t)((x)>=0xF?1:(x)+1)
#define SPINEL_BEACON_THREAD_FLAG_VERSION_SHIFT \
4
#define SPINEL_BEACON_THREAD_FLAG_VERSION_MASK \
(0xf << SPINEL_BEACON_THREAD_FLAG_VERSION_SHIFT)
#define SPINEL_BEACON_THREAD_FLAG_JOINABLE \
(1 << 0)
#define SPINEL_BEACON_THREAD_FLAG_NATIVE \
(1 << 3)
// ----------------------------------------------------------------------------
enum
{
SPINEL_DATATYPE_NULL_C = 0,
SPINEL_DATATYPE_VOID_C = '.',
SPINEL_DATATYPE_BOOL_C = 'b',
SPINEL_DATATYPE_UINT8_C = 'C',
SPINEL_DATATYPE_INT8_C = 'c',
SPINEL_DATATYPE_UINT16_C = 'S',
SPINEL_DATATYPE_INT16_C = 's',
SPINEL_DATATYPE_UINT32_C = 'L',
SPINEL_DATATYPE_INT32_C = 'l',
SPINEL_DATATYPE_UINT_PACKED_C = 'i',
SPINEL_DATATYPE_IPv6ADDR_C = '6',
SPINEL_DATATYPE_EUI64_C = 'E',
SPINEL_DATATYPE_EUI48_C = 'e',
SPINEL_DATATYPE_DATA_WLEN_C = 'd',
SPINEL_DATATYPE_DATA_C = 'D',
SPINEL_DATATYPE_UTF8_C = 'U', //!< Zero-Terminated UTF8-Encoded String
SPINEL_DATATYPE_STRUCT_C = 't',
SPINEL_DATATYPE_ARRAY_C = 'A',
};
typedef char spinel_datatype_t;
#define SPINEL_DATATYPE_NULL_S ""
#define SPINEL_DATATYPE_VOID_S "."
#define SPINEL_DATATYPE_BOOL_S "b"
#define SPINEL_DATATYPE_UINT8_S "C"
#define SPINEL_DATATYPE_INT8_S "c"
#define SPINEL_DATATYPE_UINT16_S "S"
#define SPINEL_DATATYPE_INT16_S "s"
#define SPINEL_DATATYPE_UINT32_S "L"
#define SPINEL_DATATYPE_INT32_S "l"
#define SPINEL_DATATYPE_UINT_PACKED_S "i"
#define SPINEL_DATATYPE_IPv6ADDR_S "6"
#define SPINEL_DATATYPE_EUI64_S "E"
#define SPINEL_DATATYPE_EUI48_S "e"
#define SPINEL_DATATYPE_DATA_WLEN_S "d"
#define SPINEL_DATATYPE_DATA_S "D"
#define SPINEL_DATATYPE_UTF8_S "U" //!< Zero-Terminated UTF8-Encoded String
#define SPINEL_DATATYPE_ARRAY_S(x) "A(" x ")"
#define SPINEL_DATATYPE_STRUCT_S(x) "t(" x ")"
#define SPINEL_DATATYPE_ARRAY_STRUCT_S(x) \
SPINEL_DATATYPE_ARRAY_S(SPINEL_DATATYPE_STRUCT_WLEN_S(x))
#define SPINEL_DATATYPE_COMMAND_S SPINEL_DATATYPE_UINT8_S /* header */ \
SPINEL_DATATYPE_UINT_PACKED_S /* command */
#define SPINEL_DATATYPE_COMMAND_PROP_S SPINEL_DATATYPE_COMMAND_S /* prop command */ \
SPINEL_DATATYPE_UINT_PACKED_S /* property id */
#define SPINEL_DATATYPE_MAC_SCAN_RESULT_S(mac_format_str, net_format_str) \
SPINEL_DATATYPE_UINT8_S /* Channel */ \
SPINEL_DATATYPE_INT8_S /* RSSI */ \
SPINEL_DATATYPE_STRUCT_S(mac_format_str) /* mac-layer data */ \
SPINEL_DATATYPE_STRUCT_S(net_format_str) /* net-layer data */
#define SPINEL_802_15_4_DATATYPE_MAC_SCAN_RESULT_V1_S \
SPINEL_DATATYPE_EUI64_S /* laddr */ \
SPINEL_DATATYPE_UINT16_S /* saddr */ \
SPINEL_DATATYPE_UINT16_S /* panid */ \
SPINEL_DATATYPE_UINT8_S /* lqi */
#define SPINEL_NET_DATATYPE_MAC_SCAN_RESULT_V1_S \
SPINEL_DATATYPE_UINT_PACKED_S /* type */ \
SPINEL_DATATYPE_UINT8_S /* flags */ \
SPINEL_DATATYPE_UTF8_S /* network name */ \
SPINEL_DATATYPE_DATA_WLEN_S /* xpanid */
#define SPINEL_NET_DATATYPE_MAC_SCAN_RESULT_V2_S \
SPINEL_NET_DATATYPE_MAC_SCAN_RESULT_V1_S \
SPINEL_DATATYPE_DATA_WLEN_S /* steering data */
#define SPINEL_MAX_UINT_PACKED 2097151
SPINEL_API_EXTERN spinel_ssize_t spinel_datatype_pack(uint8_t *data_out, spinel_size_t data_len,
const char *pack_format, ...);
SPINEL_API_EXTERN spinel_ssize_t spinel_datatype_vpack(uint8_t *data_out, spinel_size_t data_len,
const char *pack_format, va_list args);
SPINEL_API_EXTERN spinel_ssize_t spinel_datatype_unpack(const uint8_t *data_in, spinel_size_t data_len,
const char *pack_format, ...);
SPINEL_API_EXTERN spinel_ssize_t spinel_datatype_vunpack(const uint8_t *data_in, spinel_size_t data_len,
const char *pack_format, va_list args);
SPINEL_API_EXTERN spinel_ssize_t spinel_packed_uint_decode(const uint8_t *bytes, spinel_size_t len,
unsigned int *value);
SPINEL_API_EXTERN spinel_ssize_t spinel_packed_uint_encode(uint8_t *bytes, spinel_size_t len, unsigned int value);
SPINEL_API_EXTERN spinel_ssize_t spinel_packed_uint_size(unsigned int value);
SPINEL_API_EXTERN const char *spinel_next_packed_datatype(const char *pack_format);
// ----------------------------------------------------------------------------
SPINEL_API_EXTERN const char *spinel_prop_key_to_cstr(spinel_prop_key_t prop_key);
SPINEL_API_EXTERN const char *spinel_net_role_to_cstr(uint8_t net_role);
SPINEL_API_EXTERN const char *spinel_status_to_cstr(spinel_status_t status);
SPINEL_API_EXTERN const char *spinel_capability_to_cstr(unsigned int capability);
// ----------------------------------------------------------------------------
__END_DECLS
#endif /* defined(SPINEL_HEADER_INCLUDED) */