This software setup a central node of a star topology network

Dependencies:   MQTT target_st_bluenrg

Fork of ble-star-mbed by Lorenzo Invidia

Committer:
lorevee
Date:
Tue Mar 13 16:31:07 2018 +0000
Revision:
3:3f35e80ed848
Parent:
1:110b5e896bc9
Child:
4:4af40af2530e
Bug fixing 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lorevee 0:1902469bdd2d 1 /* mbed Microcontroller Library
lorevee 0:1902469bdd2d 2 * Copyright (c) 2006-2015 ARM Limited
lorevee 0:1902469bdd2d 3 *
lorevee 0:1902469bdd2d 4 * Licensed under the Apache License, Version 2.0 (the "License");
lorevee 0:1902469bdd2d 5 * you may not use this file except in compliance with the License.
lorevee 0:1902469bdd2d 6 * You may obtain a copy of the License at
lorevee 0:1902469bdd2d 7 *
lorevee 0:1902469bdd2d 8 * http://www.apache.org/licenses/LICENSE-2.0
lorevee 0:1902469bdd2d 9 *
lorevee 0:1902469bdd2d 10 * Unless required by applicable law or agreed to in writing, software
lorevee 0:1902469bdd2d 11 * distributed under the License is distributed on an "AS IS" BASIS,
lorevee 0:1902469bdd2d 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
lorevee 0:1902469bdd2d 13 * See the License for the specific language governing permissions and
lorevee 0:1902469bdd2d 14 * limitations under the License.
lorevee 0:1902469bdd2d 15 */
lorevee 0:1902469bdd2d 16
lorevee 0:1902469bdd2d 17 #include <events/mbed_events.h>
lorevee 0:1902469bdd2d 18 #include <mbed.h>
lorevee 0:1902469bdd2d 19 #include "ble/BLE.h"
lorevee 0:1902469bdd2d 20 #include "ble/DiscoveredCharacteristic.h"
lorevee 0:1902469bdd2d 21 #include "ble/DiscoveredService.h"
lorevee 0:1902469bdd2d 22 #include <UUID.h>
lorevee 0:1902469bdd2d 23 #include <BleMasterService.h>
lorevee 0:1902469bdd2d 24 #include <BleSlaveService.h>
lorevee 0:1902469bdd2d 25
lorevee 0:1902469bdd2d 26 const char NAME_BLESTAR1[] = "BleStar1";
lorevee 0:1902469bdd2d 27
lorevee 0:1902469bdd2d 28 /*----------------------------------------------------------------------------*/
lorevee 0:1902469bdd2d 29
lorevee 0:1902469bdd2d 30
lorevee 0:1902469bdd2d 31
lorevee 0:1902469bdd2d 32
lorevee 0:1902469bdd2d 33 /* scheduleBleEventsProcessing */
lorevee 0:1902469bdd2d 34 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
lorevee 0:1902469bdd2d 35 BLE &ble = BLE::Instance();
lorevee 0:1902469bdd2d 36 eventQ.call(Callback<void()>(&ble, &BLE::processEvents));
lorevee 0:1902469bdd2d 37 }
lorevee 0:1902469bdd2d 38 /*----------------------------------------------------------------------------*/
lorevee 0:1902469bdd2d 39 /* Complete the initialization of ble module */
lorevee 0:1902469bdd2d 40 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params){
lorevee 0:1902469bdd2d 41
lorevee 0:1902469bdd2d 42
lorevee 0:1902469bdd2d 43 initProcess();
lorevee 0:1902469bdd2d 44 ble_error_t a0, a1, a2, a3;
lorevee 0:1902469bdd2d 45
lorevee 0:1902469bdd2d 46 BLE& ble = params->ble;
lorevee 0:1902469bdd2d 47 ble_error_t error = params->error;
lorevee 0:1902469bdd2d 48
lorevee 0:1902469bdd2d 49 if (error != BLE_ERROR_NONE) {
lorevee 0:1902469bdd2d 50 /* In case of error, forward the error handling to onBleInitError */
lorevee 0:1902469bdd2d 51 onBleInitError(ble, error);
lorevee 0:1902469bdd2d 52 return;
lorevee 0:1902469bdd2d 53 }
lorevee 0:1902469bdd2d 54
lorevee 0:1902469bdd2d 55
lorevee 0:1902469bdd2d 56
lorevee 0:1902469bdd2d 57 /* Ensure that it is the default instance of BLE */
lorevee 0:1902469bdd2d 58 if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
lorevee 0:1902469bdd2d 59 return;
lorevee 0:1902469bdd2d 60 }
lorevee 0:1902469bdd2d 61
lorevee 0:1902469bdd2d 62 printf("\r\nBLE Init Completed\n");
lorevee 0:1902469bdd2d 63
lorevee 0:1902469bdd2d 64
lorevee 0:1902469bdd2d 65 /* notification */
lorevee 0:1902469bdd2d 66 //ble.gattServer().onUpdatesEnabled(onUpdatesEnabledCallback);
lorevee 0:1902469bdd2d 67 //ble.gattServer().onUpdatesDisabled(onUpdatesDisabledCallback);
lorevee 0:1902469bdd2d 68
lorevee 0:1902469bdd2d 69 /* notification + attr writing */
lorevee 0:1902469bdd2d 70 ble.gattServer().onDataWritten(AttributeModified_CB);
lorevee 0:1902469bdd2d 71 /* data read */
lorevee 0:1902469bdd2d 72 ble.gattClient().onDataRead(readCharacteristicCallback);
lorevee 0:1902469bdd2d 73 /* when a peripheral node characteristics change */
lorevee 0:1902469bdd2d 74 ble.gattClient().onHVX(onNotificationCallback);
lorevee 0:1902469bdd2d 75 /* when a peripheral descriptor is written */
lorevee 0:1902469bdd2d 76 ble.gattClient().onDataWritten(perDescriptorWrittenCallback);
lorevee 0:1902469bdd2d 77
lorevee 0:1902469bdd2d 78
lorevee 0:1902469bdd2d 79 /* disconnection */
lorevee 0:1902469bdd2d 80 ble.gap().onDisconnection(disconnectionCallback);
lorevee 0:1902469bdd2d 81 /* connection */
lorevee 0:1902469bdd2d 82 ble.gap().onConnection(connectionCallback);
lorevee 3:3f35e80ed848 83 ble.gap().setScanParams(400, 200); //(scanInterval,scanWindow)ms
lorevee 1:110b5e896bc9 84 ble.gap().setScanTimeout(0x0004); //stop scanning after N sec
lorevee 0:1902469bdd2d 85 ble.gap().onTimeout(onStopScan); //callback when scan stops
lorevee 0:1902469bdd2d 86
lorevee 0:1902469bdd2d 87
lorevee 0:1902469bdd2d 88
lorevee 0:1902469bdd2d 89
lorevee 0:1902469bdd2d 90 /* Setup adv */
lorevee 0:1902469bdd2d 91 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
lorevee 0:1902469bdd2d 92 a0 = ble.gap().accumulateScanResponse(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, manuf_data, sizeof(manuf_data));
lorevee 0:1902469bdd2d 93 a1 = ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::UNKNOWN);
lorevee 0:1902469bdd2d 94 a2 = ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)NAME_BLESTAR1, sizeof(NAME_BLESTAR1));
lorevee 0:1902469bdd2d 95 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); //Advertising_Event_Type
lorevee 0:1902469bdd2d 96 ble.gap().setAdvertisingInterval(1000); //Adv_Interval
lorevee 0:1902469bdd2d 97 a3 = ble.gap().setAdvertisingPolicyMode(Gap::ADV_POLICY_IGNORE_WHITELIST); //Adv_Filter_Policy
lorevee 0:1902469bdd2d 98 if ((a0 != BLE_ERROR_NONE) || (a1 != BLE_ERROR_NONE) || (a2 != BLE_ERROR_NONE) || (a3 != BLE_ERROR_NONE)){
lorevee 0:1902469bdd2d 99 printf("\r\nError setup ADV\n");
lorevee 0:1902469bdd2d 100 }
lorevee 0:1902469bdd2d 101
lorevee 0:1902469bdd2d 102
lorevee 0:1902469bdd2d 103 addAllServices();
lorevee 0:1902469bdd2d 104 printMacAddress();
lorevee 0:1902469bdd2d 105
lorevee 0:1902469bdd2d 106
lorevee 0:1902469bdd2d 107 /* Start connection, service/chars discovery and enable notification */
lorevee 0:1902469bdd2d 108 connectionProcess();
lorevee 0:1902469bdd2d 109
lorevee 0:1902469bdd2d 110 /* Start advertising from this point */
lorevee 0:1902469bdd2d 111 //setSlaveDiscoverable();//DEBUG_ONLY
lorevee 0:1902469bdd2d 112
lorevee 0:1902469bdd2d 113 }
lorevee 0:1902469bdd2d 114 /*----------------------------------------------------------------------------*/
lorevee 0:1902469bdd2d 115
lorevee 0:1902469bdd2d 116
lorevee 0:1902469bdd2d 117
lorevee 0:1902469bdd2d 118 void onBleInitError(BLE &ble, ble_error_t error) {}
lorevee 0:1902469bdd2d 119 /*----------------------------------------------------------------------------*/
lorevee 0:1902469bdd2d 120
lorevee 0:1902469bdd2d 121
lorevee 0:1902469bdd2d 122
lorevee 0:1902469bdd2d 123 int main()
lorevee 0:1902469bdd2d 124 {
lorevee 0:1902469bdd2d 125 printf("\r\n\n/*******************************************************\n");
lorevee 0:1902469bdd2d 126 printf("\r* *\n");
lorevee 0:1902469bdd2d 127 printf("\r* FP-NET-BLESTAR1 (MBED) Expansion Software *\n");
lorevee 0:1902469bdd2d 128 printf("\r* *\n");
lorevee 0:1902469bdd2d 129 printf("\r*******************************************************/\n\n\n");
lorevee 0:1902469bdd2d 130
lorevee 0:1902469bdd2d 131 /* Create the ble instance */
lorevee 0:1902469bdd2d 132 BLE &ble = BLE::Instance();
lorevee 0:1902469bdd2d 133
lorevee 0:1902469bdd2d 134 ble.onEventsToProcess(scheduleBleEventsProcessing);
lorevee 0:1902469bdd2d 135
lorevee 0:1902469bdd2d 136 /* Uncommenting to debug the status*/
lorevee 0:1902469bdd2d 137 //eventQ.call_every(20000, checkStatus);
lorevee 0:1902469bdd2d 138
lorevee 0:1902469bdd2d 139 ble.init(bleInitComplete);
lorevee 0:1902469bdd2d 140
lorevee 0:1902469bdd2d 141
lorevee 0:1902469bdd2d 142 //dispatch events
lorevee 0:1902469bdd2d 143 eventQ.dispatch_forever();
lorevee 0:1902469bdd2d 144
lorevee 0:1902469bdd2d 145 return 0;
lorevee 0:1902469bdd2d 146 }
lorevee 0:1902469bdd2d 147 /*----------------------------------------------------------------------------*/
lorevee 0:1902469bdd2d 148
lorevee 0:1902469bdd2d 149
lorevee 0:1902469bdd2d 150
lorevee 0:1902469bdd2d 151
lorevee 0:1902469bdd2d 152