Documentation

animation
Sara 2023-09-19 10:34:06 +02:00
parent 9aa8af017f
commit 632bfbe61e
7 changed files with 75 additions and 12 deletions

View File

@ -1,3 +1,9 @@
///
//
// leds.h defines structs and functions for addressing an HD107s ledstrip over serial using the GPIO pins.
//
///
#ifndef _potion_leds_h #ifndef _potion_leds_h
#define _potion_leds_h #define _potion_leds_h
@ -58,7 +64,7 @@ void send_leds() {
gpio_set_level(DATA, write_next); gpio_set_level(DATA, write_next);
os_delay_us(10); os_delay_us(10);
// set clock to low, triggering a falling edge // set clock to low, triggering a falling edge, flushing the LEDs shift registers
gpio_set_level(CLOCK, 0); gpio_set_level(CLOCK, 0);
os_delay_us(10); os_delay_us(10);
@ -112,6 +118,7 @@ void lerp_points_between(const struct gradient_point_t from, const struct gradie
for(int led = from.offset; led < to.offset; ++led) { for(int led = from.offset; led < to.offset; ++led) {
t = (float)(led - from.offset) / (float)dif; t = (float)(led - from.offset) / (float)dif;
lerp_led(g_leds + led, &from.led, &to.led, t); lerp_led(g_leds + led, &from.led, &to.led, t);
LOGLN("%f", t);
} }
} }

View File

@ -1,3 +1,10 @@
///
//
// server.h manages the WiFi access point created for the quests.
// wifi_init() and softap_init() HAVE TO be called in order.
//
///
#ifndef _server_h #ifndef _server_h
#define _server_h #define _server_h

View File

@ -7,24 +7,51 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
// starts the basic subsystems we will be using
static static
void init_esp(void) { void init_esp(void) {
// start the networking interface
ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_netif_init());
// start the event loop
ESP_ERROR_CHECK(esp_event_loop_create_default()); ESP_ERROR_CHECK(esp_event_loop_create_default());
} }
void app_main(void) { void app_main(void) {
LOGLN("---- starting"); LOGLN("---- starting");
// start hardware subsystems
init_esp(); init_esp();
// startup leds and send initial state
leds_init(); leds_init();
send_leds(); send_leds();
// start wifi subsystem
wifi_init(); wifi_init();
// configure wifi hardware to act as an access point
softap_init(); softap_init();
// start listening for HTTP signals
server_init(); server_init();
os_delay_us(10000); // TEST: after a delay, set the leds to a gradient of red - black
send_leds(); os_delay_us(1000);
struct gradient_point_t points[2];
points[0].offset = 0;
points[0].led.components = (struct led_components_t) {
.global = 0xE | 10,
.red = 255,
.green = 10,
.blue = 10,
};
points[1].offset = 60;
points[1].led.components = (struct led_components_t){
.global = 0xE0,
.red = 0,
.green = 0,
.blue = 0,
};
leds_set_gradient(points, 2);
LOGLN("---- finished setting up"); LOGLN("---- finished setting up");
} }

View File

