yes Spada / Mbed OS programme
Committer:
loicguibert
Date:
Tue Mar 19 20:48:48 2019 +0000
Revision:
11:dbc310addbf6
Child:
12:856286ad4cdc
Point 5 done

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loicguibert 11:dbc310addbf6 1 #pragma once
loicguibert 11:dbc310addbf6 2
loicguibert 11:dbc310addbf6 3 // mbed os
loicguibert 11:dbc310addbf6 4 #include <mbed.h>
loicguibert 11:dbc310addbf6 5 #include "ble/BLE.h"
loicguibert 11:dbc310addbf6 6
loicguibert 11:dbc310addbf6 7 // stl
loicguibert 11:dbc310addbf6 8 #include <string>
loicguibert 11:dbc310addbf6 9 #include <list>
loicguibert 11:dbc310addbf6 10
loicguibert 11:dbc310addbf6 11 // local
loicguibert 11:dbc310addbf6 12 #include "IDevKit.h"
loicguibert 11:dbc310addbf6 13 #include "Logger.h"
loicguibert 11:dbc310addbf6 14
loicguibert 11:dbc310addbf6 15 class GAPPeripheral :
loicguibert 11:dbc310addbf6 16 private mbed::NonCopyable<GAPPeripheral>,
loicguibert 11:dbc310addbf6 17 public ble::Gap::EventHandler {
loicguibert 11:dbc310addbf6 18 public:
loicguibert 11:dbc310addbf6 19 // constructor
loicguibert 11:dbc310addbf6 20 GAPPeripheral(BLE& ble,
loicguibert 11:dbc310addbf6 21 IDevKit& devKit,
loicguibert 11:dbc310addbf6 22 const string& deviceName,
loicguibert 11:dbc310addbf6 23 #ifdef _BLE_MBED_511
loicguibert 11:dbc310addbf6 24 ble::advertising_type_t advType,
loicguibert 11:dbc310addbf6 25 #else
loicguibert 11:dbc310addbf6 26 GapAdvertisingParams::AdvertisingType_t advType,
loicguibert 11:dbc310addbf6 27 #endif
loicguibert 11:dbc310addbf6 28 events::EventQueue& eventQueue,
loicguibert 11:dbc310addbf6 29 Logger& logger);
loicguibert 11:dbc310addbf6 30
loicguibert 11:dbc310addbf6 31 // destructor
loicguibert 11:dbc310addbf6 32 ~GAPPeripheral();
loicguibert 11:dbc310addbf6 33
loicguibert 11:dbc310addbf6 34 #if defined(_BLE_MBED_511)
loicguibert 11:dbc310addbf6 35 // called for starting advertising
loicguibert 11:dbc310addbf6 36 void advertise(UUID serviceUUIDArray[], size_t arraySize);
loicguibert 11:dbc310addbf6 37 #else
loicguibert 11:dbc310addbf6 38 // called for starting advertising
loicguibert 11:dbc310addbf6 39 void advertise(void);
loicguibert 11:dbc310addbf6 40 #endif
loicguibert 11:dbc310addbf6 41
loicguibert 11:dbc310addbf6 42 protected:
loicguibert 11:dbc310addbf6 43 // protected methods (can be redefined by inheriting classes)
loicguibert 11:dbc310addbf6 44
loicguibert 11:dbc310addbf6 45 // This is called when BLE interface is initialised
loicguibert 11:dbc310addbf6 46 virtual void onInitComplete(BLE::InitializationCompleteCallbackContext *event);
loicguibert 11:dbc310addbf6 47
loicguibert 11:dbc310addbf6 48 // methods used for setting the advertising data payload for a specific service
loicguibert 11:dbc310addbf6 49 #if defined(_BLE_MBED_511)
loicguibert 11:dbc310addbf6 50 void setServiceData(UUID serviceUUID, uint8_t* pServiceData, uint16_t serviceDataLength);
loicguibert 11:dbc310addbf6 51 #else
loicguibert 11:dbc310addbf6 52 static const int SERVICE_DATA_LENGTH = 8;
loicguibert 11:dbc310addbf6 53 struct ServiceDataPayload {
loicguibert 11:dbc310addbf6 54 uint16_t serviceUUID;
loicguibert 11:dbc310addbf6 55 uint8_t serviceData[SERVICE_DATA_LENGTH];
loicguibert 11:dbc310addbf6 56 uint16_t serviceDataLength;
loicguibert 11:dbc310addbf6 57 };
loicguibert 11:dbc310addbf6 58 void setAdvertisementServiceData(ServiceDataPayload* serviceDataPayloadArray,
loicguibert 11:dbc310addbf6 59 uint8_t nbrOfServices);
loicguibert 11:dbc310addbf6 60 #endif
loicguibert 11:dbc310addbf6 61 static void uint16_encode(const uint16_t value, uint8_t* p_encoded_data);
loicguibert 11:dbc310addbf6 62 static void int16_encode(const int16_t value, uint8_t* p_encoded_data);
loicguibert 11:dbc310addbf6 63 static void uint32_encode(const uint32_t value, uint8_t* p_encoded_data);
loicguibert 11:dbc310addbf6 64
loicguibert 11:dbc310addbf6 65 private:
loicguibert 11:dbc310addbf6 66 // private methods
loicguibert 11:dbc310addbf6 67
loicguibert 11:dbc310addbf6 68 #if defined(_BLE_MBED_511)
loicguibert 11:dbc310addbf6 69 // methods used for setting the list of service uuids in the advertising packet
loicguibert 11:dbc310addbf6 70 ble_error_t setLocalServiceList(UUID* serviceUUIDArray, uint8_t arraySize);
loicguibert 11:dbc310addbf6 71 #endif
loicguibert 11:dbc310addbf6 72
loicguibert 11:dbc310addbf6 73 // Schedule processing of events from the BLE middleware in the event queue. */
loicguibert 11:dbc310addbf6 74 void scheduleBleEvents(BLE::OnEventsToProcessCallbackContext *context);
loicguibert 11:dbc310addbf6 75
loicguibert 11:dbc310addbf6 76 // called if timeout is reached during advertising, scanning or connection initiation
loicguibert 11:dbc310addbf6 77 void onTimeOut(const Gap::TimeoutSource_t source);
loicguibert 11:dbc310addbf6 78
loicguibert 11:dbc310addbf6 79 // This is called when BLE interface receives a connection request
loicguibert 11:dbc310addbf6 80 void onConnect(const Gap::ConnectionCallbackParams_t *connection_event);
loicguibert 11:dbc310addbf6 81
loicguibert 11:dbc310addbf6 82 // Set up and start advertising
loicguibert 11:dbc310addbf6 83 void startAdvertising(void);
loicguibert 11:dbc310addbf6 84
loicguibert 11:dbc310addbf6 85 protected:
loicguibert 11:dbc310addbf6 86 // protected data members
loicguibert 11:dbc310addbf6 87 IDevKit& m_devKit;
loicguibert 11:dbc310addbf6 88
loicguibert 11:dbc310addbf6 89 private:
loicguibert 11:dbc310addbf6 90 // private data members
loicguibert 11:dbc310addbf6 91 BLE& m_ble;
loicguibert 11:dbc310addbf6 92 const string& m_deviceName;
loicguibert 11:dbc310addbf6 93 #ifdef _BLE_MBED_511
loicguibert 11:dbc310addbf6 94 ble::advertising_type_t m_advType;
loicguibert 11:dbc310addbf6 95 #else
loicguibert 11:dbc310addbf6 96 GapAdvertisingParams::AdvertisingType_t m_advType;
loicguibert 11:dbc310addbf6 97 #endif
loicguibert 11:dbc310addbf6 98 events::EventQueue& m_eventQueue;
loicguibert 11:dbc310addbf6 99
loicguibert 11:dbc310addbf6 100 // blink interval
loicguibert 11:dbc310addbf6 101 static const int BLINK_INTERVAL = 1000;
loicguibert 11:dbc310addbf6 102
loicguibert 11:dbc310addbf6 103 // advertising interval
loicguibert 11:dbc310addbf6 104 static const int ADVERTISING_INTERVAL = 200;
loicguibert 11:dbc310addbf6 105
loicguibert 11:dbc310addbf6 106 #ifdef _BLE_MBED_511
loicguibert 11:dbc310addbf6 107 // buffer and builder used for advertising payload
loicguibert 11:dbc310addbf6 108 uint16_t m_advertisingBufferSize;
loicguibert 11:dbc310addbf6 109 uint8_t* m_pAdvertisingBuffer;
loicguibert 11:dbc310addbf6 110 ble::AdvertisingDataBuilder* m_pAdvertisingDataBuilder;
loicguibert 11:dbc310addbf6 111 #endif
loicguibert 11:dbc310addbf6 112 // logger instance
loicguibert 11:dbc310addbf6 113 Logger& m_logger;
loicguibert 11:dbc310addbf6 114 };