test

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_UART_HRM1017 by robo 8080

Files at this revision

API Documentation at this revision

Comitter:
nakanishi_tk
Date:
Wed Aug 05 23:58:48 2015 +0000
Parent:
6:a50b4fd97e1a
Commit message:
test

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Sep 16 00:58:53 2014 +0000
+++ b/main.cpp	Wed Aug 05 23:58:48 2015 +0000
@@ -35,31 +35,42 @@
 BLEDevice  ble;
 DigitalOut led1(LED1);
 
-#define USE_BLE_SERIAL_UUID 1   //BLESerialのUUIDを使う時1にする
-#if USE_BLE_SERIAL_UUID
+#define USE_BLE_SERIAL_UUID 0   //BLESerialのUUIDを使う時1にする
+/*#if USE_BLE_SERIAL_UUID
 // BLESerial
 const static char  DEVICE_NAME[] = "BLESerial";
 static const uint8_t uart_base_uuid[] = {0x56,0x9a,0x11,0x01,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
 static const uint8_t uart_tx_uuid[]   = {0x56,0x9a,0x20,0x01,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
 static const uint8_t uart_rx_uuid[]   = {0x56,0x9a,0x20,0x00,0xb8,0x7F,0x49,0x0c,0x92,0xcb,0x11,0xba,0x5e,0xa5,0x16,0x7c};
 static const uint8_t uart_base_uuid_rev[] = {0x7c,0x16,0xa5,0x5e,0xba,0x11,0xcb,0x92,0x0c,0x49,0x7F,0xb8,0x01,0x11,0x9a,0x56};
-#else
+#else*/
 // The Nordic UART Service
 const static char  DEVICE_NAME[] = "mbed HRM1017";
 static const uint8_t uart_base_uuid[] = {0x6e, 0x40, 0x00, 0x01, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
 static const uint8_t uart_tx_uuid[]   = {0x6e, 0x40, 0x00, 0x02, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
 static const uint8_t uart_rx_uuid[]   = {0x6e, 0x40, 0x00, 0x03, 0xb5, 0xa3, 0xf3, 0x93, 0xe0, 0xa9, 0xe5,0x0e, 0x24, 0xdc, 0xca, 0x9e};
 static const uint8_t uart_base_uuid_rev[] = {0x9e, 0xca, 0xdc, 0x24, 0x0e, 0xe5, 0xa9, 0xe0, 0x93, 0xf3, 0xa3, 0xb5, 0x01, 0x00, 0x40, 0x6e};
-#endif
+//#endif
 
+/*static const uint8_t SIZEOF_TX_BUFFER = 21;
+uint8_t             thermSCANPayload[SIZEOF_TX_BUFFER] = {0,};// = { 0, 0, 0, 0, 0 };
+GattCharacteristic  SCANChar(GattCharacteristic::UUID_SCAN_INTERVAL_WINDOW_CHAR,
+                                thermSCANPayload, 1, SIZEOF_TX_BUFFER,
+//                                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ|
+                                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|
+                                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE
+//                                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE
+//                                GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE
+                                );*/
 //static const uint8_t SIZEOF_TX_RX_BUFFER = 128;
-static const uint8_t SIZEOF_TX_RX_BUFFER = 20;
+static const uint8_t SIZEOF_TX_RX_BUFFER = 21;
 uint8_t rxPayload[SIZEOF_TX_RX_BUFFER] = {0,};
 uint8_t txPayload[SIZEOF_TX_RX_BUFFER] = {0,};
 GattCharacteristic  rxCharacteristic (uart_tx_uuid, rxPayload, 1, SIZEOF_TX_RX_BUFFER,
-                                      GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
+                                      GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE|
+                                      GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
 GattCharacteristic  txCharacteristic (uart_rx_uuid, txPayload, 1, SIZEOF_TX_RX_BUFFER, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
-GattCharacteristic *uartChars[] = {&rxCharacteristic, &txCharacteristic};
+GattCharacteristic *uartChars[] = {&rxCharacteristic, &txCharacteristic/*,&SCANChar*/};
 GattService         uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
 
 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
@@ -77,6 +88,7 @@
 
 void onDataWritten(uint16_t charHandle, const GattCharacteristicWriteCBParams *params)
 {
+    DEBUG("received handle=%d bytes\n\r", charHandle);
     if (charHandle == rxCharacteristic.getValueAttribute().getHandle()) {
         uint16_t bytesRead = params->len;
         DEBUG("received %u bytes\n\r", bytesRead);
@@ -88,9 +100,53 @@
 #if NEED_CONSOLE_OUTPUT
         ble.updateCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), rxPayload, bytesRead);
 #else
+        /*
         for(int i = 0; i < bytesRead; i++) {
             pc.putc(rxPayload[i]);
         }
+        */
+        switch( bytesRead ){
+        case 1:
+            pc.printf("%c",rxPayload[0]);
+        case 2:
+            pc.printf("%c%c",rxPayload[0],rxPayload[1]);
+        case 3:
+            pc.printf("%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2]);
+        case 4:
+            pc.printf("%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3]);
+        case 5:
+            pc.printf("%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4]);
+        case 6:
+            pc.printf("%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5]);
+        case 7:
+            pc.printf("%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6]);
+        case 8:
+            pc.printf("%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7]);
+        case 9:
+            pc.printf("%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8]);
+        case 10:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9]);
+        case 11:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10]);
+        case 12:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11]);
+        case 13:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12]);
+        case 14:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13]);
+        case 15:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14]);
+        case 16:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15]);
+        case 17:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16]);
+        case 18:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17]);
+        case 19:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17],rxPayload[18]);
+        case 20:
+            pc.printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",rxPayload[0],rxPayload[1],rxPayload[2],rxPayload[3],rxPayload[4],rxPayload[5],rxPayload[6],rxPayload[7],rxPayload[8],rxPayload[9],rxPayload[10],rxPayload[11],rxPayload[12],rxPayload[13],rxPayload[14],rxPayload[15],rxPayload[16],rxPayload[17],rxPayload[18],rxPayload[19]);
+        }
 #endif  //NEED_CONSOLE_OUTPUT
     }
 }
