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 03:11:00 2015 +0000
Revision:
10:18044afe4364
Parent:
9:fcf91f563147
Add header comment;

Who changed what in which revision?

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