Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed-dev-bin nRF51822
Fork of microbit-dal by
Revision 66:2fc7d7c2fffc, committed 2016-07-13
- Comitter:
- LancasterUniversity
- Date:
- Wed Jul 13 12:18:46 2016 +0100
- Parent:
- 65:f7ebabf23e15
- Child:
- 67:99cfde195ff3
- Commit message:
- Synchronized with git rev a962befe
Author: Joe Finney
Merge pull request #159 from lancaster-university/bugfix-145-shake-hard-to-trigger
Bugfix 145 shake hard to trigger
Changed in this revision
--- a/inc/bluetooth/MicroBitUARTService.h Wed Jul 13 12:18:45 2016 +0100
+++ b/inc/bluetooth/MicroBitUARTService.h Wed Jul 13 12:18:46 2016 +0100
@@ -55,7 +55,7 @@
uint8_t txBufferSize;
- uint32_t txCharacteristicHandle;
+ uint32_t rxCharacteristicHandle;
// Bluetooth stack we're running on.
BLEDevice &ble;
@@ -115,36 +115,69 @@
int getc(MicroBitSerialMode mode = SYNC_SLEEP);
/**
- * places a single character into our transmission buffer,
+ * Places a single character into our transmission buffer,
*
* @param c the character to transmit
*
- * @return the number of characters written (0, or 1).
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
+ *
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
+ *
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
- int putc(char c);
+ int putc(char c, MicroBitSerialMode mode = SYNC_SLEEP);
/**
* Copies characters into the buffer used for Transmitting to the central device.
*
* @param buf a buffer containing length number of bytes.
* @param length the size of the buffer.
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
*
- * @return the number of characters copied into the buffer
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
*
- * @note no modes for sending are available at the moment, due to interrupt overhead.
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
- int send(const uint8_t *buf, int length);
+ int send(const uint8_t *buf, int length, MicroBitSerialMode mode = SYNC_SLEEP);
/**
* Copies characters into the buffer used for Transmitting to the central device.
*
* @param s the string to transmit
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
*
- * @return the number of characters copied into the buffer
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
*
- * @note no modes for sending are available at the moment, due to interrupt overhead.
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
- int send(ManagedString s);
+ int send(ManagedString s, MicroBitSerialMode mode = SYNC_SLEEP);
/**
* Reads a number of characters from the rxBuffer and fills user given buffer.
--- a/inc/core/MicroBitConfig.h Wed Jul 13 12:18:45 2016 +0100 +++ b/inc/core/MicroBitConfig.h Wed Jul 13 12:18:46 2016 +0100 @@ -320,6 +320,19 @@ // +// I/O Options +// + + +// +// Define the default mode in which the digital input pins are configured. +// valid options are PullDown, PullUp and PullNone. +// +#ifndef MICROBIT_DEFAULT_PULLMODE +#define MICROBIT_DEFAULT_PULLMODE PullDown +#endif + +// // Panic options //
--- a/inc/drivers/MicroBitPin.h Wed Jul 13 12:18:45 2016 +0100
+++ b/inc/drivers/MicroBitPin.h Wed Jul 13 12:18:46 2016 +0100
@@ -95,8 +95,8 @@
{
// The mbed object looking after this pin at any point in time (untyped due to dynamic behaviour).
void *pin;
-
PinCapability capability;
+ uint8_t pullMode;
/**
* Disconnect any attached mBed IO from this pin.
@@ -200,6 +200,21 @@
int getDigitalValue();
/**
+ * Configures this IO pin as a digital input with the specified internal pull-up/pull-down configuraiton (if necessary) and tests its current value.
+ *
+ * @param pull one of the mbed pull configurations: PullUp, PullDown, PullNone
+ *
+ * @return 1 if this input is high, 0 if input is LO, or MICROBIT_NOT_SUPPORTED
+ * if the given pin does not have digital capability.
+ *
+ * @code
+ * MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
+ * P0.getDigitalValue(PullUp); // P0 is either 0 or 1;
+ * @endcode
+ */
+ int getDigitalValue(PinMode pull);
+
+ /**
* Configures this IO pin as an analog/pwm output, and change the output value to the given level.
*
* @param value the level to set on the output pin, in the range 0 - 1024
--- a/inc/drivers/MicroBitSerial.h Wed Jul 13 12:18:45 2016 +0100
+++ b/inc/drivers/MicroBitSerial.h Wed Jul 13 12:18:46 2016 +0100
@@ -436,6 +436,8 @@
/**
* Configures an event to be fired after "len" characters.
*
+ * Will generate an event with the ID: MICROBIT_ID_SERIAL and the value MICROBIT_SERIAL_EVT_HEAD_MATCH.
+ *
* @param len the number of characters to wait before triggering the event.
*
* @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
@@ -455,7 +457,9 @@
/**
* Configures an event to be fired on a match with one of the delimeters.
*
- * @param delimeters the characters to match received characters against e.g. ManagedString("\r\n")
+ * Will generate an event with the ID: MICROBIT_ID_SERIAL and the value MICROBIT_SERIAL_EVT_DELIM_MATCH.
+ *
+ * @param delimeters the characters to match received characters against e.g. ManagedString("\n")
*
* @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
* gives a different behaviour:
--- a/inc/platform/yotta_cfg_mappings.h Wed Jul 13 12:18:45 2016 +0100
+++ b/inc/platform/yotta_cfg_mappings.h Wed Jul 13 12:18:46 2016 +0100
@@ -63,6 +63,10 @@
#define MICROBIT_DEFAULT_PRINT_SPEED YOTTA_CFG_MICROBIT_DAL_DISPLAY_PRINT_SPEED
#endif
+#ifdef YOTTA_CFG_MICROBIT_DAL_DEFAULT_PULLMODE
+ #define MICROBIT_DEFAULT_PULLMODE YOTTA_CFG_MICROBIT_DAL_DEFAULT_PULLMODE
+#endif
+
#ifdef YOTTA_CFG_MICROBIT_DAL_PANIC_ON_HEAP_FULL
#define MICROBIT_PANIC_HEAP_FULL YOTTA_CFG_MICROBIT_DAL_PANIC_ON_HEAP_FULL
#endif
--- a/module.json Wed Jul 13 12:18:45 2016 +0100
+++ b/module.json Wed Jul 13 12:18:46 2016 +0100
@@ -14,7 +14,7 @@
"author": "Joe Finney <j.finney@lancaster.ac.uk (mailto:j.finney@lancaster.ac.uk) >",
"homepage": "https://github.com/lancaster-university/microbit-dal/",
"dependencies": {
- "mbed-classic": "lancaster-university/mbed-classic#microbit_hfclk+mb4",
+ "mbed-classic": "lancaster-university/mbed-classic#microbit_hfclk+mb5",
"ble": "lancaster-university/BLE_API#v2.5.0+mb3",
"ble-nrf51822": "lancaster-university/nrf51822#v2.5.0+mb6",
"nrf51-sdk": "lancaster-university/nrf51-sdk#v2.2.0+mb4"
--- a/source/bluetooth/MicroBitBLEManager.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/bluetooth/MicroBitBLEManager.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -336,6 +336,8 @@
#if CONFIG_ENABLED(MICROBIT_BLE_DEVICE_INFORMATION_SERVICE)
DeviceInformationService ble_device_information_service (*ble, MICROBIT_BLE_MANUFACTURER, MICROBIT_BLE_MODEL, serialNumber.toCharArray(), MICROBIT_BLE_HARDWARE_VERSION, MICROBIT_BLE_FIRMWARE_VERSION, MICROBIT_BLE_SOFTWARE_VERSION);
+#else
+ (void)serialNumber;
#endif
#if CONFIG_ENABLED(MICROBIT_BLE_EVENT_SERVICE)
--- a/source/bluetooth/MicroBitUARTService.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/bluetooth/MicroBitUARTService.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -40,17 +40,14 @@
static uint8_t txBufferHead = 0;
static uint8_t txBufferTail = 0;
-static GattCharacteristic* rxCharacteristic = NULL;
+static GattCharacteristic* txCharacteristic = NULL;
/**
- * A callback function for whenever a Bluetooth device consumes our RX Buffer
+ * A callback function for whenever a Bluetooth device consumes our TX Buffer
*/
-void on_confirmation_received_callback(uint16_t handle)
+void on_confirmation(uint16_t handle)
{
-#if CONFIG_ENABLED(MICROBIT_DBG)
- SERIAL_DEBUG->printf("RECEIVED!! %d \r\n",handle);
-#endif
- if(handle == rxCharacteristic->getValueAttribute().getHandle())
+ if(handle == txCharacteristic->getValueAttribute().getHandle())
{
txBufferTail = txBufferHead;
MicroBitEvent(MICROBIT_ID_NOTIFY, MICROBIT_UART_S_EVT_TX_EMPTY);
@@ -81,27 +78,27 @@
txBufferTail = 0;
this->txBufferSize = txBufferSize;
- GattCharacteristic txCharacteristic(UARTServiceTXCharacteristicUUID, rxBuffer, 1, rxBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
+ GattCharacteristic rxCharacteristic(UARTServiceRXCharacteristicUUID, rxBuffer, 1, rxBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
- rxCharacteristic = new GattCharacteristic(UARTServiceRXCharacteristicUUID, txBuffer, 1, txBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
+ txCharacteristic = new GattCharacteristic(UARTServiceTXCharacteristicUUID, txBuffer, 1, txBufferSize, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE);
- GattCharacteristic *charTable[] = {&txCharacteristic, rxCharacteristic};
+ GattCharacteristic *charTable[] = {txCharacteristic, &rxCharacteristic};
GattService uartService(UARTServiceUUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *));
_ble.addService(uartService);
- this->txCharacteristicHandle = txCharacteristic.getValueAttribute().getHandle();
+ this->rxCharacteristicHandle = rxCharacteristic.getValueAttribute().getHandle();
_ble.gattServer().onDataWritten(this, &MicroBitUARTService::onDataWritten);
- _ble.gattServer().onConfirmationReceived(on_confirmation_received_callback);
+ _ble.gattServer().onConfirmationReceived(on_confirmation);
}
/**
- * A callback function for whenever a Bluetooth device writes to our TX characteristic.
+ * A callback function for whenever a Bluetooth device writes to our RX characteristic.
*/
void MicroBitUARTService::onDataWritten(const GattWriteCallbackParams *params) {
- if (params->handle == this->txCharacteristicHandle)
+ if (params->handle == this->rxCharacteristicHandle)
{
uint16_t bytesWritten = params->len;
@@ -210,11 +207,24 @@
*
* @param c the character to transmit
*
- * @return the number of characters written (0, or 1).
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
+ *
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
+ *
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
-int MicroBitUARTService::putc(char c)
+int MicroBitUARTService::putc(char c, MicroBitSerialMode mode)
{
- return (send((uint8_t *)&c, 1) == 1) ? 1 : EOF;
+ return (send((uint8_t *)&c, 1, mode) == 1) ? 1 : EOF;
}
/**
@@ -222,21 +232,38 @@
*
* @param buf a buffer containing length number of bytes.
* @param length the size of the buffer.
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
*
- * @return the number of characters copied into the buffer
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
*
- * @note no modes for sending are available at the moment, due to interrupt overhead.
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
-int MicroBitUARTService::send(const uint8_t *buf, int length)
+int MicroBitUARTService::send(const uint8_t *buf, int length, MicroBitSerialMode mode)
{
- if(length < 1)
+ if(length < 1 || mode == SYNC_SPINWAIT)
return MICROBIT_INVALID_PARAMETER;
+ bool updatesEnabled = false;
+
+ ble.gattServer().areUpdatesEnabled(*txCharacteristic, &updatesEnabled);
+
+ if(!ble.getGapState().connected && !updatesEnabled)
+ return MICROBIT_NOT_SUPPORTED;
+
int bytesWritten = 0;
- if (ble.getGapState().connected) {
-
- for(int bufferIterator = 0; bufferIterator < length; bufferIterator++)
+ while(bytesWritten < length && ble.getGapState().connected && updatesEnabled)
+ {
+ for(int bufferIterator = bytesWritten; bufferIterator < length; bufferIterator++)
{
int nextHead = (txBufferHead + 1) % txBufferSize;
@@ -252,27 +279,25 @@
int size = txBufferedSize();
-#if CONFIG_ENABLED(MICROBIT_DBG)
- SERIAL_DEBUG->printf("tx size: %d", size);
-#endif
-
uint8_t temp[size];
memclr(&temp, size);
circularCopy(txBuffer, txBufferSize, temp, txBufferTail, txBufferHead);
-#if CONFIG_ENABLED(MICROBIT_DBG)
- for(int i = 0; i < size; i++)
- SERIAL_DEBUG->printf("%c",temp[i]);
-#endif
+
+ if(mode == SYNC_SLEEP)
+ fiber_wake_on_event(MICROBIT_ID_NOTIFY, MICROBIT_UART_S_EVT_TX_EMPTY);
+
+ ble.gattServer().write(txCharacteristic->getValueAttribute().getHandle(), temp, size);
- ble.gattServer().write(rxCharacteristic->getValueAttribute().getHandle(), temp, size);
- }
+ if(mode == SYNC_SLEEP)
+ schedule();
+ else
+ break;
-#if CONFIG_ENABLED(MICROBIT_DBG)
- SERIAL_DEBUG->printf("written: %d \r\n",bytesWritten);
-#endif
+ ble.gattServer().areUpdatesEnabled(*txCharacteristic, &updatesEnabled);
+ }
return bytesWritten;
}
@@ -281,14 +306,24 @@
* Copies characters into the buffer used for Transmitting to the central device.
*
* @param s the string to transmit
+ * @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
+ * gives a different behaviour:
*
- * @return the number of characters copied into the buffer
+ * ASYNC - Will copy as many characters as it can into the buffer for transmission,
+ * and return control to the user.
+ *
+ * SYNC_SPINWAIT - will return MICROBIT_INVALID_PARAMETER
*
- * @note no modes for sending are available at the moment, due to interrupt overhead.
+ * SYNC_SLEEP - Will perform a cooperative blocking wait until all
+ * given characters have been received by the connected
+ * device.
+ *
+ * @return the number of characters written, or MICROBIT_NOT_SUPPORTED if there is
+ * no connected device, or the connected device has not enabled indications.
*/
-int MicroBitUARTService::send(ManagedString s)
+int MicroBitUARTService::send(ManagedString s, MicroBitSerialMode mode)
{
- return send((uint8_t *)s.toCharArray(), s.length());
+ return send((uint8_t *)s.toCharArray(), s.length(), mode);
}
/**
--- a/source/core/MicroBitDevice.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/core/MicroBitDevice.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -67,8 +67,12 @@
*/
bool ble_running()
{
- uint8_t t;
+ uint8_t t = 0;
+
+#if CONFIG_ENABLED(MICROBIT_BLE_ENABLED) || CONFIG_ENABLED(MICROBIT_BLE_PAIRING_MODE)
sd_softdevice_is_enabled(&t);
+#endif
+
return t==1;
}
--- a/source/drivers/MicroBitPin.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/drivers/MicroBitPin.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -57,6 +57,7 @@
this->id = id;
this->name = name;
this->capability = capability;
+ this->pullMode = MICROBIT_DEFAULT_PULLMODE;
// Power up in a disconnected, low power state.
// If we're unused, this is how it will stay...
@@ -159,7 +160,7 @@
if (!(status & (IO_STATUS_DIGITAL_IN | IO_STATUS_EVENT_ON_EDGE | IO_STATUS_EVENT_PULSE_ON_EDGE)))
{
disconnect();
- pin = new DigitalIn(name,PullDown);
+ pin = new DigitalIn(name, (PinMode)pullMode);
status |= IO_STATUS_DIGITAL_IN;
}
@@ -169,6 +170,25 @@
return ((DigitalIn *)pin)->read();
}
+/**
+ * Configures this IO pin as a digital input with the specified internal pull-up/pull-down configuraiton (if necessary) and tests its current value.
+ *
+ * @param pull one of the mbed pull configurations: PullUp, PullDown, PullNone
+ *
+ * @return 1 if this input is high, 0 if input is LO, or MICROBIT_NOT_SUPPORTED
+ * if the given pin does not have digital capability.
+ *
+ * @code
+ * MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
+ * P0.getDigitalValue(PullUp); // P0 is either 0 or 1;
+ * @endcode
+ */
+int MicroBitPin::getDigitalValue(PinMode pull)
+{
+ setPull(pull);
+ return getDigitalValue();
+}
+
int MicroBitPin::obtainAnalogChannel()
{
// Move into an analogue input state if necessary, if we are no longer the focus of a DynamicPWM instance, allocate ourselves again!
@@ -451,6 +471,8 @@
*/
int MicroBitPin::setPull(PinMode pull)
{
+ pullMode = pull;
+
if ((status & IO_STATUS_DIGITAL_IN))
{
((DigitalIn *)pin)->mode(pull);
@@ -528,7 +550,7 @@
disconnect();
pin = new TimedInterruptIn(name);
- ((TimedInterruptIn *)pin)->mode(PullDown);
+ ((TimedInterruptIn *)pin)->mode((PinMode)pullMode);
((TimedInterruptIn *)pin)->rise(this, &MicroBitPin::onRise);
((TimedInterruptIn *)pin)->fall(this, &MicroBitPin::onFall);
}
--- a/source/drivers/MicroBitRadio.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/drivers/MicroBitRadio.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -59,10 +59,6 @@
extern "C" void RADIO_IRQHandler(void)
{
- // Move on to the next buffer, if possible.
- MicroBitRadio::instance->queueRxBuf();
- NRF_RADIO->PACKETPTR = (uint32_t) MicroBitRadio::instance->getRxBuf();
-
if(NRF_RADIO->EVENTS_READY)
{
NRF_RADIO->EVENTS_READY = 0;
@@ -74,12 +70,24 @@
if(NRF_RADIO->EVENTS_END)
{
NRF_RADIO->EVENTS_END = 0;
-
if(NRF_RADIO->CRCSTATUS == 1)
{
uint8_t sample = NRF_RADIO->RSSISAMPLE;
+ // Associate this packet's rssi value with the data just
+ // transferred by DMA receive
MicroBitRadio::instance->setRSSI(sample);
+
+ // Now move on to the next buffer, if possible.
+ // The queued packet will get the rssi value set above.
+ MicroBitRadio::instance->queueRxBuf();
+
+ // Set the new buffer for DMA
+ NRF_RADIO->PACKETPTR = (uint32_t) MicroBitRadio::instance->getRxBuf();
+ }
+ else
+ {
+ MicroBitRadio::instance->setRSSI(0);
}
// Start listening and wait for the END event
--- a/source/drivers/MicroBitSerial.cpp Wed Jul 13 12:18:45 2016 +0100
+++ b/source/drivers/MicroBitSerial.cpp Wed Jul 13 12:18:46 2016 +0100
@@ -57,8 +57,9 @@
*/
MicroBitSerial::MicroBitSerial(PinName tx, PinName rx, uint8_t rxBufferSize, uint8_t txBufferSize) : RawSerial(tx,rx), delimeters()
{
- this->rxBuffSize = rxBufferSize;
- this->txBuffSize = txBufferSize;
+ // + 1 so there is a usable buffer size, of the size the user requested.
+ this->rxBuffSize = rxBufferSize + 1;
+ this->txBuffSize = txBufferSize + 1;
this->rxBuff = NULL;
this->txBuff = NULL;
@@ -545,7 +546,7 @@
return result;
}
- char c = (char)getChar(mode);
+ int c = getChar(mode);
unlockRx();
@@ -834,7 +835,6 @@
detach(Serial::RxIrq);
- serial_free(&_serial);
serial_init(&_serial, tx, rx);
attach(this, &MicroBitSerial::dataReceived, Serial::RxIrq);
@@ -853,6 +853,8 @@
/**
* Configures an event to be fired after "len" characters.
*
+ * Will generate an event with the ID: MICROBIT_ID_SERIAL and the value MICROBIT_SERIAL_EVT_HEAD_MATCH.
+ *
* @param len the number of characters to wait before triggering the event.
*
* @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
@@ -885,7 +887,9 @@
/**
* Configures an event to be fired on a match with one of the delimeters.
*
- * @param delimeters the characters to match received characters against e.g. ManagedString("\r\n")
+ * Will generate an event with the ID: MICROBIT_ID_SERIAL and the value MICROBIT_SERIAL_EVT_DELIM_MATCH.
+ *
+ * @param delimeters the characters to match received characters against e.g. ManagedString("\n")
*
* @param mode the selected mode, one of: ASYNC, SYNC_SPINWAIT, SYNC_SLEEP. Each mode
* gives a different behaviour:
@@ -957,7 +961,8 @@
lockRx();
- this->rxBuffSize = size;
+ // + 1 so there is a usable buffer size, of the size the user requested.
+ this->rxBuffSize = size + 1;
int result = initialiseRx();
@@ -981,7 +986,8 @@
lockTx();
- this->txBuffSize = size;
+ // + 1 so there is a usable buffer size, of the size the user requested.
+ this->txBuffSize = size + 1;
int result = initialiseTx();
