kopia lustrzana https://github.com/micropython/micropython
extmod/machine_i2s: Prepare methods for PDM RX mode.
Signed-off-by: maple "mavica" syrup <maple@maple.pet>pull/14176/head
rodzic
51d05c442a
commit
ec24a150e0
|
@ -344,7 +344,11 @@ static void copy_appbuf_to_ringbuf_non_blocking(machine_i2s_obj_t *self) {
|
|||
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) {
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_sck, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
#if MICROPY_PY_MACHINE_PDM
|
||||
{ MP_QSTR_ws, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
|
||||
#else
|
||||
{ MP_QSTR_ws, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
#endif
|
||||
{ MP_QSTR_sd, MP_ARG_KW_ONLY | MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
#if MICROPY_PY_MACHINE_I2S_MCK
|
||||
{ MP_QSTR_mck, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
|
||||
|
@ -517,6 +521,9 @@ static const mp_rom_map_elem_t machine_i2s_locals_dict_table[] = {
|
|||
// Constants
|
||||
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_CONSTANT_RX) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_CONSTANT_TX) },
|
||||
#if MICROPY_PY_MACHINE_PDM
|
||||
{ MP_ROM_QSTR(MP_QSTR_PDM_RX), MP_ROM_INT(MICROPY_PY_MACHINE_I2S_PDM_RX) },
|
||||
#endif
|
||||
{ MP_ROM_QSTR(MP_QSTR_STEREO), MP_ROM_INT(STEREO) },
|
||||
{ MP_ROM_QSTR(MP_QSTR_MONO), MP_ROM_INT(MONO) },
|
||||
};
|
||||
|
@ -525,10 +532,18 @@ MP_DEFINE_CONST_DICT(machine_i2s_locals_dict, machine_i2s_locals_dict_table);
|
|||
static mp_uint_t machine_i2s_stream_read(mp_obj_t self_in, void *buf_in, mp_uint_t size, int *errcode) {
|
||||
machine_i2s_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
|
||||
#if MICROPY_PY_MACHINE_PDM
|
||||
if ((self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) &&
|
||||
(self->mode != MICROPY_PY_MACHINE_I2S_PDM_RX)) {
|
||||
*errcode = MP_EPERM;
|
||||
return MP_STREAM_ERROR;
|
||||
}
|
||||
#else
|
||||
if (self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) {
|
||||
*errcode = MP_EPERM;
|
||||
return MP_STREAM_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
uint8_t appbuf_sample_size_in_bytes = (self->bits / 8) * (self->format == STEREO ? 2: 1);
|
||||
if (size % appbuf_sample_size_in_bytes != 0) {
|
||||
|
@ -623,10 +638,18 @@ static mp_uint_t machine_i2s_ioctl(mp_obj_t self_in, mp_uint_t request, uintptr_
|
|||
ret = 0;
|
||||
|
||||
if (flags & MP_STREAM_POLL_RD) {
|
||||
#if MICROPY_PY_MACHINE_PDM
|
||||
if ((self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) &&
|
||||
(self->mode != MICROPY_PY_MACHINE_I2S_PDM_RX)) {
|
||||
*errcode = MP_EPERM;
|
||||
return MP_STREAM_ERROR;
|
||||
}
|
||||
#else
|
||||
if (self->mode != MICROPY_PY_MACHINE_I2S_CONSTANT_RX) {
|
||||
*errcode = MP_EPERM;
|
||||
return MP_STREAM_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if MICROPY_PY_MACHINE_I2S_RING_BUF
|
||||
if (!ringbuf_is_empty(&self->ring_buffer)) {
|
||||
|
|
Ładowanie…
Reference in New Issue