microbit: Added validation check on MicroBit::init()

Added simple validation check to protect against accidental re-initialisation.
This commit is contained in:
Joe Finney 2016-03-22 19:49:14 +00:00
parent 34856a6942
commit 6b6c83092a
2 changed files with 11 additions and 5 deletions

View File

@ -41,10 +41,7 @@
#include "MicroBitStorage.h"
// MicroBit::flags values
#define MICROBIT_FLAG_SCHEDULER_RUNNING 0x00000001
#define MICROBIT_FLAG_ACCELEROMETER_RUNNING 0x00000002
#define MICROBIT_FLAG_DISPLAY_RUNNING 0x00000004
#define MICROBIT_FLAG_COMPASS_RUNNING 0x00000008
#define MICROBIT_INITIALIZED 0x01
// MicroBit naming constants
#define MICROBIT_NAME_LENGTH 5
@ -70,6 +67,7 @@ class MicroBit
void compassCalibrator(MicroBitEvent e);
void onListenerRegisteredEvent(MicroBitEvent evt);
uint32_t randomValue;
uint8_t status;
public:

View File

@ -120,7 +120,10 @@ MicroBit::MicroBit() :
radio(),
ble(NULL)
{
// Bring up soft reset functionality as soon as possible.
// Clear our status
status = 0;
// Bring up soft reset functionality as soon as possible.
resetButton.mode(PullUp);
resetButton.fall(this, &MicroBit::reset);
}
@ -138,6 +141,9 @@ MicroBit::MicroBit() :
*/
void MicroBit::init()
{
if (status & MICROBIT_INITIALIZED)
return;
#if CONFIG_ENABLED(MICROBIT_HEAP_ALLOCATOR)
// Bring up a nested heap allocator.
microbit_create_nested_heap(MICROBIT_NESTED_HEAP_SIZE);
@ -153,6 +159,8 @@ void MicroBit::init()
messageBus.listen(MICROBIT_ID_COMPASS, MICROBIT_COMPASS_EVT_CALIBRATE, this, &MicroBit::compassCalibrator, MESSAGE_BUS_LISTENER_IMMEDIATE);
messageBus.listen(MICROBIT_ID_MESSAGE_BUS_LISTENER, MICROBIT_EVT_ANY, this, &MicroBit::onListenerRegisteredEvent);
status |= MICROBIT_INITIALIZED;
#if CONFIG_ENABLED(MICROBIT_BLE_PAIRING_MODE)
// Test if we need to enter BLE pairing mode...
int i=0;