Skip to content

Commit 13e17e6

Browse files
committed
Make synthio debuggable in unix coverage port
1 parent db1e01c commit 13e17e6

7 files changed

Lines changed: 76 additions & 7 deletions

File tree

ports/unix/variants/coverage/mpconfigvariant.mk

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,23 @@ SRC_BITMAP := \
3030
displayio_min.c \
3131
shared-bindings/aesio/aes.c \
3232
shared-bindings/aesio/__init__.c \
33+
shared-bindings/audiocore/__init__.c \
34+
shared-bindings/audiocore/RawSample.c \
35+
shared-bindings/audiocore/WaveFile.c \
3336
shared-bindings/bitmaptools/__init__.c \
3437
shared-bindings/displayio/Bitmap.c \
3538
shared-bindings/rainbowio/__init__.c \
3639
shared-bindings/struct/__init__.c \
40+
shared-bindings/synthio/__init__.c \
41+
shared-bindings/synthio/MidiTrack.c \
3742
shared-bindings/traceback/__init__.c \
3843
shared-bindings/util.c \
3944
shared-bindings/zlib/__init__.c \
4045
shared-module/aesio/aes.c \
4146
shared-module/aesio/__init__.c \
47+
shared-module/audiocore/__init__.c \
48+
shared-module/audiocore/RawSample.c \
49+
shared-module/audiocore/WaveFile.c \
4250
shared-module/bitmaptools/__init__.c \
4351
shared-module/displayio/area.c \
4452
shared-module/displayio/Bitmap.c \
@@ -47,19 +55,25 @@ SRC_BITMAP := \
4755
shared-module/os/getenv.c \
4856
shared-module/rainbowio/__init__.c \
4957
shared-module/struct/__init__.c \
58+
shared-module/synthio/__init__.c \
59+
shared-module/synthio/MidiTrack.c \
5060
shared-module/traceback/__init__.c \
5161
shared-module/zlib/__init__.c \
5262

5363
SRC_C += $(SRC_BITMAP)
5464

5565
CFLAGS += \
5666
-DCIRCUITPY_AESIO=1 \
67+
-DCIRCUITPY_AUDIOCORE=1 \
68+
-DCIRCUITPY_AUDIOCORE_DEBUG=1 \
5769
-DCIRCUITPY_BITMAPTOOLS=1 \
5870
-DCIRCUITPY_DISPLAYIO_UNIX=1 \
59-
-DCIRCUITPY_OS_GETENV=1 \
6071
-DCIRCUITPY_GIFIO=1 \
72+
-DCIRCUITPY_OS_GETENV=1 \
6173
-DCIRCUITPY_RAINBOWIO=1 \
6274
-DCIRCUITPY_STRUCT=1 \
75+
-DCIRCUITPY_SYNTHIO=1 \
76+
-DCIRCUITPY_SYNTHIO_MAX_CHANNELS=14 \
6377
-DCIRCUITPY_TRACEBACK=1 \
6478
-DCIRCUITPY_ZLIB=1
6579

py/circuitpy_mpconfig.mk

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ CFLAGS += -DCIRCUITPY_AUDIOCORE=$(CIRCUITPY_AUDIOCORE)
107107
CIRCUITPY_AUDIOMIXER ?= $(CIRCUITPY_AUDIOIO)
108108
CFLAGS += -DCIRCUITPY_AUDIOMIXER=$(CIRCUITPY_AUDIOMIXER)
109109

110+
ifndef CIRCUITPY_AUDIOCORE_DEBUG
111+
CIRCUITPY_AUDIOCORE_DEBUG ?= 0
112+
endif
113+
CFLAGS += -DCIRCUITPY_AUDIOCORE_DEBUG=$(CIRCUITPY_AUDIOCORE_DEBUG)
114+
110115
ifndef CIRCUITPY_AUDIOMP3
111116
ifeq ($(CIRCUITPY_FULL_BUILD),1)
112117
CIRCUITPY_AUDIOMP3 = $(CIRCUITPY_AUDIOCORE)

shared-bindings/audiocore/WaveFile.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "shared-bindings/audiocore/WaveFile.h"
3333
#include "shared-bindings/util.h"
3434
#include "supervisor/shared/translate/translate.h"
35+
#include "extmod/vfs_posix.h"
3536

3637
//| class WaveFile:
3738
//| """Load a wave file for audio playback

shared-bindings/audiocore/__init__.c

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,64 @@
2929
#include "py/obj.h"
3030
#include "py/runtime.h"
3131

32-
#include "shared-bindings/microcontroller/Pin.h"
3332
#include "shared-bindings/audiocore/__init__.h"
3433
#include "shared-bindings/audiocore/RawSample.h"
3534
#include "shared-bindings/audiocore/WaveFile.h"
3635
// #include "shared-bindings/audiomixer/Mixer.h"
3736

3837
//| """Support for audio samples"""
3938

