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.
TARGET_ARM_BEETLE_SOC/TOOLCHAIN_IAR/hpal_hci.h@171:3a7713b1edbc, 2018-11-08 (annotated)
- 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?
User | Revision | Line number | New 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 */ |