Skip to content

Commit 6d0141c

Browse files
Initial commit
1 parent 17bee8d commit 6d0141c

File tree

1,154 files changed

+848
-198804
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,154 files changed

+848
-198804
lines changed

extmod/machine_i2s.c

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ typedef enum {
7272
STEREO
7373
} format_t;
7474

75+
typedef enum {
76+
LEFT,
77+
RIGHT
78+
} channel_t;
79+
7580
typedef enum {
7681
BLOCKING,
7782
NON_BLOCKING,
@@ -89,6 +94,8 @@ enum {
8994
ARG_mode,
9095
ARG_bits,
9196
ARG_format,
97+
ARG_channel,
98+
ARG_oversample,
9299
ARG_rate,
93100
ARG_ibuf,
94101
};
@@ -343,17 +350,28 @@ static void copy_appbuf_to_ringbuf_non_blocking(machine_i2s_obj_t *self) {
343350

344351
MP_NOINLINE static void machine_i2s_init_helper(machine_i2s_obj_t *self, size_t n_pos_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
345352
static const mp_arg_t allowed_args[] = {
346-
{ MP_QSTR_sck, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
347-
{ MP_QSTR_ws, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
348-
{ MP_QSTR_sd, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
353+
{ MP_QSTR_sck, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
354+
#if MICROPY_PY_MACHINE_PDM
355+
{ MP_QSTR_ws, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
356+
#else
357+
{ MP_QSTR_ws, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
358+
#endif
359+
{ MP_QSTR_sd, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
349360
#if MICROPY_PY_MACHINE_I2S_MCK
350-
{ MP_QSTR_mck, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
361+
{ MP_QSTR_mck, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
351362
#endif
352-
{ MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
353-
{ MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
354-
{ MP_QSTR_format, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
355-
{ MP_QSTR_rate, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
356-
{ MP_QSTR_ibuf, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
363+
{ MP_QSTR_mode, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
364+
{ MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
365+
{ MP_QSTR_format, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
366+
#if MICROPY_PY_MACHINE_PDM
367+
{ MP_QSTR_channel, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = LEFT} },
368+
{ MP_QSTR_oversample, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 64} },
369+
#else
370+
{ MP_QSTR_channel, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
371+
{ MP_QSTR_oversample, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -1} },
372+
#endif
373+
{ MP_QSTR_rate, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
374+
{ MP_QSTR_ibuf, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_INT, {.u_int = -1} },
357375
};
358376

359377
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
@@ -372,7 +390,10 @@ static void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
372390
"mck="MP_HAL_PIN_FMT ",\n"
373391
#endif
374392
"mode=%u,\n"
375-
"bits=%u, format=%u,\n"
393+
"bits=%u, format=%u,\n",
394+
#if MICROPY_PY_MACHINE_PDM
395+
"channel=%u,\n",
396+
#endif
376397
"rate=%d, ibuf=%d)",
377398
self->i2s_id,
378399
mp_hal_pin_name(self->sck),
@@ -383,6 +404,9 @@ static void machine_i2s_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
383404
#endif
384405
self->mode,
385406
self->bits, self->format,
407+
#if MICROPY_PY_MACHINE_PDM
408+
self->channel,
409+
#endif
386410
self->rate, self->ibuf
387411
);
388412
}
@@ -517,18 +541,31 @@ static const mp_rom_map_elem_t machine_i2s_locals_dict_table[] = {
517541
// Constants
518542
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_CONSTANT_RX) },
519543
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_CONSTANT_TX) },
544+
#if MICROPY_PY_MACHINE_PDM
545+
{ MP_ROM_QSTR(MP_QSTR_PDM_RX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_PDM_RX) },
546+
#endif
520547
{ MP_ROM_QSTR(MP_QSTR_STEREO), MP_ROM_INT(STEREO) },
521548
{ MP_ROM_QSTR(MP_QSTR_MONO), MP_ROM_INT(MONO) },
549+
{ MP_ROM_QSTR(MP_QSTR_LEFT), MP_ROM_INT(LEFT) },
550+
{ MP_ROM_QSTR(MP_QSTR_RIGHT), MP_ROM_INT(RIGHT) },
522551
};
523552
MP_DEFINE_CONST_DICT(machine_i2s_locals_dict, machine_i2s_locals_dict_table);
524553

525554
static mp_uint_t machine_i2s_stream_read(mp_obj_t self_in, void *buf_in, mp_uint_t size, int *errcode) {
526555
machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in);
527556

557+
#if MICROPY_PY_MACHINE_PDM
558+
if ((self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) &&
559+
(self->mode != MICROPY_PY_MACHINE_I2S_PDM_RX)) {
560+
*errcode = MP_EPERM;
561+
return MP_STREAM_ERROR;
562+
}
563+
#else
528564
if (self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) {
529565
*errcode = MP_EPERM;
530566
return MP_STREAM_ERROR;
531567
}
568+
#endif
532569

533570
uint8_t appbuf_sample_size_in_bytes = (self->bits / 8) * (self->format == STEREO ? 2: 1);
534571
if (size % appbuf_sample_size_in_bytes != 0) {
@@ -623,10 +660,18 @@ static mp_uint_t machine_i2s_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
623660
ret = 0;
624661

625662
if (flags & MP_STREAM_POLL_RD) {
663+
#if MICROPY_PY_MACHINE_PDM
664+
if ((self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) &&
665+
(self->mode != MICROPY_PY_MACHINE_I2S_PDM_RX)) {
666+
*errcode = MP_EPERM;
667+
return MP_STREAM_ERROR;
668+
}
669+
#else
626670
if (self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) {
627671
*errcode = MP_EPERM;
628672
return MP_STREAM_ERROR;
629673
}
674+
#endif
630675

631676
#if MICROPY_PY_MACHINE_I2S_RING_BUF
632677
if (!ringbuf_is_empty(&self->ring_buffer)) {

lib/protobuf-c

Submodule protobuf-c updated 53 files

lib/stm32lib

Submodule stm32lib updated 316 files

lib/tinyusb

Submodule tinyusb updated 1330 files

ports/alif/Makefile

Lines changed: 0 additions & 125 deletions
This file was deleted.

ports/alif/README.md

Lines changed: 0 additions & 21 deletions
This file was deleted.

0 commit comments

Comments
 (0)