An example program to test data transfer throughput. Exhibits long latency (2 sec) between hardware callbacks on write event.

Dependencies:   BLE_API mbed nRF51822

Committer:
pvaibhav
Date:
Thu Aug 14 14:13:53 2014 +0000
Revision:
0:ab775bf55fe4
Minimal program to demo slow throughput/callback latency

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pvaibhav 0:ab775bf55fe4 1 /* mbed Microcontroller Library
pvaibhav 0:ab775bf55fe4 2 * Copyright (c) 2006-2013 ARM Limited
pvaibhav 0:ab775bf55fe4 3 *
pvaibhav 0:ab775bf55fe4 4 * Licensed under the Apache License, Version 2.0 (the "License");
pvaibhav 0:ab775bf55fe4 5 * you may not use this file except in compliance with the License.
pvaibhav 0:ab775bf55fe4 6 * You may obtain a copy of the License at
pvaibhav 0:ab775bf55fe4 7 *
pvaibhav 0:ab775bf55fe4 8 * http://www.apache.org/licenses/LICENSE-2.0
pvaibhav 0:ab775bf55fe4 9 *
pvaibhav 0:ab775bf55fe4 10 * Unless required by applicable law or agreed to in writing, software
pvaibhav 0:ab775bf55fe4 11 * distributed under the License is distributed on an "AS IS" BASIS,
pvaibhav 0:ab775bf55fe4 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
pvaibhav 0:ab775bf55fe4 13 * See the License for the specific language governing permissions and
pvaibhav 0:ab775bf55fe4 14 * limitations under the License.
pvaibhav 0:ab775bf55fe4 15 */
pvaibhav 0:ab775bf55fe4 16
pvaibhav 0:ab775bf55fe4 17 #include "mbed.h"
pvaibhav 0:ab775bf55fe4 18 #include "Logger.h"
pvaibhav 0:ab775bf55fe4 19 #include "Configuration.h"
pvaibhav 0:ab775bf55fe4 20 #include "BLEDevice.h"
pvaibhav 0:ab775bf55fe4 21 #include "TransferService.h"
pvaibhav 0:ab775bf55fe4 22
pvaibhav 0:ab775bf55fe4 23 BLEDevice ble;
pvaibhav 0:ab775bf55fe4 24
pvaibhav 0:ab775bf55fe4 25 static Gap::ConnectionParams_t connectionParams;
pvaibhav 0:ab775bf55fe4 26
pvaibhav 0:ab775bf55fe4 27 static const uint8_t* uuidlist = Transfer::getServiceUUIDp();
pvaibhav 0:ab775bf55fe4 28 static uint8_t uuidlistrev[16];
pvaibhav 0:ab775bf55fe4 29
pvaibhav 0:ab775bf55fe4 30 void bluetoothInit();
pvaibhav 0:ab775bf55fe4 31
pvaibhav 0:ab775bf55fe4 32 void disconnectionCallback(Gap::Handle_t handle)
pvaibhav 0:ab775bf55fe4 33 {
pvaibhav 0:ab775bf55fe4 34 DEBUG("Disconnected\n\r");
pvaibhav 0:ab775bf55fe4 35 ble.startAdvertising();
pvaibhav 0:ab775bf55fe4 36 DEBUG("Advertising...\r\n");
pvaibhav 0:ab775bf55fe4 37 }
pvaibhav 0:ab775bf55fe4 38
pvaibhav 0:ab775bf55fe4 39 void onConnectionCallback(Gap::Handle_t handle)
pvaibhav 0:ab775bf55fe4 40 {
pvaibhav 0:ab775bf55fe4 41 DEBUG("____[ Connected ]______________________________________\r\n");
pvaibhav 0:ab775bf55fe4 42
pvaibhav 0:ab775bf55fe4 43 connectionParams.minConnectionInterval = Config::minConnectionInterval;
pvaibhav 0:ab775bf55fe4 44 connectionParams.maxConnectionInterval = Config::maxConnectionInterval;
pvaibhav 0:ab775bf55fe4 45 connectionParams.slaveLatency = Config::slaveLatency;
pvaibhav 0:ab775bf55fe4 46 connectionParams.connectionSupervisionTimeout = Config::supervisionTimeout;
pvaibhav 0:ab775bf55fe4 47 if (ble.updateConnectionParams(handle, &connectionParams) != BLE_ERROR_NONE) {
pvaibhav 0:ab775bf55fe4 48 DEBUG("failed to update connection paramter\r\n");
pvaibhav 0:ab775bf55fe4 49 } else {
pvaibhav 0:ab775bf55fe4 50
pvaibhav 0:ab775bf55fe4 51 }
pvaibhav 0:ab775bf55fe4 52
pvaibhav 0:ab775bf55fe4 53 Transfer::reset();
pvaibhav 0:ab775bf55fe4 54 }
pvaibhav 0:ab775bf55fe4 55
pvaibhav 0:ab775bf55fe4 56 void onUpdatesEnabled(Gap::Handle_t handle)
pvaibhav 0:ab775bf55fe4 57 {
pvaibhav 0:ab775bf55fe4 58 DEBUG("Notifications enabled for %d\r\n", handle);
pvaibhav 0:ab775bf55fe4 59 }
pvaibhav 0:ab775bf55fe4 60
pvaibhav 0:ab775bf55fe4 61 void onDataWritten(Gap::Handle_t handle)
pvaibhav 0:ab775bf55fe4 62 {
pvaibhav 0:ab775bf55fe4 63 // bubble up to services, they will emit callbacks if handle matches
pvaibhav 0:ab775bf55fe4 64 Transfer::handleDataWritten(handle);
pvaibhav 0:ab775bf55fe4 65 }
pvaibhav 0:ab775bf55fe4 66
pvaibhav 0:ab775bf55fe4 67 void bluetoothInit()
pvaibhav 0:ab775bf55fe4 68 {
pvaibhav 0:ab775bf55fe4 69 DEBUG("Bluetooth initialising...\r\n");
pvaibhav 0:ab775bf55fe4 70 ble.init();
pvaibhav 0:ab775bf55fe4 71 ble.setDeviceName(Config::deviceName);
pvaibhav 0:ab775bf55fe4 72 ble.onDisconnection(disconnectionCallback);
pvaibhav 0:ab775bf55fe4 73 ble.onConnection(onConnectionCallback);
pvaibhav 0:ab775bf55fe4 74 ble.onDataWritten(onDataWritten);
pvaibhav 0:ab775bf55fe4 75 ble.onUpdatesEnabled(onUpdatesEnabled);
pvaibhav 0:ab775bf55fe4 76
pvaibhav 0:ab775bf55fe4 77 // Make sure we use our preferred conn. parameters
pvaibhav 0:ab775bf55fe4 78 connectionParams.minConnectionInterval = Config::minConnectionInterval;
pvaibhav 0:ab775bf55fe4 79 connectionParams.maxConnectionInterval = Config::maxConnectionInterval;
pvaibhav 0:ab775bf55fe4 80 connectionParams.slaveLatency = Config::slaveLatency;
pvaibhav 0:ab775bf55fe4 81 connectionParams.connectionSupervisionTimeout = Config::supervisionTimeout;
pvaibhav 0:ab775bf55fe4 82 ble.setPreferredConnectionParams(&connectionParams);
pvaibhav 0:ab775bf55fe4 83 ble.getPreferredConnectionParams(&connectionParams);
pvaibhav 0:ab775bf55fe4 84 DEBUG("Conn. params => min=%d, max=%d, slave=%d, supervision=%d\r\n", connectionParams.minConnectionInterval,
pvaibhav 0:ab775bf55fe4 85 connectionParams.maxConnectionInterval,
pvaibhav 0:ab775bf55fe4 86 connectionParams.slaveLatency,
pvaibhav 0:ab775bf55fe4 87 connectionParams.connectionSupervisionTimeout);
pvaibhav 0:ab775bf55fe4 88
pvaibhav 0:ab775bf55fe4 89 // Initialise transfer service
pvaibhav 0:ab775bf55fe4 90 Transfer::init(ble);
pvaibhav 0:ab775bf55fe4 91
pvaibhav 0:ab775bf55fe4 92 /* setup advertising */
pvaibhav 0:ab775bf55fe4 93 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
pvaibhav 0:ab775bf55fe4 94 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, uuidlistrev, 16);
pvaibhav 0:ab775bf55fe4 95 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pvaibhav 0:ab775bf55fe4 96 ble.setAdvertisingInterval(Config::advertisingInterval);
pvaibhav 0:ab775bf55fe4 97 ble.startAdvertising();
pvaibhav 0:ab775bf55fe4 98 DEBUG("Ready. Advertising.\r\n");
pvaibhav 0:ab775bf55fe4 99 }
pvaibhav 0:ab775bf55fe4 100
pvaibhav 0:ab775bf55fe4 101 int main(void)
pvaibhav 0:ab775bf55fe4 102 {
pvaibhav 0:ab775bf55fe4 103 DEBUG("Initialising TRANSFER PRO | Built %s %s\n\r", __DATE__, __TIME__);
pvaibhav 0:ab775bf55fe4 104
pvaibhav 0:ab775bf55fe4 105 for (int i = 0; i < 16; i++) {
pvaibhav 0:ab775bf55fe4 106 uuidlistrev[15 - i] = uuidlist[i];
pvaibhav 0:ab775bf55fe4 107 }
pvaibhav 0:ab775bf55fe4 108
pvaibhav 0:ab775bf55fe4 109 bluetoothInit();
pvaibhav 0:ab775bf55fe4 110
pvaibhav 0:ab775bf55fe4 111 while (true) {
pvaibhav 0:ab775bf55fe4 112 ble.waitForEvent();
pvaibhav 0:ab775bf55fe4 113 }
pvaibhav 0:ab775bf55fe4 114 }