Robotique FIP / Mbed 2 deprecated FIP_REV1

Dependencies:   HC_SR04_Ultrasonic_Library Servo mbed

Fork of FIP_REV1 by Robotique FIP

Committer:
julientiron
Date:
Thu Jul 09 13:33:36 2015 +0000
Revision:
4:69a35a56ac48
Parent:
0:3d641e170a74
BLE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
julientiron 0:3d641e170a74 1 /* mbed Microcontroller Library
julientiron 0:3d641e170a74 2 * Copyright (c) 2006-2013 ARM Limited
julientiron 0:3d641e170a74 3 *
julientiron 0:3d641e170a74 4 * Licensed under the Apache License, Version 2.0 (the "License");
julientiron 0:3d641e170a74 5 * you may not use this file except in compliance with the License.
julientiron 0:3d641e170a74 6 * You may obtain a copy of the License at
julientiron 0:3d641e170a74 7 *
julientiron 0:3d641e170a74 8 * http://www.apache.org/licenses/LICENSE-2.0
julientiron 0:3d641e170a74 9 *
julientiron 0:3d641e170a74 10 * Unless required by applicable law or agreed to in writing, software
julientiron 0:3d641e170a74 11 * distributed under the License is distributed on an "AS IS" BASIS,
julientiron 0:3d641e170a74 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
julientiron 0:3d641e170a74 13 * See the License for the specific language governing permissions and
julientiron 0:3d641e170a74 14 * limitations under the License.
julientiron 0:3d641e170a74 15 */
julientiron 0:3d641e170a74 16
julientiron 0:3d641e170a74 17 #include "mbed.h"
julientiron 0:3d641e170a74 18 #include "BlueNRGDevice.h"
julientiron 0:3d641e170a74 19 #include "BlueNRGGap.h"
julientiron 0:3d641e170a74 20 #include "BlueNRGGattServer.h"
julientiron 0:3d641e170a74 21
julientiron 0:3d641e170a74 22 #include "btle.h"
julientiron 0:3d641e170a74 23 #include "Utils.h"
julientiron 0:3d641e170a74 24 #include "osal.h"
julientiron 0:3d641e170a74 25
julientiron 0:3d641e170a74 26 /**
julientiron 0:3d641e170a74 27 * The singleton which represents the BlueNRG transport for the BLEDevice.
julientiron 0:3d641e170a74 28 */
julientiron 0:3d641e170a74 29 static BlueNRGDevice deviceInstance;
julientiron 0:3d641e170a74 30
julientiron 0:3d641e170a74 31 /**
julientiron 0:3d641e170a74 32 * BLE-API requires an implementation of the following function in order to
julientiron 0:3d641e170a74 33 * obtain its transport handle.
julientiron 0:3d641e170a74 34 */
julientiron 0:3d641e170a74 35 BLEDeviceInstanceBase *
julientiron 0:3d641e170a74 36 createBLEDeviceInstance(void)
julientiron 0:3d641e170a74 37 {
julientiron 0:3d641e170a74 38 return (&deviceInstance);
julientiron 0:3d641e170a74 39 }
julientiron 0:3d641e170a74 40
julientiron 0:3d641e170a74 41 /**************************************************************************/
julientiron 0:3d641e170a74 42 /*!
julientiron 0:3d641e170a74 43 @brief Constructor
julientiron 0:3d641e170a74 44 */
julientiron 0:3d641e170a74 45 /**************************************************************************/
julientiron 0:3d641e170a74 46 BlueNRGDevice::BlueNRGDevice(void)
julientiron 0:3d641e170a74 47 {
julientiron 0:3d641e170a74 48 isInitialized = false;
julientiron 0:3d641e170a74 49 }
julientiron 0:3d641e170a74 50
julientiron 0:3d641e170a74 51 /**************************************************************************/
julientiron 0:3d641e170a74 52 /*!
julientiron 0:3d641e170a74 53 @brief Destructor
julientiron 0:3d641e170a74 54 */
julientiron 0:3d641e170a74 55 /**************************************************************************/
julientiron 0:3d641e170a74 56 BlueNRGDevice::~BlueNRGDevice(void)
julientiron 0:3d641e170a74 57 {
julientiron 0:3d641e170a74 58 }
julientiron 0:3d641e170a74 59
julientiron 0:3d641e170a74 60 /**************************************************************************/
julientiron 0:3d641e170a74 61 /*!
julientiron 0:3d641e170a74 62 @brief Initialises anything required to start using BLE
julientiron 0:3d641e170a74 63
julientiron 0:3d641e170a74 64 @returns ble_error_t
julientiron 0:3d641e170a74 65
julientiron 0:3d641e170a74 66 @retval BLE_ERROR_NONE
julientiron 0:3d641e170a74 67 Everything executed properly
julientiron 0:3d641e170a74 68
julientiron 0:3d641e170a74 69 @section EXAMPLE
julientiron 0:3d641e170a74 70
julientiron 0:3d641e170a74 71 @code
julientiron 0:3d641e170a74 72
julientiron 0:3d641e170a74 73 @endcode
julientiron 0:3d641e170a74 74 */
julientiron 0:3d641e170a74 75 /**************************************************************************/
julientiron 0:3d641e170a74 76 ble_error_t BlueNRGDevice::init(void)
julientiron 0:3d641e170a74 77 {
julientiron 0:3d641e170a74 78 /* ToDo: Clear memory contents, reset the SD, etc. */
julientiron 0:3d641e170a74 79 btle_init(BlueNRGGap::getInstance().getIsSetAddress());
julientiron 0:3d641e170a74 80
julientiron 0:3d641e170a74 81 isInitialized = true;
julientiron 0:3d641e170a74 82
julientiron 0:3d641e170a74 83 return BLE_ERROR_NONE;
julientiron 0:3d641e170a74 84 }
julientiron 0:3d641e170a74 85
julientiron 0:3d641e170a74 86 /**************************************************************************/
julientiron 0:3d641e170a74 87 /*!
julientiron 0:3d641e170a74 88 @brief Resets the BLE HW, removing any existing services and
julientiron 0:3d641e170a74 89 characteristics
julientiron 0:3d641e170a74 90
julientiron 0:3d641e170a74 91 @returns ble_error_t
julientiron 0:3d641e170a74 92
julientiron 0:3d641e170a74 93 @retval BLE_ERROR_NONE
julientiron 0:3d641e170a74 94 Everything executed properly
julientiron 0:3d641e170a74 95
julientiron 0:3d641e170a74 96 @section EXAMPLE
julientiron 0:3d641e170a74 97
julientiron 0:3d641e170a74 98 @code
julientiron 0:3d641e170a74 99
julientiron 0:3d641e170a74 100 @endcode
julientiron 0:3d641e170a74 101 */
julientiron 0:3d641e170a74 102 /**************************************************************************/
julientiron 0:3d641e170a74 103 ble_error_t BlueNRGDevice::reset(void)
julientiron 0:3d641e170a74 104 {
julientiron 0:3d641e170a74 105 wait(0.5);
julientiron 0:3d641e170a74 106
julientiron 0:3d641e170a74 107 /* Reset BlueNRG SPI interface */
julientiron 0:3d641e170a74 108 BlueNRG_RST();
julientiron 0:3d641e170a74 109
julientiron 0:3d641e170a74 110 /* Wait for the radio to come back up */
julientiron 0:3d641e170a74 111 wait(1);
julientiron 0:3d641e170a74 112
julientiron 0:3d641e170a74 113 isInitialized = false;
julientiron 0:3d641e170a74 114
julientiron 0:3d641e170a74 115 return BLE_ERROR_NONE;
julientiron 0:3d641e170a74 116 }
julientiron 0:3d641e170a74 117
julientiron 0:3d641e170a74 118 void BlueNRGDevice::waitForEvent(void)
julientiron 0:3d641e170a74 119 {
julientiron 0:3d641e170a74 120 HCI_Process();//Send App Events??
julientiron 0:3d641e170a74 121
julientiron 0:3d641e170a74 122 }
julientiron 0:3d641e170a74 123
julientiron 0:3d641e170a74 124
julientiron 0:3d641e170a74 125 /**************************************************************************/
julientiron 0:3d641e170a74 126 /*!
julientiron 0:3d641e170a74 127 @brief get GAP version
julientiron 0:3d641e170a74 128
julientiron 0:3d641e170a74 129 @returns char *
julientiron 0:3d641e170a74 130
julientiron 0:3d641e170a74 131 @retval pointer to version string
julientiron 0:3d641e170a74 132
julientiron 0:3d641e170a74 133 @section EXAMPLE
julientiron 0:3d641e170a74 134
julientiron 0:3d641e170a74 135 @code
julientiron 0:3d641e170a74 136
julientiron 0:3d641e170a74 137 @endcode
julientiron 0:3d641e170a74 138 */
julientiron 0:3d641e170a74 139 /**************************************************************************/
julientiron 0:3d641e170a74 140 const char *BlueNRGDevice::getVersion(void)
julientiron 0:3d641e170a74 141 {
julientiron 0:3d641e170a74 142 char *version = new char[6];
julientiron 0:3d641e170a74 143 memcpy((void *)version, "1.0.0", 5);
julientiron 0:3d641e170a74 144 return version;
julientiron 0:3d641e170a74 145 }
julientiron 0:3d641e170a74 146
julientiron 0:3d641e170a74 147 /**************************************************************************/
julientiron 0:3d641e170a74 148 /*!
julientiron 0:3d641e170a74 149 @brief get init state
julientiron 0:3d641e170a74 150
julientiron 0:3d641e170a74 151 @returns bool
julientiron 0:3d641e170a74 152
julientiron 0:3d641e170a74 153 @retval
julientiron 0:3d641e170a74 154
julientiron 0:3d641e170a74 155 @section EXAMPLE
julientiron 0:3d641e170a74 156
julientiron 0:3d641e170a74 157 @code
julientiron 0:3d641e170a74 158
julientiron 0:3d641e170a74 159 @endcode
julientiron 0:3d641e170a74 160 */
julientiron 0:3d641e170a74 161 /**************************************************************************/
julientiron 0:3d641e170a74 162 bool BlueNRGDevice::getIsInitialized(void)
julientiron 0:3d641e170a74 163 {
julientiron 0:3d641e170a74 164 return isInitialized;
julientiron 0:3d641e170a74 165 }
julientiron 0:3d641e170a74 166
julientiron 0:3d641e170a74 167 /**************************************************************************/
julientiron 0:3d641e170a74 168 /*!
julientiron 0:3d641e170a74 169 @brief get reference to GAP object
julientiron 0:3d641e170a74 170
julientiron 0:3d641e170a74 171 @returns Gap&
julientiron 0:3d641e170a74 172
julientiron 0:3d641e170a74 173 @retval reference to gap object
julientiron 0:3d641e170a74 174
julientiron 0:3d641e170a74 175 @section EXAMPLE
julientiron 0:3d641e170a74 176
julientiron 0:3d641e170a74 177 @code
julientiron 0:3d641e170a74 178
julientiron 0:3d641e170a74 179 @endcode
julientiron 0:3d641e170a74 180 */
julientiron 0:3d641e170a74 181 /**************************************************************************/
julientiron 0:3d641e170a74 182 Gap &BlueNRGDevice::getGap()
julientiron 0:3d641e170a74 183 {
julientiron 0:3d641e170a74 184 return BlueNRGGap::getInstance();
julientiron 0:3d641e170a74 185 }
julientiron 0:3d641e170a74 186
julientiron 0:3d641e170a74 187 /**************************************************************************/
julientiron 0:3d641e170a74 188 /*!
julientiron 0:3d641e170a74 189 @brief get reference to GATT server object
julientiron 0:3d641e170a74 190
julientiron 0:3d641e170a74 191 @returns GattServer&
julientiron 0:3d641e170a74 192
julientiron 0:3d641e170a74 193 @retval reference to GATT server object
julientiron 0:3d641e170a74 194
julientiron 0:3d641e170a74 195 @section EXAMPLE
julientiron 0:3d641e170a74 196
julientiron 0:3d641e170a74 197 @code
julientiron 0:3d641e170a74 198
julientiron 0:3d641e170a74 199 @endcode
julientiron 0:3d641e170a74 200 */
julientiron 0:3d641e170a74 201 /**************************************************************************/
julientiron 0:3d641e170a74 202 GattServer &BlueNRGDevice::getGattServer()
julientiron 0:3d641e170a74 203 {
julientiron 0:3d641e170a74 204 return BlueNRGGattServer::getInstance();
julientiron 0:3d641e170a74 205 }
julientiron 0:3d641e170a74 206
julientiron 0:3d641e170a74 207 /**************************************************************************/
julientiron 0:3d641e170a74 208 /*!
julientiron 0:3d641e170a74 209 @brief set Tx power level
julientiron 0:3d641e170a74 210
julientiron 0:3d641e170a74 211 @returns ble_error_t
julientiron 0:3d641e170a74 212
julientiron 0:3d641e170a74 213 @retval BLE_ERROR_NONE
julientiron 0:3d641e170a74 214 Everything executed properly
julientiron 0:3d641e170a74 215
julientiron 0:3d641e170a74 216 @section EXAMPLE
julientiron 0:3d641e170a74 217
julientiron 0:3d641e170a74 218 @code
julientiron 0:3d641e170a74 219
julientiron 0:3d641e170a74 220 @endcode
julientiron 0:3d641e170a74 221 */
julientiron 0:3d641e170a74 222 /**************************************************************************/
julientiron 0:3d641e170a74 223 ble_error_t BlueNRGDevice::setTxPower(int8_t txPower)
julientiron 0:3d641e170a74 224 {
julientiron 0:3d641e170a74 225 int8_t enHighPower = 0;
julientiron 0:3d641e170a74 226 int8_t paLevel = 0;
julientiron 0:3d641e170a74 227 int8_t dbmActuallySet = getHighPowerAndPALevelValue(txPower, enHighPower, paLevel);
julientiron 0:3d641e170a74 228 DEBUG("txPower=%d, dbmActuallySet=%d\n\r", txPower, dbmActuallySet);
julientiron 0:3d641e170a74 229 DEBUG("enHighPower=%d, paLevel=%d\n\r", enHighPower, paLevel);
julientiron 0:3d641e170a74 230 aci_hal_set_tx_power_level(enHighPower, paLevel);
julientiron 0:3d641e170a74 231 return BLE_ERROR_NONE;
julientiron 0:3d641e170a74 232 }