From 42a2a579628d4aa8153775cdcd894b8b5c80e7da Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 6 Feb 2025 20:08:50 +0100 Subject: m + libradharc for client-side protocol implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- radharc.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'radharc.c') diff --git a/radharc.c b/radharc.c index e48dc6f..08ccc2f 100644 --- a/radharc.c +++ b/radharc.c @@ -1,5 +1,6 @@ /* See LICENSE file for copyright and license details. */ #include "cg-base.h" +#include "libradharc.h" #include #include @@ -19,6 +20,20 @@ #define SOCKLEN (socklen_t)sizeof +/** + * Possible states of the program + */ +enum state { + INITIALISING, + INITIAL_FADE_IN, + TERMINAL_FADE_OUT, + ENABLE_FADE_IN, + DISABLE_FADE_OUT, + ENABLED_NORMAL, + DISABLED +}; + + /** * The default filter priority for the program */ @@ -133,6 +148,11 @@ static const char *sockname = NULL; */ static int no_temperature_change = 0; +/** + * The state the program is in + */ +static enum state current_state = INITIALISING; + /** * If 0, SIGINT has not been received, @@ -694,12 +714,15 @@ read_socket(int sock) { char buffer[64]; ssize_t r; + struct sockaddr_un addr; + socklen_t addrlen; if (sock < 0) return; for (;;) { - r = recv(sock, buffer, sizeof(buffer), MSG_DONTWAIT | MSG_TRUNC); + addrlen = SOCKLEN(addr); + r = recvfrom(sock, buffer, sizeof(buffer), MSG_DONTWAIT | MSG_TRUNC, &addr, &addrlen); if (r < 0) { if (errno == EAGAIN) break; @@ -710,11 +733,17 @@ read_socket(int sock) } if (!r || (size_t)r > sizeof(buffer)) { - fprintf(stderr, "%s: invalid length of received message: %zi\n", argv0, r); + if (addrlen) { + /* TODO send LIBRADHARC_RESPONSE_INVALID_REQUEST */ + } continue; } /* TODO parse message */ + + if (addrlen) { + /* TODO send response */ + } } } @@ -877,11 +906,13 @@ fade_in: fade_cs = (size_t)fade_in_cs; if (initial_fade_in) { + current_state = INITIAL_FADE_IN; initial_fade_in = 0; if ((r = get_temperature(&target_temperature)) < 0) return r; } else { fade_in_have_timer: + current_state = ENABLE_FADE_IN; original_temperature = 6500; } for (i = 0; i < fade_cs;) { @@ -923,6 +954,7 @@ skip_fade_in: faded_in: + current_state = ENABLED_NORMAL; for (;;) { read_socket(sock); if (sigint_received) { @@ -975,6 +1007,7 @@ fade_out: fade_cs = (size_t)fade_out_cs; fade_out_have_timer: + current_state = (sigint_received || sighup_received) ? TERMINAL_FADE_OUT : DISABLE_FADE_OUT; original_temperature = current_temperature; for (i = 0; i < fade_cs;) { read_socket(sock); @@ -1010,6 +1043,7 @@ skip_fade_out: faded_out: + current_state = DISABLED; for (i = 0; i < filters_n; i++) crtc_updates[i].filter.lifespan = LIBCOOPGAMMA_REMOVE; if ((r = set_ramps(red, green, blue)) < 0) -- cgit v1.2.3-70-g09d2