fork

Dependencies:   BLE_API mbed-dev-bin nRF51822

Committer:
leejinRMX
Date:
Fri Nov 04 18:30:19 2022 +0000
Revision:
74:06ddfe5ccbea
add blutooth service

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leejinRMX 74:06ddfe5ccbea 1 /*
leejinRMX 74:06ddfe5ccbea 2 The MIT License (MIT)
leejinRMX 74:06ddfe5ccbea 3
leejinRMX 74:06ddfe5ccbea 4 Copyright (c) 2016 British Broadcasting Corporation.
leejinRMX 74:06ddfe5ccbea 5 This software is provided by Lancaster University by arrangement with the BBC.
leejinRMX 74:06ddfe5ccbea 6
leejinRMX 74:06ddfe5ccbea 7 Permission is hereby granted, free of charge, to any person obtaining a
leejinRMX 74:06ddfe5ccbea 8 copy of this software and associated documentation files (the "Software"),
leejinRMX 74:06ddfe5ccbea 9 to deal in the Software without restriction, including without limitation
leejinRMX 74:06ddfe5ccbea 10 the rights to use, copy, modify, merge, publish, distribute, sublicense,
leejinRMX 74:06ddfe5ccbea 11 and/or sell copies of the Software, and to permit persons to whom the
leejinRMX 74:06ddfe5ccbea 12 Software is furnished to do so, subject to the following conditions:
leejinRMX 74:06ddfe5ccbea 13
leejinRMX 74:06ddfe5ccbea 14 The above copyright notice and this permission notice shall be included in
leejinRMX 74:06ddfe5ccbea 15 all copies or substantial portions of the Software.
leejinRMX 74:06ddfe5ccbea 16
leejinRMX 74:06ddfe5ccbea 17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
leejinRMX 74:06ddfe5ccbea 18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
leejinRMX 74:06ddfe5ccbea 19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
leejinRMX 74:06ddfe5ccbea 20 THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
leejinRMX 74:06ddfe5ccbea 21 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
leejinRMX 74:06ddfe5ccbea 22 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
leejinRMX 74:06ddfe5ccbea 23 DEALINGS IN THE SOFTWARE.
leejinRMX 74:06ddfe5ccbea 24 */
leejinRMX 74:06ddfe5ccbea 25
leejinRMX 74:06ddfe5ccbea 26 #ifndef MICROBIT_VALUE_H
leejinRMX 74:06ddfe5ccbea 27 #define MICROBIT_VALUE_H
leejinRMX 74:06ddfe5ccbea 28
leejinRMX 74:06ddfe5ccbea 29 #include "mbed.h"
leejinRMX 74:06ddfe5ccbea 30 #include "MicroBitConfig.h"
leejinRMX 74:06ddfe5ccbea 31 #include "MicroBitComponent.h"
leejinRMX 74:06ddfe5ccbea 32 #include "MicroBitStorage.h"
leejinRMX 74:06ddfe5ccbea 33
leejinRMX 74:06ddfe5ccbea 34 /**
leejinRMX 74:06ddfe5ccbea 35 * Value events
leejinRMX 74:06ddfe5ccbea 36 */
leejinRMX 74:06ddfe5ccbea 37 #define MICROBIT_VALUE_EVT_DATA_UPDATE 1
leejinRMX 74:06ddfe5ccbea 38
leejinRMX 74:06ddfe5ccbea 39 struct ValueSample
leejinRMX 74:06ddfe5ccbea 40 {
leejinRMX 74:06ddfe5ccbea 41 int v;
leejinRMX 74:06ddfe5ccbea 42
leejinRMX 74:06ddfe5ccbea 43 ValueSample()
leejinRMX 74:06ddfe5ccbea 44 {
leejinRMX 74:06ddfe5ccbea 45 this->v = 0;
leejinRMX 74:06ddfe5ccbea 46 }
leejinRMX 74:06ddfe5ccbea 47
leejinRMX 74:06ddfe5ccbea 48 ValueSample(int v)
leejinRMX 74:06ddfe5ccbea 49 {
leejinRMX 74:06ddfe5ccbea 50 this->v = v;
leejinRMX 74:06ddfe5ccbea 51 }
leejinRMX 74:06ddfe5ccbea 52
leejinRMX 74:06ddfe5ccbea 53 bool operator==(const ValueSample& other) const
leejinRMX 74:06ddfe5ccbea 54 {
leejinRMX 74:06ddfe5ccbea 55 return v == other.v;
leejinRMX 74:06ddfe5ccbea 56 }
leejinRMX 74:06ddfe5ccbea 57
leejinRMX 74:06ddfe5ccbea 58 bool operator!=(const ValueSample& other) const
leejinRMX 74:06ddfe5ccbea 59 {
leejinRMX 74:06ddfe5ccbea 60 return !(v == other.v);
leejinRMX 74:06ddfe5ccbea 61 }
leejinRMX 74:06ddfe5ccbea 62 };
leejinRMX 74:06ddfe5ccbea 63
leejinRMX 74:06ddfe5ccbea 64 /**
leejinRMX 74:06ddfe5ccbea 65 * Class definition for MicroBit Value.
leejinRMX 74:06ddfe5ccbea 66 *
leejinRMX 74:06ddfe5ccbea 67 * Represents an implementation of shared value.
leejinRMX 74:06ddfe5ccbea 68 * Also includes basic caching.
leejinRMX 74:06ddfe5ccbea 69 */
leejinRMX 74:06ddfe5ccbea 70 class MicroBitValue : public MicroBitComponent
leejinRMX 74:06ddfe5ccbea 71 {
leejinRMX 74:06ddfe5ccbea 72
leejinRMX 74:06ddfe5ccbea 73 ValueSample sample; // The latest sample data recorded.
leejinRMX 74:06ddfe5ccbea 74 MicroBitStorage* storage; // An instance of MicroBitStorage used for persistence.
leejinRMX 74:06ddfe5ccbea 75
leejinRMX 74:06ddfe5ccbea 76 public:
leejinRMX 74:06ddfe5ccbea 77
leejinRMX 74:06ddfe5ccbea 78 /**
leejinRMX 74:06ddfe5ccbea 79 * Constructor.
leejinRMX 74:06ddfe5ccbea 80 * Create a software representation of an e-value.
leejinRMX 74:06ddfe5ccbea 81 *
leejinRMX 74:06ddfe5ccbea 82 *
leejinRMX 74:06ddfe5ccbea 83 * @param _storage an instance of MicroBitStorage, used to persist calibration data across resets.
leejinRMX 74:06ddfe5ccbea 84 *
leejinRMX 74:06ddfe5ccbea 85 * @param id the ID of the new MicroBitCompass object. Defaults to MICROBIT_ID_VALUE.
leejinRMX 74:06ddfe5ccbea 86 *
leejinRMX 74:06ddfe5ccbea 87 * @code
leejinRMX 74:06ddfe5ccbea 88 *
leejinRMX 74:06ddfe5ccbea 89 * MicroBitStorage storage;
leejinRMX 74:06ddfe5ccbea 90 *
leejinRMX 74:06ddfe5ccbea 91 * MicroBitValue uBitValue(storage);
leejinRMX 74:06ddfe5ccbea 92 * @endcode
leejinRMX 74:06ddfe5ccbea 93 */
leejinRMX 74:06ddfe5ccbea 94 MicroBitValue(MicroBitStorage& _storage, uint16_t id = MICROBIT_ID_VALUE);
leejinRMX 74:06ddfe5ccbea 95
leejinRMX 74:06ddfe5ccbea 96 /**
leejinRMX 74:06ddfe5ccbea 97 * Constructor.
leejinRMX 74:06ddfe5ccbea 98 * Create a software representation of an e-value.
leejinRMX 74:06ddfe5ccbea 99 *
leejinRMX 74:06ddfe5ccbea 100 * @param id the ID of the new MicroBitCompass object. Defaults to MICROBIT_ID_VALUE.
leejinRMX 74:06ddfe5ccbea 101 *
leejinRMX 74:06ddfe5ccbea 102 * @code
leejinRMX 74:06ddfe5ccbea 103 * MicroBitI2C i2c(I2C_SDA0, I2C_SCL0);
leejinRMX 74:06ddfe5ccbea 104 *
leejinRMX 74:06ddfe5ccbea 105 * MicroBitCompass compass(i2c);
leejinRMX 74:06ddfe5ccbea 106 * @endcode
leejinRMX 74:06ddfe5ccbea 107 */
leejinRMX 74:06ddfe5ccbea 108 MicroBitValue(uint16_t id = MICROBIT_ID_VALUE);
leejinRMX 74:06ddfe5ccbea 109
leejinRMX 74:06ddfe5ccbea 110 /**
leejinRMX 74:06ddfe5ccbea 111 * Reads the value of the V integer.
leejinRMX 74:06ddfe5ccbea 112 *
leejinRMX 74:06ddfe5ccbea 113 * @return The value V.
leejinRMX 74:06ddfe5ccbea 114 *
leejinRMX 74:06ddfe5ccbea 115 * @code
leejinRMX 74:06ddfe5ccbea 116 * value.getV();
leejinRMX 74:06ddfe5ccbea 117 * @endcode
leejinRMX 74:06ddfe5ccbea 118 */
leejinRMX 74:06ddfe5ccbea 119 int getV();
leejinRMX 74:06ddfe5ccbea 120
leejinRMX 74:06ddfe5ccbea 121 /**
leejinRMX 74:06ddfe5ccbea 122 * Set the value of the V integer.
leejinRMX 74:06ddfe5ccbea 123 *
leejinRMX 74:06ddfe5ccbea 124 * @param The value V.
leejinRMX 74:06ddfe5ccbea 125 *
leejinRMX 74:06ddfe5ccbea 126 * @code
leejinRMX 74:06ddfe5ccbea 127 * value.setV(v);
leejinRMX 74:06ddfe5ccbea 128 * @endcode
leejinRMX 74:06ddfe5ccbea 129 */
leejinRMX 74:06ddfe5ccbea 130 void setV(int v);
leejinRMX 74:06ddfe5ccbea 131
leejinRMX 74:06ddfe5ccbea 132 /**
leejinRMX 74:06ddfe5ccbea 133 * Updates the local sample, only if the compass indicates that
leejinRMX 74:06ddfe5ccbea 134 * data is stale.
leejinRMX 74:06ddfe5ccbea 135 *
leejinRMX 74:06ddfe5ccbea 136 * @note Can be used to trigger manual updates, if the device is running without a scheduler.
leejinRMX 74:06ddfe5ccbea 137 * Also called internally by getV() member functions.
leejinRMX 74:06ddfe5ccbea 138 */
leejinRMX 74:06ddfe5ccbea 139 int updateSample();
leejinRMX 74:06ddfe5ccbea 140
leejinRMX 74:06ddfe5ccbea 141 /**
leejinRMX 74:06ddfe5ccbea 142 * Periodic callback from MicroBit idle thread.
leejinRMX 74:06ddfe5ccbea 143 *
leejinRMX 74:06ddfe5ccbea 144 * Calls updateSample().
leejinRMX 74:06ddfe5ccbea 145 */
leejinRMX 74:06ddfe5ccbea 146 virtual void idleTick();
leejinRMX 74:06ddfe5ccbea 147
leejinRMX 74:06ddfe5ccbea 148
leejinRMX 74:06ddfe5ccbea 149 /**
leejinRMX 74:06ddfe5ccbea 150 * Destructor for MicroBitCompass, where we deregister this instance from the array of fiber components.
leejinRMX 74:06ddfe5ccbea 151 */
leejinRMX 74:06ddfe5ccbea 152 ~MicroBitValue();
leejinRMX 74:06ddfe5ccbea 153
leejinRMX 74:06ddfe5ccbea 154 private:
leejinRMX 74:06ddfe5ccbea 155
leejinRMX 74:06ddfe5ccbea 156 /**
leejinRMX 74:06ddfe5ccbea 157 * An initialisation member function used by the many constructors of MicroBitValue.
leejinRMX 74:06ddfe5ccbea 158 *
leejinRMX 74:06ddfe5ccbea 159 * @param id the unique identifier for this value instance.
leejinRMX 74:06ddfe5ccbea 160 *
leejinRMX 74:06ddfe5ccbea 161 */
leejinRMX 74:06ddfe5ccbea 162 void init(uint16_t id);
leejinRMX 74:06ddfe5ccbea 163 };
leejinRMX 74:06ddfe5ccbea 164
leejinRMX 74:06ddfe5ccbea 165 #endif