summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjerryneedell <jerryneedell@gmail.com>2021-01-04 07:41:25 -0500
committerjerryneedell <jerryneedell@gmail.com>2021-01-04 07:41:25 -0500
commitec02102409b3935d0efa6c6f132b7f38c414ff03 (patch)
tree624e0747f3158be6e87600270bd9c8eb40749043
parentdcf88e1e91e26538133b353c9fbdbb4121616e7a (diff)
implment use of DotStar for staus led
-rw-r--r--ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h4
-rw-r--r--ports/esp32s2/common-hal/microcontroller/Pin.c43
-rw-r--r--ports/esp32s2/common-hal/microcontroller/Pin.h4
3 files changed, 45 insertions, 6 deletions
diff --git a/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h b/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h
index e100ac118..6b1a0c4aa 100644
--- a/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h
+++ b/ports/esp32s2/boards/unexpectedmaker_feathers2/mpconfigboard.h
@@ -34,8 +34,8 @@
#define AUTORESET_DELAY_MS 500
-// #define MICROPY_HW_APA102_MOSI (&pin_GPIO40)
-// #define MICROPY_HW_APA102_SCK (&pin_GPIO45)
+#define MICROPY_HW_APA102_MOSI (&pin_GPIO40)
+#define MICROPY_HW_APA102_SCK (&pin_GPIO45)
#define DEFAULT_I2C_BUS_SCL (&pin_GPIO9)
#define DEFAULT_I2C_BUS_SDA (&pin_GPIO8)
diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.c b/ports/esp32s2/common-hal/microcontroller/Pin.c
index fca89ce8e..fd01d68e1 100644
--- a/ports/esp32s2/common-hal/microcontroller/Pin.c
+++ b/ports/esp32s2/common-hal/microcontroller/Pin.c
@@ -37,13 +37,14 @@
#ifdef MICROPY_HW_NEOPIXEL
bool neopixel_in_use;
#endif
+#ifdef MICROPY_HW_APA102_MOSI
+bool apa102_sck_in_use;
+bool apa102_mosi_in_use;
+#endif
STATIC uint32_t never_reset_pins[2];
STATIC uint32_t in_use[2];
-bool apa102_mosi_in_use;
-bool apa102_sck_in_use;
-
STATIC void floating_gpio_reset(gpio_num_t pin_number) {
// This is the same as gpio_reset_pin(), but without the pullup.
// Note that gpio_config resets the iomatrix to GPIO_FUNC as well.
@@ -86,6 +87,20 @@ void reset_pin_number(gpio_num_t pin_number) {
return;
}
#endif
+ #ifdef MICROPY_HW_APA102_MOSI
+ if (pin_number == MICROPY_HW_APA102_MOSI->number ||
+ pin_number == MICROPY_HW_APA102_SCK->number) {
+ apa102_mosi_in_use = apa102_mosi_in_use && pin_number != MICROPY_HW_APA102_MOSI->number;
+ apa102_sck_in_use = apa102_sck_in_use && pin_number != MICROPY_HW_APA102_SCK->number;
+ if (!apa102_sck_in_use && !apa102_mosi_in_use) {
+ rgb_led_status_init();
+ }
+ return;
+ }
+ #endif
+
+
+
}
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
@@ -110,6 +125,11 @@ void reset_all_pins(void) {
#ifdef MICROPY_HW_NEOPIXEL
neopixel_in_use = false;
#endif
+ #ifdef MICROPY_HW_APA102_MOSI
+ apa102_sck_in_use = false;
+ apa102_mosi_in_use = false;
+ #endif
+
}
void claim_pin(const mcu_pin_obj_t* pin) {
@@ -119,6 +139,15 @@ void claim_pin(const mcu_pin_obj_t* pin) {
neopixel_in_use = true;
}
#endif
+ #ifdef MICROPY_HW_APA102_MOSI
+ if (pin == MICROPY_HW_APA102_MOSI) {
+ apa102_mosi_in_use = true;
+ }
+ if (pin == MICROPY_HW_APA102_SCK) {
+ apa102_sck_in_use = true;
+ }
+ #endif
+
}
void common_hal_mcu_pin_claim(const mcu_pin_obj_t* pin) {
@@ -131,6 +160,14 @@ bool pin_number_is_free(gpio_num_t pin_number) {
return !neopixel_in_use;
}
#endif
+ #ifdef MICROPY_HW_APA102_MOSI
+ if (pin_number == MICROPY_HW_APA102_MOSI->number) {
+ return !apa102_mosi_in_use;
+ }
+ if (pin_number == MICROPY_HW_APA102_SCK->number) {
+ return !apa102_sck_in_use;
+ }
+ #endif
uint8_t offset = pin_number / 32;
uint32_t mask = 1 << (pin_number % 32);
diff --git a/ports/esp32s2/common-hal/microcontroller/Pin.h b/ports/esp32s2/common-hal/microcontroller/Pin.h
index f6c008703..65f57a82d 100644
--- a/ports/esp32s2/common-hal/microcontroller/Pin.h
+++ b/ports/esp32s2/common-hal/microcontroller/Pin.h
@@ -31,8 +31,10 @@
#include "peripherals/pins.h"
-extern bool apa102_mosi_in_use;
+#ifdef MICROPY_HW_APA102_MOSI
extern bool apa102_sck_in_use;
+extern bool apa102_mosi_in_use;
+#endif
#ifdef MICROPY_HW_NEOPIXEL
extern bool neopixel_in_use;