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.
Dependencies: BLE_API mbed nRF51822
Fork of BLE_GATT_test1 by
main.cpp
- Committer:
- alexanderlea
- Date:
- 2015-03-27
- Revision:
- 13:a578c382cb7d
- Parent:
- 12:f5b12e8b6043
- Child:
- 14:7225b50aaaf7
File content as of revision 13:a578c382cb7d:
#include "mbed.h"
#include "BLEDevice.h"
#include "BroadcasterService.h"
#include "ErrorService.h"
#include <string>
using namespace std;
BLEDevice ble;
DigitalOut led1(LED1);
InterruptIn indicatorIn(p5);
Serial pc(USBTX, USBRX);
/*Variable Declarations*/
const static char DEVICE_NAME[] = "BLE_Broadcaster";
static volatile bool indicatorOn = false;
static volatile bool indicatorSent = false;
uint8_t cmdIndicatorOn[8] = { 0x69,0x6e,0x64,0x69,0x7f,0x7f,0x7f,0x7f }; // = I N D I 127 127 127 127
uint8_t cmdIndicatorOff[8] = { 0x69,0x6e,0x64,0x69,0x00,0x00,0x00,0x00 }; // = I N D I 0 0 0 0
/** Callback function for ticker */
void blink(void)
{
led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
}
/** Callback routine is interrupt activated by a debounced button hit*/
void indicatorSwitchOn(void) {
indicatorOn = true;
indicatorSent = false;
pc.printf("Indicator switch on.\r\n");
}
/** Callback routine is interrupt activated by a debounced button release*/
void indicatorSwitchOff(void) {
indicatorOn = false;
indicatorSent = false;
pc.printf("Indicator switch off.\r\n");
}
/** Callback function for BLE disconnection */
void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
{
pc.printf("Disconnected! - start advertising. Handle:%d, Reason:0x%02x\r\n", handle, reason);
ble.startAdvertising();
}
/** Callback function for BLE connection */
void connectionCallback(Gap::Handle_t handle, Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, const Gap::ConnectionParams_t *parms)
{
pc.printf("Connected! - stop advertising. Handle:%d, eType:%d, Add:%u.\r\n", handle, peerAddrType, peerAddr);
ble.stopAdvertising();
}
int main(void)
{
/*Setup switch input*/
indicatorIn.mode(PullUp);
// Delay for initial pullup to take effect
wait(.01);
// Setup Interrupt callback function for a button hit
indicatorIn.fall(&indicatorSwitchOn);
indicatorIn.rise(&indicatorSwitchOff);
/*Setup Blinky*/
led1 = 1;
Ticker t;
t.attach(&blink, 1);
/*Setup BLE*/
ble.init();
ble.onDisconnection(disconnectionCallback);
ble.onConnection(connectionCallback);
//create services
BroadcasterService broadcasterService(ble);
ErrorService errorService(ble);
/*
* BREDR_NOT_SUPPORTED = BLE only
* LE_GENERAL_DISCOVERABLE = Device is discoverable at any moment (no time out)
* ADV_CONNECTABLE_UNDIRECTED = Any central device can connect
*/
ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
// ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
ble.setAdvertisingInterval(160); /* 1s; in multiples of 0.625ms. */ //was 1600
ble.startAdvertising();
pc.printf("Advertising node %s\n\r", DEVICE_NAME);
//loop forever
while(true) {
ble.waitForEvent(); // this should return upon any system event (such as an interrupt or a ticker wakeup)
if(indicatorOn) { //if button is pressed
if(!indicatorSent) { //should only fire the first time!
pc.printf("Command on = %u\r\n", cmdIndicatorOn);
broadcasterService.sendCommand(cmdIndicatorOn);
indicatorSent = true; //set true to stop multiple firing
}
} else {
if(!indicatorSent) {
pc.printf("Command off = %u\r\n", cmdIndicatorOff);
broadcasterService.sendCommand(cmdIndicatorOff);
indicatorSent = true; //set true to stop multiple firing
}
}
}
}
