Device to measure angle and get IMU measurements.

Dependencies:   mbed commands BLE_API nRF51822

Committer:
dkester
Date:
Thu Jun 11 20:59:22 2015 +0000
Revision:
8:c6345e8d607c
working without Iic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkester 8:c6345e8d607c 1 /* mbed Microcontroller Library
dkester 8:c6345e8d607c 2 * Copyright (c) 2006-2013 ARM Limited
dkester 8:c6345e8d607c 3 *
dkester 8:c6345e8d607c 4 * Licensed under the Apache License, Version 2.0 (the "License");
dkester 8:c6345e8d607c 5 * you may not use this file except in compliance with the License.
dkester 8:c6345e8d607c 6 * You may obtain a copy of the License at
dkester 8:c6345e8d607c 7 *
dkester 8:c6345e8d607c 8 * http://www.apache.org/licenses/LICENSE-2.0
dkester 8:c6345e8d607c 9 *
dkester 8:c6345e8d607c 10 * Unless required by applicable law or agreed to in writing, software
dkester 8:c6345e8d607c 11 * distributed under the License is distributed on an "AS IS" BASIS,
dkester 8:c6345e8d607c 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dkester 8:c6345e8d607c 13 * See the License for the specific language governing permissions and
dkester 8:c6345e8d607c 14 * limitations under the License.
dkester 8:c6345e8d607c 15 */
dkester 8:c6345e8d607c 16
dkester 8:c6345e8d607c 17 #ifndef __GONIOSERVICE_H__
dkester 8:c6345e8d607c 18 #define __GONIOSERVICE_H__
dkester 8:c6345e8d607c 19
dkester 8:c6345e8d607c 20 #include "BLEDevice.h"
dkester 8:c6345e8d607c 21 #include "mbed.h"
dkester 8:c6345e8d607c 22
dkester 8:c6345e8d607c 23 class GonioService {
dkester 8:c6345e8d607c 24 public:
dkester 8:c6345e8d607c 25 GonioService();
dkester 8:c6345e8d607c 26
dkester 8:c6345e8d607c 27 void updateGonio(uint16_t params, uint16_t acc, uint16_t gyro);
dkester 8:c6345e8d607c 28 void updateBattery(uint8_t newLevel);
dkester 8:c6345e8d607c 29 void onDataWritten(const GattCharacteristicWriteCBParams *params);
dkester 8:c6345e8d607c 30 uint8_t getGServiceUUID();
dkester 8:c6345e8d607c 31 uint8_t getWriteValue();
dkester 8:c6345e8d607c 32 uint8_t getBatteryLevel();
dkester 8:c6345e8d607c 33 void setupService();
dkester 8:c6345e8d607c 34 bool isConnected();
dkester 8:c6345e8d607c 35 bool newValue();
dkester 8:c6345e8d607c 36 void waitForEvent();
dkester 8:c6345e8d607c 37 void disconnect();
dkester 8:c6345e8d607c 38
dkester 8:c6345e8d607c 39 private:
dkester 8:c6345e8d607c 40 //void disconnectionCallback();
dkester 8:c6345e8d607c 41 //void periodicCallback();
dkester 8:c6345e8d607c 42 void init();
dkester 8:c6345e8d607c 43 void setupAdvertising();
dkester 8:c6345e8d607c 44 bool newValueFlag;
dkester 8:c6345e8d607c 45
dkester 8:c6345e8d607c 46 struct GonioValueBytes {
dkester 8:c6345e8d607c 47 static const unsigned MAX_VALUE_BYTES = 6; /* FLAGS + up to two bytes for heart-rate */
dkester 8:c6345e8d607c 48 static const unsigned FLAGS_BYTE_INDEX = 0;
dkester 8:c6345e8d607c 49 static const unsigned VALUE_FORMAT_BITNUM = 0;
dkester 8:c6345e8d607c 50 static const uint8_t VALUE_FORMAT_FLAG = (1 << VALUE_FORMAT_BITNUM);
dkester 8:c6345e8d607c 51
dkester 8:c6345e8d607c 52
dkester 8:c6345e8d607c 53 GonioValueBytes(uint16_t params, uint16_t acc, uint16_t gyro) : valueBytes() {
dkester 8:c6345e8d607c 54 updateGonio(params,acc,gyro);
dkester 8:c6345e8d607c 55 }
dkester 8:c6345e8d607c 56
dkester 8:c6345e8d607c 57 void updateGonio(uint16_t hoek, uint16_t acc, uint16_t gyro) {
dkester 8:c6345e8d607c 58 //valueBytes[FLAGS_BYTE_INDEX] |= VALUE_FORMAT_FLAG;
dkester 8:c6345e8d607c 59 valueBytes[FLAGS_BYTE_INDEX ] = (uint8_t)(hoek >> 8);
dkester 8:c6345e8d607c 60 valueBytes[FLAGS_BYTE_INDEX + 1] = (uint8_t)(hoek & 0xFF);
dkester 8:c6345e8d607c 61 valueBytes[FLAGS_BYTE_INDEX + 2] = (uint8_t)(acc >> 8);
dkester 8:c6345e8d607c 62 valueBytes[FLAGS_BYTE_INDEX + 3] = (uint8_t)(acc & 0xFF);
dkester 8:c6345e8d607c 63 valueBytes[FLAGS_BYTE_INDEX + 4] = (uint8_t)(gyro >> 8);
dkester 8:c6345e8d607c 64 valueBytes[FLAGS_BYTE_INDEX + 5] = (uint8_t)(gyro & 0xFF);
dkester 8:c6345e8d607c 65 }
dkester 8:c6345e8d607c 66
dkester 8:c6345e8d607c 67 uint8_t *getPointer(void) {
dkester 8:c6345e8d607c 68 return valueBytes;
dkester 8:c6345e8d607c 69 }
dkester 8:c6345e8d607c 70
dkester 8:c6345e8d607c 71 const uint8_t *getPointer(void) const {
dkester 8:c6345e8d607c 72 return valueBytes;
dkester 8:c6345e8d607c 73 }
dkester 8:c6345e8d607c 74
dkester 8:c6345e8d607c 75 unsigned getNumValueBytes(void) const {
dkester 8:c6345e8d607c 76 return MAX_VALUE_BYTES;
dkester 8:c6345e8d607c 77 }
dkester 8:c6345e8d607c 78
dkester 8:c6345e8d607c 79 uint8_t getValue(int index){
dkester 8:c6345e8d607c 80 if(index >=0 && index<MAX_VALUE_BYTES ){
dkester 8:c6345e8d607c 81 return valueBytes[index];
dkester 8:c6345e8d607c 82 } else{
dkester 8:c6345e8d607c 83 return NULL;
dkester 8:c6345e8d607c 84 }
dkester 8:c6345e8d607c 85 }
dkester 8:c6345e8d607c 86
dkester 8:c6345e8d607c 87 private:
dkester 8:c6345e8d607c 88 uint8_t valueBytes[MAX_VALUE_BYTES];
dkester 8:c6345e8d607c 89 };
dkester 8:c6345e8d607c 90
dkester 8:c6345e8d607c 91 private:
dkester 8:c6345e8d607c 92 //const static char DEVICE_NAME[];
dkester 8:c6345e8d607c 93 //uint16_t uuid16_list[];
dkester 8:c6345e8d607c 94
dkester 8:c6345e8d607c 95 BLEDevice &ble;
dkester 8:c6345e8d607c 96 uint16_t G_ServiceUUID;
dkester 8:c6345e8d607c 97 uint16_t G_CharUUID;
dkester 8:c6345e8d607c 98 uint16_t G_ControlUUID;
dkester 8:c6345e8d607c 99
dkester 8:c6345e8d607c 100 GonioValueBytes gValueBytes;
dkester 8:c6345e8d607c 101 uint8_t controlPointValue;
dkester 8:c6345e8d607c 102 uint8_t writeValue;
dkester 8:c6345e8d607c 103 uint8_t batteryValue;
dkester 8:c6345e8d607c 104
dkester 8:c6345e8d607c 105 GattCharacteristic dataChar;
dkester 8:c6345e8d607c 106 GattCharacteristic batteryChar;
dkester 8:c6345e8d607c 107 WriteOnlyGattCharacteristic<uint8_t> controlPoint;
dkester 8:c6345e8d607c 108 };
dkester 8:c6345e8d607c 109
dkester 8:c6345e8d607c 110 #endif /* #ifndef __GONIOSERVICE_H__*/