From 91bbf5366210c913e2f25c065aee936b94ab0914 Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Fri, 18 Mar 2022 12:29:04 +0000 Subject: [PATCH] PMW3901, PAA5100: Construct correct class for secret sauce. --- .../breakout_pmw3901/breakout_pmw3901.cpp | 34 +++++++++++++++++-- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/micropython/modules/breakout_pmw3901/breakout_pmw3901.cpp b/micropython/modules/breakout_pmw3901/breakout_pmw3901.cpp index 733cb7d1..9b5ff27b 100644 --- a/micropython/modules/breakout_pmw3901/breakout_pmw3901.cpp +++ b/micropython/modules/breakout_pmw3901/breakout_pmw3901.cpp @@ -1,4 +1,5 @@ #include "libraries/breakout_pmw3901/breakout_pmw3901.hpp" +#include "libraries/breakout_paa5100/breakout_paa5100.hpp" #define MP_OBJ_TO_PTR2(o, t) ((t *)(uintptr_t)(o)) @@ -82,7 +83,21 @@ mp_obj_t make_new(enum ChipType chip, const mp_obj_type_t *type, size_t n_args, self = m_new_obj_with_finaliser(breakout_pmw3901_BreakoutPMW3901_obj_t); self->base.type = &breakout_pmw3901_BreakoutPMW3901_type; - self->breakout = new BreakoutPMW3901((BG_SPI_SLOT)slot); + if(chip == ChipType::PMW3901) { + BreakoutPMW3901 *breakout = new BreakoutPMW3901((BG_SPI_SLOT)slot); + if (!breakout->init()) { + delete breakout; + mp_raise_msg(&mp_type_RuntimeError, "BreakoutPMW3901: Init failed"); + } + self->breakout = breakout; + } else { + BreakoutPAA5100 *breakout = new BreakoutPAA5100((BG_SPI_SLOT)slot); + if (!breakout->init()) { + delete breakout; + mp_raise_msg(&mp_type_RuntimeError, "BreakoutPAA5100: Init failed"); + } + self->breakout = breakout; + } } else { mp_raise_ValueError("slot not a valid value. Expected 0 to 1"); @@ -132,11 +147,24 @@ mp_obj_t make_new(enum ChipType chip, const mp_obj_type_t *type, size_t n_args, self->base.type = &breakout_pmw3901_BreakoutPMW3901_type; spi_inst_t *spi = (spi_id == 0) ? spi0 : spi1; - self->breakout = new BreakoutPMW3901(spi, args[ARG_cs].u_int, sck, mosi, miso, args[ARG_interrupt].u_int); + if(chip == ChipType::PMW3901) { + BreakoutPMW3901 *breakout = new BreakoutPMW3901(spi, args[ARG_cs].u_int, sck, mosi, miso, args[ARG_interrupt].u_int); + if (!breakout->init()) { + delete breakout; + mp_raise_msg(&mp_type_RuntimeError, "BreakoutPMW3901: Init failed"); + } + self->breakout = breakout; + } else { + BreakoutPAA5100 *breakout = new BreakoutPAA5100(spi, args[ARG_cs].u_int, sck, mosi, miso, args[ARG_interrupt].u_int); + if (!breakout->init()) { + delete breakout; + mp_raise_msg(&mp_type_RuntimeError, "BreakoutPAA5100: Init failed"); + } + self->breakout = breakout; + } } self->chip = chip; - self->breakout->init(); return MP_OBJ_FROM_PTR(self); }