Skip to content

Support multiple status neopixels #5052

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 24, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

#define MICROPY_HW_LED_STATUS (&pin_PA17)

#define MICROPY_HW_NEOPIXEL (&pin_PB23)
#define MICROPY_HW_NEOPIXEL_COUNT (10)

// Don't allow touch on A0 (PA02), because it's connected to the speaker.
#define PA02_NO_TOUCH (true)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

#define MICROPY_HW_LED_STATUS (&pin_PA17)

#define MICROPY_HW_NEOPIXEL (&pin_PB23)
#define MICROPY_HW_NEOPIXEL_COUNT (10)

// Don't allow touch on A0 (PA02), because it's connected to the speaker.
#define PA02_NO_TOUCH (true)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

#define MICROPY_HW_LED_STATUS (&pin_PA17)

#define MICROPY_HW_NEOPIXEL (&pin_PB23)
#define MICROPY_HW_NEOPIXEL_COUNT (10)

// Don't allow touch on A0 (PA02), because it's connected to the speaker.
#define PA02_NO_TOUCH (true)

Expand Down
24 changes: 17 additions & 7 deletions ports/nrf/boards/circuitplayground_bluefruit/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,21 +33,31 @@
#include "nrf_gpio.h"

void board_init(void) {
// Turn on power to sensors and neopixels.
nrf_gpio_cfg(POWER_SWITCH_PIN->number,
NRF_GPIO_PIN_DIR_OUTPUT,
NRF_GPIO_PIN_INPUT_DISCONNECT,
NRF_GPIO_PIN_NOPULL,
NRF_GPIO_PIN_S0S1,
NRF_GPIO_PIN_NOSENSE);
nrf_gpio_pin_write(POWER_SWITCH_PIN->number, false);
}

bool board_requests_safe_mode(void) {
return false;
}

void reset_board(void) {
// Turn off board.POWER_SWITCH (power-saving switch) on each soft reload, to prevent confusion.
void board_deinit(void) {
// Turn off power to sensors and neopixels.
nrf_gpio_cfg(POWER_SWITCH_PIN->number,
NRF_GPIO_PIN_DIR_OUTPUT,
NRF_GPIO_PIN_INPUT_DISCONNECT,
NRF_GPIO_PIN_NOPULL,
NRF_GPIO_PIN_S0S1,
NRF_GPIO_PIN_NOSENSE);
nrf_gpio_pin_write(POWER_SWITCH_PIN->number, false);
nrf_gpio_pin_write(POWER_SWITCH_PIN->number, true);
}

bool board_requests_safe_mode(void) {
return false;
}

void reset_board(void) {
board_reset_user_neopixels(&pin_P0_13, 10);
}
3 changes: 3 additions & 0 deletions ports/nrf/boards/circuitplayground_bluefruit/mpconfigboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@

#define MICROPY_HW_LED_STATUS (&pin_P1_14)

#define MICROPY_HW_NEOPIXEL (&pin_P0_13)
#define MICROPY_HW_NEOPIXEL_COUNT (10)

// Board does not have a 32kHz crystal. It does have a 32MHz crystal.
#define BOARD_HAS_32KHZ_XTAL (0)

Expand Down
21 changes: 14 additions & 7 deletions supervisor/shared/status_leds.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,14 @@ static digitalio_digitalinout_obj_t _status_power;

#ifdef MICROPY_HW_NEOPIXEL
uint8_t rgb_status_brightness = 63;
#include "shared-bindings/digitalio/DigitalInOut.h"
#include "shared-bindings/neopixel_write/__init__.h"
static uint8_t status_neopixel_color[3];
#include "shared-bindings/digitalio/DigitalInOut.h"
#include "shared-bindings/neopixel_write/__init__.h"

#ifndef MICROPY_HW_NEOPIXEL_COUNT
#define MICROPY_HW_NEOPIXEL_COUNT (1)
#endif

static uint8_t status_neopixel_color[3 * MICROPY_HW_NEOPIXEL_COUNT];
static digitalio_digitalinout_obj_t status_neopixel;

#elif defined(MICROPY_HW_APA102_MOSI) && defined(MICROPY_HW_APA102_SCK)
Expand Down Expand Up @@ -240,10 +245,12 @@ void new_status_color(uint32_t rgb) {
#endif

#ifdef MICROPY_HW_NEOPIXEL
status_neopixel_color[0] = (rgb_adjusted >> 8) & 0xff;
status_neopixel_color[1] = (rgb_adjusted >> 16) & 0xff;
status_neopixel_color[2] = rgb_adjusted & 0xff;
common_hal_neopixel_write(&status_neopixel, status_neopixel_color, 3);
for (size_t i = 0; i < MICROPY_HW_NEOPIXEL_COUNT; i++) {
status_neopixel_color[3 * i + 0] = (rgb_adjusted >> 8) & 0xff;
status_neopixel_color[3 * i + 1] = (rgb_adjusted >> 16) & 0xff;
status_neopixel_color[3 * i + 2] = rgb_adjusted & 0xff;
}
common_hal_neopixel_write(&status_neopixel, status_neopixel_color, 3 * MICROPY_HW_NEOPIXEL_COUNT);

#elif defined(MICROPY_HW_APA102_MOSI) && defined(MICROPY_HW_APA102_SCK)
status_apa102_color[5] = rgb_adjusted & 0xff;
Expand Down