summaryrefslogtreecommitdiff
path: root/ports
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2020-04-21 17:37:22 -0400
committerDan Halbert <halbert@halwitz.org>2020-04-21 17:38:20 -0400
commit38ec3bc57476c6fde45cd7d722370a5408fd8e10 (patch)
treebea75dc24a3f94c14e564cb885af3fde87f9c033 /ports
parent1a71c8c51577cc7014d5db1c05084778c0b977e9 (diff)
further ringbuf cleanup
Diffstat (limited to 'ports')
-rw-r--r--ports/mimxrt10xx/common-hal/busio/UART.c2
-rw-r--r--ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk1
-rw-r--r--ports/nrf/common-hal/_bleio/CharacteristicBuffer.c19
-rw-r--r--ports/nrf/common-hal/_bleio/PacketBuffer.c22
-rw-r--r--ports/nrf/common-hal/busio/UART.c13
-rw-r--r--ports/nrf/mpconfigport.mk12
-rw-r--r--ports/stm/common-hal/busio/UART.c12
7 files changed, 41 insertions, 40 deletions
diff --git a/ports/mimxrt10xx/common-hal/busio/UART.c b/ports/mimxrt10xx/common-hal/busio/UART.c
index 4633507d8..399f12e70 100644
--- a/ports/mimxrt10xx/common-hal/busio/UART.c
+++ b/ports/mimxrt10xx/common-hal/busio/UART.c
@@ -206,6 +206,8 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self,
}
LPUART_TransferCreateHandle(self->uart, &self->handle, LPUART_UserCallback, self);
+ // Pass actual allocated size; the LPUART routines are cognizant that
+ // the capacity is one less than the size.
LPUART_TransferStartRingBuffer(self->uart, &self->handle, self->rbuf.buf, self->rbuf.size);
claim_pin(self->rx_pin->pin);
diff --git a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
index f63554e5e..38c993334 100644
--- a/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
+++ b/ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.mk
@@ -11,7 +11,6 @@ EXTERNAL_FLASH_DEVICES = "GD25Q16C"
# Allocate two, not just one I2C peripheral for CPB, so that we have both
# on-board and off-board I2C available.
-# When SPIM3 becomes available we'll be able to have two I2C and two SPI peripherals.
# We use a CFLAGS define here because there are include order issues
# if we try to include "mpconfigport.h" into nrfx_config.h .
CFLAGS += -DCIRCUITPY_NRF_NUM_I2C=2
diff --git a/ports/nrf/common-hal/_bleio/CharacteristicBuffer.c b/ports/nrf/common-hal/_bleio/CharacteristicBuffer.c
index 9f9b453de..12fd73670 100644
--- a/ports/nrf/common-hal/_bleio/CharacteristicBuffer.c
+++ b/ports/nrf/common-hal/_bleio/CharacteristicBuffer.c
@@ -42,13 +42,11 @@
#include "supervisor/shared/tick.h"
#include "common-hal/_bleio/CharacteristicBuffer.h"
+// Push all the data onto the ring buffer. When the buffer is full, new bytes will be dropped.
STATIC void write_to_ringbuf(bleio_characteristic_buffer_obj_t *self, uint8_t *data, uint16_t len) {
- // Push all the data onto the ring buffer.
uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region);
- for (size_t i = 0; i < len; i++) {
- ringbuf_put(&self->ringbuf, data[i]);
- }
+ ringbuf_put_n(&self->ringbuf, data, len);
sd_nvic_critical_region_exit(is_nested_critical_region);
}
@@ -100,11 +98,11 @@ void common_hal_bleio_characteristic_buffer_construct(bleio_characteristic_buffe
}
-int common_hal_bleio_characteristic_buffer_read(bleio_characteristic_buffer_obj_t *self, uint8_t *data, size_t len, int *errcode) {
+uint32_t common_hal_bleio_characteristic_buffer_read(bleio_characteristic_buffer_obj_t *self, uint8_t *data, size_t len, int *errcode) {
uint64_t start_ticks = supervisor_ticks_ms64();
// Wait for all bytes received or timeout
- while ( (ringbuf_count(&self->ringbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
+ while ( (ringbuf_avail(&self->ringbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
RUN_BACKGROUND_TASKS;
// Allow user to break out of a timeout with a KeyboardInterrupt.
if ( mp_hal_is_interrupted() ) {
@@ -116,21 +114,18 @@ int common_hal_bleio_characteristic_buffer_read(bleio_characteristic_buffer_obj_
uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region);
- size_t rx_bytes = MIN(ringbuf_count(&self->ringbuf), len);
- for ( size_t i = 0; i < rx_bytes; i++ ) {
- data[i] = ringbuf_get(&self->ringbuf);
- }
+ uint32_t num_bytes_read = ringbuf_get_n(&self->ringbuf, data, len);
// Writes now OK.
sd_nvic_critical_region_exit(is_nested_critical_region);
- return rx_bytes;
+ return num_bytes_read;
}
uint32_t common_hal_bleio_characteristic_buffer_rx_characters_available(bleio_characteristic_buffer_obj_t *self) {
uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region);
- uint16_t count = ringbuf_count(&self->ringbuf);
+ uint16_t count = ringbuf_avail(&self->ringbuf);
sd_nvic_critical_region_exit(is_nested_critical_region);
return count;
}
diff --git a/ports/nrf/common-hal/_bleio/PacketBuffer.c b/ports/nrf/common-hal/_bleio/PacketBuffer.c
index 6ed6d1451..269853219 100644
--- a/ports/nrf/common-hal/_bleio/PacketBuffer.c
+++ b/ports/nrf/common-hal/_bleio/PacketBuffer.c
@@ -43,7 +43,7 @@
#include "supervisor/shared/tick.h"
STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uint16_t len) {
- if (len + sizeof(uint16_t) > self->ringbuf.size) {
+ if (len + sizeof(uint16_t) > ringbuf_capacity(&self->ringbuf)) {
// This shouldn't happen.
return;
}
@@ -51,7 +51,7 @@ STATIC void write_to_ringbuf(bleio_packet_buffer_obj_t *self, uint8_t *data, uin
uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region);
// Make room for the new value by dropping the oldest packets first.
- while (self->ringbuf.size - ringbuf_count(&self->ringbuf) < (int) (len + sizeof(uint16_t))) {
+ while (ringbuf_capacity(&self->ringbuf) - ringbuf_avail(&self->ringbuf) < len + sizeof(uint16_t)) {
uint16_t packet_length;
ringbuf_get_n(&self->ringbuf, (uint8_t*) &packet_length, sizeof(uint16_t));
for (uint16_t i = 0; i < packet_length; i++) {
@@ -250,27 +250,33 @@ void common_hal_bleio_packet_buffer_construct(
}
int common_hal_bleio_packet_buffer_readinto(bleio_packet_buffer_obj_t *self, uint8_t *data, size_t len) {
- if (ringbuf_count(&self->ringbuf) < 2) {
+ if (ringbuf_avail(&self->ringbuf) < 2) {
return 0;
}
uint16_t packet_length;
- ringbuf_get_n(&self->ringbuf, (uint8_t*) &packet_length, sizeof(uint16_t));
+ int ret;
// Copy received data. Lock out write interrupt handler while copying.
uint8_t is_nested_critical_region;
sd_nvic_critical_region_enter(&is_nested_critical_region);
+ // Get packet length first.
+ ringbuf_get_n(&self->ringbuf, (uint8_t*) &packet_length, sizeof(uint16_t));
+
if (packet_length > len) {
- return len - packet_length;
+ // Packet is longer than requested. Return negative of overrun value.
+ ret = len - packet_length;
+ } else {
+ // Read as much as possible, but might be shorter than len.
+ ringbuf_get_n(&self->ringbuf, data, packet_length);
+ ret = packet_length;
}
- ringbuf_get_n(&self->ringbuf, data, packet_length);
-
// Writes now OK.
sd_nvic_critical_region_exit(is_nested_critical_region);
- return packet_length;
+ return ret;
}
void common_hal_bleio_packet_buffer_write(bleio_packet_buffer_obj_t *self, uint8_t *data, size_t len, uint8_t* header, size_t header_len) {
diff --git a/ports/nrf/common-hal/busio/UART.c b/ports/nrf/common-hal/busio/UART.c
index 4a3e74c49..43f155ca8 100644
--- a/ports/nrf/common-hal/busio/UART.c
+++ b/ports/nrf/common-hal/busio/UART.c
@@ -240,11 +240,10 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
mp_raise_ValueError(translate("No RX pin"));
}
- size_t rx_bytes = 0;
uint64_t start_ticks = supervisor_ticks_ms64();
// Wait for all bytes received or timeout
- while ( (ringbuf_count(&self->rbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
+ while ( (ringbuf_avail(&self->rbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
RUN_BACKGROUND_TASKS;
// Allow user to break out of a timeout with a KeyboardInterrupt.
if ( mp_hal_is_interrupted() ) {
@@ -255,12 +254,8 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
// prevent conflict with uart irq
NVIC_DisableIRQ(nrfx_get_irq_number(self->uarte->p_reg));
- // copy received data
- rx_bytes = ringbuf_count(&self->rbuf);
- rx_bytes = MIN(rx_bytes, len);
- for ( uint16_t i = 0; i < rx_bytes; i++ ) {
- data[i] = ringbuf_get(&self->rbuf);
- }
+ // Copy as much received data as available, up to len bytes.
+ size_t rx_bytes = ringbuf_get_n(&self->rbuf, data, len);
NVIC_EnableIRQ(nrfx_get_irq_number(self->uarte->p_reg));
@@ -317,7 +312,7 @@ void common_hal_busio_uart_set_timeout(busio_uart_obj_t *self, mp_float_t timeou
}
uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t *self) {
- return ringbuf_count(&self->rbuf);
+ return ringbuf_avail(&self->rbuf);
}
void common_hal_busio_uart_clear_rx_buffer(busio_uart_obj_t *self) {
diff --git a/ports/nrf/mpconfigport.mk b/ports/nrf/mpconfigport.mk
index 5ca1f0f35..186867fb0 100644
--- a/ports/nrf/mpconfigport.mk
+++ b/ports/nrf/mpconfigport.mk
@@ -24,7 +24,7 @@ CIRCUITPY_AUDIOIO = 0
# The ifndef's allow overriding in mpconfigboard.mk.
-ifndef
+ifndef CIRCUITPY_BLEIO
CIRCUITPY_BLEIO = 1
endif
@@ -51,8 +51,17 @@ endif
# frequencyio not yet implemented
CIRCUITPY_FREQUENCYIO = 0
+ifndef CIRCUITPY_PROTOMATTER
CIRCUITPY_PROTOMATTER = 1
+endif
+
+ifndef CIRCUITPY_FRAMEBUFFERIO
CIRCUITPY_FRAMEBUFFERIO = 1
+endif
+
+ifndef CIRCUITPY_ULAB
+CIRCUITPY_ULAB = 1
+endif
# nRF52840-specific
@@ -72,5 +81,4 @@ NRF_DEFINES += -DNRF52840_XXAA -DNRF52840
# Defined here because system_nrf52840.c doesn't #include any of our own include files.
CFLAGS += -DCONFIG_NFCT_PINS_AS_GPIOS
-CIRCUITPY_ULAB = 1
endif
diff --git a/ports/stm/common-hal/busio/UART.c b/ports/stm/common-hal/busio/UART.c
index cb5460c68..d1ee146f1 100644
--- a/ports/stm/common-hal/busio/UART.c
+++ b/ports/stm/common-hal/busio/UART.c
@@ -262,7 +262,7 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
uint64_t start_ticks = supervisor_ticks_ms64();
// Wait for all bytes received or timeout, same as nrf
- while ( (ringbuf_count(&self->rbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
+ while ( (ringbuf_avail(&self->rbuf) < len) && (supervisor_ticks_ms64() - start_ticks < self->timeout_ms) ) {
RUN_BACKGROUND_TASKS;
//restart if it failed in the callback
if (errflag != HAL_OK) {
@@ -276,12 +276,8 @@ size_t common_hal_busio_uart_read(busio_uart_obj_t *self, uint8_t *data, size_t
// Halt reception
HAL_NVIC_DisableIRQ(self->irq);
- // copy received data
- rx_bytes = ringbuf_count(&self->rbuf);
- rx_bytes = MIN(rx_bytes, len);
- for (uint16_t i = 0; i < rx_bytes; i++) {
- data[i] = ringbuf_get(&self->rbuf);
- }
+ // Copy as much received data as available, up to len bytes.
+ size_t rx_bytes = ringbuf_get_n(&self->rbuf, data, len);
HAL_NVIC_EnableIRQ(self->irq);
if (rx_bytes == 0) {
@@ -380,7 +376,7 @@ void common_hal_busio_uart_set_timeout(busio_uart_obj_t *self, mp_float_t timeou
}
uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t *self) {
- return ringbuf_count(&self->rbuf);
+ return ringbuf_avail(&self->rbuf);
}
void common_hal_busio_uart_clear_rx_buffer(busio_uart_obj_t *self) {