サイコン用プログラム BLE通信送信確認

Dependencies:   mbed BLE_API nRF51822

Files at this revision

API Documentation at this revision

Comitter:
mbed_tw_hoehoe
Date:
Fri Jan 30 16:42:24 2015 +0000
Parent:
4:3a25f1bdffc7
Child:
6:e640afab8288
Commit message:
add onDataWritten.

Changed in this revision

BLE_API.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
nRF51822.lib Show annotated file Show diff for this revision Revisions of this file
--- a/BLE_API.lib	Mon Jan 26 11:21:56 2015 +0000
+++ b/BLE_API.lib	Fri Jan 30 16:42:24 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#fb2a891a0d98
+http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#1407d2f1ce3c
--- a/main.cpp	Mon Jan 26 11:21:56 2015 +0000
+++ b/main.cpp	Fri Jan 30 16:42:24 2015 +0000
@@ -42,6 +42,14 @@
     0x1C,0x06,0x0C,0xAC,0x97,0x67
 };
 
+static const uint8_t MPU6050_Write_Characteristic_uuid[] =
+{
+    0x65, 0x60, 0xBE, 0x95,0xD9, 0x31, 
+    0x4F, 0x64,
+    0x95, 0x75,
+    0xC6, 0xDD, 0xB5, 0xAE, 0x7F, 0xA5
+};
+
 //const uint8_t MPU6050_Gyro_Characteristic_uuid[] = {
 //    0x65, 0x60, 0xBE, 0x95,0xD9, 0x31, 
 //    0x4F, 0x64,
@@ -50,6 +58,8 @@
 //};
 
 uint8_t accelPayload[sizeof(float)*7] = {0,};
+uint8_t writePayload[3] = {0};
+
 //uint8_t gyroPayload[sizeof(float)*3] = {0,0,0};
 //uint8_t tempPayload[sizeof(float)*1] = {0};
 //uint8_t batt = 100;     /* Battery level */
@@ -59,12 +69,17 @@
                                         accelPayload, (sizeof(float) * 7), (sizeof(float) * 7),
                                         GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
 
+GattCharacteristic  writeChar (MPU6050_Write_Characteristic_uuid,
+                                        writePayload, 3, 3,
+                                        GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
+
+// | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
 //GattCharacteristic  gyroChar (MPU6050_Gyro_Characteristic_uuid,
 //                                        gyroPayload, (sizeof(float) * 3), (sizeof(float) * 3),
 //                                        GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
 
 //GattCharacteristic *ControllerChars[] = { &accelChar, &gyroChar, };
-GattCharacteristic *ControllerChars[] = { &accelChar, };
+GattCharacteristic *ControllerChars[] = { &accelChar, &writeChar, };
 GattService         MPU6050Service(MPU6050_service_uuid, ControllerChars, sizeof(ControllerChars) / sizeof(GattCharacteristic *));
 
 void updateValue();
@@ -104,8 +119,67 @@
     //if (ble.updateConnectionParams(handle, &gap_conn_params) != BLE_ERROR_NONE) {
     //    DEBUG("failed to update connection paramter\r\n");
     //}
-    
-    updateValue();
+}
+
+void onDataWritten(const GattCharacteristicWriteCBParams *params){
+
+    if (params->charHandle == writeChar.getValueAttribute().getHandle()) {
+        uint16_t len = params->len;
+        
+        if (len == 3) {
+            uint8_t controller[3] = {0};
+
+            ble.readCharacteristicValue(writeChar.getValueAttribute().getHandle(), writePayload, &len);
+            memcpy( &controller, writePayload, sizeof(controller));
+            
+            /* mpu reset */
+            if(controller[0] == 1){
+                mpu.initialize();
+            }
+            
+            /*
+                MPU6050_ACCELERO_RANGE_2G    0
+                MPU6050_ACCELERO_RANGE_4G    1
+                MPU6050_ACCELERO_RANGE_8G    2
+            */
+            switch(controller[1]){
+                case 0:
+                    mpu.setAcceleroRange(0);
+                    break;
+                case 1:
+                    mpu.setAcceleroRange(1);
+                    break;
+                case 2:
+                    mpu.setAcceleroRange(2);
+                    break;
+                default:
+                    break;  
+            }
+            
+            /*
+            MPU6050_GYRO_RANGE_250          0
+            MPU6050_GYRO_RANGE_500          1
+            MPU6050_GYRO_RANGE_1000         2
+            MPU6050_GYRO_RANGE_2000         3 
+            */
+            switch(controller[2]){
+                case 0:
+                    mpu.setGyroRange(0);
+                    break;
+                case 1:
+                    mpu.setGyroRange(1);
+                    break;
+                case 2:
+                    mpu.setGyroRange(2);
+                    break;
+                case 3:
+                    mpu.setGyroRange(3);
+                    break;
+                default:
+                    break;
+            }
+        }
+    }
 }
 
 void timeoutCallback(void)
@@ -149,6 +223,7 @@
     ble.init();
     ble.onDisconnection(disconnectionCallback);
     ble.onConnection(onConnectionCallback);
+    ble.onDataWritten(onDataWritten);
     ble.onTimeout(timeoutCallback);
 
     /* setup device name */
--- a/nRF51822.lib	Mon Jan 26 11:21:56 2015 +0000
+++ b/nRF51822.lib	Fri Jan 30 16:42:24 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#17fe69405098
+http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#0e7a9efee6d7