stash
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
j3d1 2023-02-18 20:59:55 +01:00
parent 2b07102b69
commit c7c19a8aa8
5 changed files with 91 additions and 59 deletions

View file

@ -46,6 +46,8 @@ volatile rgba_t top_color;
volatile rgba_t bottom_color;
volatile uint16_t light_value;
volatile int32_t led_amount = 240;
volatile uint16_t peripheral_version;
@ -250,21 +252,23 @@ extern "C" [[noreturn]] void lux_task(void *pvParameters) {
fiatlux::signal::setup();
fiatlux::relais::setup();
bus_init();
//bus_init();
int32_t lux_ws2812_number = 240;
auto ret = sysparam_get_int32("lux_ws2812_number", &lux_ws2812_number);
led_amount = 240;
auto ret = sysparam_get_int32("led_amount", (int32_t*)&led_amount);
if(ret != SYSPARAM_OK)
lux_ws2812_number = 240;
led_amount = 240;
int32_t lux_apa10xx_number = 40;
ret = sysparam_get_int32("lux_apa10xx_number", &lux_apa10xx_number);
if(ret != SYSPARAM_OK)
lux_apa10xx_number = 40;
//int32_t lux_apa10xx_number = 40;
//ret = sysparam_get_int32("lux_apa10xx_number", &lux_apa10xx_number);
//if(ret != SYSPARAM_OK)
// lux_apa10xx_number = 40;
ws2812_pixel_t pixels[lux_ws2812_number];
ws2812_i2s_init(lux_ws2812_number, PIXEL_RGBW);
memset(pixels, 0, sizeof(ws2812_pixel_t) * lux_ws2812_number);
int32_t current_led_amount = led_amount;
ws2812_pixel_t pixels[current_led_amount];
ws2812_i2s_init(current_led_amount, PIXEL_RGBW);
memset(pixels, 0, sizeof(ws2812_pixel_t) * current_led_amount);
//apa10xx_pixel_t leds[lux_apa10xx_number]; // TODO
@ -285,52 +289,52 @@ extern "C" [[noreturn]] void lux_task(void *pvParameters) {
- [2*n+1] = 8bit PWM value
*/
{
peripheral_version = bus_get_version();
syslog("peripheral_version: ");
syslog_i32(peripheral_version);
syslog("\n");
}
light_value = 0xFFF;
uint16_t last_light_value = 0xFFFF;
//{
// peripheral_version = bus_get_version();
// syslog("peripheral_version: ");
// syslog_i32(peripheral_version);
// syslog("\n");
//}
//
//light_value = 0xFFF;
//uint16_t last_light_value = 0xFFFF;
while (true) {
fiatlux::signal::write_data(false);
//fiatlux::signal::write_data(false);
if(last_light_value != light_value) {
//if(last_light_value != light_value) {
//
// syslog("# ");
// syslog_i32(light_value);
// syslog("\n");
//
// bool ok = set_cc48(light_value);
//
// if(ok) {
// last_light_value = light_value;
// vTaskDelay(1000 / portTICK_PERIOD_MS);
// } else {
// syslog("reset_bus\n");
// reset_bus();
// vTaskDelay(1000 / portTICK_PERIOD_MS);
// }
//
//} else {
// bool ping = bus_ping();
// if(!ping) {
// syslog("ping: reset_bus\n");
// reset_bus();
// vTaskDelay(1000 / portTICK_PERIOD_MS);
// }
//}
syslog("# ");
syslog_i32(light_value);
syslog("\n");
bool ok = set_cc48(light_value);
if(ok) {
last_light_value = light_value;
vTaskDelay(1000 / portTICK_PERIOD_MS);
} else {
syslog("reset_bus\n");
reset_bus();
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
} else {
bool ping = bus_ping();
if(!ping) {
syslog("ping: reset_bus\n");
reset_bus();
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
for (int i = 0; i < 120; i++)
for (int i = 0; i < current_led_amount; i++)
pixels[i] = {{top_color.r, top_color.g, top_color.b, top_color.a}};
for (int i = 120; i < 240; i++)
pixels[i] = {{bottom_color.r, bottom_color.g, bottom_color.b, bottom_color.a}};
//for (int i = 120; i < 240; i++)
// pixels[i] = {{bottom_color.r, bottom_color.g, bottom_color.b, bottom_color.a}};
ws2812_i2s_update(pixels, PIXEL_RGBW);

View file

@ -22,6 +22,8 @@ extern volatile rgba_t top_color;
extern volatile rgba_t bottom_color;
extern volatile uint16_t light_value;
extern volatile int32_t led_amount;
extern volatile uint16_t peripheral_version;
#ifdef __cplusplus

View file

@ -13,6 +13,7 @@ namespace fiatlux {
VOLTAGE_INFO,
SYSTEM_INFO,
LIGHTS,
LIGHT_CONFIG,
count
};
@ -26,6 +27,7 @@ namespace fiatlux {
"VOLTAGE_INFO",
"SYSTEM_INFO",
"LIGHTS",
"LIGHT_CONFIG",
"out of range"
};
if(val < id::count)
@ -83,5 +85,9 @@ namespace fiatlux {
uint32_t bottom_color;
uint16_t white_brightness;
} __attribute__((packed));
struct light_config {
int32_t led_amount;
} __attribute__((packed));
}
}

View file

@ -42,13 +42,14 @@ struct {
bool wifi;
bool voltage;
bool lights;
bool light_config;
} has_changed;
void websocket_task(void *pvParameter) {
auto *pcb = (struct tcp_pcb *) pvParameter;
size_t connstarttime = xTaskGetTickCount();
has_changed = {true, true, true, true, true};
has_changed = {true, true, true, true, true, true};
syslog_attach();
unsigned local_log_tail = syslog_current_tail();
@ -124,6 +125,16 @@ void websocket_task(void *pvParameter) {
has_changed.lights = false;
UNLOCK_TCPIP_CORE();
taskYIELD();
} else if(has_changed.light_config) {
messages::frame<messages::light_config> frame;
frame.cmd = messages::LIGHT_CONFIG;
frame.msg.led_amount = led_amount;
LOCK_TCPIP_CORE();
websocket_write(pcb, (unsigned char *) &frame, sizeof(frame), WS_BIN_MODE);
has_changed.light_config = false;
UNLOCK_TCPIP_CORE();
taskYIELD();
} else if(has_changed.connection) {
timeval tv{};
@ -323,6 +334,18 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len,
res.cmd = (messages::id) 'J';
res.ret = OK;
res.val = 1;
} else if(data[0] == 'K') {
uint32_t val = data[7] | (data[6] << 8) | (data[5] << 16) | (data[4] << 24);
led_amount = data[7] | (data[6] << 8);
sysparam_set_int32("led_amount", led_amount);
has_changed.light_config = true;
syslog("K");
syslog_i32(val);
syslog("\n");
//signal_led(false);
res.cmd = (messages::id) 'K';
res.ret = OK;
res.val = 1;
} else if(data[0] == 'D') {
// Disable LED
syslog("G\n");

View file

@ -272,12 +272,7 @@
</label><br>
<label>
<span>change bottom color</span>
<input type="color" oninput="colorBottom(this.value)" class="postfill_bottom_color">
</label><br>
<label>
<span>set white brightness</span>
<input type="range" min="0" max="4095" value="0" onchange="lightSlider(this.value)"
class="slider postfill_white_brightness">
<input type="number" oninput="ledAmount(this.value)" class="postfill_led_amount">
</label>
</footer>
</article>
@ -366,7 +361,7 @@
} else {
var data = {};
var dv = new DataView(evt.data);
let cmds = ["NONE", "RESTART", "CLEAR_CONFIG", "FIRMWARE_FRAME", "FIRMWARE_CHECK", "VOLTAGE_INFO", "SYSTEM_INFO", "LIGHTS"];
let cmds = ["NONE", "RESTART", "CLEAR_CONFIG", "FIRMWARE_FRAME", "FIRMWARE_CHECK", "VOLTAGE_INFO", "SYSTEM_INFO", "LIGHTS", "LIGHT_CONFIG"];
//console.log("[0]", dv.getUint8(0));
let fst = dv.getUint8(0);
var cmd;
@ -390,6 +385,8 @@
data.top_color = htonl(dv.getUint32(1));
data.bottom_color = htonl(dv.getUint32(5));
data.white_brightness = htons(dv.getInt16(9));
} else if (cmd === "LIGHT_CONFIG") {
data.led_amount = htonl(dv.getUint32(1));
} else if (cmd === "VOLTAGE_INFO") {
console.log(cmd, buf2hex(evt.data));
} else if (cmd === "G") {
@ -511,10 +508,10 @@
wsWrite(header);
}
function lightSlider(val) {
function ledAmount(val) {
var header = new ArrayBuffer(8);
var headerview = new DataView(header);
headerview.setChar(0, 'J');
headerview.setChar(0, 'K');
headerview.setInt32(4, val);
console.log(buf2hex(header));
wsWrite(header);