diff options
Diffstat (limited to 'arduino/libraries/Bluefruit52Lib/examples/Peripheral/throughput/throughput.ino')
-rwxr-xr-x | arduino/libraries/Bluefruit52Lib/examples/Peripheral/throughput/throughput.ino | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/arduino/libraries/Bluefruit52Lib/examples/Peripheral/throughput/throughput.ino b/arduino/libraries/Bluefruit52Lib/examples/Peripheral/throughput/throughput.ino new file mode 100755 index 0000000..8f88f2a --- /dev/null +++ b/arduino/libraries/Bluefruit52Lib/examples/Peripheral/throughput/throughput.ino @@ -0,0 +1,183 @@ +/********************************************************************* + This is an example for our nRF52 based Bluefruit LE modules + + Pick one up today in the adafruit shop! + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + MIT license, check LICENSE for more information + All text above, and the splash screen below must be included in + any redistribution +*********************************************************************/ + +#include <bluefruit.h> + +// String to send in the throughput test +#define TEST_STRING "01234567899876543210" +const int TEST_STRLEN = strlen(TEST_STRING); + +// Number of total data sent ( 1024 times the test string) +#define TOTAL_BYTES (1024 * strlen(TEST_STRING)) + +BLEDis bledis; +BLEUart bleuart; + +/**************************************************************************/ +/*! + @brief Sets up the HW an the BLE module (this function is called + automatically on startup) +*/ +/**************************************************************************/ +void setup(void) +{ + Serial.begin(115200); + while ( !Serial ) delay(10); // for nrf52840 with native usb + + Serial.println("Bluefruit52 Throughput Example"); + Serial.println("------------------------------\n"); + + // Setup the BLE LED to be enabled on CONNECT + // Note: This is actually the default behaviour, but provided + // here in case you want to control this manually via PIN 19 + Bluefruit.autoConnLed(true); + + Bluefruit.begin(); + // Set max power. Accepted values are: -40, -30, -20, -16, -12, -8, -4, 0, 4 + Bluefruit.setTxPower(4); + Bluefruit.setName("Bluefruit52"); + Bluefruit.setConnectCallback(connect_callback); + Bluefruit.setDisconnectCallback(disconnect_callback); + + // Configure and Start Device Information Service + bledis.setManufacturer("Adafruit Industries"); + bledis.setModel("Bluefruit Feather52"); + bledis.begin(); + + // Configure and Start BLE Uart Service + bleuart.begin(); + + // Set up and start advertising + startAdv(); +} + +void startAdv(void) +{ + Bluefruit.Advertising.addFlags(BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE); + Bluefruit.Advertising.addTxPower(); + + // Include bleuart 128-bit uuid + Bluefruit.Advertising.addService(bleuart); + + // There is no room for Name in Advertising packet + // Use Scan response for Name + Bluefruit.ScanResponse.addName(); + + /* Start Advertising + * - Enable auto advertising if disconnected + * - Interval: fast mode = 20 ms, slow mode = 152.5 ms + * - Timeout for fast mode is 30 seconds + * - Start(timeout) with timeout = 0 will advertise forever (until connected) + * + * For recommended advertising interval + * https://developer.apple.com/library/content/qa/qa1931/_index.html + */ + Bluefruit.Advertising.restartOnDisconnect(true); + Bluefruit.Advertising.setInterval(32, 244); // in unit of 0.625 ms + Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode + Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds +} + +void connect_callback(uint16_t conn_handle) +{ + (void) conn_handle; + Serial.println("Connected"); +} + +/** + * Callback invoked when a connection is dropped + * @param conn_handle connection where this event happens + * @param reason is a BLE_HCI_STATUS_CODE which can be found in ble_hci.h + * https://github.com/adafruit/Adafruit_nRF52_Arduino/blob/master/cores/nRF5/nordic/softdevice/s140_nrf52_6.1.1_API/include/ble_hci.h + */ +void disconnect_callback(uint16_t conn_handle, uint8_t reason) +{ + (void) conn_handle; + (void) reason; + + Serial.println(); + Serial.println("Disconnected"); +} + +/**************************************************************************/ +/*! + @brief Constantly poll for new command or response data +*/ +/**************************************************************************/ +void loop(void) +{ + uint32_t start, stop, sent; + uint32_t remaining = TOTAL_BYTES; + start = stop = sent = 0; + + if (Bluefruit.connected() && bleuart.notifyEnabled()) + { + // Wait for user input before trying again + Serial.println("Connected. Send a key and press enter to start test"); + getUserInput(); + + Serial.print("Sending "); + Serial.print(remaining); + Serial.println(" bytes ..."); + + start = millis(); + while ( (remaining > 0) && Bluefruit.connected() && bleuart.notifyEnabled() ) + { + if ( !bleuart.print(TEST_STRING) ) break; + + sent += TEST_STRLEN; + remaining -= TEST_STRLEN; + + // Only print every 100th time + // if ( (sent % (100*TEST_STRLEN) ) == 0 ) + // { + // Serial.print("Sent: "); Serial.print(sent); + // Serial.print(" Remaining: "); Serial.println(remaining); + // } + } + stop = millis() - start; + + Serial.print("Sent "); + Serial.print(sent); + Serial.print(" bytes in "); + Serial.print(stop / 1000.0F, 2); + Serial.println(" seconds."); + + Serial.println("Speed "); + Serial.print( (sent / 1000.0F) / (stop / 1000.0F), 2); + Serial.println(" KB/s.\r\n"); + } +} + +/**************************************************************************/ +/*! + @brief Get user input from Serial +*/ +/**************************************************************************/ +char* getUserInput(void) +{ + static char inputs[64+1]; + memset(inputs, 0, sizeof(inputs)); + + // wait until data is available + while( Serial.available() == 0 ) { delay(1); } + + uint8_t count=0; + do + { + count += Serial.readBytes(inputs+count, 64); + } while( (count < 64) && Serial.available() ); + + return inputs; +} |