- Factored periodic timer funcitonality out of fiber scheduler and into a new SystemTimer module module.
- Enapsulated "ticks" variable within SystemTimer module, with accessor funciton.
- Added accessor/mutator functions to get and set the tick period.
- Added a class wrapper to permit periodic callbacks to both C and C++
functions.
- Updated all references in microbit-dal to use this refactored API.
Updates to MicroBitButton and MicroBitMultiButton to align the API through
which CLICK events are filtered. Also, updates to the mechanism through which
buttonA and buttonB CLICK/LONG_CLICK events are filtered by
MicroBitMultiButotn to reduce RAM footprint.
No changes to external behaviour of these classes.
MicroBitMultiButton now provides an indication to MicroBitButton instances when an application is actively utilising that button as part of a button group. This
permits that MicroBitButton to more accurately filter events, and provide a
consistent abstraction.
More specifically, this patch:
- Extends the MessageBus functionality to indicate when listeners are
attached to events. This allows components to perform on demand tailoring
of their behaviour.
- Extends MicroBitMultiButton to indicate to relevant MicroBitButton
instances when they are part of a button group.
- Extends MicroBitButton to perform filtering of button events dynamically
(rather than statically) when part of a MultiButton group.
- Code cleanup of static functions that are more cleanly implemented as
methods.
This commit adds a mutator that dynamically reconfigures the
systemTicker to call systemTick at a different period to the default.
The accessor returns the current tick speed in milliseconds.
The accessor is now also used in scheduler_tick to keep timing as
accurate as possible.
MICROBIT_DISPLAY_REFRESH_PERIOD has now been removed, and replaced with
MICROBIT_DEFAULT_TICK_PERIOD.
Replaced newer struct-style initialisation of CompassSample in MicroBit.cpp
with the more traditional constructor-style initialisation, to enfore
C98 compliance.
Closes#74
An e-compass solution requires knowwlede two pieces of data to provide an
accurate heading:
- Accurate calibration of the magnetometer hardware so that reliable
measurements can be taken.
- Knowledge of the pitch and roll of of device, so that the correct
components of the X/Y and Z axis sensors of the magnetomer can be used
to sense the magnetic field in a horizontal plane regardless of the tilt
of the device.
This commit represent changes to the MicroBitAccelerometer and MicroBitCompass
classes to implemen tthese goals. More specifically, this commit provides:
- The introduciton of an interactive calibration 'game', that can rapidly
gather all the data required to calibrate the compass.
- An improved calibration algorithm based on a Least Mean Squares approach of
compass samples, as documened in Freescale Application Note AN4248.
- The inclusion of a simple Matrix4 class to enable efficient Least Mean
Squares implementation.
- A change from asynchronous to synchronous calibration of the compass when
first used. This is in repsonse to a feature request for this from users
and high level languages using microbit-dal.
- Support for detemrining tilt and roll angle in MicroBitAccelerometer
- Support for multiple co-ordinate spaces in MicroBitAccelerometer and
MicroBitCompass. Data can now be read in either RAW (unaltered) data.
MICORBIT_SIMPLE_CARTESIAN (as used previously) or NORTH_EAST_DOWN
(the industry convention in mobile phones, tablets and aviation)
- Implementation of a tilt compensated algorithm, used when determining
device heading.
Minor amends:
- bleDisconnectionCallback signature change
- bleSetAdvertisingInterval now takes milliseconds as a parameter
- event based invocation of DFU bootloader
Changes to default BLE name. During normal operation, all micro:bits now have the same name: BBC micro:bit
When pairing mode (AKA BLUEZONE) is entered, device name details re appended as before, to give BBC micro:bit [<name>]
This is to provide a degree of anonymity to users, to make tracking of kids more difficult.
- LFSR generated values in a subset of the range requested (rounded to the nearest lower power of 2).
Corrected by increasing the number of bits usedby one, such that it now generated st least the power of 2 greater.
- replaced enable/disable of interrupts with a local snapshot of randomValue. Much of the nordic software is sensitive to interrupt timings,
so best avoided where possible. Chance of race condition is low, and effect is minimal (duplicate number returned).
The serial baud rate is set duing construction of the uBit object. We
don't need to do it again, and especially with fixed values that can't
be overridden.
Uisng libc's implementation is likely to be safer than rolling our own. At least
the failure modes are well documented. (glibc's implementation of rand() is
actually not bad).
The LFSR used only provides 1 bit of random data each time it is cycled.
This implementation generates the minimum number of bits needed. Further
it discards numbers that are bigger than required and re-calculates -
this keeps the distribution flat.
If BLE is connected when performing a hard reset, attempt to disconnect
first to allow the remote peer to handle the disconnect gracefully
without haing to wait for a supervision timeout.
- refactored BLE funcitonality into BLEManager class.
- added security requirements standard BLE profile services.
- updated bluezone pairing process to use BLE passkey exchange.
- Add maximum depth for event queues, to prevent buggy scripts causing total memory exhaustion.
- Suppress generation of A/B click events when A+B click is generated
- preservation of event ordering on messagebus for resursive event generation cases.
- bugfix of message bus processing to prevent occasional dual processing of events
- bugfix MicroBitDisplay to behave correctly when delay parameter is zero.
NOP/clamping behaviour out of teh micro:bit runtime and into the glue layers of higher level
languages.
- Updates to many functions to provide explicut return codes.
- Updates to many functions to remove heuristic calidation (NOP/clamping/defaults)
- Updates to ErrorNo.h to provide clearer return values, and place return values in a better scope
- Updates to MicroBitDisplay to use enums where appropriate.
Minor changes to BLE profile services (cleanup prior to merge with master branch):
- Added temperature period characteristic to match design pattern of other sensors.
- Updated endinaness of MicroBitLEDService Matrix to be more intuitive.
- Cleaned up Microbit.cpp by removing unused reference to BLE services.
- Exposed serial number and naming information thr BLE DeviceInformation and API.
- Updated BLE advertisement period to be alightly more repsonsive (200ms vs 1000ms).
- BUGFIX: micro:bit name is now always generated, regardless of BLE services.
- BUGFIX: Scroll Period data length.