Seeed Test program for Carbon BLE

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Files at this revision

API Documentation at this revision

Comitter:
lanselambor
Date:
Mon Sep 12 10:36:49 2016 +0000
Parent:
13:15764cc1f12c
Commit message:
Seeed Test program for Carbon BLE

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
main.txt Show annotated file Show diff for this revision Revisions of this file
diff -r 15764cc1f12c -r b8bf29421727 main.cpp
--- 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();              
     }
 }
diff -r 15764cc1f12c -r b8bf29421727 main.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.txt	Mon Sep 12 10:36:49 2016 +0000
@@ -0,0 +1,85 @@
+/* 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/BLE.h"
+
+#include "ble/services/UARTService.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. */
+
+#if NEED_CONSOLE_OUTPUT
+#define DEBUG(...) { printf(__VA_ARGS__); }
+#else
+#define DEBUG(...) /* nothing */
+#endif /* #if NEED_CONSOLE_OUTPUT */
+
+BLEDevice  ble;
+DigitalOut led1(LED1);
+
+UARTService *uartServicePtr;
+
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+    DEBUG("Disconnected!\n\r");
+    DEBUG("Restarting the advertising process\n\r");
+    ble.startAdvertising();
+}
+
+void onDataWritten(const GattWriteCallbackParams *params)
+{
+    if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
+        uint16_t bytesRead = params->len;
+        DEBUG("received %u bytes\n\r", bytesRead);
+        ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead);
+    }
+}
+
+void periodicCallback(void)
+{
+    led1 = !led1;
+}
+
+int main(void)
+{
+    led1 = 1;
+    Ticker ticker;
+    ticker.attach(periodicCallback, 1);
+
+    DEBUG("Initialising the nRF51822\n\r");
+    ble.init();
+    ble.onDisconnection(disconnectionCallback);
+    ble.onDataWritten(onDataWritten);
+
+    /* setup advertising */
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
+    ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
+                                     (const uint8_t *)"BLE SPI", sizeof("BLE SPI") - 1);
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
+                                     (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
+
+    ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
+    ble.startAdvertising();
+
+    UARTService uartService(ble);
+    uartServicePtr = &uartService;
+
+    while (true) {
+        ble.waitForEvent();
+    }
+}