mbed HRM1017にSBBLE/konashiを移植する実験(途中)

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_TEST_konashi by robo 8080

Konashi/SBBLEと完全互換ではないので注意!!

ライブラリ類をUpdateするとコンパイル出来なくなります。インポートした物をそのまま使って下さい。

Characteristicを増やすと挙動がおかしくなる不具合があります。

  1. onDataWrittenコールバック関数が呼ばれなくなる。
  2. onDisconnectionコールバック関数の中の"ble.startAdvertising()"でハングする。

PIO入出力と次の3つのうちの2つまでの組み合わせなら動作するのを確認しました。

main.cppの20行目付近で選択できます。

  1. PWM
  2. I2C
  3. UART

IOの構成を変更したときは、iPhone/iPadのBluetoothをOFF->ONしてキャッシュをクリアする必要があります。

IOのピン割り付けはソースコードを見てください。

動作確認にはiOSのSBBLEアプリが使えます。

https://itunes.apple.com/jp/app/sbble/id788610934?mt=8

Revision:
12:dd866bd5eaf9
Parent:
11:c25480277877
--- a/main.cpp	Sun Sep 07 05:35:49 2014 +0000
+++ b/main.cpp	Tue Apr 19 16:22:00 2016 +0000
@@ -15,7 +15,7 @@
  */
 
 #include "mbed.h"
-#include "BLEDevice.h"
+#include "BLE.h"
 
 //Debug用
 #define USE_KONASHI_PWM 0
@@ -270,9 +270,9 @@
 
 static Gap::ConnectionParams_t connectionParams;
 
-void onConnectionCallback(Gap::Handle_t handle, const Gap::ConnectionParams_t *params)
+void onConnectionCallback(const Gap::ConnectionCallbackParams_t *params)
 {
-    DEBUG("connected. Got handle %u\r\n", handle);
+    //DEBUG("connected. Got handle %u\r\n", handle);
     led2 = 0;
 /* 
     connectionParams.slaveLatency = 1;
@@ -280,7 +280,7 @@
         DEBUG("failed to update connection paramter\r\n");
     }*/
 }
-void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *reason)
 {
     DEBUG("Disconnected handle %u!\n\r", handle);
     DEBUG("Restarting the advertising process\n\r");
@@ -328,7 +328,7 @@
     }
 
 }
-void onDataWritten(uint16_t charHandle, const GattCharacteristicWriteCBParams *params)
+void onDataWritten(const GattWriteCallbackParams *params)
 {
     DEBUG("onDataWritten\n\r");
     DEBUG("params->len = %d\n\r",params->len);
@@ -337,7 +337,7 @@
         DEBUG("pioSettingCharacteristic!\n\r");
     } else if (charHandle == pioPullupCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("pioPullupCharacteristic!\n\r");
-    } else */ if (charHandle == pioOutputCharacteristic.getValueAttribute().getHandle()) {
+    } else */ if (params->handle == pioOutputCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("pioOutputCharacteristic!\n\r");
 //        uint8_t getPioOut[10];
 //        uint16_t bytesRead;
@@ -393,7 +393,7 @@
 /*    } else if (charHandle == analogDriveCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("analogDriveCharacteristic!\n\r");*/
 #if USE_KONASHI_I2C
-    } else if (charHandle == i2cConfigCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == i2cConfigCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("i2cConfigCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(i2cConfigCharacteristic.getValueAttribute().getHandle(), i2cConfig, &bytesRead);
@@ -407,7 +407,7 @@
                 i2c.frequency(400000);
             }
         }       
-    } else if (charHandle == i2cStartStopCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == i2cStartStopCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("i2cStartStopCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(i2cStartStopCharacteristic.getValueAttribute().getHandle(), i2cStartStop, &bytesRead);
@@ -426,7 +426,7 @@
                 i2c_repeated = false;
             }
         }
-    } else if (charHandle == i2cWriteCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == i2cWriteCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("i2cWriteCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(i2cWriteCharacteristic.getValueAttribute().getHandle(), i2cWrite, &bytesRead);
@@ -438,7 +438,7 @@
         if(bytesRead>=3){
             i2c.write((int)(i2cWrite[1]),(char *)&i2cWrite[2],(int)i2cWrite[0],i2c_repeated);
         }        
-    } else if (charHandle == i2cReadParamCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == i2cReadParamCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("i2cReadParamCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(i2cReadParamCharacteristic.getValueAttribute().getHandle(), i2cReadParam, &bytesRead);
@@ -459,7 +459,7 @@
 //        ble.updateCharacteristicValue(i2cReadCharacteristic.getValueAttribute().getHandle(), (uint8_t*)&i2cRead, i2c_recvlen);        
 #endif  //USE_KONASHI_I2C
 #if USE_KONASHI_UART
-    } else if (charHandle == uartConfigCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == uartConfigCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("uartConfigCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(uartConfigCharacteristic.getValueAttribute().getHandle(), uartConfig, &bytesRead);
@@ -471,7 +471,7 @@
                 pc.baud(uart_baudrate*240);
             }
         }        
-    } else if (charHandle == uartBaudrateCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == uartBaudrateCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("uartBaudrateCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(uartBaudrateCharacteristic.getValueAttribute().getHandle(), uartBaudrate, &bytesRead);
@@ -482,7 +482,7 @@
             uart_baudrate=((uint16_t)(uartBaudrate[0]))<<8;
             uart_baudrate+=uartBaudrate[1];
         }        
-    } else if (charHandle == uartTxCharacteristic.getValueAttribute().getHandle()) {
+    } else if (params->handle == uartTxCharacteristic.getValueAttribute().getHandle()) {
         DEBUG("uartTxCharacteristic!\n\r");
 //        uint16_t bytesRead;
 //        ble.readCharacteristicValue(uartTxCharacteristic.getValueAttribute().getHandle(), uartTx, &bytesRead);