SunTracker_BLE_Remote

Dependencies:   BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IKS01A1 mbed

Fork of SunTracker_BLE_Remote by ST Expansion SW Team

This application is the BLE Remote Control for the SunTracker demo application that you can find here.
Please refer to that page for further information.

Committer:
fabiombed
Date:
Wed Mar 16 19:17:57 2016 +0000
Revision:
4:17f96ffc073a
Parent:
3:b2bf47485f85
Child:
5:5e62f661a7ab
Update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fabiombed 4:17f96ffc073a 1 /**
fabiombed 4:17f96ffc073a 2 ******************************************************************************
fabiombed 4:17f96ffc073a 3 * @file main.cpp
fabiombed 4:17f96ffc073a 4 * @author Fabio Brembilla
fabiombed 4:17f96ffc073a 5 * @version V2.0.0
fabiombed 4:17f96ffc073a 6 * @date March, 2016
fabiombed 4:17f96ffc073a 7 * @brief SunTracker + BLE (Client) + RemoteControl Vertical Application
fabiombed 4:17f96ffc073a 8 * This application use IKS01A1, IDB0XA1 expansion boards
fabiombed 4:17f96ffc073a 9 ******************************************************************************
fabiombed 4:17f96ffc073a 10 * @attention
apalmieri 0:2e972e7d3f64 11 *
fabiombed 4:17f96ffc073a 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
apalmieri 0:2e972e7d3f64 13 *
fabiombed 4:17f96ffc073a 14 * Redistribution and use in source and binary forms, with or without modification,
fabiombed 4:17f96ffc073a 15 * are permitted provided that the following conditions are met:
fabiombed 4:17f96ffc073a 16 * 1. Redistributions of source code must retain the above copyright notice,
fabiombed 4:17f96ffc073a 17 * this list of conditions and the following disclaimer.
fabiombed 4:17f96ffc073a 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
fabiombed 4:17f96ffc073a 19 * this list of conditions and the following disclaimer in the documentation
fabiombed 4:17f96ffc073a 20 * and/or other materials provided with the distribution.
fabiombed 4:17f96ffc073a 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
fabiombed 4:17f96ffc073a 22 * may be used to endorse or promote products derived from this software
fabiombed 4:17f96ffc073a 23 * without specific prior written permission.
apalmieri 0:2e972e7d3f64 24 *
fabiombed 4:17f96ffc073a 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
fabiombed 4:17f96ffc073a 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
fabiombed 4:17f96ffc073a 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
fabiombed 4:17f96ffc073a 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
fabiombed 4:17f96ffc073a 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
fabiombed 4:17f96ffc073a 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
fabiombed 4:17f96ffc073a 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
fabiombed 4:17f96ffc073a 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
fabiombed 4:17f96ffc073a 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
fabiombed 4:17f96ffc073a 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
fabiombed 4:17f96ffc073a 35 *
fabiombed 4:17f96ffc073a 36 ******************************************************************************
apalmieri 0:2e972e7d3f64 37 */
fabiombed 4:17f96ffc073a 38
fabiombed 4:17f96ffc073a 39 /* Define --------------------------------------------------------------------*/
fabiombed 4:17f96ffc073a 40
fabiombed 4:17f96ffc073a 41 #define Sensors //IKS01A1 Option
fabiombed 4:17f96ffc073a 42
fabiombed 4:17f96ffc073a 43 /* Includes ------------------------------------------------------------------*/
fabiombed 4:17f96ffc073a 44
apalmieri 0:2e972e7d3f64 45 #include "mbed.h"
apalmieri 0:2e972e7d3f64 46 #include "ble/BLE.h"
apalmieri 0:2e972e7d3f64 47 #include "ble/DiscoveredCharacteristic.h"
apalmieri 0:2e972e7d3f64 48 #include "ble/DiscoveredService.h"
apalmieri 0:2e972e7d3f64 49
fabiombed 4:17f96ffc073a 50 #ifdef Sensors
fabiombed 4:17f96ffc073a 51 #include "DevI2C.h"
fabiombed 4:17f96ffc073a 52 #include "x_nucleo_iks01a1.h"
fabiombed 4:17f96ffc073a 53 #endif
fabiombed 4:17f96ffc073a 54
fabiombed 4:17f96ffc073a 55 /* BlueTooth -----------------------------------------------------------------*/
fabiombed 4:17f96ffc073a 56
apalmieri 0:2e972e7d3f64 57 #define SCAN_INT 0x30 // 30 ms = 48 * 0.625 ms
apalmieri 0:2e972e7d3f64 58 #define SCAN_WIND 0x30 // 30 ms = 48 * 0.625 ms
apalmieri 0:2e972e7d3f64 59
fabiombed 4:17f96ffc073a 60 const Gap::Address_t BLE_address_BE = {0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA}; // CLIENT address
fabiombed 4:17f96ffc073a 61 const Gap::Address_t BLE_peer_address_BE = {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}; // SERVER address (must be the same of SERVER)
fabiombed 4:17f96ffc073a 62 //const Gap::Address_t BLE_address_BE = {0xCC, 0x00, 0x00, 0xE1, 0x80, 0x02}; // CLIENT address
fabiombed 4:17f96ffc073a 63 //const Gap::Address_t BLE_peer_address_BE = {0xFD, 0x66, 0x05, 0x13, 0xBE, 0xBA}; // SERVER address (must be the same of SERVER)
apalmieri 0:2e972e7d3f64 64
fabiombed 4:17f96ffc073a 65 DiscoveredCharacteristic userbutton_bleCharacteristic;
fabiombed 4:17f96ffc073a 66 DiscoveredCharacteristic difference_bleCharacteristic;
fabiombed 4:17f96ffc073a 67 DiscoveredCharacteristic position_bleCharacteristic;
fabiombed 4:17f96ffc073a 68 DiscoveredCharacteristic sunpanel_bleCharacteristic;
fabiombed 4:17f96ffc073a 69
fabiombed 4:17f96ffc073a 70 uint8_t value_write = 1;
fabiombed 4:17f96ffc073a 71 int32_t value_read = 0;
fabiombed 4:17f96ffc073a 72
fabiombed 4:17f96ffc073a 73 /* Initializations ------------------------------------------------------------*/
fabiombed 4:17f96ffc073a 74
fabiombed 4:17f96ffc073a 75 #ifdef Sensors
apalmieri 0:2e972e7d3f64 76
fabiombed 4:17f96ffc073a 77 // Initializing I2C bus
fabiombed 4:17f96ffc073a 78 DevI2C dev_i2c(D14, D15);
fabiombed 4:17f96ffc073a 79
fabiombed 4:17f96ffc073a 80 // Initializing Sensors Component IKS01A1
fabiombed 4:17f96ffc073a 81 static X_NUCLEO_IKS01A1 *mems;
fabiombed 4:17f96ffc073a 82 MotionSensor *accelerometer;
apalmieri 0:2e972e7d3f64 83
fabiombed 4:17f96ffc073a 84 int32_t acc_data[3]; // Accelerometer difference
fabiombed 4:17f96ffc073a 85 int32_t diff=0; // Accelerometer difference
fabiombed 4:17f96ffc073a 86 #endif
fabiombed 4:17f96ffc073a 87
fabiombed 4:17f96ffc073a 88 InterruptIn mybutton(USER_BUTTON);
fabiombed 4:17f96ffc073a 89
fabiombed 4:17f96ffc073a 90 /* User_Button_Pressed -------------------------------------------------------*/
fabiombed 4:17f96ffc073a 91
fabiombed 4:17f96ffc073a 92 void User_Button_Pressed(void)
apalmieri 0:2e972e7d3f64 93 {
fabiombed 4:17f96ffc073a 94 userbutton_bleCharacteristic.write(1, &value_write);
apalmieri 0:2e972e7d3f64 95 }
apalmieri 0:2e972e7d3f64 96
fabiombed 4:17f96ffc073a 97 /* Bluetooth CallBack ---------------------------------------------------------*/
fabiombed 4:17f96ffc073a 98
fabiombed 4:17f96ffc073a 99 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
fabiombed 4:17f96ffc073a 100 {
fabiombed 4:17f96ffc073a 101 if (params->peerAddr[0] != BLE_peer_address_BE[0]) // return if miss the server MAC address
fabiombed 4:17f96ffc073a 102 {
fabiombed 4:17f96ffc073a 103 printf("Missing Expected MAC Address");
fabiombed 4:17f96ffc073a 104 return; // exit from advertisementCallback
apalmieri 0:2e972e7d3f64 105 }
apalmieri 0:2e972e7d3f64 106
fabiombed 4:17f96ffc073a 107 // printf("adv peerAddr[%02x %02x %02x %02x %02x %02x] rssi %d, isScanResponse %u, AdvertisementType %u\r\n",
fabiombed 4:17f96ffc073a 108 // params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0],
fabiombed 4:17f96ffc073a 109 // params->rssi, params->isScanResponse, params->type);
fabiombed 4:17f96ffc073a 110
fabiombed 4:17f96ffc073a 111 printf("Found Expected MAC Address: isScanResponse %u, AdvertisementType %u\r\n",params->isScanResponse, params->type);
apalmieri 0:2e972e7d3f64 112
fabiombed 4:17f96ffc073a 113 if(!params->isScanResponse)
fabiombed 4:17f96ffc073a 114 {
apalmieri 0:2e972e7d3f64 115 BLE::Instance().gap().connect(params->peerAddr, Gap::ADDR_TYPE_PUBLIC, NULL, NULL);
apalmieri 0:2e972e7d3f64 116 }
apalmieri 0:2e972e7d3f64 117 }
apalmieri 0:2e972e7d3f64 118
fabiombed 4:17f96ffc073a 119 void serviceDiscoveryCallback(const DiscoveredService *service)
fabiombed 4:17f96ffc073a 120 {
fabiombed 4:17f96ffc073a 121 printf("Start Service Discovery\r\n");
fabiombed 4:17f96ffc073a 122 /*
fabiombed 4:17f96ffc073a 123 if (service->getUUID().shortOrLong() == UUID::UUID_TYPE_SHORT)
fabiombed 4:17f96ffc073a 124 {
apalmieri 0:2e972e7d3f64 125 printf("S UUID-%x attrs[%u %u]\r\n", service->getUUID().getShortUUID(), service->getStartHandle(), service->getEndHandle());
fabiombed 4:17f96ffc073a 126 }
fabiombed 4:17f96ffc073a 127 else
fabiombed 4:17f96ffc073a 128 {
apalmieri 0:2e972e7d3f64 129 printf("S UUID-");
apalmieri 0:2e972e7d3f64 130 const uint8_t *longUUIDBytes = service->getUUID().getBaseUUID();
fabiombed 4:17f96ffc073a 131 for (unsigned i = 0; i < UUID::LENGTH_OF_LONG_UUID; i++)
fabiombed 4:17f96ffc073a 132 {
apalmieri 0:2e972e7d3f64 133 printf("%02X", longUUIDBytes[i]);
apalmieri 0:2e972e7d3f64 134 }
apalmieri 0:2e972e7d3f64 135 printf(" attrs[%u %u]\r\n", service->getStartHandle(), service->getEndHandle());
apalmieri 0:2e972e7d3f64 136 }
fabiombed 4:17f96ffc073a 137 */
apalmieri 0:2e972e7d3f64 138 }
fabiombed 4:17f96ffc073a 139
fabiombed 4:17f96ffc073a 140 void characteristicDiscoveryCallback(const DiscoveredCharacteristic *characteristicP)
fabiombed 4:17f96ffc073a 141 {
fabiombed 4:17f96ffc073a 142 if (characteristicP->getUUID().getShortUUID() == 0xA001)
fabiombed 4:17f96ffc073a 143 {
fabiombed 4:17f96ffc073a 144 userbutton_bleCharacteristic = *characteristicP;
fabiombed 4:17f96ffc073a 145 printf("Found 0xA001 Characteristic\r\n");
fabiombed 4:17f96ffc073a 146 }
fabiombed 4:17f96ffc073a 147
fabiombed 4:17f96ffc073a 148 if (characteristicP->getUUID().getShortUUID() == 0xB001)
fabiombed 4:17f96ffc073a 149 {
fabiombed 4:17f96ffc073a 150 difference_bleCharacteristic = *characteristicP;
fabiombed 4:17f96ffc073a 151 printf("Found 0xB001 Characteristic\r\n");
fabiombed 4:17f96ffc073a 152 }
fabiombed 4:17f96ffc073a 153
fabiombed 4:17f96ffc073a 154 if (characteristicP->getUUID().getShortUUID() == 0xB002)
fabiombed 4:17f96ffc073a 155 {
fabiombed 4:17f96ffc073a 156 position_bleCharacteristic = *characteristicP;
fabiombed 4:17f96ffc073a 157 printf("Found 0xB002 Characteristic\r\n");
fabiombed 4:17f96ffc073a 158 }
fabiombed 4:17f96ffc073a 159
fabiombed 4:17f96ffc073a 160 if (characteristicP->getUUID().getShortUUID() == 0xB003)
fabiombed 4:17f96ffc073a 161 {
fabiombed 4:17f96ffc073a 162 sunpanel_bleCharacteristic = *characteristicP;
fabiombed 4:17f96ffc073a 163 printf("Found 0xB003 Characteristic\r\n");
apalmieri 0:2e972e7d3f64 164 }
apalmieri 0:2e972e7d3f64 165 }
apalmieri 0:2e972e7d3f64 166
fabiombed 4:17f96ffc073a 167 void discoveryTerminationCallback(Gap::Handle_t connectionHandle)
fabiombed 4:17f96ffc073a 168 {
fabiombed 4:17f96ffc073a 169 //printf("discoveryTerminationCallback for handle %u\r\n", connectionHandle);
fabiombed 4:17f96ffc073a 170 printf("Stop Service Discovery\r\n\r\n");
apalmieri 0:2e972e7d3f64 171 }
apalmieri 0:2e972e7d3f64 172
fabiombed 4:17f96ffc073a 173 void onDataReadCallback(const GattReadCallbackParams *response)
fabiombed 4:17f96ffc073a 174 {
fabiombed 4:17f96ffc073a 175 // Read SERVER --> CLIENT
fabiombed 4:17f96ffc073a 176
fabiombed 4:17f96ffc073a 177 if (response->handle == userbutton_bleCharacteristic.getValueHandle())
fabiombed 4:17f96ffc073a 178 {
fabiombed 4:17f96ffc073a 179 printf("onDataRead userbutton (data[0] %x)\r\n", response->data[0]);
fabiombed 4:17f96ffc073a 180 printf("onDataRead userbutton (data[1] %x)\r\n", response->data[1]);
fabiombed 4:17f96ffc073a 181 printf("onDataRead userbutton (data[2] %x)\r\n", response->data[2]);
fabiombed 4:17f96ffc073a 182 printf("onDataRead userbutton (data[3] %x)\r\n\r\n", response->data[3]);
fabiombed 4:17f96ffc073a 183 }
fabiombed 4:17f96ffc073a 184
fabiombed 4:17f96ffc073a 185 if (response->handle == difference_bleCharacteristic.getValueHandle())
fabiombed 4:17f96ffc073a 186 {
fabiombed 4:17f96ffc073a 187 printf("onDataRead difference (data[0] %x)\r\n", response->data[0]);
fabiombed 4:17f96ffc073a 188 printf("onDataRead difference (data[1] %x)\r\n", response->data[1]);
fabiombed 4:17f96ffc073a 189 printf("onDataRead difference (data[2] %x)\r\n", response->data[2]);
fabiombed 4:17f96ffc073a 190 printf("onDataRead difference (data[3] %x)\r\n\r\n", response->data[3]);
apalmieri 0:2e972e7d3f64 191 }
fabiombed 4:17f96ffc073a 192
fabiombed 4:17f96ffc073a 193 if (response->handle == position_bleCharacteristic.getValueHandle())
fabiombed 4:17f96ffc073a 194 {
fabiombed 4:17f96ffc073a 195 printf("onDataRead position (data[0] %x)\r\n", response->data[0]);
fabiombed 4:17f96ffc073a 196 printf("onDataRead position (data[1] %x)\r\n", response->data[1]);
fabiombed 4:17f96ffc073a 197 printf("onDataRead position (data[2] %x)\r\n", response->data[2]);
fabiombed 4:17f96ffc073a 198 printf("onDataRead position (data[3] %x)\r\n\r\n", response->data[3]);
fabiombed 4:17f96ffc073a 199 }
apalmieri 0:2e972e7d3f64 200
fabiombed 4:17f96ffc073a 201 if (response->handle == sunpanel_bleCharacteristic.getValueHandle())
fabiombed 4:17f96ffc073a 202 {
fabiombed 4:17f96ffc073a 203 printf("onDataRead sunpanel (data[0] %x)\r\n", response->data[0]);
fabiombed 4:17f96ffc073a 204 printf("onDataRead sunpanel (data[1] %x)\r\n", response->data[1]);
fabiombed 4:17f96ffc073a 205 printf("onDataRead sunpanel (data[2] %x)\r\n", response->data[2]);
fabiombed 4:17f96ffc073a 206 printf("onDataRead sunpanel (data[3] %x)\r\n", response->data[3]);
fabiombed 4:17f96ffc073a 207
fabiombed 4:17f96ffc073a 208 value_read = response->data[0]+response->data[1]+response->data[2]+response->data[3];
fabiombed 4:17f96ffc073a 209 printf("onDataRead sunpanel (data %d)\r\n\r\n", value_read);
fabiombed 4:17f96ffc073a 210 }
apalmieri 0:2e972e7d3f64 211 }
apalmieri 0:2e972e7d3f64 212
fabiombed 4:17f96ffc073a 213 void myonDataWriteCallback(const GattWriteCallbackParams *response)
fabiombed 4:17f96ffc073a 214 {
fabiombed 4:17f96ffc073a 215 // Write CLIENT --> SERVER
fabiombed 4:17f96ffc073a 216
fabiombed 4:17f96ffc073a 217 if (response->handle == userbutton_bleCharacteristic.getValueHandle())
fabiombed 4:17f96ffc073a 218 {
fabiombed 4:17f96ffc073a 219 printf("myonDataWrite userbutton (data[0] %x)\n\r", response->data[0]);
fabiombed 4:17f96ffc073a 220 printf("myonDataWrite userbutton (data[1] %x)\n\r", response->data[1]);
fabiombed 4:17f96ffc073a 221 printf("myonDataWrite userbutton (data[2] %x)\n\r", response->data[2]);
fabiombed 4:17f96ffc073a 222 printf("myonDataWrite userbutton (data[3] %x)\n\r\n\r", response->data[3]);
fabiombed 4:17f96ffc073a 223 }
apalmieri 0:2e972e7d3f64 224 }
apalmieri 0:2e972e7d3f64 225
apalmieri 0:2e972e7d3f64 226 /**
apalmieri 0:2e972e7d3f64 227 * This function is called when the ble initialization process has failled
apalmieri 0:2e972e7d3f64 228 */
apalmieri 0:2e972e7d3f64 229 void onBleInitError(BLE &ble, ble_error_t error)
apalmieri 0:2e972e7d3f64 230 {
apalmieri 0:2e972e7d3f64 231 /* Initialization error handling should go here */
apalmieri 0:2e972e7d3f64 232 }
apalmieri 0:2e972e7d3f64 233
fabiombed 4:17f96ffc073a 234 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
fabiombed 4:17f96ffc073a 235 {
fabiombed 4:17f96ffc073a 236 //uint16_t CONTROL_SERVICE_UUID = 0xA000;
fabiombed 4:17f96ffc073a 237 //uint16_t USERBUTTON_CHARACTERISTIC_UUID = 0xA001;
fabiombed 4:17f96ffc073a 238
fabiombed 4:17f96ffc073a 239 //uint16_t SENSORS_SERVICE_UUID = 0xB000;
fabiombed 4:17f96ffc073a 240 //uint16_t DIFFERENCE_CHARACTERISTIC_UUID = 0xB001;
fabiombed 4:17f96ffc073a 241 //uint16_t POSITION_CHARACTERISTIC_UUID = 0xB002;
fabiombed 4:17f96ffc073a 242 //uint16_t SUNPANEL_CHARACTERISTIC_UUID = 0xB003;
fabiombed 4:17f96ffc073a 243
fabiombed 4:17f96ffc073a 244 if (params->role == Gap::CENTRAL)
fabiombed 4:17f96ffc073a 245 {
fabiombed 4:17f96ffc073a 246 BLE &ble = BLE::Instance();
fabiombed 4:17f96ffc073a 247 ble.gattClient().onServiceDiscoveryTermination(discoveryTerminationCallback);
fabiombed 4:17f96ffc073a 248 // Discover all SERVICES and CHARACTERISTICS
fabiombed 4:17f96ffc073a 249 ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback);
fabiombed 4:17f96ffc073a 250
fabiombed 4:17f96ffc073a 251 //ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, CONTROL_SERVICE_UUID, USERBUTTON_CHARACTERISTIC_UUID);
fabiombed 4:17f96ffc073a 252 //ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, SENSORS_SERVICE_UUID, DIFFERENCE_CHARACTERISTIC_UUID);
fabiombed 4:17f96ffc073a 253 //ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, SENSORS_SERVICE_UUID, POSITION_CHARACTERISTIC_UUID);
fabiombed 4:17f96ffc073a 254 //ble.gattClient().launchServiceDiscovery(params->handle, serviceDiscoveryCallback, characteristicDiscoveryCallback, SENSORS_SERVICE_UUID, SUNPANEL_CHARACTERISTIC_UUID);
fabiombed 4:17f96ffc073a 255 }
fabiombed 4:17f96ffc073a 256
fabiombed 4:17f96ffc073a 257 printf("Remote Connected\n\r");
fabiombed 4:17f96ffc073a 258 }
fabiombed 4:17f96ffc073a 259
fabiombed 4:17f96ffc073a 260 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
fabiombed 4:17f96ffc073a 261 {
fabiombed 4:17f96ffc073a 262 (void)params;
fabiombed 4:17f96ffc073a 263 printf("Remote Disconnected\n\r");
fabiombed 4:17f96ffc073a 264 }
fabiombed 4:17f96ffc073a 265
apalmieri 0:2e972e7d3f64 266 /**
apalmieri 0:2e972e7d3f64 267 * Callback triggered when the ble initialization process has finished
apalmieri 0:2e972e7d3f64 268 */
apalmieri 0:2e972e7d3f64 269 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
apalmieri 0:2e972e7d3f64 270 {
apalmieri 0:2e972e7d3f64 271 BLE& ble = params->ble;
apalmieri 0:2e972e7d3f64 272 ble_error_t error = params->error;
apalmieri 0:2e972e7d3f64 273
fabiombed 4:17f96ffc073a 274 if (error != BLE_ERROR_NONE)
fabiombed 4:17f96ffc073a 275 {
apalmieri 0:2e972e7d3f64 276 /* In case of error, forward the error handling to onBleInitError */
apalmieri 0:2e972e7d3f64 277 onBleInitError(ble, error);
apalmieri 0:2e972e7d3f64 278 return;
apalmieri 0:2e972e7d3f64 279 }
apalmieri 0:2e972e7d3f64 280
apalmieri 0:2e972e7d3f64 281 /* Ensure that it is the default instance of BLE */
fabiombed 4:17f96ffc073a 282 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; }
apalmieri 0:2e972e7d3f64 283
apalmieri 0:2e972e7d3f64 284 // Set BT Address
apalmieri 1:e0f4bcce540c 285 ble.gap().setAddress(BLEProtocol::AddressType::PUBLIC, BLE_address_BE);
apalmieri 0:2e972e7d3f64 286
apalmieri 0:2e972e7d3f64 287 ble.gap().onConnection(connectionCallback);
apalmieri 0:2e972e7d3f64 288 ble.onDisconnection(disconnectionCallback);
apalmieri 0:2e972e7d3f64 289
fabiombed 4:17f96ffc073a 290 ble.gattClient().onDataRead(onDataReadCallback);
fabiombed 4:17f96ffc073a 291 ble.gattClient().onDataWrite(myonDataWriteCallback);
apalmieri 0:2e972e7d3f64 292
apalmieri 0:2e972e7d3f64 293 ble.gap().setScanParams(SCAN_INT, SCAN_WIND);
apalmieri 0:2e972e7d3f64 294 ble.gap().startScan(advertisementCallback);
fabiombed 4:17f96ffc073a 295
fabiombed 4:17f96ffc073a 296 static int INTLOOP=0;
fabiombed 4:17f96ffc073a 297
fabiombed 4:17f96ffc073a 298 // Main Loop
fabiombed 4:17f96ffc073a 299 while (true) {
fabiombed 4:17f96ffc073a 300 if (!ble.gattClient().isServiceDiscoveryActive()) // Until try to discover service don't enter
fabiombed 4:17f96ffc073a 301 {
fabiombed 4:17f96ffc073a 302 INTLOOP++;
fabiombed 4:17f96ffc073a 303 if (INTLOOP==2000)
fabiombed 4:17f96ffc073a 304 {
fabiombed 4:17f96ffc073a 305 printf("\n\r");
fabiombed 4:17f96ffc073a 306 userbutton_bleCharacteristic.read();
fabiombed 4:17f96ffc073a 307 difference_bleCharacteristic.read();
fabiombed 4:17f96ffc073a 308 position_bleCharacteristic.read();
fabiombed 4:17f96ffc073a 309 sunpanel_bleCharacteristic.read();
fabiombed 4:17f96ffc073a 310 INTLOOP=0;
fabiombed 4:17f96ffc073a 311 }
fabiombed 4:17f96ffc073a 312
fabiombed 4:17f96ffc073a 313 #ifdef Sensors
fabiombed 4:17f96ffc073a 314 accelerometer->Get_X_Axes(acc_data);
fabiombed 4:17f96ffc073a 315 diff = acc_data[0];
fabiombed 4:17f96ffc073a 316 //printf("Send BLE Difference %d lux/mems\n\r", diff);
fabiombed 4:17f96ffc073a 317 #endif
fabiombed 4:17f96ffc073a 318
apalmieri 0:2e972e7d3f64 319 }
fabiombed 4:17f96ffc073a 320 ble.waitForEvent();
apalmieri 0:2e972e7d3f64 321 }
apalmieri 0:2e972e7d3f64 322 }
apalmieri 0:2e972e7d3f64 323
fabiombed 4:17f96ffc073a 324 /* Main ----------------------------------------------------------------------*/
fabiombed 4:17f96ffc073a 325
apalmieri 0:2e972e7d3f64 326 int main(void)
apalmieri 0:2e972e7d3f64 327 {
fabiombed 4:17f96ffc073a 328 printf("\r\n\r\nSunTracker Remote Control\r\n\r\n");
fabiombed 4:17f96ffc073a 329
fabiombed 4:17f96ffc073a 330 #ifdef Sensors
fabiombed 4:17f96ffc073a 331 // Initializing Sensors Component
fabiombed 4:17f96ffc073a 332 mems=X_NUCLEO_IKS01A1::Instance(&dev_i2c);
fabiombed 4:17f96ffc073a 333 accelerometer = mems->GetAccelerometer();
fabiombed 4:17f96ffc073a 334 printf("Init Sensors OK\r\n");
fabiombed 4:17f96ffc073a 335 #endif
fabiombed 4:17f96ffc073a 336
fabiombed 4:17f96ffc073a 337 mybutton.fall(&User_Button_Pressed);
fabiombed 4:17f96ffc073a 338
apalmieri 0:2e972e7d3f64 339 BLE::Instance().init(bleInitComplete);
fabiombed 4:17f96ffc073a 340 }