Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of mbed-os-example-ble-LED by
source/main.cpp@44:df8adb3bc797, 2017-11-01 (annotated)
- Committer:
- mbed_official
- Date:
- Wed Nov 01 15:31:06 2017 +0000
- Revision:
- 44:df8adb3bc797
- Parent:
- 27:ff1fb7b5f9ee
Merge pull request #112 from marcbonnici/master
Add MAC address printouts to examples
.
Commit copied from https://github.com/ARMmbed/mbed-os-example-ble
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbed_official | 2:864ddfb70a9c | 1 | /* mbed Microcontroller Library |
mbed_official | 2:864ddfb70a9c | 2 | * Copyright (c) 2006-2013 ARM Limited |
mbed_official | 2:864ddfb70a9c | 3 | * |
mbed_official | 2:864ddfb70a9c | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
mbed_official | 2:864ddfb70a9c | 5 | * you may not use this file except in compliance with the License. |
mbed_official | 2:864ddfb70a9c | 6 | * You may obtain a copy of the License at |
mbed_official | 2:864ddfb70a9c | 7 | * |
mbed_official | 2:864ddfb70a9c | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
mbed_official | 2:864ddfb70a9c | 9 | * |
mbed_official | 2:864ddfb70a9c | 10 | * Unless required by applicable law or agreed to in writing, software |
mbed_official | 2:864ddfb70a9c | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
mbed_official | 2:864ddfb70a9c | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
mbed_official | 2:864ddfb70a9c | 13 | * See the License for the specific language governing permissions and |
mbed_official | 2:864ddfb70a9c | 14 | * limitations under the License. |
mbed_official | 2:864ddfb70a9c | 15 | */ |
mbed_official | 2:864ddfb70a9c | 16 | |
mbed_official | 11:7404978b24e7 | 17 | #include <events/mbed_events.h> |
mbed_official | 2:864ddfb70a9c | 18 | #include <mbed.h> |
mbed_official | 2:864ddfb70a9c | 19 | #include "ble/BLE.h" |
mbed_official | 2:864ddfb70a9c | 20 | #include "LEDService.h" |
mbed_official | 2:864ddfb70a9c | 21 | |
mbed_official | 2:864ddfb70a9c | 22 | DigitalOut alivenessLED(LED1, 0); |
mbed_official | 2:864ddfb70a9c | 23 | DigitalOut actuatedLED(LED2, 0); |
mbed_official | 2:864ddfb70a9c | 24 | |
mbed_official | 2:864ddfb70a9c | 25 | const static char DEVICE_NAME[] = "LED"; |
mbed_official | 2:864ddfb70a9c | 26 | static const uint16_t uuid16_list[] = {LEDService::LED_SERVICE_UUID}; |
mbed_official | 2:864ddfb70a9c | 27 | |
mbed_official | 27:ff1fb7b5f9ee | 28 | static EventQueue eventQueue(/* event count */ 10 * EVENTS_EVENT_SIZE); |
mbed_official | 2:864ddfb70a9c | 29 | |
mbed_official | 2:864ddfb70a9c | 30 | LEDService *ledServicePtr; |
mbed_official | 2:864ddfb70a9c | 31 | |
mbed_official | 2:864ddfb70a9c | 32 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
mbed_official | 2:864ddfb70a9c | 33 | { |
mbed_official | 2:864ddfb70a9c | 34 | (void) params; |
mbed_official | 2:864ddfb70a9c | 35 | BLE::Instance().gap().startAdvertising(); |
mbed_official | 2:864ddfb70a9c | 36 | } |
mbed_official | 2:864ddfb70a9c | 37 | |
mbed_official | 2:864ddfb70a9c | 38 | void blinkCallback(void) |
mbed_official | 2:864ddfb70a9c | 39 | { |
mbed_official | 2:864ddfb70a9c | 40 | alivenessLED = !alivenessLED; /* Do blinky on LED1 to indicate system aliveness. */ |
mbed_official | 2:864ddfb70a9c | 41 | } |
mbed_official | 2:864ddfb70a9c | 42 | |
mbed_official | 2:864ddfb70a9c | 43 | /** |
mbed_official | 2:864ddfb70a9c | 44 | * This callback allows the LEDService to receive updates to the ledState Characteristic. |
mbed_official | 2:864ddfb70a9c | 45 | * |
mbed_official | 2:864ddfb70a9c | 46 | * @param[in] params |
mbed_official | 2:864ddfb70a9c | 47 | * Information about the characterisitc being updated. |
mbed_official | 2:864ddfb70a9c | 48 | */ |
mbed_official | 2:864ddfb70a9c | 49 | void onDataWrittenCallback(const GattWriteCallbackParams *params) { |
mbed_official | 2:864ddfb70a9c | 50 | if ((params->handle == ledServicePtr->getValueHandle()) && (params->len == 1)) { |
mbed_official | 2:864ddfb70a9c | 51 | actuatedLED = *(params->data); |
mbed_official | 2:864ddfb70a9c | 52 | } |
mbed_official | 2:864ddfb70a9c | 53 | } |
mbed_official | 2:864ddfb70a9c | 54 | |
mbed_official | 2:864ddfb70a9c | 55 | /** |
mbed_official | 2:864ddfb70a9c | 56 | * This function is called when the ble initialization process has failled |
mbed_official | 2:864ddfb70a9c | 57 | */ |
mbed_official | 2:864ddfb70a9c | 58 | void onBleInitError(BLE &ble, ble_error_t error) |
mbed_official | 2:864ddfb70a9c | 59 | { |
mbed_official | 2:864ddfb70a9c | 60 | /* Initialization error handling should go here */ |
mbed_official | 2:864ddfb70a9c | 61 | } |
mbed_official | 2:864ddfb70a9c | 62 | |
mbed_official | 44:df8adb3bc797 | 63 | void printMacAddress() |
mbed_official | 44:df8adb3bc797 | 64 | { |
mbed_official | 44:df8adb3bc797 | 65 | /* Print out device MAC address to the console*/ |
mbed_official | 44:df8adb3bc797 | 66 | Gap::AddressType_t addr_type; |
mbed_official | 44:df8adb3bc797 | 67 | Gap::Address_t address; |
mbed_official | 44:df8adb3bc797 | 68 | BLE::Instance().gap().getAddress(&addr_type, address); |
mbed_official | 44:df8adb3bc797 | 69 | printf("DEVICE MAC ADDRESS: "); |
mbed_official | 44:df8adb3bc797 | 70 | for (int i = 5; i >= 1; i--){ |
mbed_official | 44:df8adb3bc797 | 71 | printf("%02x:", address[i]); |
mbed_official | 44:df8adb3bc797 | 72 | } |
mbed_official | 44:df8adb3bc797 | 73 | printf("%02x\r\n", address[0]); |
mbed_official | 44:df8adb3bc797 | 74 | } |
mbed_official | 44:df8adb3bc797 | 75 | |
mbed_official | 2:864ddfb70a9c | 76 | /** |
mbed_official | 2:864ddfb70a9c | 77 | * Callback triggered when the ble initialization process has finished |
mbed_official | 2:864ddfb70a9c | 78 | */ |
mbed_official | 2:864ddfb70a9c | 79 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
mbed_official | 2:864ddfb70a9c | 80 | { |
mbed_official | 2:864ddfb70a9c | 81 | BLE& ble = params->ble; |
mbed_official | 2:864ddfb70a9c | 82 | ble_error_t error = params->error; |
mbed_official | 2:864ddfb70a9c | 83 | |
mbed_official | 2:864ddfb70a9c | 84 | if (error != BLE_ERROR_NONE) { |
mbed_official | 2:864ddfb70a9c | 85 | /* In case of error, forward the error handling to onBleInitError */ |
mbed_official | 2:864ddfb70a9c | 86 | onBleInitError(ble, error); |
mbed_official | 2:864ddfb70a9c | 87 | return; |
mbed_official | 2:864ddfb70a9c | 88 | } |
mbed_official | 2:864ddfb70a9c | 89 | |
mbed_official | 2:864ddfb70a9c | 90 | /* Ensure that it is the default instance of BLE */ |
mbed_official | 2:864ddfb70a9c | 91 | if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
mbed_official | 2:864ddfb70a9c | 92 | return; |
mbed_official | 2:864ddfb70a9c | 93 | } |
mbed_official | 2:864ddfb70a9c | 94 | |
mbed_official | 2:864ddfb70a9c | 95 | ble.gap().onDisconnection(disconnectionCallback); |
mbed_official | 2:864ddfb70a9c | 96 | ble.gattServer().onDataWritten(onDataWrittenCallback); |
mbed_official | 2:864ddfb70a9c | 97 | |
mbed_official | 2:864ddfb70a9c | 98 | bool initialValueForLEDCharacteristic = false; |
mbed_official | 2:864ddfb70a9c | 99 | ledServicePtr = new LEDService(ble, initialValueForLEDCharacteristic); |
mbed_official | 2:864ddfb70a9c | 100 | |
mbed_official | 2:864ddfb70a9c | 101 | /* setup advertising */ |
mbed_official | 2:864ddfb70a9c | 102 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
mbed_official | 2:864ddfb70a9c | 103 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); |
mbed_official | 2:864ddfb70a9c | 104 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
mbed_official | 2:864ddfb70a9c | 105 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
mbed_official | 2:864ddfb70a9c | 106 | ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ |
mbed_official | 2:864ddfb70a9c | 107 | ble.gap().startAdvertising(); |
mbed_official | 44:df8adb3bc797 | 108 | |
mbed_official | 44:df8adb3bc797 | 109 | printMacAddress(); |
mbed_official | 2:864ddfb70a9c | 110 | } |
mbed_official | 2:864ddfb70a9c | 111 | |
mbed_official | 2:864ddfb70a9c | 112 | void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { |
mbed_official | 2:864ddfb70a9c | 113 | BLE &ble = BLE::Instance(); |
mbed_official | 11:7404978b24e7 | 114 | eventQueue.call(Callback<void()>(&ble, &BLE::processEvents)); |
mbed_official | 2:864ddfb70a9c | 115 | } |
mbed_official | 2:864ddfb70a9c | 116 | |
mbed_official | 2:864ddfb70a9c | 117 | int main() |
mbed_official | 2:864ddfb70a9c | 118 | { |
mbed_official | 11:7404978b24e7 | 119 | eventQueue.call_every(500, blinkCallback); |
mbed_official | 2:864ddfb70a9c | 120 | |
mbed_official | 2:864ddfb70a9c | 121 | BLE &ble = BLE::Instance(); |
mbed_official | 2:864ddfb70a9c | 122 | ble.onEventsToProcess(scheduleBleEventsProcessing); |
mbed_official | 2:864ddfb70a9c | 123 | ble.init(bleInitComplete); |
mbed_official | 2:864ddfb70a9c | 124 | |
mbed_official | 11:7404978b24e7 | 125 | eventQueue.dispatch_forever(); |
mbed_official | 2:864ddfb70a9c | 126 | |
mbed_official | 2:864ddfb70a9c | 127 | return 0; |
mbed_official | 2:864ddfb70a9c | 128 | } |