39+
#if CIRCUITPY_AUDIOCORE_DEBUG
40+
// (no docstrings so that the debug functions are not shown on docs.circuitpython.org)
41+
STATIC mp_obj_t audiocore_get_buffer(mp_obj_t sample_in) {
42+
uint8_t *buffer = NULL;
43+
uint32_t buffer_length = 0;
44+
audioio_get_buffer_result_t gbr = audiosample_get_buffer(sample_in, false, 0, &buffer, &buffer_length);
45+
46+
mp_obj_t result[2] = {mp_obj_new_int_from_uint(gbr), mp_const_none};
47+
48+
if (gbr != GET_BUFFER_ERROR) {
49+
// copies the data because the gc semantics of get_buffer are unclear
50+
result[1] = mp_obj_new_bytes(buffer, buffer_length);
51+
}
52+
53+
return mp_obj_new_tuple(2, result);
54+
}
55+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(audiocore_get_buffer_obj, audiocore_get_buffer);
56+
57+
STATIC mp_obj_t audiocore_get_structure(mp_obj_t sample_in) {
58+
bool single_buffer, samples_signed;
59+
uint32_t max_buffer_length;
60+
uint8_t spacing;
61+
62+
audiosample_get_buffer_structure(sample_in, false, &single_buffer, &samples_signed, &max_buffer_length, &spacing);
63+
mp_obj_t result[4] = {
64+
mp_obj_new_int_from_uint(single_buffer),
65+
mp_obj_new_int_from_uint(samples_signed),
66+
mp_obj_new_int_from_uint(max_buffer_length),
67+
mp_obj_new_int_from_uint(spacing),
68+
};
69+
return mp_obj_new_tuple(4, result);
70+
}
71+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(audiocore_get_structure_obj, audiocore_get_structure);
72+
73+
STATIC mp_obj_t audiocore_reset_buffer(mp_obj_t sample_in) {
74+
audiosample_reset_buffer(sample_in, false, 0);
75+
return mp_const_none;
76+
}
77+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(audiocore_reset_buffer_obj, audiocore_reset_buffer);
78+
79+
#endif
80+
4081
STATIC const mp_rom_map_elem_t audiocore_module_globals_table[] = {
4182
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_audiocore) },
4283
{ MP_ROM_QSTR(MP_QSTR_RawSample), MP_ROM_PTR(&audioio_rawsample_type) },
4384
{ MP_ROM_QSTR(MP_QSTR_WaveFile), MP_ROM_PTR(&audioio_wavefile_type) },
85+
#if CIRCUITPY_AUDIOCORE_DEBUG
86+
{ MP_ROM_QSTR(MP_QSTR_get_buffer), MP_ROM_PTR(&audiocore_get_buffer_obj) },
87+
{ MP_ROM_QSTR(MP_QSTR_reset_buffer), MP_ROM_PTR(&audiocore_reset_buffer_obj) },
88+
{ MP_ROM_QSTR(MP_QSTR_get_structure), MP_ROM_PTR(&audiocore_get_structure_obj) },
89+
#endif
4490
};
4591

4692
STATIC MP_DEFINE_CONST_DICT(audiocore_module_globals, audiocore_module_globals_table);

shared-bindings/audiomixer/Mixer.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOMIXER_MIXER_H
2828
#define MICROPY_INCLUDED_SHARED_BINDINGS_AUDIOMIXER_MIXER_H
2929

30-
#include "common-hal/microcontroller/Pin.h"
3130
#include "shared-module/audiomixer/Mixer.h"
3231
#include "shared-bindings/audiocore/RawSample.h"
3332

shared-bindings/synthio/__init__.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include "py/obj.h"
3131
#include "py/runtime.h"
3232
#include "extmod/vfs_fat.h"
33+
#include "extmod/vfs_posix.h"
3334

3435
#include "shared-bindings/synthio/__init__.h"
3536
#include "shared-bindings/synthio/MidiTrack.h"
@@ -115,7 +116,11 @@ STATIC mp_obj_t synthio_from_file(size_t n_args, const mp_obj_t *pos_args, mp_ma
115116
common_hal_synthio_miditrack_construct(result, buffer, track_size,
116117
tempo, args[ARG_sample_rate].u_int);
117118

119+
#if MICROPY_MALLOC_USES_ALLOCATED_SIZE
120+
m_free(buffer, track_size);
121+
#else
118122
m_free(buffer);
123+
#endif
119124

120125
return MP_OBJ_FROM_PTR(result);
121126
}

shared-module/synthio/MidiTrack.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ STATIC void terminate_span(synthio_miditrack_obj_t *self, uint16_t *dur) {
5757
}
5858

5959
STATIC void add_span(synthio_miditrack_obj_t *self, const synthio_midi_span_t *span) {
60-
self->track = m_realloc(self->track,
61-
(self->total_spans + 1) * sizeof(synthio_midi_span_t));
60+
self->track = m_renew(synthio_midi_span_t, self->track, self->total_spans, self->total_spans + 1);
6261
self->track[self->total_spans++] = *span;
6362
}
6463

@@ -151,9 +150,9 @@ void common_hal_synthio_miditrack_construct(synthio_miditrack_obj_t *self,
151150
}
152151

153152
void common_hal_synthio_miditrack_deinit(synthio_miditrack_obj_t *self) {
154-
m_free(self->buffer);
153+
m_del(uint8_t, self->buffer, self->buffer_length);
155154
self->buffer = NULL;
156-
m_free(self->track);
155+
m_del(synthio_midi_span_t, self->track, self->total_spans + 1);
157156
self->track = NULL;
158157
}
159158
bool common_hal_synthio_miditrack_deinited(synthio_miditrack_obj_t *self) {

0 commit comments

Comments
 (0)