stash
This commit is contained in:
parent
b72426b9c7
commit
4b23e5bc09
1 changed files with 72 additions and 44 deletions
116
firmware/lux.cpp
116
firmware/lux.cpp
|
@ -14,14 +14,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <sysparam.h>
|
#include <sysparam.h>
|
||||||
}
|
}
|
||||||
|
|
||||||
const int signal_led_pin = 2;
|
|
||||||
|
|
||||||
const int cs0 = 15;
|
const int cs0 = 15;
|
||||||
|
|
||||||
const int gpio4 = 4;
|
|
||||||
const int gpio5 = 5;
|
|
||||||
|
|
||||||
struct apa10xx_pixel_t {
|
struct apa10xx_pixel_t {
|
||||||
struct {
|
struct {
|
||||||
unsigned int mod: 5, marker: 3;
|
unsigned int mod: 5, marker: 3;
|
||||||
|
@ -56,16 +50,51 @@ static apa10xx_pixel_t next_color(int i) {
|
||||||
|
|
||||||
namespace fiatlux {
|
namespace fiatlux {
|
||||||
|
|
||||||
|
struct hal_error_t {
|
||||||
|
constexpr hal_error_t() = default;
|
||||||
|
|
||||||
|
hal_error_t(const char *) {}
|
||||||
|
|
||||||
|
hal_error_t(const char *, hal_error_t *cause) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr hal_error_t empty_error;
|
||||||
|
|
||||||
|
enum class hal_module_t {
|
||||||
|
NONE, SIGNAL, RELAIS, SPI_DIMMER, WS28X, APA10X
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace ports {
|
||||||
|
hal_module_t spi = hal_module_t::NONE;
|
||||||
|
hal_module_t uart = hal_module_t::NONE;
|
||||||
|
hal_module_t gpio2 = hal_module_t::NONE;
|
||||||
|
hal_module_t gpio4 = hal_module_t::NONE;
|
||||||
|
hal_module_t gpio5 = hal_module_t::NONE;
|
||||||
|
}
|
||||||
|
|
||||||
namespace signal {
|
namespace signal {
|
||||||
void write_data(bool data) {
|
void write_data(bool data) {
|
||||||
gpio_write(signal_led_pin, !data);
|
gpio_write(2, !data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
gpio_enable(2, GPIO_OUTPUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace relais {
|
namespace relais {
|
||||||
|
void write_data(bool a, bool b) {
|
||||||
|
gpio_write(4, a);
|
||||||
|
gpio_write(5, b);
|
||||||
|
}
|
||||||
|
|
||||||
void write_data(uint8_t data[2]) {
|
void write_data(uint8_t data[2]) {
|
||||||
gpio_write(gpio4, (bool) data[0]);
|
write_data((bool) data[0], (bool) data[1]);
|
||||||
gpio_write(gpio5, (bool) data[1]);
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
gpio_enable(4, GPIO_OUTPUT);
|
||||||
|
gpio_enable(5, GPIO_OUTPUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,6 +120,10 @@ namespace fiatlux {
|
||||||
gpio_write(cs0, 0);
|
gpio_write(cs0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace ws28x {
|
namespace ws28x {
|
||||||
|
@ -98,6 +131,10 @@ namespace fiatlux {
|
||||||
ws2812_i2s_init(len, PIXEL_RGBW);
|
ws2812_i2s_init(len, PIXEL_RGBW);
|
||||||
ws2812_i2s_update(data, PIXEL_RGBW);
|
ws2812_i2s_update(data, PIXEL_RGBW);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace apa10x {
|
namespace apa10x {
|
||||||
|
@ -108,22 +145,12 @@ namespace fiatlux {
|
||||||
spi_transfer_32(1, 0xFFFFFFFF);
|
spi_transfer_32(1, 0xFFFFFFFF);
|
||||||
spi_transfer_32(1, 0xFFFFFFFF);
|
spi_transfer_32(1, 0xFFFFFFFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_LITTLE_ENDIAN, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct hal_error_t {
|
|
||||||
constexpr hal_error_t() = default;
|
|
||||||
|
|
||||||
hal_error_t(const char *) {}
|
|
||||||
|
|
||||||
hal_error_t(const char *, hal_error_t *cause) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
constexpr hal_error_t empty_error;
|
|
||||||
|
|
||||||
enum class hal_module_t {
|
|
||||||
SIGNAL, RELAIS, SPI_DIMMER, WS28X, APA10X
|
|
||||||
};
|
|
||||||
|
|
||||||
hal_error_t write_channel(uint8_t *data, size_t count, size_t stride, hal_module_t mod) {
|
hal_error_t write_channel(uint8_t *data, size_t count, size_t stride, hal_module_t mod) {
|
||||||
if(mod == hal_module_t::SIGNAL) {
|
if(mod == hal_module_t::SIGNAL) {
|
||||||
if(count != 1)
|
if(count != 1)
|
||||||
|
@ -154,6 +181,7 @@ namespace fiatlux {
|
||||||
} else {
|
} else {
|
||||||
return "unsupported module";
|
return "unsupported module";
|
||||||
}
|
}
|
||||||
|
return empty_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
hal_error_t setup_channel(size_t count, size_t stride, hal_module_t mod) {
|
hal_error_t setup_channel(size_t count, size_t stride, hal_module_t mod) {
|
||||||
|
@ -185,13 +213,13 @@ namespace fiatlux {
|
||||||
apa10x::write_data((apa10xx_pixel_t *) data, count);
|
apa10x::write_data((apa10xx_pixel_t *) data, count);
|
||||||
} else {
|
} else {
|
||||||
return "unsupported module";
|
return "unsupported module";
|
||||||
}
|
}*/
|
||||||
return empty_error;*/
|
return empty_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ws2812_pixel_t **pixels_ptr;
|
//ws2812_pixel_t **pixels_ptr;
|
||||||
|
|
||||||
extern "C" void signal_led(bool state) {
|
extern "C" void signal_led(bool state) {
|
||||||
fiatlux::signal::write_data(state);
|
fiatlux::signal::write_data(state);
|
||||||
|
@ -201,10 +229,7 @@ extern "C" void signal_led(bool state) {
|
||||||
/* This task uses the high level GPIO API (esp_gpio.h) to blink an LED.
|
/* This task uses the high level GPIO API (esp_gpio.h) to blink an LED.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
extern "C" void lux_task(void *pvParameters) {
|
extern "C" [[noreturn]] void lux_task(void *pvParameters) {
|
||||||
|
|
||||||
//gpio_enable(9, GPIO_INPUT);
|
|
||||||
//gpio_enable(10, GPIO_INPUT);
|
|
||||||
|
|
||||||
int32_t lux_ws2812_number = 8;
|
int32_t lux_ws2812_number = 8;
|
||||||
auto ret = sysparam_get_int32("lux_ws2812_number", &lux_ws2812_number);
|
auto ret = sysparam_get_int32("lux_ws2812_number", &lux_ws2812_number);
|
||||||
|
@ -224,14 +249,18 @@ extern "C" void lux_task(void *pvParameters) {
|
||||||
|
|
||||||
//lux_apa102c_number
|
//lux_apa102c_number
|
||||||
|
|
||||||
gpio_enable(signal_led_pin, GPIO_OUTPUT);
|
//gpio_enable(9, GPIO_INPUT);
|
||||||
//gpio_enable(cs0, GPIO_OUTPUT);
|
//gpio_enable(10, GPIO_INPUT);
|
||||||
gpio_enable(gpio4, GPIO_OUTPUT);
|
|
||||||
gpio_enable(gpio5, GPIO_OUTPUT);
|
|
||||||
//spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, 1); //for spi dimmer
|
|
||||||
|
|
||||||
spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_LITTLE_ENDIAN, false); //for apa10xx
|
//gpio_enable(cs0, GPIO_OUTPUT);
|
||||||
while (1) {
|
//fiatlux::spi_dimmer::setup();
|
||||||
|
|
||||||
|
fiatlux::signal::setup();
|
||||||
|
fiatlux::relais::setup();
|
||||||
|
|
||||||
|
fiatlux::apa10x::setup();
|
||||||
|
|
||||||
|
while (true) {
|
||||||
/*for (int j = 0; j < 64; j++) {
|
/*for (int j = 0; j < 64; j++) {
|
||||||
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
||||||
spi_dac(i, 64 * j);
|
spi_dac(i, 64 * j);
|
||||||
|
@ -247,7 +276,7 @@ extern "C" void lux_task(void *pvParameters) {
|
||||||
gpio_write(gpio5, 1);
|
gpio_write(gpio5, 1);
|
||||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
gpio_write(gpio5, 0);*/
|
gpio_write(gpio5, 0);*/
|
||||||
signal_led(0);
|
fiatlux::signal::write_data(false);
|
||||||
for (int c = 8; c >= 0; c--) {
|
for (int c = 8; c >= 0; c--) {
|
||||||
|
|
||||||
for (auto &pixel: pixels) {
|
for (auto &pixel: pixels) {
|
||||||
|
@ -257,16 +286,15 @@ extern "C" void lux_task(void *pvParameters) {
|
||||||
led = next_color(c);
|
led = next_color(c);
|
||||||
}
|
}
|
||||||
ws2812_i2s_update(pixels, PIXEL_RGBW);
|
ws2812_i2s_update(pixels, PIXEL_RGBW);
|
||||||
write_leds(leds, lux_apa10xx_number);
|
fiatlux::write_channel((uint8_t *) &leds[0], lux_apa10xx_number, 4, fiatlux::hal_module_t::APA10X);
|
||||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
}
|
}
|
||||||
gpio_write(gpio4, 1);
|
fiatlux::relais::write_data(true, false);
|
||||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
gpio_write(gpio4, 0);
|
fiatlux::relais::write_data(false, true);
|
||||||
gpio_write(gpio5, 1);
|
|
||||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
gpio_write(gpio5, 0);
|
fiatlux::relais::write_data(false, false);
|
||||||
signal_led(1);
|
fiatlux::signal::write_data(true);
|
||||||
vTaskDelay(200 / portTICK_PERIOD_MS);
|
vTaskDelay(200 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue