this is using the mbed os version 5-13-1

Dependencies:   mbed-http

Committer:
ocomeni
Date:
Sun May 19 13:09:27 2019 +0000
Branch:
PassingRegression
Revision:
116:2296cf274661
Parent:
113:888e262ff0a9
Child:
118:8df0e9c2ee3f
refactoring main, atcmd, BLE and WiFi. added data structures into main and replaced values with references in main. tested and works.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ocomeni 75:08eff6258e1b 1 #ifndef __BLE_MANAGER_H__
ocomeni 74:f26e846adfe9 2 #define __BLE_MANAGER_H__
ocomeni 75:08eff6258e1b 3
ocomeni 75:08eff6258e1b 4
ocomeni 75:08eff6258e1b 5 /* mbed Microcontroller Library
ocomeni 75:08eff6258e1b 6 * Copyright (c) 2006-2013 ARM Limited
ocomeni 75:08eff6258e1b 7 *
ocomeni 75:08eff6258e1b 8 * Licensed under the Apache License, Version 2.0 (the "License");
ocomeni 75:08eff6258e1b 9 * you may not use this file except in compliance with the License.
ocomeni 75:08eff6258e1b 10 * You may obtain a copy of the License at
ocomeni 75:08eff6258e1b 11 *
ocomeni 75:08eff6258e1b 12 * http://www.apache.org/licenses/LICENSE-2.0
ocomeni 75:08eff6258e1b 13 *
ocomeni 75:08eff6258e1b 14 * Unless required by applicable law or agreed to in writing, software
ocomeni 75:08eff6258e1b 15 * distributed under the License is distributed on an "AS IS" BASIS,
ocomeni 75:08eff6258e1b 16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ocomeni 75:08eff6258e1b 17 * See the License for the specific language governing permissions and
ocomeni 75:08eff6258e1b 18 * limitations under the License.
ocomeni 75:08eff6258e1b 19 */
ocomeni 75:08eff6258e1b 20
ocomeni 75:08eff6258e1b 21 #include <events/mbed_events.h>
ocomeni 75:08eff6258e1b 22 #include <mbed.h>
ocomeni 75:08eff6258e1b 23 #include "ble/BLE.h"
ocomeni 75:08eff6258e1b 24 #include "SecurityManager.h"
ocomeni 78:07bb86e3ce14 25 #include "common_types.h"
ocomeni 75:08eff6258e1b 26
ocomeni 75:08eff6258e1b 27 /** This example demonstrates all the basic setup required
ocomeni 75:08eff6258e1b 28 * for pairing and setting up link security both as a central and peripheral
ocomeni 75:08eff6258e1b 29 *
ocomeni 75:08eff6258e1b 30 * The example is implemented as two classes, one for the peripheral and one
ocomeni 75:08eff6258e1b 31 * for central inheriting from a common base. They are run in sequence and
ocomeni 75:08eff6258e1b 32 * require a peer device to connect to. During the peripheral device demonstration
ocomeni 75:08eff6258e1b 33 * a peer device is required to connect. In the central device demonstration
ocomeni 75:08eff6258e1b 34 * this peer device will be scanned for and connected to - therefore it should
ocomeni 75:08eff6258e1b 35 * be advertising with the same address as when it connected.
ocomeni 75:08eff6258e1b 36 *
ocomeni 75:08eff6258e1b 37 * During the test output is written on the serial connection to monitor its
ocomeni 75:08eff6258e1b 38 * progress.
ocomeni 75:08eff6258e1b 39 */
ocomeni 75:08eff6258e1b 40
ocomeni 75:08eff6258e1b 41
ocomeni 75:08eff6258e1b 42 /* for demonstration purposes we will store the peer device address
ocomeni 75:08eff6258e1b 43 * of the device that connects to us in the first demonstration
ocomeni 75:08eff6258e1b 44 * so we can use its address to reconnect to it later */
ocomeni 75:08eff6258e1b 45 static BLEProtocol::AddressBytes_t peer_address;
ocomeni 75:08eff6258e1b 46
ocomeni 75:08eff6258e1b 47 /** Base class for both peripheral and central. The same class that provides
ocomeni 75:08eff6258e1b 48 * the logic for the application also implements the SecurityManagerEventHandler
ocomeni 75:08eff6258e1b 49 * which is the interface used by the Security Manager to communicate events
ocomeni 75:08eff6258e1b 50 * back to the applications. You can provide overrides for a selection of events
ocomeni 75:08eff6258e1b 51 * your application is interested in.
ocomeni 75:08eff6258e1b 52 */
ocomeni 75:08eff6258e1b 53 class SMDevice : private mbed::NonCopyable<SMDevice>,
ocomeni 75:08eff6258e1b 54 public SecurityManager::EventHandler
ocomeni 75:08eff6258e1b 55 {
ocomeni 75:08eff6258e1b 56 public:
ocomeni 78:07bb86e3ce14 57 SMDevice(BLE &ble, events::EventQueue &event_queue,
ocomeni 116:2296cf274661 58 BLEProtocol::AddressBytes_t &peer_address, ble_config_t *ble_config);
ocomeni 75:08eff6258e1b 59
ocomeni 75:08eff6258e1b 60 virtual ~SMDevice();
ocomeni 75:08eff6258e1b 61
ocomeni 75:08eff6258e1b 62 /** Start BLE interface initialisation */
ocomeni 75:08eff6258e1b 63 void run();
ocomeni 75:08eff6258e1b 64
ocomeni 75:08eff6258e1b 65 /* event handler functions */
ocomeni 75:08eff6258e1b 66
ocomeni 75:08eff6258e1b 67 /** Respond to a pairing request. This will be called by the stack
ocomeni 75:08eff6258e1b 68 * when a pairing request arrives and expects the application to
ocomeni 75:08eff6258e1b 69 * call acceptPairingRequest or cancelPairingRequest */
ocomeni 75:08eff6258e1b 70 virtual void pairingRequest(
ocomeni 75:08eff6258e1b 71 ble::connection_handle_t connectionHandle
ocomeni 75:08eff6258e1b 72 );
ocomeni 75:08eff6258e1b 73
ocomeni 75:08eff6258e1b 74 /** Inform the application of a successful pairing. Terminate the demonstration. */
ocomeni 75:08eff6258e1b 75 virtual void pairingResult(
ocomeni 75:08eff6258e1b 76 ble::connection_handle_t connectionHandle,
ocomeni 75:08eff6258e1b 77 SecurityManager::SecurityCompletionStatus_t result
ocomeni 75:08eff6258e1b 78 );
ocomeni 75:08eff6258e1b 79
ocomeni 75:08eff6258e1b 80 /** Inform the application of change in encryption status. This will be
ocomeni 75:08eff6258e1b 81 * communicated through the serial port */
ocomeni 75:08eff6258e1b 82 virtual void linkEncryptionResult(
ocomeni 75:08eff6258e1b 83 ble::connection_handle_t connectionHandle,
ocomeni 75:08eff6258e1b 84 ble::link_encryption_t result
ocomeni 75:08eff6258e1b 85 );
ocomeni 77:0b505d1e15f4 86
ocomeni 77:0b505d1e15f4 87 void shutDown();
ocomeni 79:a2187bbfa407 88 void sendBLEUartData(char * str);
ocomeni 75:08eff6258e1b 89
ocomeni 113:888e262ff0a9 90 protected:
ocomeni 113:888e262ff0a9 91 // connection status
ocomeni 113:888e262ff0a9 92 bool isConnected;
ocomeni 75:08eff6258e1b 93 private:
ocomeni 113:888e262ff0a9 94 /** Override to start chosen activity when initialisation completes */
ocomeni 75:08eff6258e1b 95 virtual void start() = 0;
ocomeni 75:08eff6258e1b 96
ocomeni 75:08eff6258e1b 97 /** This is called when BLE interface is initialised and starts the demonstration */
ocomeni 75:08eff6258e1b 98 void on_init_complete(BLE::InitializationCompleteCallbackContext *event);
ocomeni 75:08eff6258e1b 99
ocomeni 75:08eff6258e1b 100 /** This is called by Gap to notify the application we connected */
ocomeni 75:08eff6258e1b 101 virtual void on_connect(const Gap::ConnectionCallbackParams_t *connection_event) = 0;
ocomeni 75:08eff6258e1b 102
ocomeni 75:08eff6258e1b 103 /** This is called by Gap to notify the application we disconnected,
ocomeni 75:08eff6258e1b 104 * in our case it ends the demonstration. */
ocomeni 75:08eff6258e1b 105 void on_disconnect(const Gap::DisconnectionCallbackParams_t *event);
ocomeni 75:08eff6258e1b 106
ocomeni 75:08eff6258e1b 107 /** End demonstration unexpectedly. Called if timeout is reached during advertising,
ocomeni 75:08eff6258e1b 108 * scanning or connection initiation */
ocomeni 75:08eff6258e1b 109 void on_timeout(const Gap::TimeoutSource_t source);
ocomeni 75:08eff6258e1b 110
ocomeni 75:08eff6258e1b 111 /** Schedule processing of events from the BLE in the event queue. */
ocomeni 75:08eff6258e1b 112 void schedule_ble_events(BLE::OnEventsToProcessCallbackContext *context);
ocomeni 75:08eff6258e1b 113
ocomeni 75:08eff6258e1b 114 /** Blink LED to show we're running */
ocomeni 75:08eff6258e1b 115 void blink(void);
ocomeni 76:6afda865fbf8 116 /** Echo received data back */
ocomeni 76:6afda865fbf8 117 void EchoBleUartReceived();
ocomeni 79:a2187bbfa407 118
ocomeni 77:0b505d1e15f4 119
ocomeni 77:0b505d1e15f4 120 void reportGapState();
ocomeni 76:6afda865fbf8 121
ocomeni 76:6afda865fbf8 122 /**
ocomeni 76:6afda865fbf8 123 * This callback allows the LEDService to receive updates to the ledState Characteristic.
ocomeni 76:6afda865fbf8 124 *
ocomeni 76:6afda865fbf8 125 * @param[in] params
ocomeni 76:6afda865fbf8 126 * Information about the characterisitc being updated.
ocomeni 76:6afda865fbf8 127 */
ocomeni 76:6afda865fbf8 128 void onDataWrittenCallback(const GattWriteCallbackParams *params);
ocomeni 79:a2187bbfa407 129 //void passkeyDisplayCallback(Gap::Handle_t handle, const SecurityManager::Passkey_t passkey);
ocomeni 79:a2187bbfa407 130 //void securitySetupCompletedCallback(Gap::Handle_t handle, SecurityManager::SecurityCompletionStatus_t status);
ocomeni 75:08eff6258e1b 131
ocomeni 75:08eff6258e1b 132 private:
ocomeni 75:08eff6258e1b 133 DigitalOut _led1;
ocomeni 75:08eff6258e1b 134
ocomeni 75:08eff6258e1b 135 protected:
ocomeni 75:08eff6258e1b 136 BLE &_ble;
ocomeni 116:2296cf274661 137 ble_config_t *ble_config;
ocomeni 75:08eff6258e1b 138 events::EventQueue &_event_queue;
ocomeni 75:08eff6258e1b 139 BLEProtocol::AddressBytes_t &_peer_address;
ocomeni 75:08eff6258e1b 140 ble::connection_handle_t _handle;
ocomeni 75:08eff6258e1b 141 bool _is_connecting;
ocomeni 75:08eff6258e1b 142 };
ocomeni 75:08eff6258e1b 143
ocomeni 75:08eff6258e1b 144 /** A peripheral device will advertise, accept the connection and request
ocomeni 75:08eff6258e1b 145 * a change in link security. */
ocomeni 75:08eff6258e1b 146 class SMDevicePeripheral : public SMDevice {
ocomeni 75:08eff6258e1b 147 public:
ocomeni 78:07bb86e3ce14 148 SMDevicePeripheral(BLE &ble, events::EventQueue &event_queue,
ocomeni 116:2296cf274661 149 BLEProtocol::AddressBytes_t &peer_address, ble_config_t *ble_config);
ocomeni 75:08eff6258e1b 150
ocomeni 75:08eff6258e1b 151 virtual void start();
ocomeni 75:08eff6258e1b 152
ocomeni 75:08eff6258e1b 153 /** This is called by Gap to notify the application we connected,
ocomeni 75:08eff6258e1b 154 * in our case it immediately requests a change in link security */
ocomeni 75:08eff6258e1b 155 virtual void on_connect(const Gap::ConnectionCallbackParams_t *connection_event);
ocomeni 77:0b505d1e15f4 156 void stopAdvertising();
ocomeni 77:0b505d1e15f4 157 void startAdvertising();
ocomeni 76:6afda865fbf8 158
ocomeni 75:08eff6258e1b 159 };
ocomeni 75:08eff6258e1b 160
ocomeni 75:08eff6258e1b 161 /** A central device will scan, connect to a peer and request pairing. */
ocomeni 75:08eff6258e1b 162 class SMDeviceCentral : public SMDevice {
ocomeni 75:08eff6258e1b 163 public:
ocomeni 78:07bb86e3ce14 164 SMDeviceCentral(BLE &ble, events::EventQueue &event_queue,
ocomeni 116:2296cf274661 165 BLEProtocol::AddressBytes_t &peer_address, ble_config_t *ble_config);
ocomeni 75:08eff6258e1b 166
ocomeni 75:08eff6258e1b 167 virtual void start();
ocomeni 75:08eff6258e1b 168
ocomeni 75:08eff6258e1b 169 /** Look at scan payload to find a peer device and connect to it */
ocomeni 75:08eff6258e1b 170 void on_scan(const Gap::AdvertisementCallbackParams_t *params);
ocomeni 75:08eff6258e1b 171
ocomeni 75:08eff6258e1b 172 /** This is called by Gap to notify the application we connected,
ocomeni 75:08eff6258e1b 173 * in our case it immediately request pairing */
ocomeni 75:08eff6258e1b 174 virtual void on_connect(const Gap::ConnectionCallbackParams_t *connection_event);
ocomeni 75:08eff6258e1b 175 };
ocomeni 75:08eff6258e1b 176
ocomeni 75:08eff6258e1b 177
ocomeni 75:08eff6258e1b 178 #if MBED_CONF_APP_FILESYSTEM_SUPPORT
ocomeni 75:08eff6258e1b 179 bool create_filesystem();
ocomeni 75:08eff6258e1b 180 #endif //MBED_CONF_APP_FILESYSTEM_SUPPORT
ocomeni 75:08eff6258e1b 181
ocomeni 74:f26e846adfe9 182 #endif // __BLE_MANAGER_H__