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:
Sat Apr 25 12:58:29 2015 +0000
Revision:
21:84574bea5494
Parent:
18:867625bb5000
fixed log issue

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