@ -1,3 +1,15 @@
///
//
// server.h
// Call server_init() to start up an http webserver.
// listens on '/' for POST queries with a url query format like
// ?l=*&r0=*&g0=*&b0=*&a0=*&t0=* ... &rl=*&gl=*&bl=*&al=*&tl=*
// Where l is the number of points on a gradient. And each point of the gradient has a r* g* b* a* and t* where * is the index.
// r g and b are the red green and blue 8-bit colour components of a point on the gradient. A is the 5-bit global component of the led at that point.
// t is the offset from the start measured in leds.
//
///
#ifndef _potion_party_server_h #ifndef _potion_party_server_h
#define _potion_party_server_h #define _potion_party_server_h
@ -13,6 +25,7 @@
static static
httpd_handle_t g_http_server = NULL; httpd_handle_t g_http_server = NULL;
// Parse a gradient query
static static
void parse_leds_query(char* query_string, size_t query_size) { void parse_leds_query(char* query_string, size_t query_size) {
char query_value[16]; char query_value[16];
@ -61,6 +74,7 @@ void parse_leds_query(char* query_string, size_t query_size) {
leds_set_gradient(points, gradient_point_count); leds_set_gradient(points, gradient_point_count);
} }
// receives HTTP POST requests on root
static static
esp_err_t on_http_post(httpd_req_t* request) { esp_err_t on_http_post(httpd_req_t* request) {
LOGLN("POST received on '/'."); LOGLN("POST received on '/'.");
@ -83,7 +97,6 @@ esp_err_t on_http_post(httpd_req_t* request) {
return ESP_OK; return ESP_OK;
} }
httpd_uri_t post = { httpd_uri_t post = {
.uri="/", .uri="/",
.method=HTTP_POST, .method=HTTP_POST,
@ -91,6 +104,7 @@ httpd_uri_t post = {
.user_ctx = NULL .user_ctx = NULL
}; };
// Configure and enable the http server.
static static
httpd_handle_t start_webserver(void) { httpd_handle_t start_webserver(void) {
httpd_handle_t server = NULL; httpd_handle_t server = NULL;
@ -106,6 +120,7 @@ httpd_handle_t start_webserver(void) {
return NULL; return NULL;
} }
// Start an http server and store it's handle in g_http_server.
static static
void server_init(void) { void server_init(void) {
g_http_server = start_webserver(); g_http_server = start_webserver();

View File

@ -1,3 +1,9 @@
///
//
// shared.h contains some shared settings and functionality
//
///
#ifndef _shared_h #ifndef _shared_h
#define _shared_h #define _shared_h
@ -6,12 +12,13 @@
#include <esp_wifi.h> #include <esp_wifi.h>
#include "esp_system.h" #include "esp_system.h"
// wifi configuration
#define SSID "ESP8266" #define SSID "ESP8266"
#define PASSW "XR-Lab2023" #define PASSW "XR-Lab2023"
#define WIFI_CONFIG
static const char* APP_TAG="CINEKID_LEDS"; static const char* APP_TAG="CINEKID_LEDS";
// print a line with the app tag as a prefix to easilly separate our own logging from system logging
#define LOGLN(...) do {\ #define LOGLN(...) do {\
printf("%s | ", APP_TAG);\ printf("%s | ", APP_TAG);\
printf(__VA_ARGS__);\ printf(__VA_ARGS__);\

View File

@ -61,14 +61,14 @@ CONFIG_ESPTOOLPY_AFTER_HARD_RESET=y
CONFIG_ESPTOOLPY_AFTER="hard_reset" CONFIG_ESPTOOLPY_AFTER="hard_reset"
# CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_9600B is not set
# CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_57600B is not set
CONFIG_ESPTOOLPY_MONITOR_BAUD_74880B=y # CONFIG_ESPTOOLPY_MONITOR_BAUD_74880B is not set
# CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B is not set CONFIG_ESPTOOLPY_MONITOR_BAUD_115200B=y
# CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_230400B is not set
# CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_921600B is not set
# CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_2MB is not set
# CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set # CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER is not set
CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=74880 CONFIG_ESPTOOLPY_MONITOR_BAUD_OTHER_VAL=74880
CONFIG_ESPTOOLPY_MONITOR_BAUD=74880 CONFIG_ESPTOOLPY_MONITOR_BAUD=115200
CONFIG_PARTITION_TABLE_SINGLE_APP=y CONFIG_PARTITION_TABLE_SINGLE_APP=y
# CONFIG_PARTITION_TABLE_TWO_OTA is not set # CONFIG_PARTITION_TABLE_TWO_OTA is not set
# CONFIG_PARTITION_TABLE_CUSTOM is not set # CONFIG_PARTITION_TABLE_CUSTOM is not set
@ -452,14 +452,14 @@ CONFIG_FLASHMODE_QIO=y
# CONFIG_FLASHMODE_DOUT is not set # CONFIG_FLASHMODE_DOUT is not set
# CONFIG_MONITOR_BAUD_9600B is not set # CONFIG_MONITOR_BAUD_9600B is not set
# CONFIG_MONITOR_BAUD_57600B is not set # CONFIG_MONITOR_BAUD_57600B is not set
CONFIG_MONITOR_BAUD_74880B=y # CONFIG_MONITOR_BAUD_74880B is not set
# CONFIG_MONITOR_BAUD_115200B is not set CONFIG_MONITOR_BAUD_115200B=y
# CONFIG_MONITOR_BAUD_230400B is not set # CONFIG_MONITOR_BAUD_230400B is not set
# CONFIG_MONITOR_BAUD_921600B is not set # CONFIG_MONITOR_BAUD_921600B is not set
# CONFIG_MONITOR_BAUD_2MB is not set # CONFIG_MONITOR_BAUD_2MB is not set
# CONFIG_MONITOR_BAUD_OTHER is not set # CONFIG_MONITOR_BAUD_OTHER is not set
CONFIG_MONITOR_BAUD_OTHER_VAL=74880 CONFIG_MONITOR_BAUD_OTHER_VAL=74880
CONFIG_MONITOR_BAUD=74880 CONFIG_MONITOR_BAUD=115200
CONFIG_OPTIMIZATION_LEVEL_DEBUG=y CONFIG_OPTIMIZATION_LEVEL_DEBUG=y
# CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set
CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y

View File

@ -9,7 +9,7 @@ CONFIG_IDF_TARGET="esp8266"
# SDK tool configuration # SDK tool configuration
# #
CONFIG_SDK_TOOLPREFIX="xtensa-lx106-elf-" CONFIG_SDK_TOOLPREFIX="xtensa-lx106-elf-"
CONFIG_SDK_PYTHON="python" CONFIG_SDK_PYTHON="python2"
# CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES is not set # CONFIG_SDK_MAKE_WARN_UNDEFINED_VARIABLES is not set
CONFIG_BOOTLOADER_INIT_SPI_FLASH=y CONFIG_BOOTLOADER_INIT_SPI_FLASH=y
# CONFIG_BOOTLOADER_DISABLE_JTAG_IO is not set # CONFIG_BOOTLOADER_DISABLE_JTAG_IO is not set