The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 2 /*!
AnnaBridge 171:3a7713b1edbc 3 * \file smp_api.h
AnnaBridge 171:3a7713b1edbc 4 *
AnnaBridge 171:3a7713b1edbc 5 * \brief SMP subsystem API.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * $Date: 2015-06-12 04:19:18 -0700 (Fri, 12 Jun 2015) $
AnnaBridge 171:3a7713b1edbc 8 * $Revision: 3061 $
AnnaBridge 171:3a7713b1edbc 9 *
AnnaBridge 171:3a7713b1edbc 10 * Copyright (c) 2010 Wicentric, Inc., all rights reserved.
AnnaBridge 171:3a7713b1edbc 11 * Wicentric confidential and proprietary.
AnnaBridge 171:3a7713b1edbc 12 *
AnnaBridge 171:3a7713b1edbc 13 * IMPORTANT. Your use of this file is governed by a Software License Agreement
AnnaBridge 171:3a7713b1edbc 14 * ("Agreement") that must be accepted in order to download or otherwise receive a
AnnaBridge 171:3a7713b1edbc 15 * copy of this file. You may not use or copy this file for any purpose other than
AnnaBridge 171:3a7713b1edbc 16 * as described in the Agreement. If you do not agree to all of the terms of the
AnnaBridge 171:3a7713b1edbc 17 * Agreement do not use this file and delete all copies in your possession or control;
AnnaBridge 171:3a7713b1edbc 18 * if you do not have a copy of the Agreement, you must contact Wicentric, Inc. prior
AnnaBridge 171:3a7713b1edbc 19 * to any use, copying or further distribution of this software.
AnnaBridge 171:3a7713b1edbc 20 */
AnnaBridge 171:3a7713b1edbc 21 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 22 #ifndef SMP_API_H
AnnaBridge 171:3a7713b1edbc 23 #define SMP_API_H
AnnaBridge 171:3a7713b1edbc 24
AnnaBridge 171:3a7713b1edbc 25 #include "wsf_os.h"
AnnaBridge 171:3a7713b1edbc 26 #include "smp_defs.h"
AnnaBridge 171:3a7713b1edbc 27 #include "dm_api.h"
AnnaBridge 171:3a7713b1edbc 28
AnnaBridge 171:3a7713b1edbc 29 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 30 extern "C" {
AnnaBridge 171:3a7713b1edbc 31 #endif
AnnaBridge 171:3a7713b1edbc 32
AnnaBridge 171:3a7713b1edbc 33 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 34 Macros
AnnaBridge 171:3a7713b1edbc 35 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 36
AnnaBridge 171:3a7713b1edbc 37 /*! Event handler messages for SMP state machines */
AnnaBridge 171:3a7713b1edbc 38 enum
AnnaBridge 171:3a7713b1edbc 39 {
AnnaBridge 171:3a7713b1edbc 40 SMP_MSG_API_PAIR_REQ = 1, /*! API pairing request */
AnnaBridge 171:3a7713b1edbc 41 SMP_MSG_API_PAIR_RSP, /*! API pairing response */
AnnaBridge 171:3a7713b1edbc 42 SMP_MSG_API_CANCEL_REQ, /*! API cancel request */
AnnaBridge 171:3a7713b1edbc 43 SMP_MSG_API_AUTH_RSP, /*! API pin response */
AnnaBridge 171:3a7713b1edbc 44 SMP_MSG_API_SECURITY_REQ, /*! API security request */
AnnaBridge 171:3a7713b1edbc 45 SMP_MSG_CMD_PKT, /*! SMP command packet received */
AnnaBridge 171:3a7713b1edbc 46 SMP_MSG_CMD_PAIRING_FAILED, /*! SMP pairing failed packet received */
AnnaBridge 171:3a7713b1edbc 47 SMP_MSG_DM_ENCRYPT_CMPL, /*! Link encrypted */
AnnaBridge 171:3a7713b1edbc 48 SMP_MSG_DM_ENCRYPT_FAILED, /*! Link encryption failed */
AnnaBridge 171:3a7713b1edbc 49 SMP_MSG_DM_CONN_CLOSE, /*! Connection closed */
AnnaBridge 171:3a7713b1edbc 50 SMP_MSG_WSF_AES_CMPL, /*! AES calculation complete */
AnnaBridge 171:3a7713b1edbc 51 SMP_MSG_INT_SEND_NEXT_KEY, /*! Send next key to be distributed */
AnnaBridge 171:3a7713b1edbc 52 SMP_MSG_INT_MAX_ATTEMPTS, /*! Maximum pairing attempts reached */
AnnaBridge 171:3a7713b1edbc 53 SMP_MSG_INT_PAIRING_CMPL, /*! Pairing complete */
AnnaBridge 171:3a7713b1edbc 54 SMP_MSG_INT_TIMEOUT, /*! Pairing protocol timeout */
AnnaBridge 171:3a7713b1edbc 55 SMP_MSG_INT_LESC, /*! Pair with Secure Connections */
AnnaBridge 171:3a7713b1edbc 56 SMP_MSG_INT_LEGACY, /*! Pair with Legacy Security */
AnnaBridge 171:3a7713b1edbc 57 SMP_MSG_INT_JW_NC, /*! LESC Just-Works/Numeric Comparison pairing */
AnnaBridge 171:3a7713b1edbc 58 SMP_MSG_INT_PASSKEY, /*! LESC Passkey pairing */
AnnaBridge 171:3a7713b1edbc 59 SMP_MSG_INT_OOB, /*! LESC Out-of-Band Pairing */
AnnaBridge 171:3a7713b1edbc 60 SMP_MSG_API_USER_CONFIRM, /*! User confirms valid numeric comparison */
AnnaBridge 171:3a7713b1edbc 61 SMP_MSG_API_USER_KEYPRESS, /*! User keypress in passkey pairing */
AnnaBridge 171:3a7713b1edbc 62 SMP_MSG_API_KEYPRESS_CMPL, /*! User keypress complete in passkey pairing */
AnnaBridge 171:3a7713b1edbc 63 SMP_MSG_WSF_ECC_CMPL, /*! WSF ECC operation complete */
AnnaBridge 171:3a7713b1edbc 64 SMP_MSG_INT_PK_NEXT, /*! Continue to next passkey bit */
AnnaBridge 171:3a7713b1edbc 65 SMP_MSG_INT_PK_CMPL, /*! Passkey operation complete */
AnnaBridge 171:3a7713b1edbc 66 SMP_MSG_WSF_CMAC_CMPL, /*! WSF CMAC operation complete */
AnnaBridge 171:3a7713b1edbc 67 SMP_MSG_DH_CHECK_FAILURE, /*! WSF CMAC operation complete */
AnnaBridge 171:3a7713b1edbc 68 SMP_NUM_MSGS
AnnaBridge 171:3a7713b1edbc 69 };
AnnaBridge 171:3a7713b1edbc 70
AnnaBridge 171:3a7713b1edbc 71 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 72 Data Types
AnnaBridge 171:3a7713b1edbc 73 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 74
AnnaBridge 171:3a7713b1edbc 75 /*! Configurable parameters */
AnnaBridge 171:3a7713b1edbc 76 typedef struct
AnnaBridge 171:3a7713b1edbc 77 {
AnnaBridge 171:3a7713b1edbc 78 uint16_t attemptTimeout; /*! 'Repeated attempts' timeout in msec */
AnnaBridge 171:3a7713b1edbc 79 uint8_t ioCap; /*! I/O Capability */
AnnaBridge 171:3a7713b1edbc 80 uint8_t minKeyLen; /*! Minimum encryption key length */
AnnaBridge 171:3a7713b1edbc 81 uint8_t maxKeyLen; /*! Maximum encryption key length */
AnnaBridge 171:3a7713b1edbc 82 uint8_t maxAttempts; /*! Attempts to trigger 'repeated attempts' timeout */
AnnaBridge 171:3a7713b1edbc 83 uint8_t auth; /*! Device authentication requirements */
AnnaBridge 171:3a7713b1edbc 84 } smpCfg_t;
AnnaBridge 171:3a7713b1edbc 85
AnnaBridge 171:3a7713b1edbc 86 /*! Data type for SMP_MSG_API_PAIR_REQ and SMP_MSG_API_PAIR_RSP */
AnnaBridge 171:3a7713b1edbc 87 typedef struct
AnnaBridge 171:3a7713b1edbc 88 {
AnnaBridge 171:3a7713b1edbc 89 wsfMsgHdr_t hdr;
AnnaBridge 171:3a7713b1edbc 90 uint8_t oob;
AnnaBridge 171:3a7713b1edbc 91 uint8_t auth;
AnnaBridge 171:3a7713b1edbc 92 uint8_t iKeyDist;
AnnaBridge 171:3a7713b1edbc 93 uint8_t rKeyDist;
AnnaBridge 171:3a7713b1edbc 94 } smpDmPair_t;
AnnaBridge 171:3a7713b1edbc 95
AnnaBridge 171:3a7713b1edbc 96 /*! Data type for SMP_MSG_API_AUTH_RSP */
AnnaBridge 171:3a7713b1edbc 97 typedef struct
AnnaBridge 171:3a7713b1edbc 98 {
AnnaBridge 171:3a7713b1edbc 99 wsfMsgHdr_t hdr;
AnnaBridge 171:3a7713b1edbc 100 uint8_t authData[SMP_OOB_LEN];
AnnaBridge 171:3a7713b1edbc 101 uint8_t authDataLen;
AnnaBridge 171:3a7713b1edbc 102 } smpDmAuthRsp_t;
AnnaBridge 171:3a7713b1edbc 103
AnnaBridge 171:3a7713b1edbc 104 /*! Data type for SMP_MSG_API_USER_KEYPRESS */
AnnaBridge 171:3a7713b1edbc 105 typedef struct
AnnaBridge 171:3a7713b1edbc 106 {
AnnaBridge 171:3a7713b1edbc 107 wsfMsgHdr_t hdr;
AnnaBridge 171:3a7713b1edbc 108 uint8_t keypress;
AnnaBridge 171:3a7713b1edbc 109 } smpDmKeypress_t;
AnnaBridge 171:3a7713b1edbc 110
AnnaBridge 171:3a7713b1edbc 111 /*! Data type for SMP_MSG_API_SECURITY_REQ */
AnnaBridge 171:3a7713b1edbc 112 typedef struct
AnnaBridge 171:3a7713b1edbc 113 {
AnnaBridge 171:3a7713b1edbc 114 wsfMsgHdr_t hdr;
AnnaBridge 171:3a7713b1edbc 115 uint8_t auth;
AnnaBridge 171:3a7713b1edbc 116 } smpDmSecurityReq_t;
AnnaBridge 171:3a7713b1edbc 117
AnnaBridge 171:3a7713b1edbc 118 /*! Union SMP DM message data types */
AnnaBridge 171:3a7713b1edbc 119 typedef union
AnnaBridge 171:3a7713b1edbc 120 {
AnnaBridge 171:3a7713b1edbc 121 wsfMsgHdr_t hdr;
AnnaBridge 171:3a7713b1edbc 122 smpDmPair_t pair;
AnnaBridge 171:3a7713b1edbc 123 smpDmAuthRsp_t authRsp;
AnnaBridge 171:3a7713b1edbc 124 smpDmSecurityReq_t securityReq;
AnnaBridge 171:3a7713b1edbc 125 smpDmKeypress_t keypress;
AnnaBridge 171:3a7713b1edbc 126 } smpDmMsg_t;
AnnaBridge 171:3a7713b1edbc 127
AnnaBridge 171:3a7713b1edbc 128 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 129 Global Variables;
AnnaBridge 171:3a7713b1edbc 130 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 131
AnnaBridge 171:3a7713b1edbc 132 /*! Configuration pointer */
AnnaBridge 171:3a7713b1edbc 133 extern smpCfg_t *pSmpCfg;
AnnaBridge 171:3a7713b1edbc 134
AnnaBridge 171:3a7713b1edbc 135 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 136 Function Declarations
AnnaBridge 171:3a7713b1edbc 137 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 138
AnnaBridge 171:3a7713b1edbc 139 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 140 /*!
AnnaBridge 171:3a7713b1edbc 141 * \fn SmpiInit
AnnaBridge 171:3a7713b1edbc 142 *
AnnaBridge 171:3a7713b1edbc 143 * \brief Initialize SMP initiator role.
AnnaBridge 171:3a7713b1edbc 144 *
AnnaBridge 171:3a7713b1edbc 145 * \return None.
AnnaBridge 171:3a7713b1edbc 146 */
AnnaBridge 171:3a7713b1edbc 147 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 148 void SmpiInit(void);
AnnaBridge 171:3a7713b1edbc 149
AnnaBridge 171:3a7713b1edbc 150 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 151 /*!
AnnaBridge 171:3a7713b1edbc 152 * \fn SmprInit
AnnaBridge 171:3a7713b1edbc 153 *
AnnaBridge 171:3a7713b1edbc 154 * \brief Initialize SMP responder role.
AnnaBridge 171:3a7713b1edbc 155 *
AnnaBridge 171:3a7713b1edbc 156 * \return None.
AnnaBridge 171:3a7713b1edbc 157 */
AnnaBridge 171:3a7713b1edbc 158 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 159 void SmprInit(void);
AnnaBridge 171:3a7713b1edbc 160
AnnaBridge 171:3a7713b1edbc 161 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 162 /*!
AnnaBridge 171:3a7713b1edbc 163 * \fn SmpiScInit
AnnaBridge 171:3a7713b1edbc 164 *
AnnaBridge 171:3a7713b1edbc 165 * \brief Initialize SMP initiator role utilizing BTLE Secure Connections.
AnnaBridge 171:3a7713b1edbc 166 *
AnnaBridge 171:3a7713b1edbc 167 * \return None.
AnnaBridge 171:3a7713b1edbc 168 */
AnnaBridge 171:3a7713b1edbc 169 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 170 void SmpiScInit(void);
AnnaBridge 171:3a7713b1edbc 171
AnnaBridge 171:3a7713b1edbc 172 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 173 /*!
AnnaBridge 171:3a7713b1edbc 174 * \fn SmprScInit
AnnaBridge 171:3a7713b1edbc 175 *
AnnaBridge 171:3a7713b1edbc 176 * \brief Initialize SMP responder role utilizing BTLE Secure Connections.
AnnaBridge 171:3a7713b1edbc 177 *
AnnaBridge 171:3a7713b1edbc 178 * \return None.
AnnaBridge 171:3a7713b1edbc 179 */
AnnaBridge 171:3a7713b1edbc 180 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 181 void SmprScInit(void);
AnnaBridge 171:3a7713b1edbc 182
AnnaBridge 171:3a7713b1edbc 183 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 184 /*!
AnnaBridge 171:3a7713b1edbc 185 * \fn SmpNonInit
AnnaBridge 171:3a7713b1edbc 186 *
AnnaBridge 171:3a7713b1edbc 187 * \brief Use this SMP init function when SMP is not supported.
AnnaBridge 171:3a7713b1edbc 188 *
AnnaBridge 171:3a7713b1edbc 189 * \return None.
AnnaBridge 171:3a7713b1edbc 190 */
AnnaBridge 171:3a7713b1edbc 191 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 192 void SmpNonInit(void);
AnnaBridge 171:3a7713b1edbc 193
AnnaBridge 171:3a7713b1edbc 194 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 195 /*!
AnnaBridge 171:3a7713b1edbc 196 * \fn SmpDmMsgSend
AnnaBridge 171:3a7713b1edbc 197 *
AnnaBridge 171:3a7713b1edbc 198 * \brief This function is called by DM to send a message to SMP.
AnnaBridge 171:3a7713b1edbc 199 *
AnnaBridge 171:3a7713b1edbc 200 * \param pMsg Pointer to message structure.
AnnaBridge 171:3a7713b1edbc 201 *
AnnaBridge 171:3a7713b1edbc 202 * \return None.
AnnaBridge 171:3a7713b1edbc 203 */
AnnaBridge 171:3a7713b1edbc 204 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 205 void SmpDmMsgSend(smpDmMsg_t *pMsg);
AnnaBridge 171:3a7713b1edbc 206
AnnaBridge 171:3a7713b1edbc 207 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 208 /*!
AnnaBridge 171:3a7713b1edbc 209 * \fn SmpDmEncryptInd
AnnaBridge 171:3a7713b1edbc 210 *
AnnaBridge 171:3a7713b1edbc 211 * \brief This function is called by DM to notify SMP of encrypted link status.
AnnaBridge 171:3a7713b1edbc 212 *
AnnaBridge 171:3a7713b1edbc 213 * \param pMsg Pointer to HCI message structure.
AnnaBridge 171:3a7713b1edbc 214 *
AnnaBridge 171:3a7713b1edbc 215 * \return None.
AnnaBridge 171:3a7713b1edbc 216 */
AnnaBridge 171:3a7713b1edbc 217 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 218 void SmpDmEncryptInd(wsfMsgHdr_t *pMsg);
AnnaBridge 171:3a7713b1edbc 219
AnnaBridge 171:3a7713b1edbc 220 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 221 /*!
AnnaBridge 171:3a7713b1edbc 222 * \fn SmpDmGetStk
AnnaBridge 171:3a7713b1edbc 223 *
AnnaBridge 171:3a7713b1edbc 224 * \brief Return the STK for the given connection.
AnnaBridge 171:3a7713b1edbc 225 *
AnnaBridge 171:3a7713b1edbc 226 * \param connId Connection identifier.
AnnaBridge 171:3a7713b1edbc 227 * \param pSecLevel Returns the security level of pairing when STK was created.
AnnaBridge 171:3a7713b1edbc 228 *
AnnaBridge 171:3a7713b1edbc 229 * \return Pointer to STK or NULL if not available.
AnnaBridge 171:3a7713b1edbc 230 */
AnnaBridge 171:3a7713b1edbc 231 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 232 uint8_t *SmpDmGetStk(dmConnId_t connId, uint8_t *pSecLevel);
AnnaBridge 171:3a7713b1edbc 233
AnnaBridge 171:3a7713b1edbc 234 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 235 };
AnnaBridge 171:3a7713b1edbc 236 #endif
AnnaBridge 171:3a7713b1edbc 237
AnnaBridge 171:3a7713b1edbc 238 #endif /* SMP_API_H */