Skip to content

Commit

Permalink
Merge pull request #208 from ARMmbed/mbed-os-5.11.0-oob
Browse files Browse the repository at this point in the history
Mbed OS 5.11.0
  • Loading branch information
pan- authored Jan 14, 2019
2 parents 8e791bf + 4240d47 commit 6b40605
Show file tree
Hide file tree
Showing 208 changed files with 9,195 additions and 1,323 deletions.
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,19 @@ build/
yotta_modules/
yotta_targets/
.DS_Store

# clion
.idea/
cmake-build-*/
CMakeLists.txt

# exporters
GettingStarted.html

# mbed build system
mbed-os/
mbed_settings.py
mbed_config.h
*.pyc
TARGET_CORDIO_BLUENRG/

2 changes: 1 addition & 1 deletion BLE_BatteryLevel/mbed-os.lib
Original file line number Diff line number Diff line change
@@ -1 +1 @@
https://github.com/ARMmbed/mbed-os/#2fd0c5cfbd83fce62da6308f9d64c0ab64e1f0d6
https://github.com/ARMmbed/mbed-os/#6a0a86538c0b9b2bfcc4583b1e2b7fea8f4e71e9
10 changes: 10 additions & 0 deletions BLE_BatteryLevel/mbed_app.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@
"DISCO_L475VG_IOT01A": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_BLUENRG"]
},
"NRF52840_DK": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_LL", "SOFTDEVICE_NONE", "NORDIC_CORDIO"],
"target.extra_labels_remove": ["SOFTDEVICE_COMMON", "SOFTDEVICE_S140_FULL", "NORDIC_SOFTDEVICE"]
},
"NRF52_DK": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_LL", "SOFTDEVICE_NONE", "NORDIC_CORDIO"],
"target.extra_labels_remove": ["SOFTDEVICE_COMMON", "SOFTDEVICE_S132_FULL", "NORDIC_SOFTDEVICE"]
}
}
}
2 changes: 1 addition & 1 deletion BLE_BatteryLevel/shields/TARGET_CORDIO_BLUENRG.lib
Original file line number Diff line number Diff line change
@@ -1 +1 @@
https://github.com/ARMmbed/cordio-ble-x-nucleo-idb0xa1/#51f60dfea514e35e5aa13c8e24005ecadc24a9f5
https://github.com/ARMmbed/cordio-ble-x-nucleo-idb0xa1/#811f3fea7aa8083c0bbf378e1b51a8b131d7efcc
178 changes: 103 additions & 75 deletions BLE_BatteryLevel/source/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,111 +19,139 @@
#include "ble/BLE.h"
#include "ble/Gap.h"
#include "ble/services/BatteryService.h"
#include "pretty_printer.h"

DigitalOut led1(LED1, 1);
static DigitalOut led1(LED1, 1);

const static char DEVICE_NAME[] = "BATTERY";
static const uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE};
const static char DEVICE_NAME[] = "BATTERY";

static uint8_t batteryLevel = 50;
static BatteryService* batteryServicePtr;
static events::EventQueue event_queue(/* event count */ 16 * EVENTS_EVENT_SIZE);

