Dissertation project, looking at BLE communication in cars. This project is BLE peripheral acting as car indicator stalk

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_GATT_test1 by Alexander Lea

Committer:
alexanderlea
Date:
Tue Apr 14 15:57:47 2015 +0000
Revision:
15:ad1d37e51a26
Parent:
14:7225b50aaaf7
Child:
18:867625bb5000
Incorporated error characteristic as part of broadcaster service

Who changed what in which revision?

UserRevisionLine numberNew contents of line
alexanderlea 7:5c983cf3c352 1 #ifndef __BLE_BROADCASTER_SERVICE_H__
alexanderlea 7:5c983cf3c352 2 #define __BLE_BROADCASTER_SERVICE_H__
alexanderlea 0:af868ad47854 3
alexanderlea 0:af868ad47854 4 #include "BLEDevice.h"
alexanderlea 14:7225b50aaaf7 5 using namespace std;
alexanderlea 0:af868ad47854 6
alexanderlea 0:af868ad47854 7 /**
alexanderlea 7:5c983cf3c352 8 * @class BroadcasterService
alexanderlea 12:f5b12e8b6043 9 * @brief Based heavily on the BLE Battery Service, the aim is to send key, pair values <br>.
alexanderlea 12:f5b12e8b6043 10 * UPDATE: Should now be sending 8-byte string - 4 bytes for Type, 4 for command
alexanderlea 0:af868ad47854 11 */
alexanderlea 7:5c983cf3c352 12 class BroadcasterService
alexanderlea 7:5c983cf3c352 13 {
alexanderlea 0:af868ad47854 14 public:
alexanderlea 15:ad1d37e51a26 15
alexanderlea 15:ad1d37e51a26 16 enum {
alexanderlea 15:ad1d37e51a26 17 ERROR_SERVER_DISCONNECTION = 0x1234,
alexanderlea 15:ad1d37e51a26 18 ERROR_ELECTRONIC_DSICONNECTION = 0x1221,
alexanderlea 15:ad1d37e51a26 19 ERROR_GENERIC = 0x4321,
alexanderlea 15:ad1d37e51a26 20 };
alexanderlea 15:ad1d37e51a26 21
alexanderlea 8:3376f79e7d50 22 const static uint16_t BROADCAST_SERVICE_UUID = 0x2A67;
alexanderlea 8:3376f79e7d50 23 const static uint16_t BROADCAST_CHARACTERISTIC_UUID = 0x1817;
alexanderlea 15:ad1d37e51a26 24 const static uint16_t ERROR_CHARACTERISTIC_UUID = 0x1818;
alexanderlea 8:3376f79e7d50 25
alexanderlea 14:7225b50aaaf7 26 BroadcasterService(BLEDevice &_ble) :
alexanderlea 0:af868ad47854 27 ble(_ble),
alexanderlea 15:ad1d37e51a26 28 //define characteristics
alexanderlea 9:0ed64b14d46b 29 broadcasterCharacteristic(BROADCAST_CHARACTERISTIC_UUID, command, sizeof(command), sizeof(command),
alexanderlea 7:5c983cf3c352 30 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
alexanderlea 15:ad1d37e51a26 31 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY),
alexanderlea 15:ad1d37e51a26 32 errorCharacteristic(ERROR_CHARACTERISTIC_UUID, &errorCode, sizeof(errorCode), sizeof(errorCode),
alexanderlea 15:ad1d37e51a26 33 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
alexanderlea 7:5c983cf3c352 34 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) {
alexanderlea 10:2c5c202c69a5 35
alexanderlea 0:af868ad47854 36 static bool serviceAdded = false; /* We should only ever need to add the service once. */
alexanderlea 15:ad1d37e51a26 37 if (!serviceAdded) {
alexanderlea 15:ad1d37e51a26 38
alexanderlea 15:ad1d37e51a26 39 GattCharacteristic *charTable[] = {&broadcasterCharacteristic, &errorCharacteristic};
alexanderlea 15:ad1d37e51a26 40 GattService broadcasterService(BroadcasterService::BROADCAST_SERVICE_UUID, charTable,
alexanderlea 15:ad1d37e51a26 41 sizeof(charTable) / sizeof(GattCharacteristic *));
alexanderlea 15:ad1d37e51a26 42
alexanderlea 15:ad1d37e51a26 43 ble.addService(broadcasterService);
alexanderlea 15:ad1d37e51a26 44 serviceAdded = true;
alexanderlea 0:af868ad47854 45 }
alexanderlea 0:af868ad47854 46 }
alexanderlea 0:af868ad47854 47
alexanderlea 0:af868ad47854 48 /**
alexanderlea 7:5c983cf3c352 49 * @brief
alexanderlea 0:af868ad47854 50 *
alexanderlea 7:5c983cf3c352 51 * @param
alexanderlea 0:af868ad47854 52 */
alexanderlea 9:0ed64b14d46b 53 void sendCommand(uint8_t _newCommand[8]) {
alexanderlea 14:7225b50aaaf7 54 memcpy(&command, &_newCommand, sizeof(_newCommand));
alexanderlea 15:ad1d37e51a26 55
alexanderlea 10:2c5c202c69a5 56 ble.updateCharacteristicValue(broadcasterCharacteristic.getValueAttribute().getHandle(), command, sizeof(command), false);
alexanderlea 0:af868ad47854 57 }
alexanderlea 15:ad1d37e51a26 58
alexanderlea 15:ad1d37e51a26 59 void registerError(uint8_t _errorCode) {
alexanderlea 15:ad1d37e51a26 60 errorCode = _errorCode;
alexanderlea 15:ad1d37e51a26 61
alexanderlea 15:ad1d37e51a26 62 ble.updateCharacteristicValue(errorCharacteristic.getValueAttribute().getHandle(), &errorCode, sizeof(errorCode), false);
alexanderlea 15:ad1d37e51a26 63 }
alexanderlea 0:af868ad47854 64
alexanderlea 0:af868ad47854 65 private:
alexanderlea 9:0ed64b14d46b 66 BLEDevice &ble;
alexanderlea 9:0ed64b14d46b 67 uint8_t command[8];
alexanderlea 15:ad1d37e51a26 68 uint8_t errorCode;
alexanderlea 9:0ed64b14d46b 69 GattCharacteristic broadcasterCharacteristic;
alexanderlea 15:ad1d37e51a26 70 GattCharacteristic errorCharacteristic;
alexanderlea 0:af868ad47854 71 };
alexanderlea 0:af868ad47854 72
alexanderlea 7:5c983cf3c352 73 #endif