From 19d122e546016f02b4315a5b4a35a3e6884e127f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 25 Nov 2019 09:07:20 -0600 Subject: nrf: i2sout: Fix double-increment when copying samples This caused two problems when playing unsigned samples: * When an even number of samples were present, it "worked" but only every other sample was copied into the output, changing the waveform * When an odd number of samples were present, the copy continued beyond the end of the buffers and caused a hard fault --- ports/nrf/common-hal/audiobusio/I2SOut.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/nrf/common-hal/audiobusio/I2SOut.c b/ports/nrf/common-hal/audiobusio/I2SOut.c index ac369277f..b8d7ec8a2 100644 --- a/ports/nrf/common-hal/audiobusio/I2SOut.c +++ b/ports/nrf/common-hal/audiobusio/I2SOut.c @@ -139,14 +139,14 @@ static void i2s_buffer_fill(audiobusio_i2sout_obj_t* self) { uint16_t *bp = (uint16_t*)buffer; uint16_t *be = (uint16_t*)(buffer + bytecount); uint16_t *sp = (uint16_t*)self->sample_data; - for (; bp != be; bp++) { + for (; bp != be;) { *bp++ = *sp++ + 0x8000; } } else { uint8_t *bp = (uint8_t*)buffer; uint8_t *be = (uint8_t*)(buffer + bytecount); uint8_t *sp = (uint8_t*)self->sample_data; - for (; bp != be; bp++) { + for (; bp != be;) { *bp++ = *sp++ + 0x80; } } -- cgit v1.2.3 From c9946dfd63c642fc5378b222b33171f5607fc324 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Mon, 25 Nov 2019 09:17:02 -0600 Subject: nrf: i2sout: Use <, not !=, for loop condition This is good C style, h/t @danh --- ports/nrf/common-hal/audiobusio/I2SOut.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ports/nrf/common-hal/audiobusio/I2SOut.c b/ports/nrf/common-hal/audiobusio/I2SOut.c index b8d7ec8a2..04c415196 100644 --- a/ports/nrf/common-hal/audiobusio/I2SOut.c +++ b/ports/nrf/common-hal/audiobusio/I2SOut.c @@ -139,14 +139,14 @@ static void i2s_buffer_fill(audiobusio_i2sout_obj_t* self) { uint16_t *bp = (uint16_t*)buffer; uint16_t *be = (uint16_t*)(buffer + bytecount); uint16_t *sp = (uint16_t*)self->sample_data; - for (; bp != be;) { + for (; bp < be;) { *bp++ = *sp++ + 0x8000; } } else { uint8_t *bp = (uint8_t*)buffer; uint8_t *be = (uint8_t*)(buffer + bytecount); uint8_t *sp = (uint8_t*)self->sample_data; - for (; bp != be;) { + for (; bp < be;) { *bp++ = *sp++ + 0x80; } } -- cgit v1.2.3