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:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 2 /*!
AnnaBridge 171:3a7713b1edbc 3 * \file hpal_hci.h
AnnaBridge 171:3a7713b1edbc 4 *
AnnaBridge 171:3a7713b1edbc 5 * \brief HPAL HCI abstraction.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * \internal
AnnaBridge 171:3a7713b1edbc 8
AnnaBridge 171:3a7713b1edbc 9 * Copyright (c) 2015 ARM, Ltd., all rights reserved.
AnnaBridge 171:3a7713b1edbc 10 * ARM confidential and proprietary.
AnnaBridge 171:3a7713b1edbc 11 *
AnnaBridge 171:3a7713b1edbc 12 * IMPORTANT. Your use of this file is governed by a Software License Agreement
AnnaBridge 171:3a7713b1edbc 13 * ("Agreement") that must be accepted in order to download or otherwise receive a
AnnaBridge 171:3a7713b1edbc 14 * copy of this file. You may not use or copy this file for any purpose other than
AnnaBridge 171:3a7713b1edbc 15 * as described in the Agreement. If you do not agree to all of the terms of the
AnnaBridge 171:3a7713b1edbc 16 * Agreement do not use this file and delete all copies in your possession or control;
AnnaBridge 171:3a7713b1edbc 17 * if you do not have a copy of the Agreement, you must contact ARM, Ltd. prior
AnnaBridge 171:3a7713b1edbc 18 * to any use, copying or further distribution of this software.
AnnaBridge 171:3a7713b1edbc 19 *
AnnaBridge 171:3a7713b1edbc 20 * \endinternal
AnnaBridge 171:3a7713b1edbc 21 */
AnnaBridge 171:3a7713b1edbc 22 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 23
AnnaBridge 171:3a7713b1edbc 24 #ifndef HPAL_HCI_H
AnnaBridge 171:3a7713b1edbc 25 #define HPAL_HCI_H
AnnaBridge 171:3a7713b1edbc 26
AnnaBridge 171:3a7713b1edbc 27 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 28 extern "C" {
AnnaBridge 171:3a7713b1edbc 29 #endif
AnnaBridge 171:3a7713b1edbc 30
AnnaBridge 171:3a7713b1edbc 31 #include "wsf_types.h"
AnnaBridge 171:3a7713b1edbc 32
AnnaBridge 171:3a7713b1edbc 33 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 34 Data Types
AnnaBridge 171:3a7713b1edbc 35 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 36
AnnaBridge 171:3a7713b1edbc 37 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 38 /*!
AnnaBridge 171:3a7713b1edbc 39 * \struct hpalHciCbacks_t
AnnaBridge 171:3a7713b1edbc 40 *
AnnaBridge 171:3a7713b1edbc 41 * \brief Callbacks for allocating buffers and handling read and write completion.
AnnaBridge 171:3a7713b1edbc 42 */
AnnaBridge 171:3a7713b1edbc 43 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 44 typedef struct
AnnaBridge 171:3a7713b1edbc 45 {
AnnaBridge 171:3a7713b1edbc 46 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 47 /*!
AnnaBridge 171:3a7713b1edbc 48 * \brief Allocate a buffer for a received message.
AnnaBridge 171:3a7713b1edbc 49 *
AnnaBridge 171:3a7713b1edbc 50 * This function is called from an interrupt context.
AnnaBridge 171:3a7713b1edbc 51 *
AnnaBridge 171:3a7713b1edbc 52 * \param len Length of buffer
AnnaBridge 171:3a7713b1edbc 53 *
AnnaBridge 171:3a7713b1edbc 54 * \return Pointer to buffer or NULL if buffer could not be allocated
AnnaBridge 171:3a7713b1edbc 55 */
AnnaBridge 171:3a7713b1edbc 56 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 57 uint8_t *(*BufAlloc) (uint16_t len);
AnnaBridge 171:3a7713b1edbc 58
AnnaBridge 171:3a7713b1edbc 59 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 60 /*!
AnnaBridge 171:3a7713b1edbc 61 * \brief Free a buffer previously allocated with `BufAlloc()`.
AnnaBridge 171:3a7713b1edbc 62 *
AnnaBridge 171:3a7713b1edbc 63 * \param buf Pointer to buffer
AnnaBridge 171:3a7713b1edbc 64 */
AnnaBridge 171:3a7713b1edbc 65 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 66 void (*BufFree) (uint8_t *buf);
AnnaBridge 171:3a7713b1edbc 67
AnnaBridge 171:3a7713b1edbc 68 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 69 /*!
AnnaBridge 171:3a7713b1edbc 70 * \brief Handle read completion.
AnnaBridge 171:3a7713b1edbc 71 *
AnnaBridge 171:3a7713b1edbc 72 * This function is called from an interrupt context.
AnnaBridge 171:3a7713b1edbc 73 *
AnnaBridge 171:3a7713b1edbc 74 * \param type Packet type
AnnaBridge 171:3a7713b1edbc 75 * \param pData Packet data, which was allocated with `BufAlloc()`. The caller must free
AnnaBridge 171:3a7713b1edbc 76 * this buffer
AnnaBridge 171:3a7713b1edbc 77 * \param len Length of packet data, in bytes
AnnaBridge 171:3a7713b1edbc 78 *
AnnaBridge 171:3a7713b1edbc 79 * \return None.
AnnaBridge 171:3a7713b1edbc 80 */
AnnaBridge 171:3a7713b1edbc 81 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 82 void (*ReadDone) (uint8_t type, uint8_t *pData, uint16_t len);
AnnaBridge 171:3a7713b1edbc 83
AnnaBridge 171:3a7713b1edbc 84 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 85 /*!
AnnaBridge 171:3a7713b1edbc 86 * \brief Handle write completion.
AnnaBridge 171:3a7713b1edbc 87 *
AnnaBridge 171:3a7713b1edbc 88 * This function is called from an interrupt context.
AnnaBridge 171:3a7713b1edbc 89 *
AnnaBridge 171:3a7713b1edbc 90 * \parma type Packet type.
AnnaBridge 171:3a7713b1edbc 91 * \param pData Pointer to buffer that held written data, which was passed to
AnnaBridge 171:3a7713b1edbc 92 * `HpalHciWrite()`
AnnaBridge 171:3a7713b1edbc 93 * \param err Indicates success (0) or error (one of the `HPAL_HCI_ERROR_####` codes)
AnnaBridge 171:3a7713b1edbc 94 * \param pContext Context pointer passed to `HpalHciWrite()`
AnnaBridge 171:3a7713b1edbc 95 *
AnnaBridge 171:3a7713b1edbc 96 * \return None.
AnnaBridge 171:3a7713b1edbc 97 *
AnnaBridge 171:3a7713b1edbc 98 * \ref ERROR_CODES "error codes"
AnnaBridge 171:3a7713b1edbc 99 */
AnnaBridge 171:3a7713b1edbc 100 /*********************************************************************************************/
AnnaBridge 171:3a7713b1edbc 101 void (*WriteDone)(uint8_t type, uint8_t *pData, int32_t err, void *pContext);
AnnaBridge 171:3a7713b1edbc 102 } hpalHciCbacks_t;
AnnaBridge 171:3a7713b1edbc 103
AnnaBridge 171:3a7713b1edbc 104 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 105 /*!
AnnaBridge 171:3a7713b1edbc 106 * \name Logging levels
AnnaBridge 171:3a7713b1edbc 107 * \anchor LOGGING_LEVELS
AnnaBridge 171:3a7713b1edbc 108 * \brief Level of logging information printed about HCI packets received and transmitted.
AnnaBridge 171:3a7713b1edbc 109 */
AnnaBridge 171:3a7713b1edbc 110 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 111 /*! \{ */
AnnaBridge 171:3a7713b1edbc 112 enum
AnnaBridge 171:3a7713b1edbc 113 {
AnnaBridge 171:3a7713b1edbc 114 HPAL_HCI_LOGGING_LEVEL_OFF = 0, /*!< No information will be logged. */
AnnaBridge 171:3a7713b1edbc 115 HPAL_HCI_LOGGING_LEVEL_INFO = 1, /*!< Basic details about packets will be interpreted. */
AnnaBridge 171:3a7713b1edbc 116 HPAL_HCI_LOGGING_LEVEL_VERBOSE = 2 /*!< The full byte contents of packets will be logged. */
AnnaBridge 171:3a7713b1edbc 117 };
AnnaBridge 171:3a7713b1edbc 118 /*! \} */
AnnaBridge 171:3a7713b1edbc 119
AnnaBridge 171:3a7713b1edbc 120 /*! \brief The default log level. */
AnnaBridge 171:3a7713b1edbc 121 #define HPAL_HCI_LOGGING_LEVEL_DEFAULT HPAL_HCI_LOGGING_LEVEL_OFF
AnnaBridge 171:3a7713b1edbc 122
AnnaBridge 171:3a7713b1edbc 123 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 124 /*!
AnnaBridge 171:3a7713b1edbc 125 * \name Error codes
AnnaBridge 171:3a7713b1edbc 126 * \anchor ERROR_CODES
AnnaBridge 171:3a7713b1edbc 127 * \brief An error code returned in the `WriteDone()` callback.
AnnaBridge 171:3a7713b1edbc 128 */
AnnaBridge 171:3a7713b1edbc 129 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 130 /*! \{ */
AnnaBridge 171:3a7713b1edbc 131 enum
AnnaBridge 171:3a7713b1edbc 132 {
AnnaBridge 171:3a7713b1edbc 133 HPAL_HCI_ERROR_OK = 0, /*!< No error; the operation succeeded. */
AnnaBridge 171:3a7713b1edbc 134 HPAL_HCI_ERROR_BAD_ACK = -1, /*!< The write failed because a bad ACK was received. */
AnnaBridge 171:3a7713b1edbc 135 HPAL_HCI_ERROR_ABORTED = -2, /*!< The write was aborted. */
AnnaBridge 171:3a7713b1edbc 136 HPAL_HCI_ERROR_ALLOC = -3, /*!< Allocation failed. */
AnnaBridge 171:3a7713b1edbc 137 };
AnnaBridge 171:3a7713b1edbc 138 /*! \} */
AnnaBridge 171:3a7713b1edbc 139
AnnaBridge 171:3a7713b1edbc 140 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 141 Function Declarations
AnnaBridge 171:3a7713b1edbc 142 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 143
AnnaBridge 171:3a7713b1edbc 144 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 145 /*!
AnnaBridge 171:3a7713b1edbc 146 * \brief Initialize the HCI and prepare software for reading and writing.
AnnaBridge 171:3a7713b1edbc 147 *
AnnaBridge 171:3a7713b1edbc 148 * \return None.
AnnaBridge 171:3a7713b1edbc 149 *
AnnaBridge 171:3a7713b1edbc 150 * This function is called by `HpalBlepInit()` and generally should not be called by the
AnnaBridge 171:3a7713b1edbc 151 * application.
AnnaBridge 171:3a7713b1edbc 152 */
AnnaBridge 171:3a7713b1edbc 153 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 154 void HpalHciInit(void);
AnnaBridge 171:3a7713b1edbc 155
AnnaBridge 171:3a7713b1edbc 156 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 157 /*!
AnnaBridge 171:3a7713b1edbc 158 * \brief Set callbacks for HCI notifications and buffer allocations.
AnnaBridge 171:3a7713b1edbc 159 *
AnnaBridge 171:3a7713b1edbc 160 * \param pCbacks Pointer to callbacks. If NULL, the reference to the existing callbacks will be
AnnaBridge 171:3a7713b1edbc 161 * cleared.
AnnaBridge 171:3a7713b1edbc 162 *
AnnaBridge 171:3a7713b1edbc 163 * \return None.
AnnaBridge 171:3a7713b1edbc 164 */
AnnaBridge 171:3a7713b1edbc 165 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 166 void HpalHciSetCbacks(const hpalHciCbacks_t *pCbacks);
AnnaBridge 171:3a7713b1edbc 167
AnnaBridge 171:3a7713b1edbc 168 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 169 /*!
AnnaBridge 171:3a7713b1edbc 170 * \brief Take up the interface (i.e., start receiving messages and be able to transmit).
AnnaBridge 171:3a7713b1edbc 171 *
AnnaBridge 171:3a7713b1edbc 172 * \return None.
AnnaBridge 171:3a7713b1edbc 173 *
AnnaBridge 171:3a7713b1edbc 174 * HCI messages will be received and transmissions will be allowed. The HCI callbacks should have
AnnaBridge 171:3a7713b1edbc 175 * been set before the interface is taken up.
AnnaBridge 171:3a7713b1edbc 176 */
AnnaBridge 171:3a7713b1edbc 177 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 178 void HpalHciTakeUp(void);
AnnaBridge 171:3a7713b1edbc 179
AnnaBridge 171:3a7713b1edbc 180 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 181 /*!
AnnaBridge 171:3a7713b1edbc 182 * \brief Take down the interface (i.e., stop receiving messages and block transmissions).
AnnaBridge 171:3a7713b1edbc 183 *
AnnaBridge 171:3a7713b1edbc 184 * \return None.
AnnaBridge 171:3a7713b1edbc 185 *
AnnaBridge 171:3a7713b1edbc 186 * HCI messages will no longer be received and transmissions (i.e., calls to `HpalHciWrite()`) will
AnnaBridge 171:3a7713b1edbc 187 * be blocked. The HCI callbacks can only safely be cleared after the interface is taken down.
AnnaBridge 171:3a7713b1edbc 188 */
AnnaBridge 171:3a7713b1edbc 189 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 190 void HpalHciTakeDown(void);
AnnaBridge 171:3a7713b1edbc 191
AnnaBridge 171:3a7713b1edbc 192 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 193 /*!
AnnaBridge 171:3a7713b1edbc 194 * \brief Fully disable the interface.
AnnaBridge 171:3a7713b1edbc 195 *
AnnaBridge 171:3a7713b1edbc 196 * \return None.
AnnaBridge 171:3a7713b1edbc 197 *
AnnaBridge 171:3a7713b1edbc 198 * Disabling the interface may be necessary upon an unexpected event, such as a BLEP-specific
AnnaBridge 171:3a7713b1edbc 199 * command received after startup is complete.
AnnaBridge 171:3a7713b1edbc 200 */
AnnaBridge 171:3a7713b1edbc 201 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 202 void HpalHciDisable(void);
AnnaBridge 171:3a7713b1edbc 203
AnnaBridge 171:3a7713b1edbc 204 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 205 /*!
AnnaBridge 171:3a7713b1edbc 206 * \brief Enable or disable logging for HCI packets.
AnnaBridge 171:3a7713b1edbc 207 *
AnnaBridge 171:3a7713b1edbc 208 * \param level logging level
AnnaBridge 171:3a7713b1edbc 209 *
AnnaBridge 171:3a7713b1edbc 210 * \return None.
AnnaBridge 171:3a7713b1edbc 211 *
AnnaBridge 171:3a7713b1edbc 212 * \see \ref LOGGING_LEVELS "logging levels"
AnnaBridge 171:3a7713b1edbc 213 */
AnnaBridge 171:3a7713b1edbc 214 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 215 void HpalHciSetLoggingLevel(uint8_t level);
AnnaBridge 171:3a7713b1edbc 216
AnnaBridge 171:3a7713b1edbc 217 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 218 /*!
AnnaBridge 171:3a7713b1edbc 219 * \brief Write packet to HCI.
AnnaBridge 171:3a7713b1edbc 220 *
AnnaBridge 171:3a7713b1edbc 221 * \param type Packet type.
AnnaBridge 171:3a7713b1edbc 222 * \param pData Packet data.
AnnaBridge 171:3a7713b1edbc 223 * \param len Packet length, in bytes
AnnaBridge 171:3a7713b1edbc 224 * \param pContext Context pointer that will be returned in the `WriteDone()` callback
AnnaBridge 171:3a7713b1edbc 225 *
AnnaBridge 171:3a7713b1edbc 226 * \return None.
AnnaBridge 171:3a7713b1edbc 227 */
AnnaBridge 171:3a7713b1edbc 228 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 229 void HpalHciWrite(uint8_t type, const uint8_t *pData, uint16_t len, void *pContext);
AnnaBridge 171:3a7713b1edbc 230
AnnaBridge 171:3a7713b1edbc 231 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 232 };
AnnaBridge 171:3a7713b1edbc 233 #endif
AnnaBridge 171:3a7713b1edbc 234
AnnaBridge 171:3a7713b1edbc 235 #endif /* HPAL_HCI_H */