Device to measure angle and get IMU measurements.

Dependencies:   mbed commands BLE_API nRF51822

Revision:
8:c6345e8d607c
diff -r bb6eb41a29da -r c6345e8d607c GonioService.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GonioService.h	Thu Jun 11 20:59:22 2015 +0000
@@ -0,0 +1,110 @@
+/* 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.
+ */
+
+#ifndef __GONIOSERVICE_H__
+#define __GONIOSERVICE_H__
+
+#include "BLEDevice.h"
+#include "mbed.h"
+
+class GonioService {
+public:
+    GonioService();
+
+    void updateGonio(uint16_t params, uint16_t acc, uint16_t gyro);
+    void updateBattery(uint8_t newLevel);
+    void onDataWritten(const GattCharacteristicWriteCBParams *params);
+    uint8_t getGServiceUUID();
+    uint8_t getWriteValue();
+    uint8_t getBatteryLevel();
+    void setupService();
+    bool isConnected();
+    bool newValue();
+    void waitForEvent();
+    void disconnect();
+    
+private:
+    //void disconnectionCallback();
+    //void periodicCallback();
+    void init();
+    void setupAdvertising();
+    bool newValueFlag;
+    
+    struct GonioValueBytes {
+        static const unsigned MAX_VALUE_BYTES  = 6; /* FLAGS + up to two bytes for heart-rate */
+        static const unsigned FLAGS_BYTE_INDEX = 0;
+        static const unsigned VALUE_FORMAT_BITNUM = 0;
+        static const uint8_t  VALUE_FORMAT_FLAG   = (1 << VALUE_FORMAT_BITNUM);
+
+
+        GonioValueBytes(uint16_t params, uint16_t acc, uint16_t gyro) : valueBytes() {
+            updateGonio(params,acc,gyro);
+        }
+
+        void updateGonio(uint16_t hoek, uint16_t acc, uint16_t gyro) {
+            //valueBytes[FLAGS_BYTE_INDEX]    |= VALUE_FORMAT_FLAG;
+           valueBytes[FLAGS_BYTE_INDEX ]    = (uint8_t)(hoek >> 8);
+            valueBytes[FLAGS_BYTE_INDEX + 1] = (uint8_t)(hoek & 0xFF);
+            valueBytes[FLAGS_BYTE_INDEX + 2] = (uint8_t)(acc >> 8);
+            valueBytes[FLAGS_BYTE_INDEX + 3] = (uint8_t)(acc & 0xFF);
+            valueBytes[FLAGS_BYTE_INDEX + 4] = (uint8_t)(gyro >> 8);
+            valueBytes[FLAGS_BYTE_INDEX + 5] = (uint8_t)(gyro & 0xFF);
+        }
+
+        uint8_t       *getPointer(void) {
+            return valueBytes;
+        }
+
+        const uint8_t *getPointer(void) const {
+            return valueBytes;
+        }
+
+        unsigned getNumValueBytes(void) const {
+            return MAX_VALUE_BYTES;
+        }
+        
+        uint8_t getValue(int index){
+            if(index >=0 && index<MAX_VALUE_BYTES ){
+                return valueBytes[index];
+            } else{
+                return NULL;
+            }
+        }
+
+private:
+        uint8_t valueBytes[MAX_VALUE_BYTES];
+    };
+    
+private:
+    //const static char DEVICE_NAME[];
+    //uint16_t uuid16_list[];    
+
+    BLEDevice           &ble;
+    uint16_t            G_ServiceUUID;
+    uint16_t            G_CharUUID;
+    uint16_t            G_ControlUUID;
+
+    GonioValueBytes     gValueBytes;
+    uint8_t             controlPointValue;
+    uint8_t             writeValue;
+    uint8_t             batteryValue;
+
+    GattCharacteristic                      dataChar;
+    GattCharacteristic                      batteryChar;
+    WriteOnlyGattCharacteristic<uint8_t>    controlPoint;
+};
+
+#endif /* #ifndef __GONIOSERVICE_H__*/
\ No newline at end of file