arch ble test
Dependencies: BLE_API mbed nRF51822
main.cpp
- Committer:
- wodenageshen
- Date:
- 2016-04-19
- Revision:
- 1:1a916ea0c603
- Parent:
- 0:e910d9bb040f
- Child:
- 2:5ec56b1cea3f
File content as of revision 1:1a916ea0c603:
#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. */ #if NEED_CONSOLE_OUTPUT #define DEBUG(...) { printf(__VA_ARGS__); } #else #define DEBUG(...) /* nothing */ #endif /* #if NEED_CONSOLE_OUTPUT */ BLEDevice ble; 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(); } void periodicCallback(void) { onboard_led = !onboard_led; } int main(void) { Ticker ticker; ticker.attach(periodicCallback, 1); 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; fixture_led = 0; output_pins = output_value1; wait_ms(1); input_value1 = input_pins; if(input_value_expected1 != input_value1) { io_passed = false; } 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; } } // ----------- 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); } } while (true) { ble.waitForEvent(); } }