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" { | ||||
| #include <sysparam.h> | ||||
| } | ||||
| 
 | ||||
| const int signal_led_pin = 2; | ||||
| 
 | ||||
| const int cs0 = 15; | ||||
| 
 | ||||
| const int gpio4 = 4; | ||||
| const int gpio5 = 5; | ||||
| 
 | ||||
| struct apa10xx_pixel_t { | ||||
|     struct { | ||||
|         unsigned int mod: 5, marker: 3; | ||||
|  | @ -56,16 +50,51 @@ static apa10xx_pixel_t next_color(int i) { | |||
| 
 | ||||
| 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 { | ||||
|         void write_data(bool data) { | ||||
|             gpio_write(signal_led_pin, !data); | ||||
|             gpio_write(2, !data); | ||||
|         } | ||||
| 
 | ||||
|         void setup() { | ||||
|             gpio_enable(2, GPIO_OUTPUT); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     namespace relais { | ||||
|         void write_data(bool a, bool b) { | ||||
|             gpio_write(4, a); | ||||
|             gpio_write(5, b); | ||||
|         } | ||||
| 
 | ||||
|         void write_data(uint8_t data[2]) { | ||||
|             gpio_write(gpio4, (bool) data[0]); | ||||
|             gpio_write(gpio5, (bool) data[1]); | ||||
|             write_data((bool) data[0], (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); | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         void setup() { | ||||
|             spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_BIG_ENDIAN, 1); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     namespace ws28x { | ||||
|  | @ -98,6 +131,10 @@ namespace fiatlux { | |||
|             ws2812_i2s_init(len, PIXEL_RGBW); | ||||
|             ws2812_i2s_update(data, PIXEL_RGBW); | ||||
|         } | ||||
| 
 | ||||
|         void setup() { | ||||
| 
 | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     namespace apa10x { | ||||
|  | @ -108,22 +145,12 @@ namespace fiatlux { | |||
|             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) { | ||||
|         if(mod == hal_module_t::SIGNAL) { | ||||
|             if(count != 1) | ||||
|  | @ -154,6 +181,7 @@ namespace fiatlux { | |||
|         } else { | ||||
|             return "unsupported module"; | ||||
|         } | ||||
|         return empty_error; | ||||
|     } | ||||
| 
 | ||||
|     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); | ||||
|         } else { | ||||
|             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) { | ||||
|     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.
 | ||||
|  * | ||||
|  */ | ||||
| extern "C" void lux_task(void *pvParameters) { | ||||
| 
 | ||||
|     //gpio_enable(9, GPIO_INPUT);
 | ||||
|     //gpio_enable(10, GPIO_INPUT);
 | ||||
| extern "C" [[noreturn]] void lux_task(void *pvParameters) { | ||||
| 
 | ||||
|     int32_t lux_ws2812_number = 8; | ||||
|     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
 | ||||
| 
 | ||||
|     gpio_enable(signal_led_pin, GPIO_OUTPUT); | ||||
|     //gpio_enable(cs0, GPIO_OUTPUT);
 | ||||
|     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
 | ||||
|     //gpio_enable(9, GPIO_INPUT);
 | ||||
|     //gpio_enable(10, GPIO_INPUT);
 | ||||
| 
 | ||||
|     spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_LITTLE_ENDIAN, false); //for apa10xx
 | ||||
|     while (1) { | ||||
|     //gpio_enable(cs0, GPIO_OUTPUT);
 | ||||
|     //fiatlux::spi_dimmer::setup();
 | ||||
| 
 | ||||
|     fiatlux::signal::setup(); | ||||
|     fiatlux::relais::setup(); | ||||
| 
 | ||||
|     fiatlux::apa10x::setup(); | ||||
| 
 | ||||
|     while (true) { | ||||
|         /*for (int j = 0; j < 64; j++) {
 | ||||
|             for (int i = 0; i < 8; i++) | ||||
|                 spi_dac(i, 64 * j); | ||||
|  | @ -247,7 +276,7 @@ extern "C" void lux_task(void *pvParameters) { | |||
|         gpio_write(gpio5, 1); | ||||
|         vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|         gpio_write(gpio5, 0);*/ | ||||
|         signal_led(0); | ||||
|         fiatlux::signal::write_data(false); | ||||
|         for (int c = 8; c >= 0; c--) { | ||||
| 
 | ||||
|             for (auto &pixel: pixels) { | ||||
|  | @ -257,16 +286,15 @@ extern "C" void lux_task(void *pvParameters) { | |||
|                 led = next_color(c); | ||||
|             } | ||||
|             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); | ||||
|         } | ||||
|         gpio_write(gpio4, 1); | ||||
|         fiatlux::relais::write_data(true, false); | ||||
|         vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|         gpio_write(gpio4, 0); | ||||
|         gpio_write(gpio5, 1); | ||||
|         fiatlux::relais::write_data(false, true); | ||||
|         vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
|         gpio_write(gpio5, 0); | ||||
|         signal_led(1); | ||||
|         fiatlux::relais::write_data(false, false); | ||||
|         fiatlux::signal::write_data(true); | ||||
|         vTaskDelay(200 / portTICK_PERIOD_MS); | ||||
| 
 | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue