NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
smp_api.h
1/******************************************************************************
2 *
3 * Copyright (C) 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/******************************************************************************
20 *
21 * This file contains the SMP API function external definitions.
22 *
23 ******************************************************************************/
24#ifndef SMP_API_H
25#define SMP_API_H
26
27#include "bt_target.h"
28
29#define SMP_PIN_CODE_LEN_MAX PIN_CODE_LEN
30#define SMP_PIN_CODE_LEN_MIN 6
31
32/* SMP event type */
33#define SMP_IO_CAP_REQ_EVT 1 /* IO capability request event */
34#define SMP_SEC_REQUEST_EVT 2 /* SMP pairing request */
35#define SMP_PASSKEY_NOTIF_EVT 3 /* passkey notification event */
36#define SMP_PASSKEY_REQ_EVT 4 /* passkey request event */
37#define SMP_OOB_REQ_EVT 5 /* OOB request event */
38#define SMP_COMPLT_EVT 6 /* SMP complete event */
39typedef UINT8 tSMP_EVT;
40
41
42/* pairing failure reason code */
43#define SMP_PASSKEY_ENTRY_FAIL 0x01
44#define SMP_OOB_FAIL 0x02
45#define SMP_PAIR_AUTH_FAIL 0x03
46#define SMP_CONFIRM_VALUE_ERR 0x04
47#define SMP_PAIR_NOT_SUPPORT 0x05
48#define SMP_ENC_KEY_SIZE 0x06
49#define SMP_INVALID_CMD 0x07
50#define SMP_PAIR_FAIL_UNKNOWN 0x08
51#define SMP_REPEATED_ATTEMPTS 0x09
52#define SMP_PAIR_FAILURE_MAX SMP_REPEATED_ATTEMPTS
53/* self defined error code */
54#define SMP_PAIR_INTERNAL_ERR 0x0A
55#define SMP_UNKNOWN_IO_CAP 0x0B /* unknown IO capability, unable to decide associatino model */
56#define SMP_INIT_FAIL 0x0C
57#define SMP_CONFIRM_FAIL 0x0D
58#define SMP_BUSY 0x0E
59#define SMP_ENC_FAIL 0x0F
60#define SMP_STARTED 0x10
61#define SMP_RSP_TIMEOUT 0x11
62#define SMP_DIV_NOT_AVAIL 0x12
63#define SMP_FAIL 0x13 /* unspecified failed reason */
64#define SMP_SUCCESS 0
65
66typedef UINT8 tSMP_STATUS;
67
68
69/* Device IO capability */
70#define SMP_IO_CAP_OUT BTM_IO_CAP_OUT /* DisplayOnly */
71#define SMP_IO_CAP_IO BTM_IO_CAP_IO /* DisplayYesNo */
72#define SMP_IO_CAP_IN BTM_IO_CAP_IN /* KeyboardOnly */
73#define SMP_IO_CAP_NONE BTM_IO_CAP_NONE /* NoInputNoOutput */
74#define SMP_IO_CAP_KBDISP BTM_IO_CAP_KBDISP /* Keyboard Display */
75#define SMP_IO_CAP_MAX BTM_IO_CAP_MAX
76typedef UINT8 tSMP_IO_CAP;
77
78#ifndef SMP_DEFAULT_IO_CAPS
79 #define SMP_DEFAULT_IO_CAPS SMP_IO_CAP_KBDISP
80#endif
81
82/* OOB data present or not */
83enum
84{
85 SMP_OOB_NONE,
86 SMP_OOB_PRESENT,
87 SMP_OOB_UNKNOWN
88};
89typedef UINT8 tSMP_OOB_FLAG;
90
91#define SMP_AUTH_NO_BOND 0x00
92#define SMP_AUTH_GEN_BOND 0x01 //todo sdh change GEN_BOND to BOND
93
94/* SMP Authentication requirement */
95#define SMP_AUTH_YN_BIT (1 << 2)
96#define SMP_AUTH_MASK (SMP_AUTH_GEN_BOND|SMP_AUTH_YN_BIT)
97
98
99#define SMP_AUTH_BOND SMP_AUTH_GEN_BOND
100
101#define SMP_AUTH_NB_ENC_ONLY 0x00 //(SMP_AUTH_MASK | BTM_AUTH_SP_NO) /* no MITM, No Bonding, Encryptino only */
102#define SMP_AUTH_NB_IOCAP (SMP_AUTH_NO_BOND | SMP_AUTH_YN_BIT) /* MITM, No Bonding, Use IO Capability
103 to detrermine authenticaion procedure */
104#define SMP_AUTH_GB_ENC_ONLY (SMP_AUTH_GEN_BOND ) /* no MITM, General Bonding, Encryptino only */
105#define SMP_AUTH_GB_IOCAP (SMP_AUTH_GEN_BOND | SMP_AUTH_YN_BIT) /* MITM, General Bonding, Use IO Capability
106 to detrermine authenticaion procedure */
107typedef UINT8 tSMP_AUTH_REQ;
108
109#define SMP_SEC_NONE 0
110#define SMP_SEC_UNAUTHENTICATE (1 << 0)
111#define SMP_SEC_AUTHENTICATED (1 << 2)
112typedef UINT8 tSMP_SEC_LEVEL;
113
114/* SMP key types */
115#define SMP_SEC_KEY_TYPE_ENC (1 << 0) /* encryption key */
116#define SMP_SEC_KEY_TYPE_ID (1 << 1) /* identity key */
117#define SMP_SEC_KEY_TYPE_CSRK (1 << 2) /* slave CSRK */
118typedef UINT8 tSMP_KEYS;
119
120/* default security key distribution value */
121#define SMP_SEC_DEFAULT_KEY (SMP_SEC_KEY_TYPE_ENC | SMP_SEC_KEY_TYPE_ID | SMP_SEC_KEY_TYPE_CSRK)
123/* data type for BTM_SP_IO_REQ_EVT */
124typedef struct
125{
126 tSMP_IO_CAP io_cap; /* local IO capabilities */
127 tSMP_OOB_FLAG oob_data; /* OOB data present (locally) for the peer device */
128 tSMP_AUTH_REQ auth_req; /* Authentication required (for local device) */
129 UINT8 max_key_size; /* max encryption key size */
130 tSMP_KEYS init_keys; /* initiator keys to be distributed */
131 tSMP_KEYS resp_keys; /* responder keys */
133
134typedef struct
135{
136 UINT8 reason;
137 UINT8 sec_level;
138 BOOLEAN is_pair_cancel;
140
141typedef union
142{
143 UINT32 passkey;
144 tSMP_IO_REQ io_req; /* IO request */
145 tSMP_CMPL cmplt;
146
148
150/* AES Encryption output */
151typedef struct
152{
153 UINT8 status;
154 UINT8 param_len;
155 UINT16 opcode;
156 UINT8 param_buf[BT_OCTET16_LEN];
157} tSMP_ENC;
158
159/* Simple Pairing Events. Called by the stack when Simple Pairing related
160** events occur.
161*/
162typedef UINT8 (tSMP_CALLBACK) (tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data);
163
164/* callback function for CMAC algorithm
165*/
166typedef void (tCMAC_CMPL_CBACK)(UINT8 *p_mac, UINT16 tlen, UINT32 sign_counter);
167
168/*****************************************************************************
169** External Function Declarations
170*****************************************************************************/
171#ifdef __cplusplus
172extern "C"
173{
174#endif
175/* API of SMP */
176
177/*******************************************************************************
178**
179** Function SMP_Init
180**
181** Description This function initializes the SMP unit.
182**
183** Returns void
184**
185*******************************************************************************/
186 SMP_API extern void SMP_Init(void);
187
188/*******************************************************************************
189**
190** Function SMP_SetTraceLevel
191**
192** Description This function sets the trace level for SMP. If called with
193** a value of 0xFF, it simply returns the current trace level.
194**
195** Returns The new or current trace level
196**
197*******************************************************************************/
198 SMP_API extern UINT8 SMP_SetTraceLevel (UINT8 new_level);
199
200/*******************************************************************************
201**
202** Function SMP_Register
203**
204** Description This function register for the SMP service callback.
205**
206** Returns void
207**
208*******************************************************************************/
209 SMP_API extern BOOLEAN SMP_Register (tSMP_CALLBACK *p_cback);
210
211/*******************************************************************************
212**
213** Function SMP_Pair
214**
215** Description This function is called to start a SMP pairing.
216**
217** Returns SMP_STARTED if bond started, else otherwise exception.
218**
219*******************************************************************************/
220 SMP_API extern tSMP_STATUS SMP_Pair (BD_ADDR bd_addr);
221/*******************************************************************************
222**
223** Function SMP_PairCancel
224**
225** Description This function is called to cancel a SMP pairing.
226**
227** Returns TRUE - pairing cancelled
228**
229*******************************************************************************/
230 SMP_API extern BOOLEAN SMP_PairCancel (BD_ADDR bd_addr);
231
232/*******************************************************************************
233**
234** Function SMP_SecurityGrant
235**
236** Description This function is called to grant security process.
237**
238** Parameters bd_addr - peer device bd address.
239** res - result of the operation SMP_SUCCESS if success.
240** Otherwise, SMP_REPEATED_ATTEMPTS is too many attempts.
241**
242** Returns None
243**
244*******************************************************************************/
245 SMP_API extern void SMP_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
246
247/*******************************************************************************
248**
249** Function SMP_PasskeyReply
250**
251** Description This function is called after Security Manager submitted
252** Passkey request to the application.
253**
254** Parameters: bd_addr - Address of the device for which PIN was requested
255** res - result of the operation BTM_SUCCESS if success
256** passkey - numeric value in the range of
257** BTM_MIN_PASSKEY_VAL(0) - BTM_MAX_PASSKEY_VAL(999999(0xF423F)).
258**
259*******************************************************************************/
260 SMP_API extern void SMP_PasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
261
262/*******************************************************************************
263**
264** Function SMP_OobDataReply
265**
266** Description This function is called to provide the OOB data for
267** Simple Pairing in response to BTM_SP_RMT_OOB_EVT
268**
269** Parameters: bd_addr - Address of the peer device
270** res - result of the operation SMP_SUCCESS if success
271** p_data - simple pairing Randomizer C.
272**
273*******************************************************************************/
274 SMP_API extern void SMP_OobDataReply(BD_ADDR bd_addr, tSMP_STATUS res, UINT8 len,
275 UINT8 *p_data);
276
277/*******************************************************************************
278**
279** Function SMP_Encrypt
280**
281** Description This function is called to encrypt the data with the specified
282** key
283**
284** Parameters: key - Pointer to key key[0] conatins the MSB
285** key_len - key length
286** plain_text - Pointer to data to be encrypted
287** plain_text[0] conatins the MSB
288** pt_len - plain text length
289** p_out - pointer to the encrypted outputs
290**
291** Returns Boolean - TRUE: encryption is successful
292*******************************************************************************/
293 SMP_API extern BOOLEAN SMP_Encrypt (UINT8 *key, UINT8 key_len,
294 UINT8 *plain_text, UINT8 pt_len,
295 tSMP_ENC *p_out);
296
297#ifdef __cplusplus
298}
299#endif
300#endif /* SMP_API_H */