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
Revision 1:1a916ea0c603, committed 2016-04-19
- Comitter:
- wodenageshen
- Date:
- Tue Apr 19 02:47:33 2016 +0000
- Parent:
- 0:e910d9bb040f
- Child:
- 2:5ec56b1cea3f
- Commit message:
- archble test
Changed in this revision
--- a/BLE_API.lib Mon May 26 06:58:45 2014 +0000 +++ b/BLE_API.lib Tue Apr 19 02:47:33 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#f3b0c1192cf7 +http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#9f4251b3355c
--- a/main.cpp Mon May 26 06:58:45 2014 +0000
+++ b/main.cpp Tue Apr 19 02:47:33 2016 +0000
@@ -1,157 +1,130 @@
-/* mbed Microcontroller Library
- * Copyright (c) 2006-2013 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.h"
+
+#include "UARTService.h"
+
+DigitalOut onboard_led(p30);
+DigitalOut fixture_led(p10);
+
+Serial change_stdio_uart(p20, p21);
+
+#define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
+ * it will have an impact on code-size and power consumption. */
-#include "mbed.h"
-#include "nRF51822n.h"
+#if NEED_CONSOLE_OUTPUT
+#define DEBUG(...) { printf(__VA_ARGS__); }
+#else
+#define DEBUG(...) /* nothing */
+#endif /* #if NEED_CONSOLE_OUTPUT */
-#define BLE_UUID_NUS_SERVICE 0x0001 /**< The UUID of the Nordic UART Service. */
-#define BLE_UUID_NUS_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
-#define BLE_UUID_NUS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
+BLEDevice ble;
-#ifdef DEBUG
-#define LOG(args...) pc.printf(args)
+UARTService *uart;
+
+void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
+{
+ DEBUG("Disconnected!\n\r");
+ DEBUG("Restarting the advertising process\n\r");
+ ble.startAdvertising();
+}
-Serial pc(USBTX, USBRX);
-#else
-#define LOG(args...)
-#endif
-
-nRF51822n nrf; /* BLE radio driver */
+void periodicCallback(void)
+{
+ onboard_led = !onboard_led;
+}
-DigitalOut led1(p1);
-DigitalOut advertisingStateLed(p30);
-
-// The Nordic UART Service
-uint8_t uart_base_uuid[] = {0x6e, 0x40, 0x01, 0x00, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
-uint8_t txPayload[8] = {0,};
-uint8_t rxPayload[8] = {0,};
-GattService uartService (uart_base_uuid);
-GattCharacteristic txCharacteristic (BLE_UUID_NUS_TX_CHARACTERISTIC, 1, 8,
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-GattCharacteristic rxCharacteristic (BLE_UUID_NUS_RX_CHARACTERISTIC, 1, 8,
- GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
+int main(void)
+{
+ Ticker ticker;
+ ticker.attach(periodicCallback, 1);
-/* Advertising data and parameters */
-GapAdvertisingData advData;
-GapAdvertisingData scanResponse;
-GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
-
-uint16_t uuid16_list[] = {BLE_UUID_NUS_SERVICE};
+ DEBUG("Initialising the nRF51822\n\r");
+ ble.init();
+ ble.onDisconnection(disconnectionCallback);
+
+ uart = new UARTService(ble);
+
+ /* setup advertising */
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+ ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
+ (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
+ ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
+ (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
+
+ ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
+ ble.startAdvertising();
+
+ BusOut output_pins(p7,p8,p23,p25,p28,p29);
+ BusIn input_pins(p1,p2,p4,p12,p13,p24,p0,p17,p18,p9);
+
+ const uint16_t output_value1 = 0x2a;
+ const uint16_t output_value2 = 0x15;
+ const uint16_t input_value_expected1 = 0x2aa;
+ const uint16_t input_value_expected2 = 0x155;
+ uint16_t input_value1;
+ uint16_t input_value2;
+ bool io_passed = true;
-/**************************************************************************/
-/*!
- @brief This custom class can be used to override any GapEvents
- that you are interested in handling on an application level.
-*/
-/**************************************************************************/
-class GapEventHandler : public GapEvents
-{
- //virtual void onTimeout(void) {}
-
- virtual void onConnected(void) {
- advertisingStateLed = 0;
- LOG("Connected!\n\r");
+ fixture_led = 0;
+
+ output_pins = output_value1;
+ wait_ms(1);
+ input_value1 = input_pins;
+ if(input_value_expected1 != input_value1) {
+ io_passed = false;
}
- /* When a client device disconnects we need to start advertising again. */
- virtual void onDisconnected(void) {
- nrf.getGap().startAdvertising(advParams);
- advertisingStateLed = 1;
- LOG("Disconnected!\n\r");
- LOG("Restarting the advertising process\n\r");
+ output_pins = output_value2;
+ wait_ms(1);
+ input_value2 = input_pins;
+ if(input_value_expected2 != input_value2) {
+ io_passed = false;
+ }
+
+ Serial pc(p8, p7);
+ pc.baud(9600);
+ pc.puts("ready\r\n");
+
+ // ------------- serial test -------------------
+ char line_buffer[32] = {0};
+ const char *line_expected = "start"; // "start test" -- "arch ble"
+ bool line_matched = false;
+ for (int i = 0; i < 3; i++) {
+ pc.scanf("%s", line_buffer);
+ if (0 == strcmp(line_buffer, line_expected)) {
+ line_matched = true;
+ pc.puts("arch ble\r\n");
+ break;
+ }
}
-};
-
-/**************************************************************************/
-/*!
- @brief This custom class can be used to override any GattServerEvents
- that you are interested in handling on an application level.
-*/
-/**************************************************************************/
-class GattServerEventHandler : public GattServerEvents
-{
- virtual void onDataSent(uint16_t charHandle) {
- if (charHandle == txCharacteristic.handle) {
- LOG("onDataSend()\n\r");
-
+
+ // ----------- io test result -----------------
+ if (!io_passed) {
+ pc.puts("io test failed:\r\n");
+ pc.printf("\tout = 0x%X, in = 0x%X, expected = 0x%X\r\n", output_value1, input_value1, input_value_expected1);
+ pc.printf("\tout = 0x%X, in = 0x%X, expected = 0x%X\r\n", output_value2, input_value2, input_value_expected2);
+ } else {
+ pc.puts("io test ok\r\n");
+ }
+
+ // ------------- serial test result --------------
+ if (!line_matched) {
+ pc.puts("serial rx test failed\r\n");
+ } else {
+ pc.puts("serial rx test ok\r\n");
+ }
+
+ if ( io_passed && line_matched) {
+ fixture_led = 1;
+ } else {
+ while (true) {
+ fixture_led = !fixture_led;
+ wait(0.1);
}
}
- virtual void onDataWritten(uint16_t charHandle) {
- if (charHandle == txCharacteristic.handle) {
- LOG("onDataWritten()\n\r");
- nrf.getGattServer().readValue(txCharacteristic.handle, txPayload, 8); // Current APIs don't provide the length of the payload
- LOG("ECHO: %s\n\r", (char *)txPayload);
- nrf.getGattServer().updateValue(rxCharacteristic.handle, txPayload, 8);
- }
- }
-
- virtual void onUpdatesEnabled(uint16_t charHandle) {
- LOG("onUpdateEnabled\n\r");
- }
-
- virtual void onUpdatesDisabled(uint16_t charHandle) {
- LOG("onUpdatesDisabled\n\r");
+ while (true) {
+ ble.waitForEvent();
}
-
- //virtual void onConfirmationReceived(uint16_t charHandle) {}
-};
-
-/**************************************************************************/
-/*!
- @brief Program entry point
-*/
-/**************************************************************************/
-int main(void)
-{
-
- /* Setup an event handler for GAP events i.e. Client/Server connection events. */
- nrf.getGap().setEventHandler(new GapEventHandler());
- nrf.getGattServer().setEventHandler(new GattServerEventHandler());
-
- /* Initialise the nRF51822 */
- nrf.init();
-
- /* Make sure we get a clean start */
- nrf.reset();
-
- /* Add BLE-Only flag and complete service list to the advertising data */
- advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
- advData.addData(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
- (uint8_t*)uuid16_list, sizeof(uuid16_list));
-
- advData.addData(GapAdvertisingData::SHORTENED_LOCAL_NAME,
- (uint8_t*)"BLE UART", sizeof("BLE UART") - 1);
-
- advData.addAppearance(GapAdvertisingData::UNKNOWN);
- nrf.getGap().setAdvertisingData(advData, scanResponse);
-
- /* UART Service */
- uartService.addCharacteristic(rxCharacteristic);
- uartService.addCharacteristic(txCharacteristic);
- nrf.getGattServer().addService(uartService);
-
- /* Start advertising (make sure you've added all your data first) */
- nrf.getGap().startAdvertising(advParams);
-
- advertisingStateLed = 1;
-
- /* Do blinky on LED1 while we're waiting for BLE events */
- for (;;) {
- led1 = !led1;
- wait(1);
- }
-}
+}
\ No newline at end of file
--- a/mbed.bld Mon May 26 06:58:45 2014 +0000 +++ b/mbed.bld Tue Apr 19 02:47:33 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/0b3ab51c8877 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7 \ No newline at end of file
--- a/nRF51822.lib Mon May 26 06:58:45 2014 +0000 +++ b/nRF51822.lib Tue Apr 19 02:47:33 2016 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#49e7ee9e88ab +http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#7c68c8d67e1f