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.

Revision:
4:60be78a172c2
Parent:
3:1e70387e1337
Child:
5:e11b23f9aacc
--- a/dialog_fota/gapm_task.h	Tue Jun 23 06:32:40 2015 +0000
+++ b/dialog_fota/gapm_task.h	Wed Jun 24 08:50:07 2015 +0000
@@ -1,8 +1,17 @@
 #ifndef GAPM_TASK_H
 #define GAPM_TASK_H
 
+#include "dialog_fota_config.h"
+
 namespace sevencore_fota{
 
+/// Advertising or scanning report information event
+struct gapm_adv_report_ind
+{
+    /// Advertising report structure
+    struct adv_report report;
+};
+
 ///  Reset link layer and the host command
 struct gapm_reset_cmd
 {
@@ -10,6 +19,193 @@
     /// - GAPM_RESET: Reset BLE subsystem: LL and HL.
     uint8_t operation;
 };
+/// Command complete event data structure
+struct gapm_cmp_evt
+{
+    /// GAP requested operation
+    uint8_t operation;
+    /// Status of the request
+    uint8_t status;
+};
+
+/// Air operation default parameters
+struct gapm_air_operation
+{
+    /// Operation code.
+    uint8_t  code;
+
+
+    /** Own BD address source of the device:
+     * - GAPM_PUBLIC_ADDR: Public Address
+     * - GAPM_PROVIDED_RND_ADDR: Provided random address
+     * - GAPM_GEN_STATIC_RND_ADDR: Generated static random address
+     * - GAPM_GEN_RSLV_ADDR: Generated resolvable private random address
+     * - GAPM_GEN_NON_RSLV_ADDR: Generated non-resolvable private random address
+     * - GAPM_PROVIDED_RECON_ADDR: Provided Reconnection address (only for GAPM_ADV_DIRECT)
+     */
+    uint8_t addr_src;
+
+    /// Dummy data use to retrieve internal operation state (should be set to 0).
+    uint16_t state;
+
+    /// Duration of resolvable address before regenerate it.
+    uint16_t renew_dur;
+
+    /// Provided own static private random address (addr_src = 1 or 5)
+    struct bd_addr addr;
+};
+
+/// Advertising data that contains information set by host.
+struct gapm_adv_host
+{
+    /// Advertising mode :
+    /// - GAP_NON_DISCOVERABLE: Non discoverable mode
+    /// - GAP_GEN_DISCOVERABLE: General discoverable mode
+    /// - GAP_LIM_DISCOVERABLE: Limited discoverable mode
+    /// - GAP_BROADCASTER_MODE: Broadcaster mode
+    uint8_t              mode;
+
+    /// Advertising filter policy:
+    /// - ADV_ALLOW_SCAN_ANY_CON_ANY: Allow both scan and connection requests from anyone
+    /// - ADV_ALLOW_SCAN_WLST_CON_ANY: Allow both scan req from White List devices only and
+    ///   connection req from anyone
+    /// - ADV_ALLOW_SCAN_ANY_CON_WLST: Allow both scan req from anyone and connection req
+    ///   from White List devices only
+    /// - ADV_ALLOW_SCAN_WLST_CON_WLST: Allow scan and connection requests from White List
+    ///   devices only
+    uint8_t              adv_filt_policy;
+
+    /// Advertising data length - maximum 28 bytes, 3 bytes are reserved to set
+    /// Advertising AD type flags, shall not be set in advertising data
+    uint8_t              adv_data_len;
+    /// Advertising data
+    uint8_t              adv_data[ADV_DATA_LEN-3];
+    /// Scan response data length- maximum 31 bytes
+    uint8_t              scan_rsp_data_len;
+    /// Scan response data
+    uint8_t              scan_rsp_data[SCAN_RSP_DATA_LEN];
+};
+
+
+//////////////GAP
+#define KEY_LEN     0x10
+/// Generic Security key structure
+struct gap_sec_key
+{
+    /// Key value MSB -> LSB
+    uint8_t key[KEY_LEN];
+};
+
+/// Address information about a device address
+struct gap_bdaddr
+{
+    /// BD Address of device
+    struct bd_addr addr;
+    /// Address type of the device 0=public/1=private random
+    uint8_t addr_type;
+};
+
+/// Advertising mode
+enum gap_adv_mode
+{
+    /// Mode in non-discoverable
+    GAP_NON_DISCOVERABLE,
+    /// Mode in general discoverable
+    GAP_GEN_DISCOVERABLE,
+    /// Mode in limited discoverable
+    GAP_LIM_DISCOVERABLE,
+    /// Broadcaster mode which is a non discoverable and non connectable mode.
+    GAP_BROADCASTER_MODE,
+};
+/****************** GAP Role **********************/
+enum gap_role
+{
+    /// No role set yet
+    GAP_NO_ROLE    = 0x00,
+
+    /// Observer role
+    GAP_OBSERVER_SCA    = 0x01,
+
+    /// Broadcaster role
+    GAP_BROADCASTER_ADV = 0x02,
+
+    /// Master/Central role
+    GAP_CENTRAL_MST     = (0x04 | GAP_OBSERVER_SCA),
+
+    /// Peripheral/Slave role
+    GAP_PERIPHERAL_SLV  = (0x08 | GAP_BROADCASTER_ADV),
+};
+
+//////////////GAP
+
+/// Set advertising mode Command
+struct gapm_start_advertise_cmd
+{
+    /// GAPM requested operation:
+    /// - GAPM_ADV_NON_CONN: Start non connectable advertising
+    /// - GAPM_ADV_UNDIRECT: Start undirected connectable advertising
+    /// - GAPM_ADV_DIRECT: Start directed connectable advertising
+    struct gapm_air_operation op;
+
+    /// Minimum interval for advertising
+    uint16_t             intv_min;
+    /// Maximum interval for advertising
+    uint16_t             intv_max;
+
+    ///Advertising channel map
+    uint8_t              channel_map;
+
+    /// Advertising information
+    union gapm_adv_info
+    {
+        /// Host information advertising data (GAPM_ADV_NON_CONN and GAPM_ADV_UNDIRECT)
+        struct gapm_adv_host host;
+        ///  Direct address information (GAPM_ADV_DIRECT)
+        /// (used only if reconnection address isn't set or privacy disabled)
+        struct gap_bdaddr direct;
+    } info;
+};
+
+
+/// Set device configuration command
+struct gapm_set_dev_config_cmd
+{
+    /// GAPM requested operation:
+    ///  - GAPM_SET_DEV_CONFIG: Set device configuration
+    uint8_t operation;
+    /// Device Role: Central, Peripheral, Observer or Broadcaster
+    uint8_t role;
+    /// Device IRK used for resolvable random BD address generation (LSB first)
+    struct gap_sec_key irk;
+
+    /// Device Appearance (0x0000 - Unknown appearance)
+    uint16_t appearance;
+    /// Device Appearance write permission requirements for peer device (@see gapm_write_att_perm)
+    uint8_t  appearance_write_perm;
+    /// Device Name write permission requirements for peer device (@see gapm_write_att_perm)
+    uint8_t  name_write_perm;
+
+    /// Maximal MTU
+    uint16_t max_mtu;
+
+    /// Peripheral only: *****************************************************************
+    /// Slave preferred Minimum of connection interval
+    uint16_t con_intv_min;
+    /// Slave preferred Maximum of connection interval
+    uint16_t con_intv_max;
+    /// Slave preferred Connection latency
+    uint16_t con_latency;
+    /// Slave preferred Link supervision timeout
+    uint16_t superv_to;
+
+    /// Privacy settings bit field (0b1 = enabled, 0b0 = disabled)
+    ///  - [bit 0]: Privacy Support
+    ///  - [bit 1]: Multiple Bond Support (Peripheral only); If enabled, privacy flag is
+    ///             read only.
+    ///  - [bit 2]: Reconnection address visible.
+    uint8_t flags;
+};
+
 
 
 /// GAP Manager Message Interface
@@ -206,6 +402,36 @@
     GAPM_LAST
 };
 
+/// Own BD address source of the device
+enum gapm_own_addr_src
+{
+   /// Public Address
+   GAPM_PUBLIC_ADDR,
+   /// Provided random address
+   GAPM_PROVIDED_RND_ADDR,
+   /// Provided static random address
+   GAPM_GEN_STATIC_RND_ADDR,
+   /// Generated resolvable private random address
+   GAPM_GEN_RSLV_ADDR,
+   /// Generated non-resolvable private random address
+   GAPM_GEN_NON_RSLV_ADDR,
+   /// Provided Reconnection address
+   GAPM_PROVIDED_RECON_ADDR,
+};
+
+/// Device Attribute write permission requirement
+enum gapm_write_att_perm
+{
+    /// Disable write access
+    GAPM_WRITE_DISABLE  = 0,
+    /// Enable write access
+    GAPM_WRITE_ENABLE   = 8,
+    /// Write access requires unauthenticated link
+    GAPM_WRITE_UNAUTH   = 16,
+    /// Write access requires authenticated link
+    GAPM_WRITE_AUTH     = 24,
+};
+
 }//namespace
 
 #endif//GAPM_TASK_H