static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
class BatteryDemo : ble::Gap::EventHandler {
public:
BatteryDemo(BLE &ble, events::EventQueue &event_queue) :
_ble(ble),
_event_queue(event_queue),
_battery_uuid(GattService::UUID_BATTERY_SERVICE),
_battery_level(50),
_battery_service(ble, _battery_level),
_adv_data_builder(_adv_buffer) { }

void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
{
BLE::Instance().gap().startAdvertising();
}
void start() {
_ble.gap().setEventHandler(this);

_ble.init(this, &BatteryDemo::on_init_complete);

_event_queue.call_every(500, this, &BatteryDemo::blink);
_event_queue.call_every(1000, this, &BatteryDemo::update_sensor_value);

void updateSensorValue() {
batteryLevel++;
if (batteryLevel > 100) {
batteryLevel = 20;
_event_queue.dispatch_forever();
}

batteryServicePtr->updateBatteryLevel(batteryLevel);
}
private:
/** Callback triggered when the ble initialization process has finished */
void on_init_complete(BLE::InitializationCompleteCallbackContext *params) {
if (params->error != BLE_ERROR_NONE) {
print_error(params->error, "Ble initialization failed.");
return;
}

void blinkCallback(void)
{
led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
print_mac_address();

BLE &ble = BLE::Instance();
if (ble.gap().getState().connected) {
eventQueue.call(updateSensorValue);
start_advertising();
}
}

/**
* This function is called when the ble initialization process has failled
*/
void onBleInitError(BLE &ble, ble_error_t error)
{
/* Initialization error handling should go here */
}
void start_advertising() {
/* Create advertising parameters and payload */

void printMacAddress()
{
/* Print out device MAC address to the console*/
Gap::AddressType_t addr_type;
Gap::Address_t address;
BLE::Instance().gap().getAddress(&addr_type, address);
printf("DEVICE MAC ADDRESS: ");
for (int i = 5; i >= 1; i--){
printf("%02x:", address[i]);
ble::AdvertisingParameters adv_parameters(
ble::advertising_type_t::CONNECTABLE_UNDIRECTED,
ble::adv_interval_t(ble::millisecond_t(1000))
);

_adv_data_builder.setFlags();
_adv_data_builder.setLocalServiceList(mbed::make_Span(&_battery_uuid, 1));
_adv_data_builder.setName(DEVICE_NAME);

/* Setup advertising */

ble_error_t error = _ble.gap().setAdvertisingParameters(
ble::LEGACY_ADVERTISING_HANDLE,
adv_parameters
);

if (error) {
print_error(error, "_ble.gap().setAdvertisingParameters() failed");
return;
}

error = _ble.gap().setAdvertisingPayload(
ble::LEGACY_ADVERTISING_HANDLE,
_adv_data_builder.getAdvertisingData()
);

if (error) {
print_error(error, "_ble.gap().setAdvertisingPayload() failed");
return;
}

/* Start advertising */

error = _ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE);

if (error) {
print_error(error, "_ble.gap().startAdvertising() failed");
return;
}
}
printf("%02x\r\n", address[0]);
}

/**
* Callback triggered when the ble initialization process has finished
*/
void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
{
BLE& ble = params->ble;
ble_error_t error = params->error;
void update_sensor_value() {
if (_ble.gap().getState().connected) {
_battery_level++;
if (_battery_level > 100) {
_battery_level = 20;
}

if (error != BLE_ERROR_NONE) {
/* In case of error, forward the error handling to onBleInitError */
onBleInitError(ble, error);
return;
_battery_service.updateBatteryLevel(_battery_level);
}
}

/* Ensure that it is the default instance of BLE */
if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
return;
void blink(void) {
led1 = !led1;
}

ble.gap().onDisconnection(disconnectionCallback);
private:
/* Event handler */

/* Setup primary service */
batteryServicePtr = new BatteryService(ble, batteryLevel);
void onDisconnectionComplete(const ble::DisconnectionCompleteEvent&) {
_ble.gap().startAdvertising(ble::LEGACY_ADVERTISING_HANDLE);
}

/* Setup advertising */
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list));
ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME));
ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
ble.gap().setAdvertisingInterval(1000); /* 1000ms */
ble.gap().startAdvertising();
private:
BLE &_ble;
events::EventQueue &_event_queue;

printMacAddress();
}
UUID _battery_uuid;

void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
BLE &ble = BLE::Instance();
eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
uint8_t _battery_level;
BatteryService _battery_service;

uint8_t _adv_buffer[ble::LEGACY_ADVERTISING_MAX_SIZE];
ble::AdvertisingDataBuilder _adv_data_builder;
};

/** Schedule processing of events from the BLE middleware in the event queue. */
void schedule_ble_events(BLE::OnEventsToProcessCallbackContext *context) {
event_queue.call(Callback<void()>(&context->ble, &BLE::processEvents));
}

