Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki(https://github.com/sevencore/BLEFOTA).

Dependencies:   mbed

Fork of mbed_fota by KIM HyoengJun

Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki.

Committer:
dudnwjs
Date:
Mon Aug 24 02:29:16 2015 +0000
Revision:
9:fcf91f563147
Parent:
5:e11b23f9aacc
Child:
10:18044afe4364
Add comment for form doxygen;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudnwjs 4:60be78a172c2 1 #ifndef GAPC_TASK_H
dudnwjs 4:60be78a172c2 2 #define GAPC_TASK_H
dudnwjs 4:60be78a172c2 3
dudnwjs 4:60be78a172c2 4 #include "dialog_fota_config.h"
dudnwjs 5:e11b23f9aacc 5 #include "gap.h"
dudnwjs 4:60be78a172c2 6
dudnwjs 9:fcf91f563147 7 /**
dudnwjs 9:fcf91f563147 8 ****************************************************************************************
dudnwjs 9:fcf91f563147 9 * @addtogroup dialog_fota module
dudnwjs 9:fcf91f563147 10 * @brief Generic Access Profile Controller Header.
dudnwjs 9:fcf91f563147 11 *
dudnwjs 9:fcf91f563147 12 * @{
dudnwjs 9:fcf91f563147 13 ****************************************************************************************
dudnwjs 9:fcf91f563147 14 */
dudnwjs 4:60be78a172c2 15 namespace sevencore_fota{
dudnwjs 9:fcf91f563147 16
dudnwjs 4:60be78a172c2 17 /// GAP Controller Task messages
dudnwjs 4:60be78a172c2 18 enum gapc_msg_id
dudnwjs 4:60be78a172c2 19 {
dudnwjs 4:60be78a172c2 20 /* Default event */
dudnwjs 4:60be78a172c2 21 /// Command Complete event
dudnwjs 4:60be78a172c2 22 GAPC_CMP_EVT = 14336,
dudnwjs 4:60be78a172c2 23
dudnwjs 4:60be78a172c2 24 /* Connection state information */
dudnwjs 4:60be78a172c2 25 /// Indicate that a connection has been established
dudnwjs 4:60be78a172c2 26 GAPC_CONNECTION_REQ_IND,
dudnwjs 4:60be78a172c2 27 /// Set specific link data configuration.
dudnwjs 4:60be78a172c2 28 GAPC_CONNECTION_CFM,
dudnwjs 4:60be78a172c2 29
dudnwjs 4:60be78a172c2 30 /// Indicate that a link has been disconnected
dudnwjs 4:60be78a172c2 31 GAPC_DISCONNECT_IND,
dudnwjs 4:60be78a172c2 32
dudnwjs 4:60be78a172c2 33 /* Link management command */
dudnwjs 4:60be78a172c2 34 /// Request disconnection of current link command.
dudnwjs 4:60be78a172c2 35 GAPC_DISCONNECT_CMD,
dudnwjs 4:60be78a172c2 36
dudnwjs 4:60be78a172c2 37 /* Peer device info */
dudnwjs 4:60be78a172c2 38 /// Retrieve information command
dudnwjs 4:60be78a172c2 39 GAPC_GET_INFO_CMD,
dudnwjs 4:60be78a172c2 40 /// Name of peer device indication
dudnwjs 4:60be78a172c2 41 GAPC_PEER_NAME_IND,
dudnwjs 4:60be78a172c2 42 /// Indication of peer version info
dudnwjs 4:60be78a172c2 43 GAPC_PEER_VERSION_IND,
dudnwjs 4:60be78a172c2 44 /// Indication of peer features info
dudnwjs 4:60be78a172c2 45 GAPC_PEER_FEATURES_IND,
dudnwjs 4:60be78a172c2 46
dudnwjs 4:60be78a172c2 47 /// Indication of ongoing connection RSSI
dudnwjs 4:60be78a172c2 48 GAPC_CON_RSSI_IND,
dudnwjs 4:60be78a172c2 49 /// Indication of peer privacy info
dudnwjs 4:60be78a172c2 50 GAPC_PRIVACY_IND,
dudnwjs 4:60be78a172c2 51 /// Indication of peer reconnection address info
dudnwjs 4:60be78a172c2 52 GAPC_RECON_ADDR_IND,
dudnwjs 4:60be78a172c2 53
dudnwjs 4:60be78a172c2 54 /* Privacy configuration */
dudnwjs 4:60be78a172c2 55 /// Set Privacy flag command.
dudnwjs 4:60be78a172c2 56 GAPC_SET_PRIVACY_CMD,
dudnwjs 4:60be78a172c2 57 /// Set Reconnection Address Value command.
dudnwjs 4:60be78a172c2 58 GAPC_SET_RECON_ADDR_CMD,
dudnwjs 4:60be78a172c2 59
dudnwjs 4:60be78a172c2 60 /* Connection parameters update */
dudnwjs 4:60be78a172c2 61 /// Perform update of connection parameters command
dudnwjs 4:60be78a172c2 62 GAPC_PARAM_UPDATE_CMD,
dudnwjs 4:60be78a172c2 63 /// Request of updating connection parameters indication
dudnwjs 4:60be78a172c2 64 GAPC_PARAM_UPDATE_REQ_IND,
dudnwjs 4:60be78a172c2 65 /// Master confirm or not that parameters proposed by slave are accepted or not
dudnwjs 4:60be78a172c2 66 GAPC_PARAM_UPDATE_CFM,
dudnwjs 4:60be78a172c2 67 /// Connection parameters updated indication
dudnwjs 4:60be78a172c2 68 GAPC_PARAM_UPDATED_IND,
dudnwjs 4:60be78a172c2 69
dudnwjs 4:60be78a172c2 70 /* Bonding procedure */
dudnwjs 4:60be78a172c2 71 /// Start Bonding command procedure
dudnwjs 4:60be78a172c2 72 GAPC_BOND_CMD,
dudnwjs 4:60be78a172c2 73 /// Bonding requested by peer device indication message.
dudnwjs 4:60be78a172c2 74 GAPC_BOND_REQ_IND,
dudnwjs 4:60be78a172c2 75 /// Confirm requested bond information.
dudnwjs 4:60be78a172c2 76 GAPC_BOND_CFM,
dudnwjs 4:60be78a172c2 77 /// Bonding information indication message
dudnwjs 4:60be78a172c2 78 GAPC_BOND_IND,
dudnwjs 4:60be78a172c2 79
dudnwjs 4:60be78a172c2 80 /* Encryption procedure */
dudnwjs 4:60be78a172c2 81 /// Start Encryption command procedure
dudnwjs 4:60be78a172c2 82 GAPC_ENCRYPT_CMD,
dudnwjs 4:60be78a172c2 83 /// Encryption requested by peer device indication message.
dudnwjs 4:60be78a172c2 84 GAPC_ENCRYPT_REQ_IND,
dudnwjs 4:60be78a172c2 85 /// Confirm requested Encryption information.
dudnwjs 4:60be78a172c2 86 GAPC_ENCRYPT_CFM,
dudnwjs 4:60be78a172c2 87 /// Encryption information indication message
dudnwjs 4:60be78a172c2 88 GAPC_ENCRYPT_IND,
dudnwjs 4:60be78a172c2 89
dudnwjs 4:60be78a172c2 90 /* Security request procedure */
dudnwjs 4:60be78a172c2 91 /// Start Security Request command procedure
dudnwjs 4:60be78a172c2 92 GAPC_SECURITY_CMD,
dudnwjs 4:60be78a172c2 93 /// Security requested by peer device indication message
dudnwjs 4:60be78a172c2 94 GAPC_SECURITY_IND,
dudnwjs 4:60be78a172c2 95
dudnwjs 4:60be78a172c2 96 /* Signature procedure */
dudnwjs 4:60be78a172c2 97 /// Indicate the current sign counters to the application
dudnwjs 4:60be78a172c2 98 GAPC_SIGN_COUNTER_IND,
dudnwjs 4:60be78a172c2 99
dudnwjs 4:60be78a172c2 100 /* Device information */
dudnwjs 4:60be78a172c2 101 /// Indication of ongoing connection Channel Map
dudnwjs 4:60be78a172c2 102 GAPC_CON_CHANNEL_MAP_IND,
dudnwjs 4:60be78a172c2 103
dudnwjs 4:60be78a172c2 104
dudnwjs 4:60be78a172c2 105 /* Internal messages for timer events, not part of API*/
dudnwjs 4:60be78a172c2 106 /// Parameter update procedure timeout indication
dudnwjs 4:60be78a172c2 107 GAPC_PARAM_UPDATE_TO_IND,
dudnwjs 4:60be78a172c2 108
dudnwjs 4:60be78a172c2 109 };
dudnwjs 4:60be78a172c2 110
dudnwjs 4:60be78a172c2 111 /// request operation type - application interface
dudnwjs 4:60be78a172c2 112 enum gapc_operation
dudnwjs 4:60be78a172c2 113 {
dudnwjs 4:60be78a172c2 114 /* Operation Flags */
dudnwjs 4:60be78a172c2 115 /* No Operation (if nothing has been requested) */
dudnwjs 4:60be78a172c2 116 /* ************************************************ */
dudnwjs 4:60be78a172c2 117 /// No operation
dudnwjs 4:60be78a172c2 118 GAPC_NO_OP = 0x00,
dudnwjs 4:60be78a172c2 119
dudnwjs 4:60be78a172c2 120 /* Connection management */
dudnwjs 4:60be78a172c2 121 /// Disconnect link
dudnwjs 4:60be78a172c2 122 GAPC_DISCONNECT,
dudnwjs 4:60be78a172c2 123
dudnwjs 4:60be78a172c2 124 /* Connection information */
dudnwjs 4:60be78a172c2 125 /// Retrieve name of peer device.
dudnwjs 4:60be78a172c2 126 GAPC_GET_PEER_NAME,
dudnwjs 4:60be78a172c2 127 /// Retrieve peer device version info.
dudnwjs 4:60be78a172c2 128 GAPC_GET_PEER_VERSION,
dudnwjs 4:60be78a172c2 129 /// Retrieve peer device features.
dudnwjs 4:60be78a172c2 130 GAPC_GET_PEER_FEATURES,
dudnwjs 4:60be78a172c2 131 /// Retrieve connection RSSI.
dudnwjs 4:60be78a172c2 132 GAPC_GET_CON_RSSI,
dudnwjs 4:60be78a172c2 133 /// Retrieve Privacy Info.
dudnwjs 4:60be78a172c2 134 GAPC_GET_PRIVACY,
dudnwjs 4:60be78a172c2 135 /// Retrieve Reconnection Address Value.
dudnwjs 4:60be78a172c2 136 GAPC_GET_RECON_ADDR,
dudnwjs 4:60be78a172c2 137
dudnwjs 4:60be78a172c2 138 /* Privacy Configuration */
dudnwjs 4:60be78a172c2 139 /// Set Privacy flag.
dudnwjs 4:60be78a172c2 140 GAPC_SET_PRIVACY,
dudnwjs 4:60be78a172c2 141 /// Set Reconnection Address Value.
dudnwjs 4:60be78a172c2 142 GAPC_SET_RECON_ADDR,
dudnwjs 4:60be78a172c2 143
dudnwjs 4:60be78a172c2 144 /* Connection parameters update */
dudnwjs 4:60be78a172c2 145 /// Perform update of connection parameters.
dudnwjs 4:60be78a172c2 146 GAPC_UPDATE_PARAMS,
dudnwjs 4:60be78a172c2 147
dudnwjs 4:60be78a172c2 148 /* Security procedures */
dudnwjs 4:60be78a172c2 149 /// Start bonding procedure.
dudnwjs 4:60be78a172c2 150 GAPC_BOND,
dudnwjs 4:60be78a172c2 151 /// Start encryption procedure.
dudnwjs 4:60be78a172c2 152 GAPC_ENCRYPT,
dudnwjs 4:60be78a172c2 153 /// Start security request procedure
dudnwjs 4:60be78a172c2 154 GAPC_SECURITY_REQ,
dudnwjs 4:60be78a172c2 155
dudnwjs 4:60be78a172c2 156 /* Connection information */
dudnwjs 4:60be78a172c2 157 /// Retrieve Connection Channel MAP.
dudnwjs 4:60be78a172c2 158 GAPC_GET_CON_CHANNEL_MAP,
dudnwjs 4:60be78a172c2 159
dudnwjs 4:60be78a172c2 160
dudnwjs 4:60be78a172c2 161 /// Last GAPC operation flag
dudnwjs 4:60be78a172c2 162 GAPC_LAST
dudnwjs 4:60be78a172c2 163 };
dudnwjs 4:60be78a172c2 164
dudnwjs 4:60be78a172c2 165 /// Bond event type.
dudnwjs 4:60be78a172c2 166 enum gapc_bond
dudnwjs 4:60be78a172c2 167 {
dudnwjs 4:60be78a172c2 168 /// Bond Pairing request
dudnwjs 4:60be78a172c2 169 GAPC_PAIRING_REQ,
dudnwjs 4:60be78a172c2 170 /// Respond to Pairing request
dudnwjs 4:60be78a172c2 171 GAPC_PAIRING_RSP,
dudnwjs 4:60be78a172c2 172
dudnwjs 4:60be78a172c2 173 /// Pairing Finished information
dudnwjs 4:60be78a172c2 174 GAPC_PAIRING_SUCCEED,
dudnwjs 4:60be78a172c2 175 /// Pairing Failed information
dudnwjs 4:60be78a172c2 176 GAPC_PAIRING_FAILED,
dudnwjs 4:60be78a172c2 177
dudnwjs 4:60be78a172c2 178 /// Used to retrieve pairing Temporary Key
dudnwjs 4:60be78a172c2 179 GAPC_TK_EXCH,
dudnwjs 4:60be78a172c2 180 /// Used for Identity Resolving Key exchange
dudnwjs 4:60be78a172c2 181 GAPC_IRK_EXCH,
dudnwjs 4:60be78a172c2 182 /// Used for Connection Signature Resolving Key exchange
dudnwjs 4:60be78a172c2 183 GAPC_CSRK_EXCH,
dudnwjs 4:60be78a172c2 184 /// Used for Long Term Key exchange
dudnwjs 4:60be78a172c2 185 GAPC_LTK_EXCH,
dudnwjs 4:60be78a172c2 186
dudnwjs 4:60be78a172c2 187 /// Bond Pairing request issue, Repeated attempt
dudnwjs 4:60be78a172c2 188 GAPC_REPEATED_ATTEMPT,
dudnwjs 4:60be78a172c2 189 };
dudnwjs 4:60be78a172c2 190
dudnwjs 4:60be78a172c2 191 /// Command complete event data structure
dudnwjs 4:60be78a172c2 192 struct gapc_cmp_evt
dudnwjs 4:60be78a172c2 193 {
dudnwjs 4:60be78a172c2 194 /// GAP request type
dudnwjs 4:60be78a172c2 195 uint8_t operation;
dudnwjs 4:60be78a172c2 196 /// Status of the request
dudnwjs 4:60be78a172c2 197 uint8_t status;
dudnwjs 4:60be78a172c2 198 };
dudnwjs 4:60be78a172c2 199
dudnwjs 4:60be78a172c2 200 /// Indicate that a connection has been established
dudnwjs 4:60be78a172c2 201 struct gapc_connection_req_ind
dudnwjs 4:60be78a172c2 202 {
dudnwjs 4:60be78a172c2 203 /// Connection handle
dudnwjs 4:60be78a172c2 204 uint16_t conhdl;
dudnwjs 4:60be78a172c2 205 /// Connection interval
dudnwjs 4:60be78a172c2 206 uint16_t con_interval;
dudnwjs 4:60be78a172c2 207 /// Connection latency
dudnwjs 4:60be78a172c2 208 uint16_t con_latency;
dudnwjs 4:60be78a172c2 209 /// Link supervision timeout
dudnwjs 4:60be78a172c2 210 uint16_t sup_to;
dudnwjs 4:60be78a172c2 211 /// Clock accuracy
dudnwjs 4:60be78a172c2 212 uint8_t clk_accuracy;
dudnwjs 4:60be78a172c2 213 /// Peer address type
dudnwjs 4:60be78a172c2 214 uint8_t peer_addr_type;
dudnwjs 4:60be78a172c2 215 /// Peer BT address
dudnwjs 4:60be78a172c2 216 struct bd_addr peer_addr;
dudnwjs 4:60be78a172c2 217 };
dudnwjs 5:e11b23f9aacc 218
dudnwjs 5:e11b23f9aacc 219
dudnwjs 5:e11b23f9aacc 220
dudnwjs 5:e11b23f9aacc 221 /// Indicate that a link has been disconnected
dudnwjs 5:e11b23f9aacc 222 struct gapc_disconnect_ind
dudnwjs 5:e11b23f9aacc 223 {
dudnwjs 5:e11b23f9aacc 224 /// Connection handle
dudnwjs 5:e11b23f9aacc 225 uint16_t conhdl;
dudnwjs 5:e11b23f9aacc 226 /// Reason of disconnection
dudnwjs 5:e11b23f9aacc 227 uint8_t reason;
dudnwjs 5:e11b23f9aacc 228 };
dudnwjs 5:e11b23f9aacc 229
dudnwjs 5:e11b23f9aacc 230 /// Set specific link data configuration.
dudnwjs 5:e11b23f9aacc 231 struct gapc_connection_cfm
dudnwjs 5:e11b23f9aacc 232 {
dudnwjs 5:e11b23f9aacc 233 /// Local CSRK value
dudnwjs 5:e11b23f9aacc 234 struct gap_sec_key lcsrk;
dudnwjs 5:e11b23f9aacc 235 /// Local signature counter value
dudnwjs 5:e11b23f9aacc 236 uint32_t lsign_counter;
dudnwjs 5:e11b23f9aacc 237
dudnwjs 5:e11b23f9aacc 238 /// Remote CSRK value
dudnwjs 5:e11b23f9aacc 239 struct gap_sec_key rcsrk;
dudnwjs 5:e11b23f9aacc 240 /// Remote signature counter value
dudnwjs 5:e11b23f9aacc 241 uint32_t rsign_counter;
dudnwjs 5:e11b23f9aacc 242
dudnwjs 5:e11b23f9aacc 243 /// Authentication (@see gap_auth)
dudnwjs 5:e11b23f9aacc 244 uint8_t auth;
dudnwjs 5:e11b23f9aacc 245 /// Peer device is authorized to access database parameters requiring authorizations.
dudnwjs 5:e11b23f9aacc 246 /// - GAP_AUTHZ_NOT_SET: Authorization not set
dudnwjs 5:e11b23f9aacc 247 /// - GAP_AUTHZ_ACCEPT: Authorization automatically accepted
dudnwjs 5:e11b23f9aacc 248 /// - GAP_AUTHZ_REJECT: Authorization automatically rejected
dudnwjs 5:e11b23f9aacc 249 uint8_t authorize;
dudnwjs 5:e11b23f9aacc 250 };
dudnwjs 5:e11b23f9aacc 251
dudnwjs 4:60be78a172c2 252 }//namespace
dudnwjs 9:fcf91f563147 253
dudnwjs 9:fcf91f563147 254 /// @} dialog_fota module
dudnwjs 9:fcf91f563147 255
dudnwjs 4:60be78a172c2 256 #endif//GAPC_TASK_H