summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/nrf/common-hal/neopixel_write/__init__.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/ports/nrf/common-hal/neopixel_write/__init__.c b/ports/nrf/common-hal/neopixel_write/__init__.c
index 3b67778a6..3052e908d 100644
--- a/ports/nrf/common-hal/neopixel_write/__init__.c
+++ b/ports/nrf/common-hal/neopixel_write/__init__.c
@@ -130,7 +130,17 @@ void common_hal_neopixel_write (const digitalio_digitalinout_obj_t* digitalinout
if (pattern_size <= sizeof(one_pixel)) {
pixels_pattern = (uint16_t *) one_pixel;
} else {
- pixels_pattern = (uint16_t *) m_malloc_maybe(pattern_size, false);
+ uint8_t sd_en = 0;
+ (void) sd_softdevice_is_enabled(&sd_en);
+ if (sd_en) {
+ // If the soft device is enabled then we must use PWM to
+ // transmit. This takes a bunch of memory to do so raise an
+ // exception if we can't.
+ pixels_pattern = (uint16_t *) m_malloc(pattern_size, false);
+ } else {
+ pixels_pattern = (uint16_t *) m_malloc_maybe(pattern_size, false);
+ }
+
pattern_on_heap = true;
}
}