@@ -113,19 +169,30 @@
     }                     
 }
 static volatile bool triggerUartPolling = false;
+
+static int eventcount = 0;
+
 void periodicCallback(void)
 {
 //    led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
     /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
      * heavy-weight sensor polling from the main thread. */
     triggerUartPolling = true;
+    eventcount++;
 }
 
 int main(void)
 {
     led1 = 1;
+    uint16_t bytesRead = 0;
     Ticker ticker;
-    ticker.attach(periodicCallback, 0.1);       //100ms
+    ticker.attach(periodicCallback, 0.05 );       //50ms
+
+    pc.baud(38400);
+    
+#if NEED_CONSOLE_OUTPUT
+//    pc.baud(38400);
+#endif
 
     DEBUG("Initialising the nRF51822\n\r");
     ble.init();
@@ -148,31 +215,39 @@
 #endif
     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
                                     (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
-    ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
+    ble.setAdvertisingInterval(80); /* 100ms; in multiples of 0.625ms. */
     ble.startAdvertising();
 
     ble.addService(uartService);
-
+    
     while (true) {
         if (triggerUartPolling) {
-            triggerUartPolling = false;
+//            triggerUartPolling = false;
             /* Do blocking calls or whatever is necessary for sensor polling. */
             if(ble.getGapState().connected) { 
-#if !NEED_CONSOLE_OUTPUT
+//#if !NEED_CONSOLE_OUTPUT
                 if(uartTxUpdatesEnable) {
-                    uint16_t bytesRead = 0;
-                    while(pc.readable()) {
-                        if (bytesRead < sizeof(txPayload)) {
-                            txPayload[bytesRead++] = pc.getc();
+                    bytesRead = 0;
+                    eventcount = 0;
+                    while( bytesRead < sizeof(txPayload) - 1 )  {
+                        if ( bytesRead < sizeof(txPayload)  - 1) {
+                            if ( pc.readable() ){
+                                txPayload[bytesRead++] = pc.getc();
+/*                            } else if ( bytesRead > 0 ) {
+                                ble.waitForEvent();*/
+                            }
                         } else {
                             break;
                         }
+                        if ( eventcount > 10 ){
+                            break;
+                        }
                     }
-                    if(bytesRead > 0) {    
+                    if ( bytesRead <= sizeof(txPayload) - 1 ) {
                         ble.updateCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), (uint8_t*)txPayload, bytesRead);
                     }
                 }
-#endif
+//#endif
             }
         } else {
             ble.waitForEvent();