15738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
25738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
35738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Copyright (C) 1999-2012 Broadcom Corporation
45738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
55738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
65738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  you may not use this file except in compliance with the License.
75738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  You may obtain a copy of the License at:
85738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
95738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  See the License for the specific language governing permissions and
155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  limitations under the License.
165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/******************************************************************************
205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *  This file contains the SMP API function external definitions.
225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project *
235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project ******************************************************************************/
245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SMP_API_H
255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_API_H
265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#include "bt_target.h"
285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PIN_CODE_LEN_MAX    PIN_CODE_LEN
305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PIN_CODE_LEN_MIN    6
315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP event type */
335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_REQ_EVT      1       /* IO capability request event */
345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_REQUEST_EVT     2       /* SMP pairing request */
355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PASSKEY_NOTIF_EVT   3       /* passkey notification event */
365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PASSKEY_REQ_EVT     4       /* passkey request event */
375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OOB_REQ_EVT         5       /* OOB request event */
385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_COMPLT_EVT          6       /* SMP complete event */
395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8   tSMP_EVT;
405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* pairing failure reason code */
435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PASSKEY_ENTRY_FAIL      0x01
445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_OOB_FAIL                0x02
455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_AUTH_FAIL          0x03
465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_CONFIRM_VALUE_ERR       0x04
475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_NOT_SUPPORT        0x05
485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENC_KEY_SIZE            0x06
495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_INVALID_CMD             0x07
505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FAIL_UNKNOWN       0x08
515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_REPEATED_ATTEMPTS       0x09
525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_FAILURE_MAX        SMP_REPEATED_ATTEMPTS
535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* self defined error code */
545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_PAIR_INTERNAL_ERR       0x0A
555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_UNKNOWN_IO_CAP          0x0B    /* unknown IO capability, unable to decide associatino model */
565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_INIT_FAIL               0x0C
575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_CONFIRM_FAIL            0x0D
585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_BUSY                    0x0E
595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_ENC_FAIL                0x0F
605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_STARTED                 0x10
615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_RSP_TIMEOUT             0x11
625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_DIV_NOT_AVAIL           0x12
635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_FAIL                    0x13 /* unspecified failed reason */
64ead3cde4bac0c3e32cd31f149093f004eef8ceebGanesh Ganapathi Batta#define SMP_CONN_TOUT               0x14 /* unspecified failed reason */
655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SUCCESS                 0
665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_STATUS;
685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Device IO capability */
715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_OUT      BTM_IO_CAP_OUT   /* DisplayOnly */
725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_IO       BTM_IO_CAP_IO   /* DisplayYesNo */
735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_IN       BTM_IO_CAP_IN   /* KeyboardOnly */
745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_NONE     BTM_IO_CAP_NONE   /* NoInputNoOutput */
755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_KBDISP   BTM_IO_CAP_KBDISP   /* Keyboard Display */
765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_IO_CAP_MAX      BTM_IO_CAP_MAX
775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8  tSMP_IO_CAP;
785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifndef SMP_DEFAULT_IO_CAPS
805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    #define SMP_DEFAULT_IO_CAPS     SMP_IO_CAP_KBDISP
815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* OOB data present or not */
845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectenum
855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_OOB_NONE,
875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_OOB_PRESENT,
885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_OOB_UNKNOWN
895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project};
905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8  tSMP_OOB_FLAG;
915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_NO_BOND        0x00
935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_GEN_BOND       0x01 //todo sdh change GEN_BOND to BOND
945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP Authentication requirement */
965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_YN_BIT           (1 << 2)
975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_MASK           (SMP_AUTH_GEN_BOND|SMP_AUTH_YN_BIT)
985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_BOND           SMP_AUTH_GEN_BOND
1015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_NB_ENC_ONLY    0x00 //(SMP_AUTH_MASK | BTM_AUTH_SP_NO)   /* no MITM, No Bonding, Encryptino only */
1035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_NB_IOCAP       (SMP_AUTH_NO_BOND | SMP_AUTH_YN_BIT)   /* MITM, No Bonding, Use IO Capability
1045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        to detrermine authenticaion procedure */
1055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_GB_ENC_ONLY    (SMP_AUTH_GEN_BOND )   /* no MITM, General Bonding, Encryptino only */
1065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_AUTH_GB_IOCAP       (SMP_AUTH_GEN_BOND | SMP_AUTH_YN_BIT)  /* MITM, General Bonding, Use IO Capability
1075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        to detrermine authenticaion procedure   */
1085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_AUTH_REQ;
1095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_NONE                 0
1115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_UNAUTHENTICATE      (1 << 0)
1125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_AUTHENTICATED       (1 << 2)
1135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_SEC_LEVEL;
1145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* SMP key types */
1165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_KEY_TYPE_ENC                (1 << 0)    /* encryption key */
1175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_KEY_TYPE_ID                 (1 << 1)    /* identity key */
1185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_KEY_TYPE_CSRK               (1 << 2)    /* slave CSRK */
1195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 tSMP_KEYS;
1205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* default security key distribution value */
1225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#define SMP_SEC_DEFAULT_KEY                  (SMP_SEC_KEY_TYPE_ENC | SMP_SEC_KEY_TYPE_ID | SMP_SEC_KEY_TYPE_CSRK)
1235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* data type for BTM_SP_IO_REQ_EVT */
1255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_IO_CAP     io_cap;         /* local IO capabilities */
1285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_OOB_FLAG   oob_data;       /* OOB data present (locally) for the peer device */
1295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_AUTH_REQ   auth_req;       /* Authentication required (for local device) */
1305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8           max_key_size;   /* max encryption key size */
1315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_KEYS       init_keys;      /* initiator keys to be distributed */
1325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_KEYS       resp_keys;      /* responder keys */
1335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tSMP_IO_REQ;
1345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1377fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tSMP_STATUS     reason;
1387fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    tSMP_SEC_LEVEL  sec_level;
1397fa4fba6f59f97df00aff07dbe8fb21b114b3c2cGanesh Ganapathi Batta    BOOLEAN         is_pair_cancel;
1405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tSMP_CMPL;
1415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef union
1435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT32          passkey;
1455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_IO_REQ     io_req;     /* IO request */
1465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    tSMP_CMPL       cmplt;
1475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}tSMP_EVT_DATA;
1495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* AES Encryption output */
1525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef struct
1535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   status;
1555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   param_len;
1565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT16  opcode;
1575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    UINT8   param_buf[BT_OCTET16_LEN];
1585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project} tSMP_ENC;
1595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* Simple Pairing Events.  Called by the stack when Simple Pairing related
1615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** events occur.
1625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
1635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef UINT8 (tSMP_CALLBACK) (tSMP_EVT event, BD_ADDR bd_addr, tSMP_EVT_DATA *p_data);
1645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* callback function for CMAC algorithm
1665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*/
1675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projecttypedef void (tCMAC_CMPL_CBACK)(UINT8 *p_mac, UINT16 tlen, UINT32 sign_counter);
1685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*****************************************************************************
1705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  External Function Declarations
1715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*****************************************************************************/
1725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
1735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Projectextern "C"
1745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project{
1755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
1765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/* API of SMP */
1775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_Init
1815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function initializes the SMP unit.
1835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
1855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern void SMP_Init(void);
1885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
1895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
1905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_SetTraceLevel
1925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function sets the trace level for SMP.  If called with
1945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  a value of 0xFF, it simply returns the current trace level.
1955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          The new or current trace level
1975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
1985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
1995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern UINT8 SMP_SetTraceLevel (UINT8 new_level);
2005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2025738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2035738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_Register
2045738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2055738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function register for the SMP service callback.
2065738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2075738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          void
2085738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2095738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2105738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern BOOLEAN SMP_Register (tSMP_CALLBACK *p_cback);
2115738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2125738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2135738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2145738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_Pair
2155738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2165738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to start a SMP pairing.
2175738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2185738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          SMP_STARTED if bond started, else otherwise exception.
2195738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2205738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2215738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern tSMP_STATUS SMP_Pair (BD_ADDR bd_addr);
2225738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2235738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2245738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_PairCancel
2255738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2265738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to cancel a SMP pairing.
2275738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2285738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          TRUE - pairing cancelled
2295738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2305738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2315738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern  BOOLEAN SMP_PairCancel (BD_ADDR bd_addr);
2325738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2335738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2345738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2355738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_SecurityGrant
2365738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2375738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to grant security process.
2385738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2395738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters       bd_addr - peer device bd address.
2405738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  res     - result of the operation SMP_SUCCESS if success.
2415738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                            Otherwise, SMP_REPEATED_ATTEMPTS is too many attempts.
2425738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2435738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Returns          None
2445738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2455738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2465738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern void SMP_SecurityGrant(BD_ADDR bd_addr, UINT8 res);
2475738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2485738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2495738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2505738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_PasskeyReply
2515738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2525738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called after Security Manager submitted
2535738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Passkey request to the application.
2545738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2555738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:      bd_addr      - Address of the device for which PIN was requested
2565738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  res          - result of the operation BTM_SUCCESS if success
2575738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  passkey      - numeric value in the range of
2585738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  BTM_MIN_PASSKEY_VAL(0) - BTM_MAX_PASSKEY_VAL(999999(0xF423F)).
2595738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2605738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2615738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern void SMP_PasskeyReply (BD_ADDR bd_addr, UINT8 res, UINT32 passkey);
2625738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2635738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2645738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2655738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_OobDataReply
2665738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2675738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to provide the OOB data for
2685738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  Simple Pairing in response to BTM_SP_RMT_OOB_EVT
2695738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2705738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:      bd_addr     - Address of the peer device
2715738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  res         - result of the operation SMP_SUCCESS if success
2725738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_data      - simple pairing Randomizer  C.
2735738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2745738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2755738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern void SMP_OobDataReply(BD_ADDR bd_addr, tSMP_STATUS res, UINT8 len,
2765738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                         UINT8 *p_data);
2775738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2785738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project/*******************************************************************************
2795738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2805738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Function         SMP_Encrypt
2815738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2825738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Description      This function is called to encrypt the data with the specified
2835738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  key
2845738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2855738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project** Parameters:      key                 - Pointer to key key[0] conatins the MSB
2865738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  key_len             - key length
2875738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  plain_text          - Pointer to data to be encrypted
2885738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                                        plain_text[0] conatins the MSB
2895738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  pt_len              - plain text length
2905738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**                  p_out               - pointer to the encrypted outputs
2915738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**
2925738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project**  Returns         Boolean - TRUE: encryption is successful
2935738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project*******************************************************************************/
2945738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project    SMP_API extern BOOLEAN SMP_Encrypt (UINT8 *key, UINT8 key_len,
2955738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        UINT8 *plain_text, UINT8 pt_len,
2965738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project                                        tSMP_ENC *p_out);
2975738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project
2985738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#ifdef __cplusplus
2995738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project}
3005738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif
3015738f83aeb59361a0a2eda2460113f6dc919427The Android Open Source Project#endif /* SMP_API_H */
302