CPC system endpoint common part.
License#
Copyright 2019 Silicon Laboratories Inc. www.silabs.com
SPDX-License-Identifier: Zlib
The licensor of this software is Silicon Laboratories Inc.
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
This notice may not be removed or altered from any source distribution.
/***************************************************************************/
#ifndef SLI_CPC_SYSTEM_COMMON_H
#define SLI_CPC_SYSTEM_COMMON_H
#include "sl_common.h"
#include "sl_enum.h"
#include "sl_status.h"
#include "sl_cpc.h"
#include "sli_cpc_bootloader.h"
#include <stddef.h>
#include <stdarg.h>
#ifdef __cplusplus
extern "C"
{
#endif
/***************************************************************************/
SL_ENUM_GENERIC(sli_cpc_property_id_t, uint32_t)
{
PROP_LAST_STATUS = 0x00,
PROP_PROTOCOL_VERSION = 0x01,
PROP_CAPABILITIES = 0x02,
PROP_SECONDARY_CPC_VERSION = 0x03,
PROP_SECONDARY_APP_VERSION = 0x04,
PROP_RX_CAPABILITY = 0x20,
PROP_TX_CAPABILITY = 0x21,
PROP_FC_VALIDATION_VALUE = 0x30,
PROP_BUS_BITRATE_VALUE = 0x40,
PROP_BUS_MAX_BITRATE_VALUE = 0x50,
PROP_PRIMARY_VERSION_VALUE = 0x60,
PROP_BOOTLOADER_INFO = 0x200,
PROP_BOOTLOADER_REBOOT_MODE = 0x202,
PROP_SOFT_RESET = 0x203,
PROP_SECURITY_STATE = 0x301,
PROP_CORE_DEBUG_COUNTERS = 0x400,
PROP_UFRAME_PROCESSING = 0x500,
PROP_ENTER_IRQ = 0x600,
PROP_ENDPOINT_ENCRYPTION = 0x700,
PROP_ENDPOINT_STATE_0 = 0x1000,
PROP_ENDPOINT_STATE_1 = 0x1001,
PROP_ENDPOINT_STATE_2 = 0x1002,
PROP_ENDPOINT_STATE_3 = 0x1003,
PROP_ENDPOINT_STATE_4 = 0x1004,
PROP_ENDPOINT_STATE_5 = 0x1005,
PROP_ENDPOINT_STATE_6 = 0x1006,
PROP_ENDPOINT_STATE_7 = 0x1007,
PROP_ENDPOINT_STATE_8 = 0x1008,
PROP_ENDPOINT_STATE_9 = 0x1009,
PROP_ENDPOINT_STATE_10 = 0x100a,
PROP_ENDPOINT_STATE_11 = 0x100b,
PROP_ENDPOINT_STATE_12 = 0x100c,
PROP_ENDPOINT_STATE_13 = 0x100d,
PROP_ENDPOINT_STATE_14 = 0x100e,
PROP_ENDPOINT_STATE_15 = 0x100f,
PROP_ENDPOINT_STATE_16 = 0x1010,
PROP_ENDPOINT_STATE_17 = 0x1011,
PROP_ENDPOINT_STATE_18 = 0x1012,
PROP_ENDPOINT_STATE_19 = 0x1013,
PROP_ENDPOINT_STATE_20 = 0x1014,
PROP_ENDPOINT_STATE_21 = 0x1015,
PROP_ENDPOINT_STATE_22 = 0x1016,
PROP_ENDPOINT_STATE_23 = 0x1017,
PROP_ENDPOINT_STATE_24 = 0x1018,
PROP_ENDPOINT_STATE_25 = 0x1019,
PROP_ENDPOINT_STATE_26 = 0x101a,
PROP_ENDPOINT_STATE_27 = 0x101b,
PROP_ENDPOINT_STATE_28 = 0x101c,
PROP_ENDPOINT_STATE_29 = 0x101d,
PROP_ENDPOINT_STATE_30 = 0x101e,
PROP_ENDPOINT_STATE_31 = 0x101f,
PROP_ENDPOINT_STATE_32 = 0x1020,
PROP_ENDPOINT_STATE_33 = 0x1021,
PROP_ENDPOINT_STATE_34 = 0x1022,
PROP_ENDPOINT_STATE_35 = 0x1023,
PROP_ENDPOINT_STATE_36 = 0x1024,
PROP_ENDPOINT_STATE_37 = 0x1025,
PROP_ENDPOINT_STATE_38 = 0x1026,
PROP_ENDPOINT_STATE_39 = 0x1027,
PROP_ENDPOINT_STATE_40 = 0x1028,
PROP_ENDPOINT_STATE_41 = 0x1029,
PROP_ENDPOINT_STATE_42 = 0x102a,
PROP_ENDPOINT_STATE_43 = 0x102b,
PROP_ENDPOINT_STATE_44 = 0x102c,
PROP_ENDPOINT_STATE_45 = 0x102d,
PROP_ENDPOINT_STATE_46 = 0x102e,
PROP_ENDPOINT_STATE_47 = 0x102f,
PROP_ENDPOINT_STATE_48 = 0x1030,
PROP_ENDPOINT_STATE_49 = 0x1031,
PROP_ENDPOINT_STATE_50 = 0x1032,
PROP_ENDPOINT_STATE_51 = 0x1033,
PROP_ENDPOINT_STATE_52 = 0x1034,
PROP_ENDPOINT_STATE_53 = 0x1035,
PROP_ENDPOINT_STATE_54 = 0x1036,
PROP_ENDPOINT_STATE_55 = 0x1037,
PROP_ENDPOINT_STATE_56 = 0x1038,
PROP_ENDPOINT_STATE_57 = 0x1039,
PROP_ENDPOINT_STATE_58 = 0x103a,
PROP_ENDPOINT_STATE_59 = 0x103b,
PROP_ENDPOINT_STATE_60 = 0x103c,
PROP_ENDPOINT_STATE_61 = 0x103d,
PROP_ENDPOINT_STATE_62 = 0x103e,
PROP_ENDPOINT_STATE_63 = 0x103f,
PROP_ENDPOINT_STATE_64 = 0x1040,
PROP_ENDPOINT_STATE_65 = 0x1041,
PROP_ENDPOINT_STATE_66 = 0x1042,
PROP_ENDPOINT_STATE_67 = 0x1043,
PROP_ENDPOINT_STATE_68 = 0x1044,
PROP_ENDPOINT_STATE_69 = 0x1045,
PROP_ENDPOINT_STATE_70 = 0x1046,
PROP_ENDPOINT_STATE_71 = 0x1047,
PROP_ENDPOINT_STATE_72 = 0x1048,
PROP_ENDPOINT_STATE_73 = 0x1049,
PROP_ENDPOINT_STATE_74 = 0x104a,
PROP_ENDPOINT_STATE_75 = 0x104b,
PROP_ENDPOINT_STATE_76 = 0x104c,
PROP_ENDPOINT_STATE_77 = 0x104d,
PROP_ENDPOINT_STATE_78 = 0x104e,
PROP_ENDPOINT_STATE_79 = 0x104f,
PROP_ENDPOINT_STATE_80 = 0x1050,
PROP_ENDPOINT_STATE_81 = 0x1051,
PROP_ENDPOINT_STATE_82 = 0x1052,
PROP_ENDPOINT_STATE_83 = 0x1053,
PROP_ENDPOINT_STATE_84 = 0x1054,
PROP_ENDPOINT_STATE_85 = 0x1055,
PROP_ENDPOINT_STATE_86 = 0x1056,
PROP_ENDPOINT_STATE_87 = 0x1057,
PROP_ENDPOINT_STATE_88 = 0x1058,
PROP_ENDPOINT_STATE_89 = 0x1059,
PROP_ENDPOINT_STATE_90 = 0x105a,
PROP_ENDPOINT_STATE_91 = 0x105b,
PROP_ENDPOINT_STATE_92 = 0x105c,
PROP_ENDPOINT_STATE_93 = 0x105d,
PROP_ENDPOINT_STATE_94 = 0x105e,
PROP_ENDPOINT_STATE_95 = 0x105f,
PROP_ENDPOINT_STATE_96 = 0x1060,
PROP_ENDPOINT_STATE_97 = 0x1061,
PROP_ENDPOINT_STATE_98 = 0x1062,
PROP_ENDPOINT_STATE_99 = 0x1063,
PROP_ENDPOINT_STATE_100 = 0x1064,
PROP_ENDPOINT_STATE_101 = 0x1065,
PROP_ENDPOINT_STATE_102 = 0x1066,
PROP_ENDPOINT_STATE_103 = 0x1067,
PROP_ENDPOINT_STATE_104 = 0x1068,
PROP_ENDPOINT_STATE_105 = 0x1069,
PROP_ENDPOINT_STATE_106 = 0x106a,
PROP_ENDPOINT_STATE_107 = 0x106b,
PROP_ENDPOINT_STATE_108 = 0x106c,
PROP_ENDPOINT_STATE_109 = 0x106d,
PROP_ENDPOINT_STATE_110 = 0x106e,
PROP_ENDPOINT_STATE_111 = 0x106f,
PROP_ENDPOINT_STATE_112 = 0x1070,
PROP_ENDPOINT_STATE_113 = 0x1071,
PROP_ENDPOINT_STATE_114 = 0x1072,
PROP_ENDPOINT_STATE_115 = 0x1073,
PROP_ENDPOINT_STATE_116 = 0x1074,
PROP_ENDPOINT_STATE_117 = 0x1075,
PROP_ENDPOINT_STATE_118 = 0x1076,
PROP_ENDPOINT_STATE_119 = 0x1077,
PROP_ENDPOINT_STATE_120 = 0x1078,
PROP_ENDPOINT_STATE_121 = 0x1079,
PROP_ENDPOINT_STATE_122 = 0x107a,
PROP_ENDPOINT_STATE_123 = 0x107b,
PROP_ENDPOINT_STATE_124 = 0x107c,
PROP_ENDPOINT_STATE_125 = 0x107d,
PROP_ENDPOINT_STATE_126 = 0x107e,
PROP_ENDPOINT_STATE_127 = 0x107f,
PROP_ENDPOINT_STATE_128 = 0x1080,
PROP_ENDPOINT_STATE_129 = 0x1081,
PROP_ENDPOINT_STATE_130 = 0x1082,
PROP_ENDPOINT_STATE_131 = 0x1083,
PROP_ENDPOINT_STATE_132 = 0x1084,
PROP_ENDPOINT_STATE_133 = 0x1085,
PROP_ENDPOINT_STATE_134 = 0x1086,
PROP_ENDPOINT_STATE_135 = 0x1087,
PROP_ENDPOINT_STATE_136 = 0x1088,
PROP_ENDPOINT_STATE_137 = 0x1089,
PROP_ENDPOINT_STATE_138 = 0x108a,
PROP_ENDPOINT_STATE_139 = 0x108b,
PROP_ENDPOINT_STATE_140 = 0x108c,
PROP_ENDPOINT_STATE_141 = 0x108d,
PROP_ENDPOINT_STATE_142 = 0x108e,
PROP_ENDPOINT_STATE_143 = 0x108f,
PROP_ENDPOINT_STATE_144 = 0x1090,
PROP_ENDPOINT_STATE_145 = 0x1091,
PROP_ENDPOINT_STATE_146 = 0x1092,
PROP_ENDPOINT_STATE_147 = 0x1093,
PROP_ENDPOINT_STATE_148 = 0x1094,
PROP_ENDPOINT_STATE_149 = 0x1095,
PROP_ENDPOINT_STATE_150 = 0x1096,
PROP_ENDPOINT_STATE_151 = 0x1097,
PROP_ENDPOINT_STATE_152 = 0x1098,
PROP_ENDPOINT_STATE_153 = 0x1099,
PROP_ENDPOINT_STATE_154 = 0x109a,
PROP_ENDPOINT_STATE_155 = 0x109b,
PROP_ENDPOINT_STATE_156 = 0x109c,
PROP_ENDPOINT_STATE_157 = 0x109d,
PROP_ENDPOINT_STATE_158 = 0x109e,
PROP_ENDPOINT_STATE_159 = 0x109f,
PROP_ENDPOINT_STATE_160 = 0x10a0,
PROP_ENDPOINT_STATE_161 = 0x10a1,
PROP_ENDPOINT_STATE_162 = 0x10a2,
PROP_ENDPOINT_STATE_163 = 0x10a3,
PROP_ENDPOINT_STATE_164 = 0x10a4,
PROP_ENDPOINT_STATE_165 = 0x10a5,
PROP_ENDPOINT_STATE_166 = 0x10a6,
PROP_ENDPOINT_STATE_167 = 0x10a7,
PROP_ENDPOINT_STATE_168 = 0x10a8,
PROP_ENDPOINT_STATE_169 = 0x10a9,
PROP_ENDPOINT_STATE_170 = 0x10aa,
PROP_ENDPOINT_STATE_171 = 0x10ab,
PROP_ENDPOINT_STATE_172 = 0x10ac,
PROP_ENDPOINT_STATE_173 = 0x10ad,
PROP_ENDPOINT_STATE_174 = 0x10ae,
PROP_ENDPOINT_STATE_175 = 0x10af,
PROP_ENDPOINT_STATE_176 = 0x10b0,
PROP_ENDPOINT_STATE_177 = 0x10b1,
PROP_ENDPOINT_STATE_178 = 0x10b2,
PROP_ENDPOINT_STATE_179 = 0x10b3,
PROP_ENDPOINT_STATE_180 = 0x10b4,
PROP_ENDPOINT_STATE_181 = 0x10b5,
PROP_ENDPOINT_STATE_182 = 0x10b6,
PROP_ENDPOINT_STATE_183 = 0x10b7,
PROP_ENDPOINT_STATE_184 = 0x10b8,
PROP_ENDPOINT_STATE_185 = 0x10b9,
PROP_ENDPOINT_STATE_186 = 0x10ba,
PROP_ENDPOINT_STATE_187 = 0x10bb,
PROP_ENDPOINT_STATE_188 = 0x10bc,
PROP_ENDPOINT_STATE_189 = 0x10bd,
PROP_ENDPOINT_STATE_190 = 0x10be,
PROP_ENDPOINT_STATE_191 = 0x10bf,
PROP_ENDPOINT_STATE_192 = 0x10c0,
PROP_ENDPOINT_STATE_193 = 0x10c1,
PROP_ENDPOINT_STATE_194 = 0x10c2,
PROP_ENDPOINT_STATE_195 = 0x10c3,
PROP_ENDPOINT_STATE_196 = 0x10c4,
PROP_ENDPOINT_STATE_197 = 0x10c5,
PROP_ENDPOINT_STATE_198 = 0x10c6,
PROP_ENDPOINT_STATE_199 = 0x10c7,
PROP_ENDPOINT_STATE_200 = 0x10c8,
PROP_ENDPOINT_STATE_201 = 0x10c9,
PROP_ENDPOINT_STATE_202 = 0x10ca,
PROP_ENDPOINT_STATE_203 = 0x10cb,
PROP_ENDPOINT_STATE_204 = 0x10cc,
PROP_ENDPOINT_STATE_205 = 0x10cd,
PROP_ENDPOINT_STATE_206 = 0x10ce,
PROP_ENDPOINT_STATE_207 = 0x10cf,
PROP_ENDPOINT_STATE_208 = 0x10d0,
PROP_ENDPOINT_STATE_209 = 0x10d1,
PROP_ENDPOINT_STATE_210 = 0x10d2,
PROP_ENDPOINT_STATE_211 = 0x10d3,
PROP_ENDPOINT_STATE_212 = 0x10d4,
PROP_ENDPOINT_STATE_213 = 0x10d5,
PROP_ENDPOINT_STATE_214 = 0x10d6,
PROP_ENDPOINT_STATE_215 = 0x10d7,
PROP_ENDPOINT_STATE_216 = 0x10d8,
PROP_ENDPOINT_STATE_217 = 0x10d9,
PROP_ENDPOINT_STATE_218 = 0x10da,
PROP_ENDPOINT_STATE_219 = 0x10db,
PROP_ENDPOINT_STATE_220 = 0x10dc,
PROP_ENDPOINT_STATE_221 = 0x10dd,
PROP_ENDPOINT_STATE_222 = 0x10de,
PROP_ENDPOINT_STATE_223 = 0x10df,
PROP_ENDPOINT_STATE_224 = 0x10e0,
PROP_ENDPOINT_STATE_225 = 0x10e1,
PROP_ENDPOINT_STATE_226 = 0x10e2,
PROP_ENDPOINT_STATE_227 = 0x10e3,
PROP_ENDPOINT_STATE_228 = 0x10e4,
PROP_ENDPOINT_STATE_229 = 0x10e5,
PROP_ENDPOINT_STATE_230 = 0x10e6,
PROP_ENDPOINT_STATE_231 = 0x10e7,
PROP_ENDPOINT_STATE_232 = 0x10e8,
PROP_ENDPOINT_STATE_233 = 0x10e9,
PROP_ENDPOINT_STATE_234 = 0x10ea,
PROP_ENDPOINT_STATE_235 = 0x10eb,
PROP_ENDPOINT_STATE_236 = 0x10ec,
PROP_ENDPOINT_STATE_237 = 0x10ed,
PROP_ENDPOINT_STATE_238 = 0x10ee,
PROP_ENDPOINT_STATE_239 = 0x10ef,
PROP_ENDPOINT_STATE_240 = 0x10f0,
PROP_ENDPOINT_STATE_241 = 0x10f1,
PROP_ENDPOINT_STATE_242 = 0x10f2,
PROP_ENDPOINT_STATE_243 = 0x10f3,
PROP_ENDPOINT_STATE_244 = 0x10f4,
PROP_ENDPOINT_STATE_245 = 0x10f5,
PROP_ENDPOINT_STATE_246 = 0x10f6,
PROP_ENDPOINT_STATE_247 = 0x10f7,
PROP_ENDPOINT_STATE_248 = 0x10f8,
PROP_ENDPOINT_STATE_249 = 0x10f9,
PROP_ENDPOINT_STATE_250 = 0x10fa,
PROP_ENDPOINT_STATE_251 = 0x10fb,
PROP_ENDPOINT_STATE_252 = 0x10fc,
PROP_ENDPOINT_STATE_253 = 0x10fd,
PROP_ENDPOINT_STATE_254 = 0x10fe,
PROP_ENDPOINT_STATE_255 = 0x10ff,
PROP_ENDPOINT_STATES = 0x1100,
};
/***************************************************************************/
#define EP_ID_TO_PROPERTY_ID(property, ep_id) ((sli_cpc_property_id_t)((property) | ((ep_id) & 0x000000FF)))
/***************************************************************************/
#define PROPERTY_ID_TO_EP_ID(property_id) ((uint8_t)(property_id) & 0x000000FF)
/***************************************************************************/
#define EP_ID_TO_PROPERTY_STATE(ep_id) EP_ID_TO_PROPERTY_ID(PROP_ENDPOINT_STATE_0, ep_id)
/***************************************************************************/
#define EP_ID_TO_PROPERTY_ENCRYPTION(ep_id) EP_ID_TO_PROPERTY_ID(PROP_ENDPOINT_ENCRYPTION, ep_id)
/***************************************************************************/
#define AGGREGATED_STATE_LOW(agg) ((sl_cpc_endpoint_state_t)(agg & 0x0F))
#define AGGREGATED_STATE_HIGH(agg) ((sl_cpc_endpoint_state_t)(agg >> 4))
#define GET_ENDPOINT_STATE_FROM_STATES(payload, ep_id) \
((ep_id % 2 == 0) ? AGGREGATED_STATE_LOW(((uint8_t*)payload)[ep_id / 2]) \
: AGGREGATED_STATE_HIGH(((uint8_t*)payload)[ep_id / 2]))
SL_ENUM_GENERIC(sl_cpc_system_status_t, uint32_t)
{
STATUS_OK = 0,
STATUS_FAILURE = 1,
STATUS_UNIMPLEMENTED = 2,
STATUS_INVALID_ARGUMENT = 3,
STATUS_INVALID_STATE = 4,
STATUS_INVALID_COMMAND = 5,
STATUS_INVALID_INTERFACE = 6,
STATUS_INTERNAL_ERROR = 7,
STATUS_SECURITY_ERROR = 8,
STATUS_PARSE_ERROR = 9,
STATUS_IN_PROGRESS = 10,
STATUS_NOMEM = 11,
STATUS_BUSY = 12,
STATUS_PROP_NOT_FOUND = 13,
STATUS_PACKET_DROPPED = 14,
STATUS_EMPTY = 15,
STATUS_CMD_TOO_BIG = 16,
STATUS_NO_ACK = 17,
STATUS_CCA_FAILURE = 18,
STATUS_ALREADY = 19,
STATUS_ITEM_NOT_FOUND = 20,
STATUS_INVALID_COMMAND_FOR_PROP = 21,
// 22-111 : RESERVED
STATUS_RESET_POWER_ON = 112,
STATUS_RESET_EXTERNAL = 113,
STATUS_RESET_SOFTWARE = 114,
STATUS_RESET_FAULT = 115,
STATUS_RESET_CRASH = 116,
STATUS_RESET_ASSERT = 117,
STATUS_RESET_OTHER = 118,
STATUS_RESET_UNKNOWN = 119,
STATUS_RESET_WATCHDOG = 120,
// 121-127 : RESERVED-RESET-CODES
// 128 - 15,359: UNALLOCATED
// 15,360 - 16,383: Vendor-specific
// 16,384 - 1,999,999: UNALLOCATED
// 2,000,000 - 2,097,151: Experimental Use Only (MUST NEVER be used in production!)
};
SL_ENUM_GENERIC(sli_cpc_system_reboot_mode_t, uint32_t)
{
REBOOT_APPLICATION = 0,
REBOOT_BOOTLOADER = 1
};
SL_ENUM_GENERIC(sli_cpc_system_ep_frame_type_t, uint8_t) {
SYSTEM_EP_UFRAME,
SYSTEM_EP_IFRAME
};
/***************************************************************************/
typedef struct {
sl_cpc_bootloader_t type;
uint32_t version;
uint32_t capabilities;
} sli_cpc_system_bootloader_info_t;
/***************************************************************************/
typedef struct {
uint32_t start_in_ms;
uint32_t end_in_ms;
} sli_cpc_system_enter_irq_cmd_t;
/***************************************************************************/
typedef struct {
uint8_t major;
uint8_t minor;
uint8_t patch;
uint8_t tweak;
} sli_cpc_system_primary_version_t;
/***************************************************************************/
#define CPC_CAPABILITIES_SECURITY_ENDPOINT_MASK (1 << 0)
#define CPC_CAPABILITIES_PACKED_ENDPOINT_MASK (1 << 1)
#define CPC_CAPABILITIES_GPIO_ENDPOINT_MASK (1 << 2)
#define CPC_CAPABILITIES_UART_FLOW_CONTROL_MASK (1 << 3)
/***************************************************************************/
SL_ENUM(sli_cpc_system_cmd_id_t)
{
CMD_SYSTEM_NOOP = 0x00,
CMD_SYSTEM_RESET = 0x01,
CMD_SYSTEM_PROP_VALUE_GET = 0x02,
CMD_SYSTEM_PROP_VALUE_SET = 0x03,
CMD_SYSTEM_PROP_VALUE_IS = 0x06,
CMD_SYSTEM_INVALID = 0xFF,
};
/***************************************************************************/
#define PAYLOAD_LENGTH_MAX 16
typedef struct {
sli_cpc_system_cmd_id_t command_id;
uint8_t seq;
uint16_t length;
uint8_t payload[PAYLOAD_LENGTH_MAX];
} sli_cpc_system_cmd_t;
/***************************************************************************/
#define SIZEOF_SYSTEM_COMMAND_HEADER (sizeof(sli_cpc_system_cmd_t) - PAYLOAD_LENGTH_MAX)
/***************************************************************************/
#define SIZEOF_SYSTEM_COMMAND(command) (SIZEOF_SYSTEM_COMMAND_HEADER + command->length)
typedef struct {
sli_cpc_property_id_t property_id;
uint8_t payload[];
} sli_cpc_system_property_cmd_t;
/***************************************************************************/
#define SLI_CPC_PROPERTY_PAYLOAD_LENGTH_MAX (SL_CPC_ENDPOINT_MAX_COUNT * sizeof(sl_cpc_endpoint_state_t) / 2)
/***************************************************************************/
#define SLI_CPC_SYSTEM_COMMAND_PAYLOAD_LENGTH_MAX (sizeof(sli_cpc_system_property_cmd_t) \
+ SLI_CPC_PROPERTY_PAYLOAD_LENGTH_MAX)
/***************************************************************************/
struct sli_cpc_system_endpoint;
typedef struct sli_cpc_system_endpoint sli_cpc_system_endpoint_t;
/***************************************************************************/
bool sli_cpc_reboot_is_sequence_done(sli_cpc_system_endpoint_t *system_ep);
/***************************************************************************/
sl_status_t sli_cpc_system_init(sli_cpc_system_endpoint_t *system_ep);
/***************************************************************************/
sl_status_t sli_cpc_system_start(sli_cpc_system_endpoint_t *system_ep);
/***************************************************************************/
void sli_cpc_system_process(sli_cpc_system_endpoint_t *system_ep);
/***************************************************************************/
sl_status_t sli_cpc_system_send_opening_notification(sli_cpc_system_endpoint_t *system_ep,
uint8_t endpoint_id);
/***************************************************************************/
sl_status_t sli_cpc_system_send_terminate_notification(sli_cpc_system_endpoint_t *system_ep,
uint8_t endpoint_id);
/***************************************************************************/
sl_status_t sli_cpc_system_send_shutdown_request(sli_cpc_system_endpoint_t *system_ep,
uint8_t endpoint_id);
#ifdef __cplusplus
}
#endif
#endif /* SL_CPC_SYSTEM_COMMON_H_ */
Modules#
sli_cpc_system_bootloader_info_t
sli_cpc_system_enter_irq_cmd_t
sli_cpc_system_primary_version_t
Macros#
Helper macros to convert a property and a endpoint id to an enum value.
Helper macros to convert a property enum value to an endpoint id (uint8_t).
Helper macros to convert an enpoint id (uint8_t) to a PROP_ENDPOINT_STATE_x enum value.
Helper macros to convert an enpoint id (uint8_t) to a PROP_ENCRYPTION_STATE
Helper macros to extract the two aggregated endpoint states encoded in one single byte.
Capabilities mask.
Note
Used with the value returned by a property-get on PROP_CAPABILITIES.
System endpoint command type.
Size of the header of a system command.
Used to return the size of a system command buffer, primarily to pass to sl_cpc_write.
The biggest property payload that the system endpoint will ever send. This is the response to the get all endpoint states command. Each byte can hold two endpoint states, hence the divide by two at the end of the macro.
The biggest payload that the system endpoint will ever send is the biggest payload plus the property id that corresponds to that payload.
Enumerations#
This enum contains each of the supported property used by the CMD_SYSTEM_PROP_* system commands.
Enumeration representing spinel protocol status code.
Enumeration representing Bootloader reboot mode.
Type of frames that can be used to transport system endpoint data.
Typedefs#
Functions#
This function initializes the system endpoint module.
This function starts the system endpoint module by opening the system endpoint. This function must be called after CPC init.
This function reads incoming commands on the system endpoint and processes them accordingly.
Enumeration Documentation#
sli_cpc_property_id_t#
sli_cpc_property_id_t
This enum contains each of the supported property used by the CMD_SYSTEM_PROP_* system commands.
System endpoint property id enum
Note
This enum is encoded with 4 bytes.
Enumeration representing property used by the CMD_SYSTEM_PROP_* system commands .
| Enumerator | |
|---|---|
| PROP_LAST_STATUS | |
| PROP_PROTOCOL_VERSION | |
| PROP_CAPABILITIES | |
| PROP_SECONDARY_CPC_VERSION | |
| PROP_SECONDARY_APP_VERSION | |
| PROP_RX_CAPABILITY | |
| PROP_TX_CAPABILITY | |
| PROP_FC_VALIDATION_VALUE | |
| PROP_BUS_BITRATE_VALUE | |
| PROP_BUS_MAX_BITRATE_VALUE | |
| PROP_PRIMARY_VERSION_VALUE | |
| PROP_BOOTLOADER_INFO | |
| PROP_BOOTLOADER_REBOOT_MODE | |
| PROP_SOFT_RESET | |
| PROP_SECURITY_STATE | |
| PROP_CORE_DEBUG_COUNTERS | |
| PROP_UFRAME_PROCESSING | |
| PROP_ENTER_IRQ | |
| PROP_ENDPOINT_ENCRYPTION | |
| PROP_ENDPOINT_STATE_0 | |
| PROP_ENDPOINT_STATE_1 | |
| PROP_ENDPOINT_STATE_2 | |
| PROP_ENDPOINT_STATE_3 | |
| PROP_ENDPOINT_STATE_4 | |
| PROP_ENDPOINT_STATE_5 | |
| PROP_ENDPOINT_STATE_6 | |
| PROP_ENDPOINT_STATE_7 | |
| PROP_ENDPOINT_STATE_8 | |
| PROP_ENDPOINT_STATE_9 | |
| PROP_ENDPOINT_STATE_10 | |
| PROP_ENDPOINT_STATE_11 | |
| PROP_ENDPOINT_STATE_12 | |
| PROP_ENDPOINT_STATE_13 | |
| PROP_ENDPOINT_STATE_14 | |
| PROP_ENDPOINT_STATE_15 | |
| PROP_ENDPOINT_STATE_16 | |
| PROP_ENDPOINT_STATE_17 | |
| PROP_ENDPOINT_STATE_18 | |
| PROP_ENDPOINT_STATE_19 | |
| PROP_ENDPOINT_STATE_20 | |
| PROP_ENDPOINT_STATE_21 | |
| PROP_ENDPOINT_STATE_22 | |
| PROP_ENDPOINT_STATE_23 | |
| PROP_ENDPOINT_STATE_24 | |
| PROP_ENDPOINT_STATE_25 | |
| PROP_ENDPOINT_STATE_26 | |
| PROP_ENDPOINT_STATE_27 | |
| PROP_ENDPOINT_STATE_28 | |
| PROP_ENDPOINT_STATE_29 | |
| PROP_ENDPOINT_STATE_30 | |
| PROP_ENDPOINT_STATE_31 | |
| PROP_ENDPOINT_STATE_32 | |
| PROP_ENDPOINT_STATE_33 | |
| PROP_ENDPOINT_STATE_34 | |
| PROP_ENDPOINT_STATE_35 | |
| PROP_ENDPOINT_STATE_36 | |
| PROP_ENDPOINT_STATE_37 | |
| PROP_ENDPOINT_STATE_38 | |
| PROP_ENDPOINT_STATE_39 | |
| PROP_ENDPOINT_STATE_40 | |
| PROP_ENDPOINT_STATE_41 | |
| PROP_ENDPOINT_STATE_42 | |
| PROP_ENDPOINT_STATE_43 | |
| PROP_ENDPOINT_STATE_44 | |
| PROP_ENDPOINT_STATE_45 | |
| PROP_ENDPOINT_STATE_46 | |
| PROP_ENDPOINT_STATE_47 | |
| PROP_ENDPOINT_STATE_48 | |
| PROP_ENDPOINT_STATE_49 | |
| PROP_ENDPOINT_STATE_50 | |
| PROP_ENDPOINT_STATE_51 | |
| PROP_ENDPOINT_STATE_52 | |
| PROP_ENDPOINT_STATE_53 | |
| PROP_ENDPOINT_STATE_54 | |
| PROP_ENDPOINT_STATE_55 | |
| PROP_ENDPOINT_STATE_56 | |
| PROP_ENDPOINT_STATE_57 | |
| PROP_ENDPOINT_STATE_58 | |
| PROP_ENDPOINT_STATE_59 | |
| PROP_ENDPOINT_STATE_60 | |
| PROP_ENDPOINT_STATE_61 | |
| PROP_ENDPOINT_STATE_62 | |
| PROP_ENDPOINT_STATE_63 | |
| PROP_ENDPOINT_STATE_64 | |
| PROP_ENDPOINT_STATE_65 | |
| PROP_ENDPOINT_STATE_66 | |
| PROP_ENDPOINT_STATE_67 | |
| PROP_ENDPOINT_STATE_68 | |
| PROP_ENDPOINT_STATE_69 | |
| PROP_ENDPOINT_STATE_70 | |
| PROP_ENDPOINT_STATE_71 | |
| PROP_ENDPOINT_STATE_72 | |
| PROP_ENDPOINT_STATE_73 | |
| PROP_ENDPOINT_STATE_74 | |
| PROP_ENDPOINT_STATE_75 | |
| PROP_ENDPOINT_STATE_76 | |
| PROP_ENDPOINT_STATE_77 | |
| PROP_ENDPOINT_STATE_78 | |
| PROP_ENDPOINT_STATE_79 | |
| PROP_ENDPOINT_STATE_80 | |
| PROP_ENDPOINT_STATE_81 | |
| PROP_ENDPOINT_STATE_82 | |
| PROP_ENDPOINT_STATE_83 | |
| PROP_ENDPOINT_STATE_84 | |
| PROP_ENDPOINT_STATE_85 | |
| PROP_ENDPOINT_STATE_86 | |
| PROP_ENDPOINT_STATE_87 | |
| PROP_ENDPOINT_STATE_88 | |
| PROP_ENDPOINT_STATE_89 | |
| PROP_ENDPOINT_STATE_90 | |
| PROP_ENDPOINT_STATE_91 | |
| PROP_ENDPOINT_STATE_92 | |
| PROP_ENDPOINT_STATE_93 | |
| PROP_ENDPOINT_STATE_94 | |
| PROP_ENDPOINT_STATE_95 | |
| PROP_ENDPOINT_STATE_96 | |
| PROP_ENDPOINT_STATE_97 | |
| PROP_ENDPOINT_STATE_98 | |
| PROP_ENDPOINT_STATE_99 | |
| PROP_ENDPOINT_STATE_100 | |
| PROP_ENDPOINT_STATE_101 | |
| PROP_ENDPOINT_STATE_102 | |
| PROP_ENDPOINT_STATE_103 | |
| PROP_ENDPOINT_STATE_104 | |
| PROP_ENDPOINT_STATE_105 | |
| PROP_ENDPOINT_STATE_106 | |
| PROP_ENDPOINT_STATE_107 | |
| PROP_ENDPOINT_STATE_108 | |
| PROP_ENDPOINT_STATE_109 | |
| PROP_ENDPOINT_STATE_110 | |
| PROP_ENDPOINT_STATE_111 | |
| PROP_ENDPOINT_STATE_112 | |
| PROP_ENDPOINT_STATE_113 | |
| PROP_ENDPOINT_STATE_114 | |
| PROP_ENDPOINT_STATE_115 | |
| PROP_ENDPOINT_STATE_116 | |
| PROP_ENDPOINT_STATE_117 | |
| PROP_ENDPOINT_STATE_118 | |
| PROP_ENDPOINT_STATE_119 | |
| PROP_ENDPOINT_STATE_120 | |
| PROP_ENDPOINT_STATE_121 | |
| PROP_ENDPOINT_STATE_122 | |
| PROP_ENDPOINT_STATE_123 | |
| PROP_ENDPOINT_STATE_124 | |
| PROP_ENDPOINT_STATE_125 | |
| PROP_ENDPOINT_STATE_126 | |
| PROP_ENDPOINT_STATE_127 | |
| PROP_ENDPOINT_STATE_128 | |
| PROP_ENDPOINT_STATE_129 | |
| PROP_ENDPOINT_STATE_130 | |
| PROP_ENDPOINT_STATE_131 | |
| PROP_ENDPOINT_STATE_132 | |
| PROP_ENDPOINT_STATE_133 | |
| PROP_ENDPOINT_STATE_134 | |
| PROP_ENDPOINT_STATE_135 | |
| PROP_ENDPOINT_STATE_136 | |
| PROP_ENDPOINT_STATE_137 | |
| PROP_ENDPOINT_STATE_138 | |
| PROP_ENDPOINT_STATE_139 | |
| PROP_ENDPOINT_STATE_140 | |
| PROP_ENDPOINT_STATE_141 | |
| PROP_ENDPOINT_STATE_142 | |
| PROP_ENDPOINT_STATE_143 | |
| PROP_ENDPOINT_STATE_144 | |
| PROP_ENDPOINT_STATE_145 | |
| PROP_ENDPOINT_STATE_146 | |
| PROP_ENDPOINT_STATE_147 | |
| PROP_ENDPOINT_STATE_148 | |
| PROP_ENDPOINT_STATE_149 | |
| PROP_ENDPOINT_STATE_150 | |
| PROP_ENDPOINT_STATE_151 | |
| PROP_ENDPOINT_STATE_152 | |
| PROP_ENDPOINT_STATE_153 | |
| PROP_ENDPOINT_STATE_154 | |
| PROP_ENDPOINT_STATE_155 | |
| PROP_ENDPOINT_STATE_156 | |
| PROP_ENDPOINT_STATE_157 | |
| PROP_ENDPOINT_STATE_158 | |
| PROP_ENDPOINT_STATE_159 | |
| PROP_ENDPOINT_STATE_160 | |
| PROP_ENDPOINT_STATE_161 | |
| PROP_ENDPOINT_STATE_162 | |
| PROP_ENDPOINT_STATE_163 | |
| PROP_ENDPOINT_STATE_164 | |
| PROP_ENDPOINT_STATE_165 | |
| PROP_ENDPOINT_STATE_166 | |
| PROP_ENDPOINT_STATE_167 | |
| PROP_ENDPOINT_STATE_168 | |
| PROP_ENDPOINT_STATE_169 | |
| PROP_ENDPOINT_STATE_170 | |
| PROP_ENDPOINT_STATE_171 | |
| PROP_ENDPOINT_STATE_172 | |
| PROP_ENDPOINT_STATE_173 | |
| PROP_ENDPOINT_STATE_174 | |
| PROP_ENDPOINT_STATE_175 | |
| PROP_ENDPOINT_STATE_176 | |
| PROP_ENDPOINT_STATE_177 | |
| PROP_ENDPOINT_STATE_178 | |
| PROP_ENDPOINT_STATE_179 | |
| PROP_ENDPOINT_STATE_180 | |
| PROP_ENDPOINT_STATE_181 | |
| PROP_ENDPOINT_STATE_182 | |
| PROP_ENDPOINT_STATE_183 | |
| PROP_ENDPOINT_STATE_184 | |
| PROP_ENDPOINT_STATE_185 | |
| PROP_ENDPOINT_STATE_186 | |
| PROP_ENDPOINT_STATE_187 | |
| PROP_ENDPOINT_STATE_188 | |
| PROP_ENDPOINT_STATE_189 | |
| PROP_ENDPOINT_STATE_190 | |
| PROP_ENDPOINT_STATE_191 | |
| PROP_ENDPOINT_STATE_192 | |
| PROP_ENDPOINT_STATE_193 | |
| PROP_ENDPOINT_STATE_194 | |
| PROP_ENDPOINT_STATE_195 | |
| PROP_ENDPOINT_STATE_196 | |
| PROP_ENDPOINT_STATE_197 | |
| PROP_ENDPOINT_STATE_198 | |
| PROP_ENDPOINT_STATE_199 | |
| PROP_ENDPOINT_STATE_200 | |
| PROP_ENDPOINT_STATE_201 | |
| PROP_ENDPOINT_STATE_202 | |
| PROP_ENDPOINT_STATE_203 | |
| PROP_ENDPOINT_STATE_204 | |
| PROP_ENDPOINT_STATE_205 | |
| PROP_ENDPOINT_STATE_206 | |
| PROP_ENDPOINT_STATE_207 | |
| PROP_ENDPOINT_STATE_208 | |
| PROP_ENDPOINT_STATE_209 | |
| PROP_ENDPOINT_STATE_210 | |
| PROP_ENDPOINT_STATE_211 | |
| PROP_ENDPOINT_STATE_212 | |
| PROP_ENDPOINT_STATE_213 | |
| PROP_ENDPOINT_STATE_214 | |
| PROP_ENDPOINT_STATE_215 | |
| PROP_ENDPOINT_STATE_216 | |
| PROP_ENDPOINT_STATE_217 | |
| PROP_ENDPOINT_STATE_218 | |
| PROP_ENDPOINT_STATE_219 | |
| PROP_ENDPOINT_STATE_220 | |
| PROP_ENDPOINT_STATE_221 | |
| PROP_ENDPOINT_STATE_222 | |
| PROP_ENDPOINT_STATE_223 | |
| PROP_ENDPOINT_STATE_224 | |
| PROP_ENDPOINT_STATE_225 | |
| PROP_ENDPOINT_STATE_226 | |
| PROP_ENDPOINT_STATE_227 | |
| PROP_ENDPOINT_STATE_228 | |
| PROP_ENDPOINT_STATE_229 | |
| PROP_ENDPOINT_STATE_230 | |
| PROP_ENDPOINT_STATE_231 | |
| PROP_ENDPOINT_STATE_232 | |
| PROP_ENDPOINT_STATE_233 | |
| PROP_ENDPOINT_STATE_234 | |
| PROP_ENDPOINT_STATE_235 | |
| PROP_ENDPOINT_STATE_236 | |
| PROP_ENDPOINT_STATE_237 | |
| PROP_ENDPOINT_STATE_238 | |
| PROP_ENDPOINT_STATE_239 | |
| PROP_ENDPOINT_STATE_240 | |
| PROP_ENDPOINT_STATE_241 | |
| PROP_ENDPOINT_STATE_242 | |
| PROP_ENDPOINT_STATE_243 | |
| PROP_ENDPOINT_STATE_244 | |
| PROP_ENDPOINT_STATE_245 | |
| PROP_ENDPOINT_STATE_246 | |
| PROP_ENDPOINT_STATE_247 | |
| PROP_ENDPOINT_STATE_248 | |
| PROP_ENDPOINT_STATE_249 | |
| PROP_ENDPOINT_STATE_250 | |
| PROP_ENDPOINT_STATE_251 | |
| PROP_ENDPOINT_STATE_252 | |
| PROP_ENDPOINT_STATE_253 | |
| PROP_ENDPOINT_STATE_254 | |
| PROP_ENDPOINT_STATE_255 | |
| PROP_ENDPOINT_STATES | Aggregates all endpoint state information into a single field. |
sl_cpc_system_status_t#
sl_cpc_system_status_t
Enumeration representing spinel protocol status code.
| Enumerator | |
|---|---|
| STATUS_OK | Operation has completed successfully. |
| STATUS_FAILURE | Operation has failed for some undefined reason. |
| STATUS_UNIMPLEMENTED | The given operation has not been implemented. |
| STATUS_INVALID_ARGUMENT | An argument to the given operation is invalid. |
| STATUS_INVALID_STATE | The given operation is invalid for the current state of the device. |
| STATUS_INVALID_COMMAND | The given command is not recognized. |
| STATUS_INVALID_INTERFACE | The given Spinel interface is not supported. |
| STATUS_INTERNAL_ERROR | An internal runtime error has occurred. |
| STATUS_SECURITY_ERROR | A security or authentication error has occurred. |
| STATUS_PARSE_ERROR | An error has occurred while parsing the command. |
| STATUS_IN_PROGRESS | The operation is in progress and will be completed asynchronously. |
| STATUS_NOMEM | The operation has been prevented due to memory pressure. |
| STATUS_BUSY | The device is currently performing a mutually exclusive operation. |
| STATUS_PROP_NOT_FOUND | The given property is not recognized. |
| STATUS_PACKET_DROPPED | The packet was dropped. |
| STATUS_EMPTY | The result of the operation is empty. |
| STATUS_CMD_TOO_BIG | The command was too large to fit in the internal buffer. |
| STATUS_NO_ACK | The packet was not acknowledged. |
| STATUS_CCA_FAILURE | The packet was not sent due to a CCA failure. |
| STATUS_ALREADY | The operation is already in progress or the property was already set to the given value. |
| STATUS_ITEM_NOT_FOUND | The given item could not be found in the property. |
| STATUS_INVALID_COMMAND_FOR_PROP | The given command cannot be performed on this property. |
| STATUS_RESET_POWER_ON | |
| STATUS_RESET_EXTERNAL | |
| STATUS_RESET_SOFTWARE | |
| STATUS_RESET_FAULT | |
| STATUS_RESET_CRASH | |
| STATUS_RESET_ASSERT | |
| STATUS_RESET_OTHER | |
| STATUS_RESET_UNKNOWN | |
| STATUS_RESET_WATCHDOG | |
sli_cpc_system_reboot_mode_t#
sli_cpc_system_reboot_mode_t
Enumeration representing Bootloader reboot mode.
| Enumerator | |
|---|---|
| REBOOT_APPLICATION | At the next reboot application is executed. |
| REBOOT_BOOTLOADER | At the next reboot bootloader is executed. |
sli_cpc_system_ep_frame_type_t#
sli_cpc_system_ep_frame_type_t
Type of frames that can be used to transport system endpoint data.
| Enumerator | |
|---|---|
| SYSTEM_EP_UFRAME | U-Frame. |
| SYSTEM_EP_IFRAME | I-Frame. |
sli_cpc_system_cmd_id_t#
sli_cpc_system_cmd_id_t
System endpoint command id enum.
| Enumerator | |
|---|---|
| CMD_SYSTEM_NOOP | |
| CMD_SYSTEM_RESET | |
| CMD_SYSTEM_PROP_VALUE_GET | |
| CMD_SYSTEM_PROP_VALUE_SET | |
| CMD_SYSTEM_PROP_VALUE_IS | |
| CMD_SYSTEM_INVALID | |
Typedef Documentation#
Function Documentation#
sli_cpc_reboot_is_sequence_done#
bool sli_cpc_reboot_is_sequence_done (sli_cpc_system_endpoint_t * system_ep)
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep |
Returns the state of the reset sequence
Returns
Whether the reset and boot sequence is completed
Returns the state of the reset sequence
sli_cpc_system_init#
sl_status_t sli_cpc_system_init (sli_cpc_system_endpoint_t * system_ep)
This function initializes the system endpoint module.
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep |
Initialize CPC System Endpoint.
Function for white testing In case sl_cpc_primary.slcc or sl_cpc_secondary.slcc is not included (for unity tests for example), the definition of sli_cpc_system_init is missing. This is allows to skip compile error
Initialize CPC System
sli_cpc_system_start#
sl_status_t sli_cpc_system_start (sli_cpc_system_endpoint_t * system_ep)
This function starts the system endpoint module by opening the system endpoint. This function must be called after CPC init.
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep |
Start CPC System Endpoint.
Start the system endpoint, effectively connecting it to the secondary
Start CPC System
sli_cpc_system_process#
void sli_cpc_system_process (sli_cpc_system_endpoint_t * system_ep)
This function reads incoming commands on the system endpoint and processes them accordingly.
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep |
Process the system endpoint.
Process the system endpoint
sli_cpc_system_send_opening_notification#
sl_status_t sli_cpc_system_send_opening_notification (sli_cpc_system_endpoint_t * system_ep, uint8_t endpoint_id)
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep | |
| uint8_t | N/A | endpoint_id |
Endpoint was opened, notify the host.
Endpoint was opened, notify the host/primary
sli_cpc_system_send_terminate_notification#
sl_status_t sli_cpc_system_send_terminate_notification (sli_cpc_system_endpoint_t * system_ep, uint8_t endpoint_id)
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep | |
| uint8_t | N/A | endpoint_id |
Endpoint connection was terminated, notify the host.
Endpoint connection was terminated, notify the host
sli_cpc_system_send_shutdown_request#
sl_status_t sli_cpc_system_send_shutdown_request (sli_cpc_system_endpoint_t * system_ep, uint8_t endpoint_id)
| Type | Direction | Argument Name | Description |
|---|---|---|---|
| sli_cpc_system_endpoint_t * | N/A | system_ep | |
| uint8_t | N/A | endpoint_id |
Endpoint connection shutdown, notify the host.
Endpoint is requesting a shutdown, notify the host