Line data Source code
1 : /*
2 : *
3 : * Copyright (c) 2020-2022 Project CHIP Authors
4 : * Copyright (c) 2013-2017 Nest Labs, Inc.
5 : *
6 : * Licensed under the Apache License, Version 2.0 (the "License");
7 : * you may not use this file except in compliance with the License.
8 : * You may obtain a copy of the License at
9 : *
10 : * http://www.apache.org/licenses/LICENSE-2.0
11 : *
12 : * Unless required by applicable law or agreed to in writing, software
13 : * distributed under the License is distributed on an "AS IS" BASIS,
14 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 : * See the License for the specific language governing permissions and
16 : * limitations under the License.
17 : */
18 :
19 : /**
20 : * @file
21 : * This file defines error constants for the CHIP core
22 : * subsystem.
23 : *
24 : * Error types, ranges, and mappings overrides may be made by
25 : * defining the appropriate CHIP_CONFIG_* or _CHIP_CONFIG_*
26 : * macros.
27 : */
28 :
29 : #pragma once
30 :
31 : #include <lib/core/CHIPConfig.h>
32 : #include <lib/support/TypeTraits.h>
33 :
34 : #include <inttypes.h>
35 : #include <limits>
36 : #include <type_traits>
37 :
38 : #if CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
39 : #include <source_location>
40 : #endif // CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
41 :
42 : namespace chip {
43 :
44 : /**
45 : * This class represents CHIP errors.
46 : *
47 : * At the top level, an error belongs to a Range and has an integral Value whose meaning depends on the Range.
48 : * One, Range::kSDK, is used for the CHIP SDK's own errors; others encapsulate error codes from external sources
49 : * (e.g. libraries, OS) into a CHIP_ERROR.
50 : *
51 : * CHIP SDK errors inside Range::kSDK consist of a component identifier given by SdkPart and an arbitrary small
52 : * integer Code.
53 : */
54 : class ChipError
55 : {
56 : public:
57 : /// Internal representation of an error.
58 : using StorageType = uint32_t;
59 :
60 : /// Type for encapsulated error values.
61 : using ValueType = StorageType;
62 :
63 : /// Integer `printf` format for errors. This is a C macro in order to allow for string literal concatenation.
64 : #define CHIP_ERROR_INTEGER_FORMAT PRIx32
65 :
66 : #if CHIP_CONFIG_ERROR_FORMAT_AS_STRING
67 :
68 : /// Type returned by Format().
69 : using FormatType = const char *;
70 : /// `printf` format for Format(). This is a C macro in order to allow for string literal concatenation.
71 : #define CHIP_ERROR_FORMAT "s"
72 :
73 : #else // CHIP_CONFIG_ERROR_FORMAT_AS_STRING
74 :
75 : /// Type returned by Format().
76 : using FormatType = StorageType;
77 : /// `printf` format for Format(). This is a C macro in order to allow for string literal concatenation.
78 : #define CHIP_ERROR_FORMAT CHIP_ERROR_INTEGER_FORMAT
79 :
80 : #endif // CHIP_CONFIG_ERROR_FORMAT_AS_STRING
81 :
82 : /**
83 : * Top-level error classification.
84 : *
85 : * Every error belongs to a Range and has an integral Value whose meaning depends on the Range.
86 : * All native CHIP SDK errors belong to the kSDK range. Other ranges are used to encapsulate error
87 : * codes from other subsystems (e.g. platform or library) used by the CHIP SDK.
88 : */
89 : enum class Range : uint8_t
90 : {
91 : kSDK = 0x0, ///< CHIP SDK errors.
92 : kOS = 0x1, ///< Encapsulated OS errors, other than POSIX errno.
93 : kPOSIX = 0x2, ///< Encapsulated POSIX errno values.
94 : kLwIP = 0x3, ///< Encapsulated LwIP errors.
95 : kOpenThread = 0x4, ///< Encapsulated OpenThread errors.
96 : kPlatform = 0x5, ///< Platform-defined encapsulation.
97 : kLastRange = kPlatform,
98 : };
99 :
100 : /**
101 : * Secondary classification of CHIP SDK errors (Range::kSDK).
102 : */
103 : enum class SdkPart : uint8_t
104 : {
105 : kCore = 0, ///< SDK core errors.
106 : kInet = 1, ///< Inet layer errors; see <inet/InetError.h>.
107 : kDevice = 2, ///< Device layer errors; see <platform/CHIPDeviceError.h>.
108 : kASN1 = 3, ///< ASN1 errors; see <asn1/ASN1Error.h>.
109 : kBLE = 4, ///< BLE layer errors; see <ble/BleError.h>.
110 : kIMGlobalStatus = 5, ///< Interaction Model global status code.
111 : kIMClusterStatus = 6, ///< Interaction Model cluster-specific status code.
112 : kApplication = 7, ///< Application-defined errors; see CHIP_APPLICATION_ERROR
113 : };
114 :
115 : ChipError() = default;
116 :
117 : // Helper for declaring constructors without too much repetition.
118 : #if CHIP_CONFIG_ERROR_SOURCE
119 : #if __cplusplus >= 202002L
120 : #define CHIP_INITIALIZE_ERROR_SOURCE(f, l, loc) , mFile((f)), mLine((l)), mSourceLocation((loc))
121 : #else
122 : #define CHIP_INITIALIZE_ERROR_SOURCE(f, l, loc) , mFile((f)), mLine((l))
123 : #endif // __cplusplus >= 202002L
124 : #else // CHIP_CONFIG_ERROR_SOURCE
125 : #define CHIP_INITIALIZE_ERROR_SOURCE(f, l, loc)
126 : #endif // CHIP_CONFIG_ERROR_SOURCE
127 :
128 : /**
129 : * Construct a CHIP_ERROR encapsulating @a value inside the Range @a range.
130 : *
131 : * @note
132 : * The result is valid only if CanEncapsulate() is true.
133 : */
134 0 : constexpr ChipError(Range range, ValueType value) : ChipError(range, value, /*file=*/nullptr, /*line=*/0) {}
135 : #if CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
136 : constexpr ChipError(Range range, ValueType value, const char * file, unsigned int line,
137 : std::source_location location = std::source_location::current()) :
138 : mError(MakeInteger(range, (value & MakeMask(0, kValueLength)))) CHIP_INITIALIZE_ERROR_SOURCE(file, line, location)
139 : {}
140 : #else
141 14579 : constexpr ChipError(Range range, ValueType value, const char * file, unsigned int line) :
142 14579 : mError(MakeInteger(range, (value & MakeMask(0, kValueLength)))) CHIP_INITIALIZE_ERROR_SOURCE(file, line, /*loc=*/nullptr)
143 14579 : {}
144 : #endif // CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
145 :
146 : /**
147 : * Construct a CHIP_ERROR for SdkPart @a part with @a code.
148 : *
149 : * @note
150 : * The macro version CHIP_SDK_ERROR checks that the numeric value is constant and well-formed.
151 : */
152 120 : constexpr ChipError(SdkPart part, uint8_t code) : ChipError(part, code, /*file=*/nullptr, /*line=*/0) {}
153 : #if CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
154 : constexpr ChipError(SdkPart part, uint8_t code, const char * file, unsigned int line,
155 : std::source_location location = std::source_location::current()) :
156 : mError(MakeInteger(part, code)) CHIP_INITIALIZE_ERROR_SOURCE(file, line, location)
157 : {}
158 : #else
159 138 : constexpr ChipError(SdkPart part, uint8_t code, const char * file, unsigned int line) :
160 138 : mError(MakeInteger(part, code)) CHIP_INITIALIZE_ERROR_SOURCE(file, line, /*loc=*/nullptr)
161 138 : {}
162 : #endif // CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
163 :
164 : /**
165 : * Construct a CHIP_ERROR constant for SdkPart @a part with @a code at the current source line.
166 : * This checks that the numeric value is constant and well-formed.
167 : * (In C++20 this could be replaced by a consteval constructor.)
168 : */
169 : #if CHIP_CONFIG_ERROR_SOURCE
170 : #define CHIP_SDK_ERROR(part, code) \
171 : (::chip::ChipError(::chip::ChipError::SdkErrorConstant<(part), (code)>::value, __FILE__, __LINE__))
172 : #else // CHIP_CONFIG_ERROR_SOURCE
173 : #define CHIP_SDK_ERROR(part, code) (::chip::ChipError(::chip::ChipError::SdkErrorConstant<(part), (code)>::value))
174 : #endif // CHIP_CONFIG_ERROR_SOURCE
175 :
176 : /**
177 : * Construct a CHIP_ERROR from the underlying storage type.
178 : *
179 : * @note
180 : * This is intended to be used only in foreign function interfaces.
181 : */
182 : explicit constexpr ChipError(StorageType error) : ChipError(error, /*file=*/nullptr, /*line=*/0) {}
183 : #if CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
184 : explicit constexpr ChipError(StorageType error, const char * file, unsigned int line,
185 : std::source_location location = std::source_location::current()) :
186 : mError(error) CHIP_INITIALIZE_ERROR_SOURCE(file, line, location)
187 : {}
188 : #else
189 118441297 : explicit constexpr ChipError(StorageType error, const char * file, unsigned int line) :
190 118441297 : mError(error) CHIP_INITIALIZE_ERROR_SOURCE(file, line, /*loc=*/nullptr)
191 118441297 : {}
192 : #endif // CHIP_CONFIG_ERROR_SOURCE && __cplusplus >= 202002L
193 :
194 : #undef CHIP_INITIALIZE_ERROR_SOURCE
195 :
196 : /**
197 : * Compare errors for equality.
198 : *
199 : * @note
200 : * This only compares the error code. Under the CHIP_CONFIG_ERROR_SOURCE configuration, errors compare equal
201 : * if they have the same error code, even if they have different source locations.
202 : */
203 2571944 : bool operator==(const ChipError & other) const { return mError == other.mError; }
204 17494511 : bool operator!=(const ChipError & other) const { return mError != other.mError; }
205 :
206 : /**
207 : * Return an integer code for the error.
208 : */
209 1065243 : constexpr StorageType AsInteger() const { return mError; }
210 :
211 : /*
212 : * IsSuccess() is intended to support macros that can take either a ChipError or an integer error code.
213 : * The latter follows the C convention that a non-zero integer indicates an error.
214 : *
215 : * @note
216 : * Normal code should use `status == CHIP_NO_ERROR` rather than `IsSuccess(status)`.
217 : */
218 69002321 : static constexpr bool IsSuccess(ChipError error) { return error.mError == 0; }
219 : static constexpr bool IsSuccess(StorageType error) { return error == 0; }
220 :
221 : /**
222 : * Format an @a error for printing.
223 : *
224 : * Normally, this is used with the `printf()`-style macro CHIP_ERROR_FORMAT.
225 : * For example,
226 : * @code
227 : * ChipLogError(subsystem, "A bad thing happened! %" CHIP_ERROR_FORMAT, status.Format());
228 : * @endcode
229 : */
230 : #if CHIP_CONFIG_ERROR_FORMAT_AS_STRING
231 1064123 : FormatType Format() const { return AsString(); }
232 : #else // CHIP_CONFIG_ERROR_FORMAT_AS_STRING
233 : FormatType Format() const { return mError; }
234 : #endif // CHIP_CONFIG_ERROR_FORMAT_AS_STRING
235 :
236 : /**
237 : * Format an @a error as a string for printing.
238 : *
239 : * @note
240 : * Normally, prefer to use Format()
241 : */
242 1066557 : const char * AsString(bool withSourceLocation = true) const
243 : {
244 : extern const char * ErrorStr(ChipError, bool);
245 1066557 : return ErrorStr(*this, withSourceLocation);
246 : }
247 :
248 : /**
249 : * Test whether @a error belongs to the Range @a range.
250 : */
251 250 : constexpr bool IsRange(Range range) const
252 : {
253 250 : return (mError & MakeMask(kRangeStart, kRangeLength)) == MakeField(kRangeStart, static_cast<StorageType>(range));
254 : }
255 :
256 : /**
257 : * Get the Range to which the @a error belongs.
258 : */
259 : constexpr Range GetRange() const { return static_cast<Range>(GetField(kRangeStart, kRangeLength, mError)); }
260 :
261 : /**
262 : * Get the encapsulated value of an @a error.
263 : */
264 13 : constexpr ValueType GetValue() const { return GetField(kValueStart, kValueLength, mError); }
265 :
266 : /**
267 : * Test whether type @a T can always be losslessly encapsulated in a CHIP_ERROR.
268 : */
269 : template <typename T>
270 : static constexpr bool CanEncapsulate()
271 : {
272 : return std::numeric_limits<typename std::make_unsigned_t<T>>::digits <= kValueLength;
273 : }
274 :
275 : /**
276 : * Test whether if @a value can be losslessly encapsulated in a CHIP_ERROR.
277 : */
278 : template <typename T>
279 : static constexpr bool CanEncapsulate(T value)
280 : {
281 : return CanEncapsulate<T>() || FitsInField(kValueLength, static_cast<ValueType>(value));
282 : }
283 :
284 : /**
285 : * Test whether @a error is an SDK error belonging to the SdkPart @a part.
286 : */
287 6195 : constexpr bool IsPart(SdkPart part) const
288 : {
289 6195 : return (mError & (MakeMask(kRangeStart, kRangeLength) | MakeMask(kSdkPartStart, kSdkPartLength))) ==
290 6195 : (MakeField(kRangeStart, static_cast<StorageType>(Range::kSDK)) |
291 6195 : MakeField(kSdkPartStart, static_cast<StorageType>(part)));
292 : }
293 :
294 : /**
295 : * Get the SDK code for an SDK error.
296 : */
297 147 : constexpr uint8_t GetSdkCode() const { return static_cast<uint8_t>(GetField(kSdkCodeStart, kSdkCodeLength, mError)); }
298 :
299 : /**
300 : * Test whether @a error is an SDK error representing an Interaction Model
301 : * status. If it is, it can be converted to/from an interaction model
302 : * StatusIB struct.
303 : */
304 445 : constexpr bool IsIMStatus() const
305 : {
306 : // Open question: should CHIP_NO_ERROR be treated as an IM status for
307 : // purposes of this test?
308 445 : return IsPart(SdkPart::kIMGlobalStatus) || IsPart(SdkPart::kIMClusterStatus);
309 : }
310 :
311 : #if CHIP_CONFIG_ERROR_SOURCE
312 :
313 : /**
314 : * Get the source file name of the point where the error occurred.
315 : *
316 : * @note
317 : * This will be `nullptr` if the error was not created with a file name.
318 : */
319 1067208 : const char * GetFile() const { return mFile; }
320 :
321 : /**
322 : * Get the source line number of the point where the error occurred.
323 : *
324 : * @note
325 : * This will be 0 if the error was not created with a file name.
326 : */
327 1067407 : unsigned int GetLine() const { return mLine; }
328 :
329 : #if __cplusplus >= 202002L
330 : /**
331 : * Get the source_location of the point where the error occurred.
332 : */
333 : const std::source_location & GetSourceLocation() { return mSourceLocation; }
334 : #endif // __cplusplus >= 202002L
335 : #endif // CHIP_CONFIG_ERROR_SOURCE
336 :
337 : private:
338 : /*
339 : * The representation of a CHIP_ERROR is structured so that SDK error code constants are small, in order to improve code
340 : * density on embedded builds. Arm 32, Xtensa, and RISC-V can all handle 11-bit values in a move-immediate instruction.
341 : * Further, SdkPart::kCore is 0 so that the most common errors fit in 8 bits for additional density on some processors.
342 : *
343 : * 31 28 24 20 16 12 8 4 0 Bit
344 : * | | | | | | | | |
345 : * | range | value |
346 : * | kSdk==0 | 0 |0| part| code | SDK error
347 : * | 01 - FF | encapsulated error code | Encapsulated error
348 : */
349 : static constexpr int kRangeStart = 24;
350 : static constexpr int kRangeLength = 8;
351 : static constexpr int kValueStart = 0;
352 : static constexpr int kValueLength = 24;
353 :
354 : static constexpr int kSdkPartStart = 8;
355 : static constexpr int kSdkPartLength = 3;
356 : static constexpr int kSdkCodeStart = 0;
357 : static constexpr int kSdkCodeLength = 8;
358 :
359 160 : static constexpr StorageType GetField(unsigned int start, unsigned int length, StorageType value)
360 : {
361 160 : return (value >> start) & ((1u << length) - 1);
362 : }
363 24313 : static constexpr StorageType MakeMask(unsigned int start, unsigned int length) { return ((1u << length) - 1) << start; }
364 42722 : static constexpr StorageType MakeField(unsigned int start, StorageType value) { return value << start; }
365 : static constexpr bool FitsInField(unsigned int length, StorageType value) { return value < (1u << length); }
366 :
367 14717 : static constexpr StorageType MakeInteger(Range range, StorageType value)
368 : {
369 14717 : return MakeField(kRangeStart, to_underlying(range)) | MakeField(kValueStart, value);
370 : }
371 138 : static constexpr StorageType MakeInteger(SdkPart part, uint8_t code)
372 : {
373 138 : return MakeInteger(Range::kSDK, MakeField(kSdkPartStart, to_underlying(part)) | MakeField(kSdkCodeStart, code));
374 : }
375 : template <unsigned int START, unsigned int LENGTH>
376 : struct MaskConstant
377 : {
378 : static constexpr StorageType value = ((1u << LENGTH) - 1) << START;
379 : };
380 :
381 : // Assert that Range and Value fields fit in StorageType and don't overlap.
382 : static_assert(kRangeStart + kRangeLength <= std::numeric_limits<StorageType>::digits, "Range does not fit in StorageType");
383 : static_assert(kValueStart + kValueLength <= std::numeric_limits<StorageType>::digits, "Value does not fit in StorageType");
384 : static_assert((MaskConstant<kRangeStart, kRangeLength>::value & MaskConstant<kValueStart, kValueLength>::value) == 0,
385 : "Range and Value overlap");
386 :
387 : // Assert that SDK Part and Code fields fit in SdkCode field and don't overlap.
388 : static_assert(kSdkPartStart + kSdkPartLength <= kValueLength, "SdkPart does not fit in Value");
389 : static_assert(kSdkCodeStart + kSdkCodeLength <= kValueLength, "SdkCode does not fit in Value");
390 : static_assert((MaskConstant<kSdkPartStart, kSdkPartLength>::value & MaskConstant<kSdkCodeStart, kSdkCodeLength>::value) == 0,
391 : "SdkPart and SdkCode overlap");
392 :
393 : // Assert that Value fits in ValueType.
394 : static_assert(kValueStart + kValueLength <= std::numeric_limits<ValueType>::digits, "Value does not fit in ValueType");
395 :
396 : StorageType mError;
397 :
398 : #if CHIP_CONFIG_ERROR_SOURCE
399 : const char * mFile;
400 : unsigned int mLine;
401 : #if __cplusplus >= 202002L
402 : std::source_location mSourceLocation;
403 : #endif // __cplusplus >= 202002L
404 : #endif // CHIP_CONFIG_ERROR_SOURCE
405 :
406 : public:
407 : /**
408 : * Helper for constructing error constants.
409 : *
410 : * This template ensures that the numeric value is constant and well-formed.
411 : */
412 : template <SdkPart PART, StorageType SCODE>
413 : struct SdkErrorConstant
414 : {
415 : static_assert(FitsInField(kSdkPartLength, to_underlying(PART)), "part is too large");
416 : static_assert(FitsInField(kSdkCodeLength, SCODE), "code is too large");
417 : static_assert(MakeInteger(PART, SCODE) != 0, "value is zero");
418 : static constexpr StorageType value = MakeInteger(PART, SCODE);
419 : };
420 : };
421 :
422 : } // namespace chip
423 :
424 : /**
425 : * The basic type for all CHIP errors.
426 : */
427 : using CHIP_ERROR = ::chip::ChipError;
428 :
429 : /**
430 : * Applications using the CHIP SDK can use this to define error codes in the CHIP_ERROR space for their own purposes.
431 : * This is suitable for a small fixed set of errors, similar to `CHIP_ERROR_…` constants. For embedding arbitrary or
432 : * larger values, use a custom Range offset from Range::kLastRange.
433 : */
434 : #define CHIP_APPLICATION_ERROR(e) CHIP_SDK_ERROR(::chip::ChipError::SdkPart::kApplication, (e))
435 :
436 : #define CHIP_CORE_ERROR(e) CHIP_SDK_ERROR(::chip::ChipError::SdkPart::kCore, (e))
437 :
438 : #define CHIP_IM_GLOBAL_STATUS(type) \
439 : CHIP_SDK_ERROR(::chip::ChipError::SdkPart::kIMGlobalStatus, \
440 : ::chip::to_underlying(::chip::Protocols::InteractionModel::Status::type))
441 :
442 : // Defines a runtime-value for a chip-error that contains a global IM Status.
443 : #if CHIP_CONFIG_ERROR_SOURCE
444 : #define CHIP_ERROR_IM_GLOBAL_STATUS_VALUE(status_value) \
445 : ::chip::ChipError(::chip::ChipError::SdkPart::kIMGlobalStatus, ::chip::to_underlying(status_value), __FILE__, __LINE__)
446 : #else
447 : #define CHIP_ERROR_IM_GLOBAL_STATUS_VALUE(status_value) \
448 : ::chip::ChipError(::chip::ChipError::SdkPart::kIMGlobalStatus, ::chip::to_underlying(status_value))
449 : #endif // CHIP_CONFIG_ERROR_SOURCE
450 :
451 : //
452 : // type must be a compile-time constant as mandated by CHIP_SDK_ERROR.
453 : //
454 : #define CHIP_IM_CLUSTER_STATUS(type) CHIP_SDK_ERROR(::chip::ChipError::SdkPart::kIMClusterStatus, type)
455 :
456 : // Defines a runtime-value for a chip-error that contains a cluster-specific error status.
457 : // Must not be used with cluster-specific success status codes.
458 : #if CHIP_CONFIG_ERROR_SOURCE
459 : #define CHIP_ERROR_IM_CLUSTER_STATUS_VALUE(status_value) \
460 : ::chip::ChipError(::chip::ChipError::SdkPart::kIMClusterStatus, status_value, __FILE__, __LINE__)
461 : #else
462 : #define CHIP_ERROR_IM_CLUSTER_STATUS_VALUE(status_value) \
463 : ::chip::ChipError(::chip::ChipError::SdkPart::kIMClusterStatus, status_value)
464 : #endif // CHIP_CONFIG_ERROR_SOURCE
465 :
466 : // clang-format off
467 :
468 : /**
469 : * @name Error Definitions
470 : *
471 : * @{
472 : */
473 :
474 : /**
475 : * @def CHIP_NO_ERROR
476 : *
477 : * @brief
478 : * This defines the CHIP error code for success or no error.
479 : *
480 : */
481 : #if CHIP_CONFIG_ERROR_SOURCE && CHIP_CONFIG_ERROR_SOURCE_NO_ERROR
482 : #define CHIP_NO_ERROR CHIP_ERROR(0, __FILE__, __LINE__)
483 : #else // CHIP_CONFIG_ERROR_SOURCE && CHIP_CONFIG_ERROR_SOURCE_NO_ERROR
484 : #define CHIP_NO_ERROR CHIP_ERROR(0)
485 : #endif // CHIP_CONFIG_ERROR_SOURCE && CHIP_CONFIG_ERROR_SOURCE_NO_ERROR
486 :
487 : /**
488 : * @def CHIP_ERROR_SENDING_BLOCKED
489 : *
490 : * @brief
491 : * A message exceeds the sent limit.
492 : *
493 : */
494 : #define CHIP_ERROR_SENDING_BLOCKED CHIP_CORE_ERROR(0x01)
495 :
496 : /**
497 : * @def CHIP_ERROR_CONNECTION_ABORTED
498 : *
499 : * @brief
500 : * A connection has been aborted.
501 : *
502 : */
503 : #define CHIP_ERROR_CONNECTION_ABORTED CHIP_CORE_ERROR(0x02)
504 :
505 : /**
506 : * @def CHIP_ERROR_INCORRECT_STATE
507 : *
508 : * @brief
509 : * An unexpected state was encountered.
510 : *
511 : */
512 : #define CHIP_ERROR_INCORRECT_STATE CHIP_CORE_ERROR(0x03)
513 :
514 : /**
515 : * @def CHIP_ERROR_MESSAGE_TOO_LONG
516 : *
517 : * @brief
518 : * A message is too long.
519 : *
520 : */
521 : #define CHIP_ERROR_MESSAGE_TOO_LONG CHIP_CORE_ERROR(0x04)
522 :
523 : /**
524 : * Recursion depth overflow
525 : */
526 : #define CHIP_ERROR_RECURSION_DEPTH_LIMIT CHIP_CORE_ERROR(0x05)
527 :
528 : /**
529 : * @def CHIP_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS
530 : *
531 : * @brief
532 : * The attempt to register an unsolicited message handler failed because the
533 : * unsolicited message handler pool is full.
534 : *
535 : */
536 : #define CHIP_ERROR_TOO_MANY_UNSOLICITED_MESSAGE_HANDLERS CHIP_CORE_ERROR(0x06)
537 :
538 : /**
539 : * @def CHIP_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER
540 : *
541 : * @brief
542 : * The attempt to unregister an unsolicited message handler failed because
543 : * the target handler was not found in the unsolicited message handler pool.
544 : *
545 : */
546 : #define CHIP_ERROR_NO_UNSOLICITED_MESSAGE_HANDLER CHIP_CORE_ERROR(0x07)
547 :
548 : /**
549 : * @def CHIP_ERROR_NO_CONNECTION_HANDLER
550 : *
551 : * @brief
552 : * No callback has been registered for handling a connection.
553 : *
554 : */
555 : #define CHIP_ERROR_NO_CONNECTION_HANDLER CHIP_CORE_ERROR(0x08)
556 :
557 : /**
558 : * @def CHIP_ERROR_TOO_MANY_PEER_NODES
559 : *
560 : * @brief
561 : * The number of peer nodes exceeds the maximum limit of a local node.
562 : *
563 : */
564 : #define CHIP_ERROR_TOO_MANY_PEER_NODES CHIP_CORE_ERROR(0x09)
565 :
566 : /**
567 : * @def CHIP_ERROR_SENTINEL
568 : *
569 : * @brief
570 : * For use locally to mark conditions such as value found or end of iteration.
571 : *
572 : */
573 : #define CHIP_ERROR_SENTINEL CHIP_CORE_ERROR(0x0a)
574 :
575 : /**
576 : * @def CHIP_ERROR_NO_MEMORY
577 : *
578 : * @brief
579 : * The attempt to allocate a buffer or object failed due to a lack of memory.
580 : *
581 : */
582 : #define CHIP_ERROR_NO_MEMORY CHIP_CORE_ERROR(0x0b)
583 :
584 : /**
585 : * @def CHIP_ERROR_NO_MESSAGE_HANDLER
586 : *
587 : * @brief
588 : * No callback has been registered for handling a message.
589 : *
590 : */
591 : #define CHIP_ERROR_NO_MESSAGE_HANDLER CHIP_CORE_ERROR(0x0c)
592 :
593 : /**
594 : * @def CHIP_ERROR_MESSAGE_INCOMPLETE
595 : *
596 : * @brief
597 : * A message is incomplete.
598 : *
599 : */
600 : #define CHIP_ERROR_MESSAGE_INCOMPLETE CHIP_CORE_ERROR(0x0d)
601 :
602 : /**
603 : * @def CHIP_ERROR_DATA_NOT_ALIGNED
604 : *
605 : * @brief
606 : * The data is not aligned.
607 : *
608 : */
609 : #define CHIP_ERROR_DATA_NOT_ALIGNED CHIP_CORE_ERROR(0x0e)
610 :
611 : /**
612 : * @def CHIP_ERROR_UNKNOWN_KEY_TYPE
613 : *
614 : * @brief
615 : * The encryption key type is unknown.
616 : *
617 : */
618 : #define CHIP_ERROR_UNKNOWN_KEY_TYPE CHIP_CORE_ERROR(0x0f)
619 :
620 : /**
621 : * @def CHIP_ERROR_KEY_NOT_FOUND
622 : *
623 : * @brief
624 : * The encryption key is not found.
625 : *
626 : */
627 : #define CHIP_ERROR_KEY_NOT_FOUND CHIP_CORE_ERROR(0x10)
628 :
629 : /**
630 : * @def CHIP_ERROR_WRONG_ENCRYPTION_TYPE
631 : *
632 : * @brief
633 : * The encryption type is incorrect for the specified key.
634 : *
635 : */
636 : #define CHIP_ERROR_WRONG_ENCRYPTION_TYPE CHIP_CORE_ERROR(0x11)
637 :
638 : /**
639 : * @def CHIP_ERROR_INVALID_UTF8
640 : *
641 : * @brief
642 : * Invalid UTF8 string (contains some characters that are invalid)
643 : *
644 : */
645 : #define CHIP_ERROR_INVALID_UTF8 CHIP_CORE_ERROR(0x12)
646 :
647 : /**
648 : * @def CHIP_ERROR_INTEGRITY_CHECK_FAILED
649 : *
650 : * @brief
651 : * The integrity check in the message does not match the expected integrity
652 : * check.
653 : *
654 : */
655 : #define CHIP_ERROR_INTEGRITY_CHECK_FAILED CHIP_CORE_ERROR(0x13)
656 :
657 : /**
658 : * @def CHIP_ERROR_INVALID_SIGNATURE
659 : *
660 : * @brief
661 : * Invalid signature.
662 : *
663 : */
664 : #define CHIP_ERROR_INVALID_SIGNATURE CHIP_CORE_ERROR(0x14)
665 :
666 : /**
667 : * @def CHIP_ERROR_INVALID_TLV_CHAR_STRING
668 : *
669 : * @brief
670 : * Invalid TLV character string (e.g. null terminator)
671 : *
672 : */
673 : #define CHIP_ERROR_INVALID_TLV_CHAR_STRING CHIP_CORE_ERROR(0x15)
674 :
675 : /**
676 : * @def CHIP_ERROR_LIT_SUBSCRIBE_INACTIVE_TIMEOUT
677 : *
678 : * @brief
679 : * Subscription timeout caused by LIT ICD device inactive mode
680 : *
681 : */
682 : #define CHIP_ERROR_LIT_SUBSCRIBE_INACTIVE_TIMEOUT CHIP_CORE_ERROR(0x16)
683 :
684 : /**
685 : * @def CHIP_ERROR_UNSUPPORTED_SIGNATURE_TYPE
686 : *
687 : * @brief
688 : * A signature type is unsupported.
689 : *
690 : */
691 : #define CHIP_ERROR_UNSUPPORTED_SIGNATURE_TYPE CHIP_CORE_ERROR(0x17)
692 :
693 : /**
694 : * @def CHIP_ERROR_INVALID_MESSAGE_LENGTH
695 : *
696 : * @brief
697 : * A message length is invalid.
698 : *
699 : */
700 : #define CHIP_ERROR_INVALID_MESSAGE_LENGTH CHIP_CORE_ERROR(0x18)
701 :
702 : /**
703 : * @def CHIP_ERROR_BUFFER_TOO_SMALL
704 : *
705 : * @brief
706 : * A buffer is too small.
707 : *
708 : */
709 : #define CHIP_ERROR_BUFFER_TOO_SMALL CHIP_CORE_ERROR(0x19)
710 :
711 : /**
712 : * @def CHIP_ERROR_DUPLICATE_KEY_ID
713 : *
714 : * @brief
715 : * A key id is duplicate.
716 : *
717 : */
718 : #define CHIP_ERROR_DUPLICATE_KEY_ID CHIP_CORE_ERROR(0x1a)
719 :
720 : /**
721 : * @def CHIP_ERROR_WRONG_KEY_TYPE
722 : *
723 : * @brief
724 : * A key type does not match the expected key type.
725 : *
726 : */
727 : #define CHIP_ERROR_WRONG_KEY_TYPE CHIP_CORE_ERROR(0x1b)
728 :
729 : /**
730 : * @def CHIP_ERROR_UNINITIALIZED
731 : *
732 : * @brief
733 : * A requested object is uninitialized.
734 : *
735 : */
736 : #define CHIP_ERROR_UNINITIALIZED CHIP_CORE_ERROR(0x1c)
737 :
738 : /**
739 : * @def CHIP_ERROR_INVALID_IPK
740 : *
741 : * @brief
742 : * The IPK is invalid
743 : *
744 : */
745 : #define CHIP_ERROR_INVALID_IPK CHIP_CORE_ERROR(0x1d)
746 :
747 : /**
748 : * @def CHIP_ERROR_INVALID_STRING_LENGTH
749 : *
750 : * @brief
751 : * A string length is invalid.
752 : *
753 : */
754 : #define CHIP_ERROR_INVALID_STRING_LENGTH CHIP_CORE_ERROR(0x1e)
755 :
756 : /**
757 : * @def CHIP_ERROR_INVALID_LIST_LENGTH
758 : *
759 : * @brief
760 : * A list length is invalid.
761 : *
762 : */
763 : #define CHIP_ERROR_INVALID_LIST_LENGTH CHIP_CORE_ERROR(0x1f)
764 :
765 : /**
766 : * @def CHIP_ERROR_FAILED_DEVICE_ATTESTATION
767 : *
768 : * @brief
769 : * Device Attestation failed.
770 : *
771 : */
772 : #define CHIP_ERROR_FAILED_DEVICE_ATTESTATION CHIP_CORE_ERROR(0x20)
773 :
774 : /**
775 : * @def CHIP_END_OF_TLV
776 : *
777 : * @brief
778 : * The end of a TLV encoding,
779 : * or the end of a TLV container element has been reached.
780 : *
781 : */
782 : #define CHIP_ERROR_END_OF_TLV CHIP_CORE_ERROR(0x21)
783 : #define CHIP_END_OF_TLV CHIP_ERROR_END_OF_TLV
784 :
785 : /**
786 : * @def CHIP_ERROR_TLV_UNDERRUN
787 : *
788 : * @brief
789 : * The TLV encoding ended prematurely.
790 : *
791 : */
792 : #define CHIP_ERROR_TLV_UNDERRUN CHIP_CORE_ERROR(0x22)
793 :
794 : /**
795 : * @def CHIP_ERROR_INVALID_TLV_ELEMENT
796 : *
797 : * @brief
798 : * A TLV element is invalid.
799 : *
800 : */
801 : #define CHIP_ERROR_INVALID_TLV_ELEMENT CHIP_CORE_ERROR(0x23)
802 :
803 : /**
804 : * @def CHIP_ERROR_INVALID_TLV_TAG
805 : *
806 : * @brief
807 : * A TLV tag is invalid.
808 : *
809 : */
810 : #define CHIP_ERROR_INVALID_TLV_TAG CHIP_CORE_ERROR(0x24)
811 :
812 : /**
813 : * @def CHIP_ERROR_UNKNOWN_IMPLICIT_TLV_TAG
814 : *
815 : * @brief
816 : * An implicitly encoded TLV tag was encountered,
817 : * but an implicit profile id has not been defined.
818 : *
819 : */
820 : #define CHIP_ERROR_UNKNOWN_IMPLICIT_TLV_TAG CHIP_CORE_ERROR(0x25)
821 :
822 : /**
823 : * @def CHIP_ERROR_WRONG_TLV_TYPE
824 : *
825 : * @brief
826 : * A TLV type is wrong.
827 : *
828 : */
829 : #define CHIP_ERROR_WRONG_TLV_TYPE CHIP_CORE_ERROR(0x26)
830 :
831 : /**
832 : * @def CHIP_ERROR_TLV_CONTAINER_OPEN
833 : *
834 : * @brief
835 : * A TLV container is unexpectedly open.
836 : *
837 : */
838 : #define CHIP_ERROR_TLV_CONTAINER_OPEN CHIP_CORE_ERROR(0x27)
839 :
840 : // AVAILABLE: 0x28
841 : // AVAILABLE: 0x29
842 :
843 : /**
844 : * @def CHIP_ERROR_INVALID_MESSAGE_TYPE
845 : *
846 : * @brief
847 : * A message type is invalid.
848 : *
849 : */
850 : #define CHIP_ERROR_INVALID_MESSAGE_TYPE CHIP_CORE_ERROR(0x2a)
851 :
852 : /**
853 : * @def CHIP_ERROR_UNEXPECTED_TLV_ELEMENT
854 : *
855 : * @brief
856 : * An unexpected TLV element was encountered.
857 : *
858 : */
859 : #define CHIP_ERROR_UNEXPECTED_TLV_ELEMENT CHIP_CORE_ERROR(0x2b)
860 :
861 : // AVAILABLE: 0x2c
862 :
863 : /**
864 : * @def CHIP_ERROR_NOT_IMPLEMENTED
865 : *
866 : * @brief
867 : * A requested function or feature is not implemented.
868 : *
869 : */
870 : #define CHIP_ERROR_NOT_IMPLEMENTED CHIP_CORE_ERROR(0x2d)
871 :
872 : /**
873 : * @def CHIP_ERROR_INVALID_ADDRESS
874 : *
875 : * @brief
876 : * An address is invalid.
877 : *
878 : */
879 : #define CHIP_ERROR_INVALID_ADDRESS CHIP_CORE_ERROR(0x2e)
880 :
881 : /**
882 : * @def CHIP_ERROR_INVALID_ARGUMENT
883 : *
884 : * @brief
885 : * An argument is invalid.
886 : *
887 : */
888 : #define CHIP_ERROR_INVALID_ARGUMENT CHIP_CORE_ERROR(0x2f)
889 :
890 : /**
891 : * @def CHIP_ERROR_INVALID_PATH_LIST
892 : *
893 : * @brief
894 : * A TLV path list is invalid.
895 : *
896 : */
897 : #define CHIP_ERROR_INVALID_PATH_LIST CHIP_CORE_ERROR(0x30)
898 :
899 : /**
900 : * @def CHIP_ERROR_INVALID_DATA_LIST
901 : *
902 : * @brief
903 : * A TLV data list is invalid.
904 : *
905 : */
906 : #define CHIP_ERROR_INVALID_DATA_LIST CHIP_CORE_ERROR(0x31)
907 :
908 : /**
909 : * @def CHIP_ERROR_TIMEOUT
910 : *
911 : * @brief
912 : * A request timed out.
913 : *
914 : */
915 : #define CHIP_ERROR_TIMEOUT CHIP_CORE_ERROR(0x32)
916 :
917 : /**
918 : * @def CHIP_ERROR_INVALID_DEVICE_DESCRIPTOR
919 : *
920 : * @brief
921 : * A device descriptor is invalid.
922 : *
923 : */
924 : #define CHIP_ERROR_INVALID_DEVICE_DESCRIPTOR CHIP_CORE_ERROR(0x33)
925 :
926 : // AVAILABLE: 0x34
927 : // AVAILABLE: 0x35
928 : // AVAILABLE: 0x36
929 : // AVAILABLE: 0x37
930 :
931 : /**
932 : * @def CHIP_ERROR_INVALID_PASE_PARAMETER
933 : *
934 : * @brief
935 : * A PASE parameter is invalid.
936 : *
937 : */
938 : #define CHIP_ERROR_INVALID_PASE_PARAMETER CHIP_CORE_ERROR(0x38)
939 :
940 : // AVAILABLE: 0x39
941 : // AVAILABLE: 0x3a
942 :
943 : /**
944 : * @def CHIP_ERROR_INVALID_USE_OF_SESSION_KEY
945 : *
946 : * @brief
947 : * A use of session key is invalid.
948 : *
949 : */
950 : #define CHIP_ERROR_INVALID_USE_OF_SESSION_KEY CHIP_CORE_ERROR(0x3b)
951 :
952 : /**
953 : * @def CHIP_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY
954 : *
955 : * @brief
956 : * A connection is closed unexpectedly.
957 : *
958 : */
959 : #define CHIP_ERROR_CONNECTION_CLOSED_UNEXPECTEDLY CHIP_CORE_ERROR(0x3c)
960 :
961 : /**
962 : * @def CHIP_ERROR_MISSING_TLV_ELEMENT
963 : *
964 : * @brief
965 : * A TLV element is missing.
966 : *
967 : */
968 : #define CHIP_ERROR_MISSING_TLV_ELEMENT CHIP_CORE_ERROR(0x3d)
969 :
970 : /**
971 : * @def CHIP_ERROR_RANDOM_DATA_UNAVAILABLE
972 : *
973 : * @brief
974 : * Secure random data is not available.
975 : *
976 : */
977 : #define CHIP_ERROR_RANDOM_DATA_UNAVAILABLE CHIP_CORE_ERROR(0x3e)
978 :
979 : // AVAILABLE: 0x3f
980 : // AVAILABLE: 0x40
981 :
982 : /**
983 : * @def CHIP_ERROR_HOST_PORT_LIST_EMPTY
984 : *
985 : * @brief
986 : * A host/port list is empty.
987 : *
988 : */
989 : #define CHIP_ERROR_HOST_PORT_LIST_EMPTY CHIP_CORE_ERROR(0x41)
990 :
991 : // AVAILABLE: 0x42
992 : // AVAILABLE: 0x43
993 : // AVAILABLE: 0x44
994 :
995 : /**
996 : * @def CHIP_ERROR_FORCED_RESET
997 : *
998 : * @brief
999 : * A service manager is forced to reset.
1000 : *
1001 : */
1002 : #define CHIP_ERROR_FORCED_RESET CHIP_CORE_ERROR(0x45)
1003 :
1004 : /**
1005 : * @def CHIP_ERROR_NO_ENDPOINT
1006 : *
1007 : * @brief
1008 : * No endpoint is available.
1009 : *
1010 : */
1011 : #define CHIP_ERROR_NO_ENDPOINT CHIP_CORE_ERROR(0x46)
1012 :
1013 : /**
1014 : * @def CHIP_ERROR_INVALID_DESTINATION_NODE_ID
1015 : *
1016 : * @brief
1017 : * A destination node id is invalid.
1018 : *
1019 : */
1020 : #define CHIP_ERROR_INVALID_DESTINATION_NODE_ID CHIP_CORE_ERROR(0x47)
1021 :
1022 : /**
1023 : * @def CHIP_ERROR_NOT_CONNECTED
1024 : *
1025 : * @brief
1026 : * The operation cannot be performed because the underlying object is not
1027 : * connected.
1028 : *
1029 : */
1030 : #define CHIP_ERROR_NOT_CONNECTED CHIP_CORE_ERROR(0x48)
1031 :
1032 : // AVAILABLE: 0x49
1033 :
1034 : /**
1035 : * @def CHIP_ERROR_CA_CERT_NOT_FOUND
1036 : *
1037 : * @brief
1038 : * CA certificate is not found.
1039 : *
1040 : */
1041 : #define CHIP_ERROR_CA_CERT_NOT_FOUND CHIP_CORE_ERROR(0x4a)
1042 :
1043 : /**
1044 : * @def CHIP_ERROR_CERT_PATH_LEN_CONSTRAINT_EXCEEDED
1045 : *
1046 : * @brief
1047 : * A certificate path length exceeds the constraint.
1048 : *
1049 : */
1050 : #define CHIP_ERROR_CERT_PATH_LEN_CONSTRAINT_EXCEEDED CHIP_CORE_ERROR(0x4b)
1051 :
1052 : /**
1053 : * @def CHIP_ERROR_CERT_PATH_TOO_LONG
1054 : *
1055 : * @brief
1056 : * A certificate path is too long.
1057 : *
1058 : */
1059 : #define CHIP_ERROR_CERT_PATH_TOO_LONG CHIP_CORE_ERROR(0x4c)
1060 :
1061 : /**
1062 : * @def CHIP_ERROR_CERT_USAGE_NOT_ALLOWED
1063 : *
1064 : * @brief
1065 : * A requested certificate usage is not allowed.
1066 : *
1067 : */
1068 : #define CHIP_ERROR_CERT_USAGE_NOT_ALLOWED CHIP_CORE_ERROR(0x4d)
1069 :
1070 : /**
1071 : * @def CHIP_ERROR_CERT_EXPIRED
1072 : *
1073 : * @brief
1074 : * A certificate expired.
1075 : *
1076 : */
1077 : #define CHIP_ERROR_CERT_EXPIRED CHIP_CORE_ERROR(0x4e)
1078 :
1079 : /**
1080 : * @def CHIP_ERROR_CERT_NOT_VALID_YET
1081 : *
1082 : * @brief
1083 : * A certificate is not valid yet.
1084 : *
1085 : */
1086 : #define CHIP_ERROR_CERT_NOT_VALID_YET CHIP_CORE_ERROR(0x4f)
1087 :
1088 : /**
1089 : * @def CHIP_ERROR_UNSUPPORTED_CERT_FORMAT
1090 : *
1091 : * @brief
1092 : * A certificate format is unsupported.
1093 : *
1094 : */
1095 : #define CHIP_ERROR_UNSUPPORTED_CERT_FORMAT CHIP_CORE_ERROR(0x50)
1096 :
1097 : /**
1098 : * @def CHIP_ERROR_UNSUPPORTED_ELLIPTIC_CURVE
1099 : *
1100 : * @brief
1101 : * An elliptic curve is unsupported.
1102 : *
1103 : */
1104 : #define CHIP_ERROR_UNSUPPORTED_ELLIPTIC_CURVE CHIP_CORE_ERROR(0x51)
1105 :
1106 : // AVAILABLE: 0x52
1107 :
1108 : /**
1109 : * @def CHIP_ERROR_CERT_NOT_FOUND
1110 : *
1111 : * @brief
1112 : * A certificate is not found.
1113 : *
1114 : */
1115 : #define CHIP_ERROR_CERT_NOT_FOUND CHIP_CORE_ERROR(0x53)
1116 :
1117 : /**
1118 : * @def CHIP_ERROR_INVALID_CASE_PARAMETER
1119 : *
1120 : * @brief
1121 : * A CASE parameter is invalid.
1122 : *
1123 : */
1124 : #define CHIP_ERROR_INVALID_CASE_PARAMETER CHIP_CORE_ERROR(0x54)
1125 :
1126 : // AVAILABLE: 0x55
1127 :
1128 : /**
1129 : * @def CHIP_ERROR_CERT_LOAD_FAILED
1130 : *
1131 : * @brief
1132 : * A certificate load failed.
1133 : *
1134 : */
1135 : #define CHIP_ERROR_CERT_LOAD_FAILED CHIP_CORE_ERROR(0x56)
1136 :
1137 : /**
1138 : * @def CHIP_ERROR_CERT_NOT_TRUSTED
1139 : *
1140 : * @brief
1141 : * A certificate is not trusted.
1142 : *
1143 : */
1144 : #define CHIP_ERROR_CERT_NOT_TRUSTED CHIP_CORE_ERROR(0x57)
1145 :
1146 : // AVAILABLE: 0x58
1147 :
1148 : /**
1149 : * @def CHIP_ERROR_WRONG_CERT_DN
1150 : *
1151 : * @brief
1152 : * A certificate subject/issuer distinguished name is wrong.
1153 : *
1154 : */
1155 : #define CHIP_ERROR_WRONG_CERT_DN CHIP_CORE_ERROR(0x59)
1156 :
1157 : // AVAILABLE: 0x5a
1158 : // AVAILABLE: 0x5b
1159 :
1160 : /**
1161 : * @def CHIP_ERROR_WRONG_NODE_ID
1162 : *
1163 : * @brief
1164 : * A node id is wrong.
1165 : *
1166 : */
1167 : #define CHIP_ERROR_WRONG_NODE_ID CHIP_CORE_ERROR(0x5c)
1168 :
1169 : // AVAILABLE: 0x5d
1170 : // AVAILABLE: 0x5e
1171 : // AVAILABLE: 0x5f
1172 : // AVAILABLE: 0x60
1173 : // AVAILABLE: 0x61
1174 : // AVAILABLE: 0x62
1175 : // AVAILABLE: 0x63
1176 :
1177 : /**
1178 : * @def CHIP_ERROR_RETRANS_TABLE_FULL
1179 : *
1180 : * @brief
1181 : * A retransmission table is already full.
1182 : *
1183 : */
1184 : #define CHIP_ERROR_RETRANS_TABLE_FULL CHIP_CORE_ERROR(0x64)
1185 :
1186 : // AVAILABLE: 0x65
1187 : // AVAILABLE: 0x66
1188 : // AVAILABLE: 0x67
1189 :
1190 : /**
1191 : * @def CHIP_ERROR_TRANSACTION_CANCELED
1192 : *
1193 : * @brief
1194 : * A transaction is cancelled.
1195 : *
1196 : */
1197 : #define CHIP_ERROR_TRANSACTION_CANCELED CHIP_CORE_ERROR(0x68)
1198 :
1199 : // AVAILABLE: 0x69
1200 : // AVAILABLE: 0x6a
1201 :
1202 : /**
1203 : * @def CHIP_ERROR_INVALID_SUBSCRIPTION
1204 : *
1205 : * @brief
1206 : * A message was received as part of a subscription exchange that has a mis-matching subscription id.
1207 : *
1208 : */
1209 : #define CHIP_ERROR_INVALID_SUBSCRIPTION CHIP_CORE_ERROR(0x6b)
1210 :
1211 : /**
1212 : * @def CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE
1213 : *
1214 : * @brief
1215 : * A CHIP feature is unsupported.
1216 : *
1217 : */
1218 : #define CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE CHIP_CORE_ERROR(0x6c)
1219 :
1220 : /**
1221 : * @def CHIP_ERROR_UNSOLICITED_MSG_NO_ORIGINATOR
1222 : *
1223 : * @brief
1224 : * An unsolicited message with the originator bit clear.
1225 : *
1226 : */
1227 : #define CHIP_ERROR_UNSOLICITED_MSG_NO_ORIGINATOR CHIP_CORE_ERROR(0x70)
1228 :
1229 : /**
1230 : * @def CHIP_ERROR_INVALID_FABRIC_INDEX
1231 : *
1232 : * @brief
1233 : * A fabric index is invalid.
1234 : *
1235 : */
1236 : #define CHIP_ERROR_INVALID_FABRIC_INDEX CHIP_CORE_ERROR(0x71)
1237 :
1238 : /**
1239 : * @def CHIP_ERROR_TOO_MANY_CONNECTIONS
1240 : *
1241 : * @brief
1242 : * The attempt to allocate a connection object failed because too many
1243 : * connections exist.
1244 : *
1245 : */
1246 : #define CHIP_ERROR_TOO_MANY_CONNECTIONS CHIP_CORE_ERROR(0x72)
1247 :
1248 : /**
1249 : * @def CHIP_ERROR_SHUT_DOWN
1250 : *
1251 : * @brief
1252 : * The operation cancelled because a shut down was initiated
1253 : */
1254 : #define CHIP_ERROR_SHUT_DOWN CHIP_CORE_ERROR(0x73)
1255 :
1256 : /**
1257 : * @def CHIP_ERROR_CANCELLED
1258 : *
1259 : * @brief
1260 : * The operation has been cancelled, generally by calling a cancel/abort request.
1261 : */
1262 : #define CHIP_ERROR_CANCELLED CHIP_CORE_ERROR(0x74)
1263 :
1264 : // AVAILABLE: 0x75
1265 :
1266 : /**
1267 : * @def CHIP_ERROR_TLV_TAG_NOT_FOUND
1268 : *
1269 : * @brief
1270 : * A specified TLV tag was not found.
1271 : *
1272 : */
1273 : #define CHIP_ERROR_TLV_TAG_NOT_FOUND CHIP_CORE_ERROR(0x76)
1274 :
1275 : /**
1276 : * @def CHIP_ERROR_MISSING_SECURE_SESSION
1277 : *
1278 : * @brief
1279 : *
1280 : * A secure session is needed to do work, but is missing/is not present.
1281 : */
1282 : #define CHIP_ERROR_MISSING_SECURE_SESSION CHIP_CORE_ERROR(0x77)
1283 :
1284 : /**
1285 : * @def CHIP_ERROR_INVALID_ADMIN_SUBJECT
1286 : *
1287 : * @brief
1288 : * The CaseAdminSubject field is not valid in AddNOC command.
1289 : *
1290 : */
1291 : #define CHIP_ERROR_INVALID_ADMIN_SUBJECT CHIP_CORE_ERROR(0x78)
1292 :
1293 : /**
1294 : * @def CHIP_ERROR_INSUFFICIENT_PRIVILEGE
1295 : *
1296 : * @brief
1297 : * Required privilege was insufficient during an operation.
1298 : *
1299 : */
1300 : #define CHIP_ERROR_INSUFFICIENT_PRIVILEGE CHIP_CORE_ERROR(0x79)
1301 :
1302 : // AVAILABLE: 0x7a
1303 : // AVAILABLE: 0x7b
1304 : // AVAILABLE: 0x7c
1305 :
1306 : /**
1307 : * @def CHIP_ERROR_MESSAGE_COUNTER_EXHAUSTED
1308 : *
1309 : * @brief
1310 : * The message counter of the session is exhausted, the session should be closed.
1311 : */
1312 : #define CHIP_ERROR_MESSAGE_COUNTER_EXHAUSTED CHIP_CORE_ERROR(0x7d)
1313 :
1314 : /**
1315 : * @def CHIP_ERROR_FABRIC_EXISTS
1316 : *
1317 : * @brief
1318 : * The fabric with the given fabric id and root public key already exists.
1319 : *
1320 : */
1321 : #define CHIP_ERROR_FABRIC_EXISTS CHIP_CORE_ERROR(0x7e)
1322 :
1323 : /**
1324 : * @def CHIP_ERROR_ENDPOINT_EXISTS
1325 : *
1326 : * @brief
1327 : * The endpoint with the given endpoint id already exists.
1328 : *
1329 : */
1330 : #define CHIP_ERROR_ENDPOINT_EXISTS CHIP_CORE_ERROR(0x7f)
1331 :
1332 : /**
1333 : * @def CHIP_ERROR_WRONG_ENCRYPTION_TYPE_FROM_PEER
1334 : *
1335 : * @brief
1336 : * The wrong encryption type error received from a peer node.
1337 : *
1338 : */
1339 : #define CHIP_ERROR_WRONG_ENCRYPTION_TYPE_FROM_PEER CHIP_CORE_ERROR(0x80)
1340 :
1341 : // AVAILABLE: 0x81
1342 : // AVAILABLE: 0x82
1343 : // AVAILABLE: 0x83
1344 : // AVAILABLE: 0x84
1345 :
1346 : /**
1347 : * @def CHIP_ERROR_INVALID_KEY_ID
1348 : *
1349 : * @brief
1350 : * A key id is invalid.
1351 : *
1352 : */
1353 : #define CHIP_ERROR_INVALID_KEY_ID CHIP_CORE_ERROR(0x85)
1354 :
1355 : /**
1356 : * @def CHIP_ERROR_INVALID_TIME
1357 : *
1358 : * @brief
1359 : * Time has invalid value.
1360 : *
1361 : */
1362 : #define CHIP_ERROR_INVALID_TIME CHIP_CORE_ERROR(0x86)
1363 :
1364 : // AVAILABLE: 0x87
1365 : // AVAILABLE: 0x88
1366 : // AVAILABLE: 0x89
1367 : // AVAILABLE: 0x8a
1368 : // AVAILABLE: 0x8b
1369 : // AVAILABLE: 0x8c
1370 : // AVAILABLE: 0x8d
1371 :
1372 : /**
1373 : * @def CHIP_ERROR_SCHEMA_MISMATCH
1374 : *
1375 : * @brief
1376 : * A mismatch in schema was encountered.
1377 : *
1378 : */
1379 : #define CHIP_ERROR_SCHEMA_MISMATCH CHIP_CORE_ERROR(0x8e)
1380 :
1381 : /**
1382 : * @def CHIP_ERROR_INVALID_INTEGER_VALUE
1383 : *
1384 : * @brief
1385 : * An integer does not have the kind of value we expect.
1386 : *
1387 : */
1388 : #define CHIP_ERROR_INVALID_INTEGER_VALUE CHIP_CORE_ERROR(0x8f)
1389 :
1390 : // AVAILABLE: 0x90
1391 : // AVAILABLE: 0x91
1392 :
1393 : /**
1394 : * @def CHIP_ERROR_BAD_REQUEST
1395 : *
1396 : * @brief
1397 : * The request cannot be processed or fulfilled
1398 : *
1399 : */
1400 : #define CHIP_ERROR_BAD_REQUEST CHIP_CORE_ERROR(0x92)
1401 :
1402 : // AVAILABLE: 0x93
1403 : // AVAILABLE: 0x94
1404 : // AVAILABLE: 0x95
1405 : // AVAILABLE: 0x96
1406 : // AVAILABLE: 0x97
1407 : // AVAILABLE: 0x98
1408 : // AVAILABLE: 0x99
1409 : // AVAILABLE: 0x9a
1410 : // AVAILABLE: 0x9b
1411 : // AVAILABLE: 0x9c
1412 :
1413 : /**
1414 : * @def CHIP_ERROR_WRONG_CERT_TYPE
1415 : *
1416 : * @brief
1417 : * The presented certificate was of the wrong type.
1418 : */
1419 : #define CHIP_ERROR_WRONG_CERT_TYPE CHIP_CORE_ERROR(0x9d)
1420 :
1421 : // AVAILABLE: 0x9e
1422 :
1423 : /**
1424 : * @def CHIP_ERROR_PERSISTED_STORAGE_FAILED
1425 : *
1426 : * @brief
1427 : * Persisted storage memory read/write failure.
1428 : *
1429 : */
1430 : #define CHIP_ERROR_PERSISTED_STORAGE_FAILED CHIP_CORE_ERROR(0x9f)
1431 :
1432 : /**
1433 : * @def CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND
1434 : *
1435 : * @brief
1436 : * The specific value is not found in the persisted storage.
1437 : *
1438 : */
1439 : #define CHIP_ERROR_PERSISTED_STORAGE_VALUE_NOT_FOUND CHIP_CORE_ERROR(0xa0)
1440 :
1441 : /**
1442 : * @def CHIP_ERROR_IM_FABRIC_DELETED
1443 : *
1444 : * @brief
1445 : * The fabric is deleted, and the corresponding IM resources are released
1446 : */
1447 : #define CHIP_ERROR_IM_FABRIC_DELETED CHIP_CORE_ERROR(0xa1)
1448 :
1449 : // AVAILABLE: 0xa2
1450 : // AVAILABLE: 0xa3
1451 :
1452 : /**
1453 : * @def CHIP_ERROR_IN_PROGRESS
1454 : *
1455 : * @brief
1456 : * The operation is still in progress
1457 : */
1458 : #define CHIP_ERROR_IN_PROGRESS CHIP_CORE_ERROR(0xa4)
1459 :
1460 : /**
1461 : * @def CHIP_ERROR_ACCESS_DENIED
1462 : *
1463 : * @brief
1464 : * The CHIP message is not granted access for further processing.
1465 : */
1466 : #define CHIP_ERROR_ACCESS_DENIED CHIP_CORE_ERROR(0xa5)
1467 :
1468 : /**
1469 : * @def CHIP_ERROR_UNKNOWN_RESOURCE_ID
1470 : *
1471 : * @brief
1472 : * Unknown resource ID
1473 : *
1474 : */
1475 : #define CHIP_ERROR_UNKNOWN_RESOURCE_ID CHIP_CORE_ERROR(0xa6)
1476 :
1477 : /**
1478 : * @def CHIP_ERROR_VERSION_MISMATCH
1479 : *
1480 : * @brief
1481 : * The conditional update of a trait instance path has failed
1482 : * because the local changes are based on an obsolete version of the
1483 : * data.
1484 : */
1485 : #define CHIP_ERROR_VERSION_MISMATCH CHIP_CORE_ERROR(0xa7)
1486 :
1487 : /**
1488 : * @def CHIP_ERROR_ACCESS_RESTRICTED_BY_ARL
1489 : *
1490 : * @brief
1491 : * The CHIP message is not granted access for further processing due to Access Restriction List.
1492 : */
1493 : #define CHIP_ERROR_ACCESS_RESTRICTED_BY_ARL CHIP_CORE_ERROR(0xa8)
1494 :
1495 : // AVAILABLE: 0xa9
1496 : // AVAILABLE: 0xaa
1497 :
1498 : /**
1499 : * @def CHIP_EVENT_ID_FOUND
1500 : *
1501 : * @brief
1502 : * Event ID matching the criteria was found
1503 : */
1504 : #define CHIP_ERROR_EVENT_ID_FOUND CHIP_CORE_ERROR(0xab)
1505 : #define CHIP_EVENT_ID_FOUND CHIP_ERROR_EVENT_ID_FOUND
1506 :
1507 : /**
1508 : * @def CHIP_ERROR_INTERNAL
1509 : *
1510 : * @brief
1511 : * Internal error
1512 : */
1513 : #define CHIP_ERROR_INTERNAL CHIP_CORE_ERROR(0xac)
1514 :
1515 : /**
1516 : * @def CHIP_ERROR_OPEN_FAILED
1517 : *
1518 : * @brief
1519 : * Open file failed
1520 : */
1521 : #define CHIP_ERROR_OPEN_FAILED CHIP_CORE_ERROR(0xad)
1522 :
1523 : /**
1524 : * @def CHIP_ERROR_READ_FAILED
1525 : *
1526 : * @brief
1527 : * Read from file failed
1528 : */
1529 : #define CHIP_ERROR_READ_FAILED CHIP_CORE_ERROR(0xae)
1530 :
1531 : /**
1532 : * @def CHIP_ERROR_WRITE_FAILED
1533 : *
1534 : * @brief
1535 : * Write to file failed
1536 : */
1537 : #define CHIP_ERROR_WRITE_FAILED CHIP_CORE_ERROR(0xaf)
1538 :
1539 : /**
1540 : * @def CHIP_ERROR_DECODE_FAILED
1541 : *
1542 : * @brief
1543 : * Decoding failed
1544 : */
1545 : #define CHIP_ERROR_DECODE_FAILED CHIP_CORE_ERROR(0xb0)
1546 :
1547 : // AVAILABLE: 0xb1
1548 : // AVAILABLE: 0xb2
1549 :
1550 : /**
1551 : * @def CHIP_ERROR_DNS_SD_UNAUTHORIZED
1552 : *
1553 : * @brief
1554 : * The application is not authorized to do DNS_SD lookups.
1555 : *
1556 : */
1557 : #define CHIP_ERROR_DNS_SD_UNAUTHORIZED CHIP_CORE_ERROR(0xb3)
1558 :
1559 : /**
1560 : * @def CHIP_ERROR_MDNS_COLLISION
1561 : *
1562 : * @brief
1563 : * The registered service name has collision on the LAN.
1564 : *
1565 : */
1566 : #define CHIP_ERROR_MDNS_COLLISION CHIP_CORE_ERROR(0xb4)
1567 :
1568 : /**
1569 : * @def CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB
1570 : *
1571 : * @brief
1572 : * The Attribute path IB is malformed: it does not contain
1573 : * the required path
1574 : */
1575 : #define CHIP_ERROR_IM_MALFORMED_ATTRIBUTE_PATH_IB CHIP_CORE_ERROR(0xb5)
1576 :
1577 : /**
1578 : * @def CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB
1579 : *
1580 : * @brief
1581 : * The Event Path IB is malformed: it does not contain
1582 : * the required elements
1583 : */
1584 : #define CHIP_ERROR_IM_MALFORMED_EVENT_PATH_IB CHIP_CORE_ERROR(0xb6)
1585 :
1586 : // AVAILABLE: 0xb7
1587 : // AVAILABLE: 0xb8
1588 :
1589 : /**
1590 : * @def CHIP_ERROR_IM_MALFORMED_COMMAND_DATA_IB
1591 : *
1592 : * @brief
1593 : * The Command Data IB is malformed: it does not contain
1594 : * the required elements
1595 : */
1596 : #define CHIP_ERROR_IM_MALFORMED_COMMAND_DATA_IB CHIP_CORE_ERROR(0xb9)
1597 :
1598 : /**
1599 : * @def CHIP_ERROR_IM_MALFORMED_EVENT_DATA_IB
1600 : *
1601 : * @brief
1602 : * The Event Data IB is malformed: it does not contain
1603 : * the required elements
1604 : */
1605 : #define CHIP_ERROR_IM_MALFORMED_EVENT_DATA_IB CHIP_CORE_ERROR(0xba)
1606 :
1607 : /**
1608 : * @def CHIP_ERROR_MAXIMUM_PATHS_PER_INVOKE_EXCEEDED
1609 : *
1610 : * @brief
1611 : * Caller is trying to add more invoke command paths
1612 : * than what the remote node reports supporting.
1613 : */
1614 : #define CHIP_ERROR_MAXIMUM_PATHS_PER_INVOKE_EXCEEDED CHIP_CORE_ERROR(0xbb)
1615 :
1616 : /**
1617 : * @def CHIP_ERROR_PEER_NODE_NOT_FOUND
1618 : *
1619 : * @brief
1620 : * Unable to find the peer node
1621 : */
1622 : #define CHIP_ERROR_PEER_NODE_NOT_FOUND CHIP_CORE_ERROR(0xbc)
1623 :
1624 : /**
1625 : * @def CHIP_ERROR_HSM
1626 : *
1627 : * @brief
1628 : * Error in Hardware security module. Used for software fallback option.
1629 : */
1630 : #define CHIP_ERROR_HSM CHIP_CORE_ERROR(0xbd)
1631 :
1632 : // AVAILABLE: 0xbe
1633 :
1634 : /**
1635 : * @def CHIP_ERROR_REAL_TIME_NOT_SYNCED
1636 : *
1637 : * @brief
1638 : * The system's real time clock is not synchronized to an accurate time source.
1639 : */
1640 : #define CHIP_ERROR_REAL_TIME_NOT_SYNCED CHIP_CORE_ERROR(0xbf)
1641 :
1642 : /**
1643 : * @def CHIP_ERROR_UNEXPECTED_EVENT
1644 : *
1645 : * @brief
1646 : * An unexpected event was encountered.
1647 : */
1648 : #define CHIP_ERROR_UNEXPECTED_EVENT CHIP_CORE_ERROR(0xc0)
1649 :
1650 : /**
1651 : * @def CHIP_ERROR_ENDPOINT_POOL_FULL
1652 : *
1653 : * @brief
1654 : * No endpoint pool entry is available.
1655 : *
1656 : */
1657 : #define CHIP_ERROR_ENDPOINT_POOL_FULL CHIP_CORE_ERROR(0xc1)
1658 :
1659 : /**
1660 : * @def CHIP_ERROR_INBOUND_MESSAGE_TOO_BIG
1661 : *
1662 : * @brief
1663 : * More inbound message data is pending than available buffer space available to copy it.
1664 : *
1665 : */
1666 : #define CHIP_ERROR_INBOUND_MESSAGE_TOO_BIG CHIP_CORE_ERROR(0xc2)
1667 :
1668 : /**
1669 : * @def CHIP_ERROR_OUTBOUND_MESSAGE_TOO_BIG
1670 : *
1671 : * @brief
1672 : * More outbound message data is pending than available buffer space available to copy it.
1673 : *
1674 : */
1675 : #define CHIP_ERROR_OUTBOUND_MESSAGE_TOO_BIG CHIP_CORE_ERROR(0xc3)
1676 :
1677 : /**
1678 : * @def CHIP_ERROR_DUPLICATE_MESSAGE_RECEIVED
1679 : *
1680 : * @brief
1681 : * The received message is a duplicate of a previously received message.
1682 : */
1683 : #define CHIP_ERROR_DUPLICATE_MESSAGE_RECEIVED CHIP_CORE_ERROR(0xc4)
1684 :
1685 : /**
1686 : * @def CHIP_ERROR_INVALID_PUBLIC_KEY
1687 : *
1688 : * @brief
1689 : * The received public key doesn't match locally generated key.
1690 : */
1691 : #define CHIP_ERROR_INVALID_PUBLIC_KEY CHIP_CORE_ERROR(0xc5)
1692 :
1693 : /**
1694 : * @def CHIP_ERROR_FABRIC_MISMATCH_ON_ICA
1695 : *
1696 : * @brief
1697 : * The fabric ID in ICA certificate doesn't match the one in NOC.
1698 : */
1699 : #define CHIP_ERROR_FABRIC_MISMATCH_ON_ICA CHIP_CORE_ERROR(0xc6)
1700 :
1701 : // AVAILABLE: 0xc7
1702 : // AVAILABLE: 0xc8
1703 :
1704 : /**
1705 : * @def CHIP_ERROR_NO_SHARED_TRUSTED_ROOT
1706 : *
1707 : * @brief
1708 : * The CASE session could not be established as peer's credentials do not have
1709 : * a common root of trust.
1710 : */
1711 : #define CHIP_ERROR_NO_SHARED_TRUSTED_ROOT CHIP_CORE_ERROR(0xc9)
1712 :
1713 : /*
1714 : * @def CHIP_ERROR_IM_STATUS_CODE_RECEIVED
1715 : *
1716 : * @brief
1717 : * Indicates an IM status code was received. Usually accompanied with
1718 : * the actual IM status code.
1719 : */
1720 : #define CHIP_ERROR_IM_STATUS_CODE_RECEIVED CHIP_CORE_ERROR(0xca)
1721 :
1722 : // AVAILABLE 0xcb
1723 : // AVAILABLE 0xcc
1724 : // AVAILABLE 0xcd
1725 : // AVAILABLE 0xce
1726 : // AVAILABLE 0xcf
1727 : // AVAILABLE 0xd0
1728 : // AVAILABLE 0xd1
1729 : // AVAILABLE 0xd2
1730 : // AVAILABLE 0xd3
1731 : // AVAILABLE 0xd4
1732 : // AVAILABLE 0xd5
1733 : // AVAILABLE 0xd6
1734 :
1735 : /**
1736 : * @def CHIP_ERROR_IM_MALFORMED_DATA_VERSION_FILTER_IB
1737 : *
1738 : * @brief
1739 : * The Data Version Filter IB is malformed: it does not contain
1740 : * the required elements
1741 : */
1742 : #define CHIP_ERROR_IM_MALFORMED_DATA_VERSION_FILTER_IB CHIP_CORE_ERROR(0xd7)
1743 :
1744 : /**
1745 : * @def CHIP_ERROR_NOT_FOUND
1746 : *
1747 : * @brief
1748 : * The item referenced in the function call was not found
1749 : */
1750 : #define CHIP_ERROR_NOT_FOUND CHIP_CORE_ERROR(0xd8)
1751 :
1752 : // AVAILABLE: 0xd9
1753 :
1754 : /**
1755 : * @def CHIP_ERROR_INVALID_FILE_IDENTIFIER
1756 : *
1757 : * @brief
1758 : * The file identifier, encoded in the first few bytes of a processed file,
1759 : * has unexpected value.
1760 : */
1761 : #define CHIP_ERROR_INVALID_FILE_IDENTIFIER CHIP_CORE_ERROR(0xda)
1762 :
1763 : /**
1764 : * @def CHIP_ERROR_BUSY
1765 : *
1766 : * @brief
1767 : * The Resource is busy and cannot process the request. Trying again might work.
1768 : */
1769 : #define CHIP_ERROR_BUSY CHIP_CORE_ERROR(0xdb)
1770 :
1771 : /**
1772 : * @def CHIP_ERROR_MAX_RETRY_EXCEEDED
1773 : *
1774 : * @brief
1775 : * The maximum retry limit has been exceeded.
1776 : */
1777 : #define CHIP_ERROR_MAX_RETRY_EXCEEDED CHIP_CORE_ERROR(0xdc)
1778 :
1779 : /**
1780 : * @def CHIP_ERROR_PROVIDER_LIST_EXHAUSTED
1781 : *
1782 : * @brief
1783 : * The provider list has been exhausted.
1784 : */
1785 : #define CHIP_ERROR_PROVIDER_LIST_EXHAUSTED CHIP_CORE_ERROR(0xdd)
1786 :
1787 : // AVAILABLE: 0xde
1788 :
1789 : /**
1790 : * @def CHIP_ERROR_INVALID_SCHEME_PREFIX
1791 : *
1792 : * @brief
1793 : * The scheme field contains an invalid prefix
1794 : */
1795 : #define CHIP_ERROR_INVALID_SCHEME_PREFIX CHIP_CORE_ERROR(0xdf)
1796 :
1797 : /**
1798 : * @def CHIP_ERROR_MISSING_URI_SEPARATOR
1799 : *
1800 : * @brief
1801 : * The URI separator is missing
1802 : */
1803 : #define CHIP_ERROR_MISSING_URI_SEPARATOR CHIP_CORE_ERROR(0xe0)
1804 :
1805 : /**
1806 : * @def CHIP_ERROR_HANDLER_NOT_SET
1807 : *
1808 : * @brief
1809 : * Callback function or callable object is not set
1810 : */
1811 : #define CHIP_ERROR_HANDLER_NOT_SET CHIP_CORE_ERROR(0xe1)
1812 :
1813 : // WHEN ADDING A NEW ERROR CODE: Look for "AVAILABLE" comments above and fill in gaps.
1814 :
1815 : // clang-format on
1816 :
1817 : // !!!!! IMPORTANT !!!!! If you add new CHIP errors, please update the translation
1818 : // of error codes to strings in CHIPError.cpp, and add them to kTestElements[]
1819 : // in core/tests/TestCHIPErrorStr.cpp
1820 :
1821 : namespace chip {
1822 :
1823 : extern void RegisterCHIPLayerErrorFormatter();
1824 : extern bool FormatCHIPError(char * buf, uint16_t bufSize, CHIP_ERROR err);
1825 :
1826 : } // namespace chip
|