Seeed Test program for Carbon BLE

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Revision:
14:b8bf29421727
Parent:
13:15764cc1f12c
--- a/main.cpp	Tue Sep 29 12:02:15 2015 +0000
+++ b/main.cpp	Mon Sep 12 10:36:49 2016 +0000
@@ -16,8 +16,8 @@
 
 #include "mbed.h"
 #include "ble/BLE.h"
-
 #include "ble/services/UARTService.h"
+#include <stdio.h>
 
 #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. */
@@ -33,10 +33,13 @@
 
 UARTService *uartServicePtr;
 
+SPISlave spi(p0, p30, p7, p25);  // mosi, miso, sclk, ssel
+uint8_t spi_ble_check_chr;
+
 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
 {
-    DEBUG("Disconnected!\n\r");
-    DEBUG("Restarting the advertising process\n\r");
+    //DEBUG("Disconnected!\n\r");
+    //DEBUG("Restarting the advertising process\n\r");
     ble.startAdvertising();
 }
 
@@ -44,23 +47,34 @@
 {
     if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
         uint16_t bytesRead = params->len;
-        DEBUG("received %u bytes\n\r", bytesRead);
+        //DEBUG("received %u bytes\n\r", bytesRead);
+        spi_ble_check_chr = params->data[0];
+        //spi.reply(spi_ble_check_chr);
         ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
     }
 }
 
+const char *str = "BLE";
 void periodicCallback(void)
 {
-    led1 = !led1;
+    led1 = !led1;     
+    // 加入spi read & reply 
+    if (spi.receive()) {
+        uint8_t data = spi.read();
+        data = (data+1) % 0x100;
+        if (spi_ble_check_chr == '#') {
+            data = '#';
+        }
+        spi.reply(data);        
+        
+        ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), &data, 1);
+        data = ' ';   
+    } 
 }
 
 int main(void)
 {
-    led1 = 1;
-    Ticker ticker;
-    ticker.attach(periodicCallback, 1);
-
-    DEBUG("Initialising the nRF51822\n\r");
+    //DEBUG("Initialising the nRF51822\n\r");
     ble.init();
     ble.onDisconnection(disconnectionCallback);
     ble.onDataWritten(onDataWritten);
@@ -69,7 +83,7 @@
     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);
+                                     (const uint8_t *)"Carbon BLE", sizeof("Carbon BLE") - 1);
     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
                                      (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
 
@@ -78,8 +92,13 @@
 
     UARTService uartService(ble);
     uartServicePtr = &uartService;
+    
+    spi.reply(0x00);
+    led1 = 1;
+    Ticker ticker;
+    ticker.attach(periodicCallback, 0.01);
 
     while (true) {
-        ble.waitForEvent();
+        ble.waitForEvent();              
     }
 }