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.
Fork of nRF51822 by
Revision 546:1e147322b2b5, committed 2016-01-11
- Comitter:
- vcoubard
- Date:
- Mon Jan 11 10:19:05 2016 +0000
- Parent:
- 545:d834e6591aee
- Child:
- 547:8550af084edc
- Commit message:
- Synchronized with git rev cc0cf3df
Author: Vincent Coubard
Merge remote-tracking branch 'origin/develop' into characteristicDescriptorDiscovery
Changed in this revision
--- a/LICENSE Mon Jan 11 10:19:04 2016 +0000 +++ b/LICENSE Mon Jan 11 10:19:05 2016 +0000 @@ -1,6 +1,9 @@ Many of the files in this module have been inherited from the Nordic SDK for -nRF51822; they come with a BSD-like license offered by Nordic for use in mbed. -Some other files come from the mbed SDK, and are licensed under Apache-2.0. -Unless specifically indicated otherwise in a file, files are licensed -under the Apache 2.0 license, as can be found in: apache-2.0.txt. -The BSD-like Nordic license can be found in BSD-3clause-Nordic.txt \ No newline at end of file +nRF51822. With the exception of the softdevice, they come with a BSD license +offered by Nordic for use in mbed. The Nordic Softdevice License Agreement, a +BSD-like licence for binary distributions, applies to the softdevice. Some +other files come from the mbed SDK, and are licensed under Apache-2.0. Unless +specifically indicated otherwise in a file, files are licensed under the +Apache 2.0 license, as can be found in: apache-2.0.txt. The BSD-like Nordic +license can be found in BSD-3clause-Nordic.txt. The Nordic Semiconductor Softdevice +License Agreement can be found in softdevice_nrf51822_licence_agreement.txt. \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bootloader/softdevice_nrf51822_licence_agreement.txt Mon Jan 11 10:19:05 2016 +0000 @@ -0,0 +1,30 @@ +/* + * S110/S120/S130 License Agreement + * + * Copyright (c) 2015, Nordic Semiconductor ASA, All rights reserved. + * + * Redistribution. Redistribution and use in binary form, without modification, + * are permitted provided that the following conditions are met: + * + * • Redistributions must reproduce the above copyright notice and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * • Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * • No reverse engineering, decompilation, or disassembly of this software is + * permitted. + * + * DISCLAIMER. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * / \ No newline at end of file
--- a/module.json Mon Jan 11 10:19:04 2016 +0000
+++ b/module.json Mon Jan 11 10:19:05 2016 +0000
@@ -1,6 +1,6 @@
{
"name": "ble-nrf51822",
- "version": "2.0.3",
+ "version": "2.0.6",
"description": "Nordic stack and drivers for the mbed BLE API.",
"keywords": [
"Bluetooth",
@@ -18,6 +18,9 @@
{
"url": "https://spdx.org/licenses/Apache-2.0",
"type": "Apache-2.0"
+ },
+ {
+ "type": "LicenseRef-softdevice_nrf51822_licence_agreement.txt"
}
],
"dependencies": {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/softdevice_nrf51822_licence_agreement.txt Mon Jan 11 10:19:05 2016 +0000 @@ -0,0 +1,30 @@ +/* + * S110/S120/S130 License Agreement + * + * Copyright (c) 2015, Nordic Semiconductor ASA, All rights reserved. + * + * Redistribution. Redistribution and use in binary form, without modification, + * are permitted provided that the following conditions are met: + * + * • Redistributions must reproduce the above copyright notice and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * • Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * • No reverse engineering, decompilation, or disassembly of this software is + * permitted. + * + * DISCLAIMER. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * / \ No newline at end of file
--- a/source/nRF5xGap.h Mon Jan 11 10:19:04 2016 +0000
+++ b/source/nRF5xGap.h Mon Jan 11 10:19:05 2016 +0000
@@ -109,12 +109,64 @@
#endif
private:
+#ifdef YOTTA_CFG_MBED_OS
+ /*
+ * In mbed OS, all user-facing BLE events (interrupts) are posted to the
+ * MINAR scheduler to be executed as callbacks in thread mode. MINAR guards
+ * its critical sections from interrupts by acquiring CriticalSectionLock,
+ * which results in a call to sd_nvic_critical_region_enter(). Thus, it is
+ * safe to invoke MINAR APIs from interrupt context as long as those
+ * interrupts are blocked by sd_nvic_critical_region_enter().
+ *
+ * Radio notifications are a special case for the above. The Radio
+ * Notification IRQ is handled at a very high priority--higher than the
+ * level blocked by sd_nvic_critical_region_enter(). Thus Radio Notification
+ * events can preempt MINAR's critical sections. Using MINAR APIs (such as
+ * posting an event) directly in processRadioNotification() may result in a
+ * race condition ending in a hard-fault.
+ *
+ * The solution is to *not* call MINAR APIs directly from the Radio
+ * Notification handling; i.e. to do the bulk of RadioNotification
+ * processing at a reduced priority which respects MINAR's critical
+ * sections. Unfortunately, on a cortex-M0, there is no clean way to demote
+ * priority for the currently executing interrupt--we wouldn't want to
+ * demote the radio notification handling anyway because it is sensitive to
+ * timing, and the system expects to finish this handling very quickly. The
+ * workaround is to employ a Timeout to trigger
+ * postRadioNotificationCallback() after a very short delay (~0 us) and post
+ * the MINAR callback that context.
+ *
+ * !!!WARNING!!! Radio notifications are very time critical events. The
+ * current solution is expected to work under the assumption that
+ * postRadioNotificationCalback() will be executed BEFORE the next radio
+ * notification event is generated.
+ */
+
+ bool radioNotificationCallbackParam; /* parameter to be passed into the Timeout-generated radio notification callback. */
+ Timeout radioNotificationTimeout;
+
+ /*
+ * A helper function to post radio notification callbacks through MINAR when using mbed OS.
+ */
+ void postRadioNotificationCallback(void) {
+ minar::Scheduler::postCallback(
+ mbed::util::FunctionPointer1<void, bool>(&radioNotificationCallback, &FunctionPointerWithContext<bool>::call).bind(radioNotificationCallbackParam)
+ );
+ }
+#endif /* #ifdef YOTTA_CFG_MBED_OS */
+
/**
* A helper function to process radio-notification events; to be called internally.
* @param param [description]
*/
void processRadioNotificationEvent(bool param) {
+#ifdef YOTTA_CFG_MBED_OS
+ /* When using mbed OS the callback to the user-defined function will be posted through minar */
+ radioNotificationCallbackParam = param;
+ radioNotificationTimeout.attach_us(this, &nRF5xGap::postRadioNotificationCallback, 0);
+#else
radioNotificationCallback.call(param);
+#endif
}
friend void radioNotificationStaticCallback(bool param); /* allow invocations of processRadioNotificationEvent() */
--- a/source/nordic-sdk/components/libraries/bootloader_dfu/bootloader_util_arm.c Mon Jan 11 10:19:04 2016 +0000
+++ b/source/nordic-sdk/components/libraries/bootloader_dfu/bootloader_util_arm.c Mon Jan 11 10:19:05 2016 +0000
@@ -59,10 +59,10 @@
MSR MSP, R5 ; Set the main stack pointer to the applications MSP.
LDR R6, [R0, #0x04] ; Load Reset handler into register 6.
+ MOV R0, R6
LDR R2, =MASK_ZEROS ; Load zeros to R2
MRS R3, IPSR ; Load IPSR to R3 to check for handler or thread mode
CMP R2, R3 ; Compare, if 0 then we are in thread mode and can continue to reset handler of bootloader
- MOV R0, R6
BNE isr_abort ; If not zero we need to exit current ISR and jump to reset handler of bootloader
LDR R4, =MASK_ONES ; Load ones to R4 to be placed in Link Register.
@@ -98,10 +98,10 @@
"MSR MSP, r5 \n\t" /* Set the main stack pointer to the applications MSP. */
"LDR r6,[r0, #0x04] \n\t" /* Load Reset handler into register 0. */
+ "MOV R0, R6 \n\t"
"LDR r2, =MASK_ZEROS\n\t" /* Load zeros to R2 */
"MRS r3, IPSR \n\t" /* Load IPSR to R3 to check for handler or thread mode */
"CMP r2, r3 \n\t" /* Compare, if 0 then we are in thread mode and can continue to reset handler of bootloader */
- "MOV R0, R6 \n\t"
"BNE isr_abort \n\t" /* If not zero we need to exit current ISR and jump to reset handler of bootloader */
"LDR r4, =MASK_ONES \n\t" /* Load ones to R4 to be placed in Link Register. */