int main()
{
eventQueue.call_every(500, blinkCallback);

BLE &ble = BLE::Instance();
ble.onEventsToProcess(scheduleBleEventsProcessing);
ble.init(bleInitComplete);
ble.onEventsToProcess(schedule_ble_events);

eventQueue.dispatch_forever();
BatteryDemo demo(ble, event_queue);
demo.start();

return 0;
}
95 changes: 95 additions & 0 deletions BLE_BatteryLevel/source/pretty_printer.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
/* mbed Microcontroller Library
* Copyright (c) 2018 ARM Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include <mbed.h>
#include "ble/BLE.h"

inline void print_error(ble_error_t error, const char* msg)
{
printf("%s: ", msg);
switch(error) {
case BLE_ERROR_NONE:
printf("BLE_ERROR_NONE: No error");
break;
case BLE_ERROR_BUFFER_OVERFLOW:
printf("BLE_ERROR_BUFFER_OVERFLOW: The requested action would cause a buffer overflow and has been aborted");
break;
case BLE_ERROR_NOT_IMPLEMENTED:
printf("BLE_ERROR_NOT_IMPLEMENTED: Requested a feature that isn't yet implement or isn't supported by the target HW");
break;
case BLE_ERROR_PARAM_OUT_OF_RANGE:
printf("BLE_ERROR_PARAM_OUT_OF_RANGE: One of the supplied parameters is outside the valid range");
break;
case BLE_ERROR_INVALID_PARAM:
printf("BLE_ERROR_INVALID_PARAM: One of the supplied parameters is invalid");
break;
case BLE_STACK_BUSY:
printf("BLE_STACK_BUSY: The stack is busy");
break;
case BLE_ERROR_INVALID_STATE:
printf("BLE_ERROR_INVALID_STATE: Invalid state");
break;
case BLE_ERROR_NO_MEM:
printf("BLE_ERROR_NO_MEM: Out of Memory");
break;
case BLE_ERROR_OPERATION_NOT_PERMITTED:
printf("BLE_ERROR_OPERATION_NOT_PERMITTED");
break;
case BLE_ERROR_INITIALIZATION_INCOMPLETE:
printf("BLE_ERROR_INITIALIZATION_INCOMPLETE");
break;
case BLE_ERROR_ALREADY_INITIALIZED:
printf("BLE_ERROR_ALREADY_INITIALIZED");
break;
case BLE_ERROR_UNSPECIFIED:
printf("BLE_ERROR_UNSPECIFIED: Unknown error");
break;
case BLE_ERROR_INTERNAL_STACK_FAILURE:
printf("BLE_ERROR_INTERNAL_STACK_FAILURE: internal stack faillure");
break;
}
printf("\r\n");
}

/** print device address to the terminal */
inline void print_address(const Gap::Address_t &addr)
{
printf("%02x:%02x:%02x:%02x:%02x:%02x\r\n",
addr[5], addr[4], addr[3], addr[2], addr[1], addr[0]);
}

inline void print_mac_address()
{
/* Print out device MAC address to the console*/
Gap::AddressType_t addr_type;
Gap::Address_t address;
BLE::Instance().gap().getAddress(&addr_type, address);
printf("DEVICE MAC ADDRESS: ");
print_address(address);
}

inline const char* phy_to_string(Gap::Phy_t phy) {
switch(phy.value()) {
case Gap::Phy_t::LE_1M:
return "LE 1M";
case Gap::Phy_t::LE_2M:
return "LE 2M";
case Gap::Phy_t::LE_CODED:
return "LE coded";
default:
return "invalid PHY";
}
}
2 changes: 1 addition & 1 deletion BLE_Beacon/mbed-os.lib
Original file line number Diff line number Diff line change
@@ -1 +1 @@
https://github.com/ARMmbed/mbed-os/#2fd0c5cfbd83fce62da6308f9d64c0ab64e1f0d6
https://github.com/ARMmbed/mbed-os/#6a0a86538c0b9b2bfcc4583b1e2b7fea8f4e71e9
10 changes: 10 additions & 0 deletions BLE_Beacon/mbed_app.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,16 @@
"DISCO_L475VG_IOT01A": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_BLUENRG"]
},
"NRF52840_DK": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_LL", "SOFTDEVICE_NONE", "NORDIC_CORDIO"],
"target.extra_labels_remove": ["SOFTDEVICE_COMMON", "SOFTDEVICE_S140_FULL", "NORDIC_SOFTDEVICE"]
},
"NRF52_DK": {
"target.features_add": ["BLE"],
"target.extra_labels_add": ["CORDIO", "CORDIO_LL", "SOFTDEVICE_NONE", "NORDIC_CORDIO"],
"target.extra_labels_remove": ["SOFTDEVICE_COMMON", "SOFTDEVICE_S132_FULL", "NORDIC_SOFTDEVICE"]
}
}
}
2 changes: 1 addition & 1 deletion BLE_Beacon/shields/TARGET_CORDIO_BLUENRG.lib
Original file line number Diff line number Diff line change
@@ -1 +1 @@
https://github.com/ARMmbed/cordio-ble-x-nucleo-idb0xa1/#51f60dfea514e35e5aa13c8e24005ecadc24a9f5
https://github.com/ARMmbed/cordio-ble-x-nucleo-idb0xa1/#811f3fea7aa8083c0bbf378e1b51a8b131d7efcc
Loading

0 comments on commit 6b40605

Please sign in to comment.