• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright 1999-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 #pragma once
20 
21 #include <bluetooth/log.h>
22 
23 #include <cstdint>
24 
25 #include "macros.h"
26 
27 /* pairing failure reason code */
28 typedef enum : uint8_t {
29   SMP_SUCCESS = 0,
30   SMP_PASSKEY_ENTRY_FAIL = 0x01,
31   SMP_OOB_FAIL = 0x02,
32   SMP_PAIR_AUTH_FAIL = 0x03,
33   SMP_CONFIRM_VALUE_ERR = 0x04,
34   SMP_PAIR_NOT_SUPPORT = 0x05,
35   SMP_ENC_KEY_SIZE = 0x06,
36   SMP_INVALID_CMD = 0x07,
37   SMP_PAIR_FAIL_UNKNOWN = 0x08,
38   SMP_REPEATED_ATTEMPTS = 0x09,
39   SMP_INVALID_PARAMETERS = 0x0A,
40   SMP_DHKEY_CHK_FAIL = 0x0B,
41   SMP_NUMERIC_COMPAR_FAIL = 0x0C,
42   SMP_BR_PARING_IN_PROGR = 0x0D,
43   SMP_XTRANS_DERIVE_NOT_ALLOW = 0x0E,
44   SMP_KEY_REJECTED = 0x0F,
45   SMP_BUSY =    0x10,  /*device is not ready to perform a pairing procedure*/
46   SMP_MAX_FAIL_RSN_PER_SPEC = SMP_BUSY,
47 
48   /* self defined error code */
49   SMP_PAIR_INTERNAL_ERR = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x01), /* 0x11 */
50 
51   /* Unknown IO capability, unable to decide association model */
52   SMP_UNKNOWN_IO_CAP = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x02), /* 0x12 */
53 
54   SMP_IMPL_BUSY = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x05),   /* 0x15 */
55   SMP_ENC_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x06),    /* 0x16 */
56   SMP_STARTED = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x07),     /* 0x17 */
57   SMP_RSP_TIMEOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x08), /* 0x18 */
58 
59   /* Unspecified failure reason */
60   SMP_FAIL = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0A), /* 0x1A */
61 
62   SMP_CONN_TOUT = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0B),           /* 0x1B */
63   SMP_SIRK_DEVICE_INVALID = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0C), /* 0x1C */
64   SMP_USER_CANCELLED = (SMP_MAX_FAIL_RSN_PER_SPEC + 0x0D),      /* 0x1D */
65 } tSMP_STATUS;
66 
smp_status_text(const tSMP_STATUS & status)67 inline std::string smp_status_text(const tSMP_STATUS& status) {
68   switch (status) {
69     CASE_RETURN_TEXT(SMP_SUCCESS);
70     CASE_RETURN_TEXT(SMP_PASSKEY_ENTRY_FAIL);
71     CASE_RETURN_TEXT(SMP_OOB_FAIL);
72     CASE_RETURN_TEXT(SMP_PAIR_AUTH_FAIL);
73     CASE_RETURN_TEXT(SMP_CONFIRM_VALUE_ERR);
74     CASE_RETURN_TEXT(SMP_PAIR_NOT_SUPPORT);
75     CASE_RETURN_TEXT(SMP_ENC_KEY_SIZE);
76     CASE_RETURN_TEXT(SMP_INVALID_CMD);
77     CASE_RETURN_TEXT(SMP_PAIR_FAIL_UNKNOWN);
78     CASE_RETURN_TEXT(SMP_REPEATED_ATTEMPTS);
79     CASE_RETURN_TEXT(SMP_INVALID_PARAMETERS);
80     CASE_RETURN_TEXT(SMP_DHKEY_CHK_FAIL);
81     CASE_RETURN_TEXT(SMP_NUMERIC_COMPAR_FAIL);
82     CASE_RETURN_TEXT(SMP_BR_PARING_IN_PROGR);
83     CASE_RETURN_TEXT(SMP_XTRANS_DERIVE_NOT_ALLOW);
84     CASE_RETURN_TEXT(SMP_KEY_REJECTED);
85     CASE_RETURN_TEXT(SMP_BUSY);
86     CASE_RETURN_TEXT(SMP_PAIR_INTERNAL_ERR);
87     CASE_RETURN_TEXT(SMP_UNKNOWN_IO_CAP);
88     CASE_RETURN_TEXT(SMP_IMPL_BUSY);
89     CASE_RETURN_TEXT(SMP_ENC_FAIL);
90     CASE_RETURN_TEXT(SMP_STARTED);
91     CASE_RETURN_TEXT(SMP_RSP_TIMEOUT);
92     CASE_RETURN_TEXT(SMP_FAIL);
93     CASE_RETURN_TEXT(SMP_CONN_TOUT);
94     CASE_RETURN_TEXT(SMP_SIRK_DEVICE_INVALID);
95     CASE_RETURN_TEXT(SMP_USER_CANCELLED);
96     default:
97       return std::format("UNKNOWN[{}]", static_cast<uint8_t>(status));
98   }
99 }
100 
101 namespace std {
102 template <>
103 struct formatter<tSMP_STATUS> : enum_formatter<tSMP_STATUS> {};
104 }  // namespace std
105