mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 /* mbed Microcontroller Library
be_bryan 0:b74591d5ab33 2 * Copyright (c) 2017-2017 ARM Limited
be_bryan 0:b74591d5ab33 3 *
be_bryan 0:b74591d5ab33 4 * Licensed under the Apache License, Version 2.0 (the "License");
be_bryan 0:b74591d5ab33 5 * you may not use this file except in compliance with the License.
be_bryan 0:b74591d5ab33 6 * You may obtain a copy of the License at
be_bryan 0:b74591d5ab33 7 *
be_bryan 0:b74591d5ab33 8 * http://www.apache.org/licenses/LICENSE-2.0
be_bryan 0:b74591d5ab33 9 *
be_bryan 0:b74591d5ab33 10 * Unless required by applicable law or agreed to in writing, software
be_bryan 0:b74591d5ab33 11 * distributed under the License is distributed on an "AS IS" BASIS,
be_bryan 0:b74591d5ab33 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
be_bryan 0:b74591d5ab33 13 * See the License for the specific language governing permissions and
be_bryan 0:b74591d5ab33 14 * limitations under the License.
be_bryan 0:b74591d5ab33 15 */
be_bryan 0:b74591d5ab33 16
be_bryan 0:b74591d5ab33 17 #ifndef CORDIO_BLE_H_
be_bryan 0:b74591d5ab33 18 #define CORDIO_BLE_H_
be_bryan 0:b74591d5ab33 19
be_bryan 0:b74591d5ab33 20 #include "ble/BLE.h"
be_bryan 0:b74591d5ab33 21 #include "ble/blecommon.h"
be_bryan 0:b74591d5ab33 22 #include "ble/BLEInstanceBase.h"
be_bryan 0:b74591d5ab33 23
be_bryan 0:b74591d5ab33 24 #include "CordioHCIDriver.h"
be_bryan 0:b74591d5ab33 25 #include "CordioGap.h"
be_bryan 0:b74591d5ab33 26 #include "CordioGattServer.h"
be_bryan 0:b74591d5ab33 27 #include "CordioSecurityManager.h"
be_bryan 0:b74591d5ab33 28 #include "CordioPalAttClient.h"
be_bryan 0:b74591d5ab33 29 #include "ble/pal/AttClientToGattClientAdapter.h"
be_bryan 0:b74591d5ab33 30 #include "ble/generic/GenericGattClient.h"
be_bryan 0:b74591d5ab33 31
be_bryan 0:b74591d5ab33 32 namespace ble {
be_bryan 0:b74591d5ab33 33 namespace vendor {
be_bryan 0:b74591d5ab33 34 namespace cordio {
be_bryan 0:b74591d5ab33 35
be_bryan 0:b74591d5ab33 36 /**
be_bryan 0:b74591d5ab33 37 * @see BLEInstanceBase
be_bryan 0:b74591d5ab33 38 */
be_bryan 0:b74591d5ab33 39 class BLE : public ::BLEInstanceBase {
be_bryan 0:b74591d5ab33 40 /**
be_bryan 0:b74591d5ab33 41 * Construction with an HCI driver.
be_bryan 0:b74591d5ab33 42 */
be_bryan 0:b74591d5ab33 43 BLE(CordioHCIDriver& hci_driver);
be_bryan 0:b74591d5ab33 44
be_bryan 0:b74591d5ab33 45 /**
be_bryan 0:b74591d5ab33 46 * Destructor
be_bryan 0:b74591d5ab33 47 */
be_bryan 0:b74591d5ab33 48 virtual ~BLE();
be_bryan 0:b74591d5ab33 49
be_bryan 0:b74591d5ab33 50 public:
be_bryan 0:b74591d5ab33 51
be_bryan 0:b74591d5ab33 52 /**
be_bryan 0:b74591d5ab33 53 * Access to the singleton containing the implementation of BLEInstanceBase
be_bryan 0:b74591d5ab33 54 * for the Cordio stack.
be_bryan 0:b74591d5ab33 55 */
be_bryan 0:b74591d5ab33 56 static BLE& deviceInstance();
be_bryan 0:b74591d5ab33 57
be_bryan 0:b74591d5ab33 58 /**
be_bryan 0:b74591d5ab33 59 * @see BLEInstanceBase::init
be_bryan 0:b74591d5ab33 60 */
be_bryan 0:b74591d5ab33 61 virtual ble_error_t init(
be_bryan 0:b74591d5ab33 62 ::BLE::InstanceID_t instanceID,
be_bryan 0:b74591d5ab33 63 FunctionPointerWithContext< ::BLE::InitializationCompleteCallbackContext*> initCallback
be_bryan 0:b74591d5ab33 64 );
be_bryan 0:b74591d5ab33 65
be_bryan 0:b74591d5ab33 66 /**
be_bryan 0:b74591d5ab33 67 * @see BLEInstanceBase::hasInitialized
be_bryan 0:b74591d5ab33 68 */
be_bryan 0:b74591d5ab33 69 virtual bool hasInitialized() const;
be_bryan 0:b74591d5ab33 70
be_bryan 0:b74591d5ab33 71 /**
be_bryan 0:b74591d5ab33 72 * @see BLEInstanceBase::shutdown
be_bryan 0:b74591d5ab33 73 */
be_bryan 0:b74591d5ab33 74 virtual ble_error_t shutdown();
be_bryan 0:b74591d5ab33 75
be_bryan 0:b74591d5ab33 76 /**
be_bryan 0:b74591d5ab33 77 * @see BLEInstanceBase::getVersion
be_bryan 0:b74591d5ab33 78 */
be_bryan 0:b74591d5ab33 79 virtual const char *getVersion();
be_bryan 0:b74591d5ab33 80
be_bryan 0:b74591d5ab33 81 /**
be_bryan 0:b74591d5ab33 82 * @see BLEInstanceBase::getGap
be_bryan 0:b74591d5ab33 83 */
be_bryan 0:b74591d5ab33 84 virtual Gap& getGap();
be_bryan 0:b74591d5ab33 85
be_bryan 0:b74591d5ab33 86 /**
be_bryan 0:b74591d5ab33 87 * @see BLEInstanceBase::getGap
be_bryan 0:b74591d5ab33 88 */
be_bryan 0:b74591d5ab33 89 virtual const Gap& getGap() const;
be_bryan 0:b74591d5ab33 90
be_bryan 0:b74591d5ab33 91 /**
be_bryan 0:b74591d5ab33 92 * @see BLEInstanceBase::getGattServer
be_bryan 0:b74591d5ab33 93 */
be_bryan 0:b74591d5ab33 94 virtual GattServer &getGattServer();
be_bryan 0:b74591d5ab33 95
be_bryan 0:b74591d5ab33 96 /**
be_bryan 0:b74591d5ab33 97 * @see BLEInstanceBase::getGattServer
be_bryan 0:b74591d5ab33 98 */
be_bryan 0:b74591d5ab33 99 virtual const GattServer &getGattServer() const;
be_bryan 0:b74591d5ab33 100
be_bryan 0:b74591d5ab33 101 /**
be_bryan 0:b74591d5ab33 102 * @see BLEInstanceBase::getGattClient
be_bryan 0:b74591d5ab33 103 */
be_bryan 0:b74591d5ab33 104 virtual ::GattClient &getGattClient();
be_bryan 0:b74591d5ab33 105
be_bryan 0:b74591d5ab33 106 /**
be_bryan 0:b74591d5ab33 107 * @see BLEInstanceBase::getSecurityManager
be_bryan 0:b74591d5ab33 108 */
be_bryan 0:b74591d5ab33 109 virtual SecurityManager &getSecurityManager();
be_bryan 0:b74591d5ab33 110
be_bryan 0:b74591d5ab33 111 /**
be_bryan 0:b74591d5ab33 112 * @see BLEInstanceBase::getSecurityManager
be_bryan 0:b74591d5ab33 113 */
be_bryan 0:b74591d5ab33 114 virtual const SecurityManager &getSecurityManager() const;
be_bryan 0:b74591d5ab33 115
be_bryan 0:b74591d5ab33 116 /**
be_bryan 0:b74591d5ab33 117 * @see BLEInstanceBase::waitForEvent
be_bryan 0:b74591d5ab33 118 */
be_bryan 0:b74591d5ab33 119 virtual void waitForEvent();
be_bryan 0:b74591d5ab33 120
be_bryan 0:b74591d5ab33 121 /**
be_bryan 0:b74591d5ab33 122 * @see BLEInstanceBase::processEvents
be_bryan 0:b74591d5ab33 123 */
be_bryan 0:b74591d5ab33 124 virtual void processEvents();
be_bryan 0:b74591d5ab33 125
be_bryan 0:b74591d5ab33 126 private:
be_bryan 0:b74591d5ab33 127 static void stack_handler(wsfEventMask_t event, wsfMsgHdr_t* msg);
be_bryan 0:b74591d5ab33 128 static void device_manager_cb(dmEvt_t* dm_event);
be_bryan 0:b74591d5ab33 129 static void connection_handler(dmEvt_t* dm_event);
be_bryan 0:b74591d5ab33 130 static void timeoutCallback();
be_bryan 0:b74591d5ab33 131
be_bryan 0:b74591d5ab33 132 void stack_setup();
be_bryan 0:b74591d5ab33 133 void start_stack_reset();
be_bryan 0:b74591d5ab33 134 void callDispatcher();
be_bryan 0:b74591d5ab33 135
be_bryan 0:b74591d5ab33 136 static CordioHCIDriver* _hci_driver;
be_bryan 0:b74591d5ab33 137 static FunctionPointerWithContext< ::BLE::InitializationCompleteCallbackContext*> _init_callback;
be_bryan 0:b74591d5ab33 138
be_bryan 0:b74591d5ab33 139 enum {
be_bryan 0:b74591d5ab33 140 NOT_INITIALIZED,
be_bryan 0:b74591d5ab33 141 INITIALIZING,
be_bryan 0:b74591d5ab33 142 INITIALIZED
be_bryan 0:b74591d5ab33 143 } initialization_status;
be_bryan 0:b74591d5ab33 144
be_bryan 0:b74591d5ab33 145 ::BLE::InstanceID_t instanceID;
be_bryan 0:b74591d5ab33 146 };
be_bryan 0:b74591d5ab33 147
be_bryan 0:b74591d5ab33 148 } // namespace cordio
be_bryan 0:b74591d5ab33 149 } // namespace vendor
be_bryan 0:b74591d5ab33 150 } // namespace ble
be_bryan 0:b74591d5ab33 151
be_bryan 0:b74591d5ab33 152
be_bryan 0:b74591d5ab33 153 #endif /* CORDIO_BLE_H_ */