SunTracker_BLE_Remote
Dependencies: BLE_API X_NUCLEO_IDB0XA1 X_NUCLEO_IKS01A1 mbed
Fork of SunTracker_BLE_Remote by
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.
main.cpp@4:17f96ffc073a, 2016-03-16 (annotated)
- 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?
User | Revision | Line number | New 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>© 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 | } |