DongKeun Kang / Mbed OS mbed-os-example-ble-UARTConsol
Committer:
mirika
Date:
Fri May 11 14:28:16 2018 +0000
Revision:
1:2237580e56f1
Parent:
0:f046a5fadbe8
Child:
2:ce6be5c83dde
uart ???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mirika 0:f046a5fadbe8 1 /* mbed Microcontroller Library
mirika 0:f046a5fadbe8 2 * Copyright (c) 2006-2014 ARM Limited
mirika 0:f046a5fadbe8 3 *
mirika 0:f046a5fadbe8 4 * Licensed under the Apache License, Version 2.0 (the "License");
mirika 0:f046a5fadbe8 5 * you may not use this file except in compliance with the License.
mirika 0:f046a5fadbe8 6 * You may obtain a copy of the License at
mirika 0:f046a5fadbe8 7 *
mirika 0:f046a5fadbe8 8 * http://www.apache.org/licenses/LICENSE-2.0
mirika 0:f046a5fadbe8 9 *
mirika 0:f046a5fadbe8 10 * Unless required by applicable law or agreed to in writing, software
mirika 0:f046a5fadbe8 11 * distributed under the License is distributed on an "AS IS" BASIS,
mirika 0:f046a5fadbe8 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mirika 0:f046a5fadbe8 13 * See the License for the specific language governing permissions and
mirika 0:f046a5fadbe8 14 * limitations under the License.
mirika 0:f046a5fadbe8 15 */
mirika 0:f046a5fadbe8 16
mirika 0:f046a5fadbe8 17 #include <events/mbed_events.h>
mirika 0:f046a5fadbe8 18 #include <mbed.h>
mirika 0:f046a5fadbe8 19 #include "ble/BLE.h"
mirika 0:f046a5fadbe8 20 #include "ble/Gap.h"
mirika 1:2237580e56f1 21 #include "ble/services/UARTService.h"
mirika 0:f046a5fadbe8 22
mirika 0:f046a5fadbe8 23 DigitalOut led1(LED1, 1);
mirika 1:2237580e56f1 24 DigitalOut led2(LED2, 1);
mirika 0:f046a5fadbe8 25
mirika 1:2237580e56f1 26 static UARTService* uartServicePtr;
mirika 0:f046a5fadbe8 27
mirika 0:f046a5fadbe8 28 static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
mirika 0:f046a5fadbe8 29
mirika 0:f046a5fadbe8 30 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
mirika 0:f046a5fadbe8 31 {
mirika 0:f046a5fadbe8 32 BLE::Instance().gap().startAdvertising();
mirika 0:f046a5fadbe8 33 }
mirika 0:f046a5fadbe8 34
mirika 0:f046a5fadbe8 35
mirika 0:f046a5fadbe8 36
mirika 0:f046a5fadbe8 37 void blinkCallback(void)
mirika 0:f046a5fadbe8 38 {
mirika 0:f046a5fadbe8 39 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
mirika 0:f046a5fadbe8 40
mirika 0:f046a5fadbe8 41 BLE &ble = BLE::Instance();
mirika 0:f046a5fadbe8 42 if (ble.gap().getState().connected) {
mirika 1:2237580e56f1 43 // eventQueue.call(updateSensorValue);
mirika 0:f046a5fadbe8 44 }
mirika 0:f046a5fadbe8 45 }
mirika 0:f046a5fadbe8 46
mirika 0:f046a5fadbe8 47 /**
mirika 0:f046a5fadbe8 48 * This function is called when the ble initialization process has failled
mirika 0:f046a5fadbe8 49 */
mirika 0:f046a5fadbe8 50 void onBleInitError(BLE &ble, ble_error_t error)
mirika 0:f046a5fadbe8 51 {
mirika 0:f046a5fadbe8 52 /* Initialization error handling should go here */
mirika 0:f046a5fadbe8 53 }
mirika 0:f046a5fadbe8 54
mirika 0:f046a5fadbe8 55 void printMacAddress()
mirika 0:f046a5fadbe8 56 {
mirika 0:f046a5fadbe8 57 /* Print out device MAC address to the console*/
mirika 0:f046a5fadbe8 58 Gap::AddressType_t addr_type;
mirika 0:f046a5fadbe8 59 Gap::Address_t address;
mirika 0:f046a5fadbe8 60 BLE::Instance().gap().getAddress(&addr_type, address);
mirika 0:f046a5fadbe8 61 printf("DEVICE MAC ADDRESS: ");
mirika 0:f046a5fadbe8 62 for (int i = 5; i >= 1; i--){
mirika 0:f046a5fadbe8 63 printf("%02x:", address[i]);
mirika 0:f046a5fadbe8 64 }
mirika 0:f046a5fadbe8 65 printf("%02x\r\n", address[0]);
mirika 0:f046a5fadbe8 66 }
mirika 0:f046a5fadbe8 67
mirika 0:f046a5fadbe8 68 /**
mirika 0:f046a5fadbe8 69 * Callback triggered when the ble initialization process has finished
mirika 0:f046a5fadbe8 70 */
mirika 0:f046a5fadbe8 71 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
mirika 0:f046a5fadbe8 72 {
mirika 0:f046a5fadbe8 73 BLE& ble = params->ble;
mirika 0:f046a5fadbe8 74 ble_error_t error = params->error;
mirika 0:f046a5fadbe8 75
mirika 0:f046a5fadbe8 76 if (error != BLE_ERROR_NONE) {
mirika 0:f046a5fadbe8 77 /* In case of error, forward the error handling to onBleInitError */
mirika 0:f046a5fadbe8 78 onBleInitError(ble, error);
mirika 0:f046a5fadbe8 79 return;
mirika 0:f046a5fadbe8 80 }
mirika 0:f046a5fadbe8 81
mirika 0:f046a5fadbe8 82 /* Ensure that it is the default instance of BLE */
mirika 0:f046a5fadbe8 83 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
mirika 0:f046a5fadbe8 84 return;
mirika 0:f046a5fadbe8 85 }
mirika 0:f046a5fadbe8 86
mirika 0:f046a5fadbe8 87 ble.gap().onDisconnection(disconnectionCallback);
mirika 1:2237580e56f1 88 ble.gap().onDataWritten( DataWriteCallback );
mirika 1:2237580e56f1 89 ble.gap().onDataRead( DataReadCallback );
mirika 0:f046a5fadbe8 90
mirika 0:f046a5fadbe8 91 /* Setup primary service */
mirika 1:2237580e56f1 92 uartServicePtr = new UARTService(ble);
mirika 0:f046a5fadbe8 93
mirika 0:f046a5fadbe8 94 /* Setup advertising */
mirika 1:2237580e56f1 95 #if 0
mirika 0:f046a5fadbe8 96 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
mirika 0:f046a5fadbe8 97 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list));
mirika 0:f046a5fadbe8 98 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME));
mirika 0:f046a5fadbe8 99 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
mirika 1:2237580e56f1 100
mirika 1:2237580e56f1 101 #else
mirika 1:2237580e56f1 102
mirika 1:2237580e56f1 103 /* setup advertising */
mirika 1:2237580e56f1 104 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
mirika 1:2237580e56f1 105 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
mirika 1:2237580e56f1 106 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
mirika 1:2237580e56f1 107 (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
mirika 1:2237580e56f1 108 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
mirika 1:2237580e56f1 109 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
mirika 1:2237580e56f1 110 #endif
mirika 0:f046a5fadbe8 111 ble.gap().setAdvertisingInterval(1000); /* 1000ms */
mirika 0:f046a5fadbe8 112 ble.gap().startAdvertising();
mirika 1:2237580e56f1 113
mirika 0:f046a5fadbe8 114 printMacAddress();
mirika 0:f046a5fadbe8 115 }
mirika 0:f046a5fadbe8 116
mirika 0:f046a5fadbe8 117 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
mirika 0:f046a5fadbe8 118 BLE &ble = BLE::Instance();
mirika 0:f046a5fadbe8 119 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
mirika 0:f046a5fadbe8 120 }
mirika 0:f046a5fadbe8 121
mirika 0:f046a5fadbe8 122 int main()
mirika 0:f046a5fadbe8 123 {
mirika 0:f046a5fadbe8 124 eventQueue.call_every(500, blinkCallback);
mirika 0:f046a5fadbe8 125
mirika 0:f046a5fadbe8 126 BLE &ble = BLE::Instance();
mirika 0:f046a5fadbe8 127 ble.onEventsToProcess(scheduleBleEventsProcessing);
mirika 0:f046a5fadbe8 128 ble.init(bleInitComplete);
mirika 0:f046a5fadbe8 129
mirika 0:f046a5fadbe8 130 eventQueue.dispatch_forever();
mirika 0:f046a5fadbe8 131
mirika 0:f046a5fadbe8 132 return 0;
mirika 0:f046a5fadbe8 133 }