diff options
| author | 2024-12-09 15:30:13 -0500 | |
|---|---|---|
| committer | 2024-12-09 15:30:13 -0500 | |
| commit | 907766e7d59af88d125aef603fa9c61f67abd328 (patch) | |
| tree | 2914e8c06327d77d298f8aa9dfe1550d6ac061c9 | |
| parent | efb4728e02a882d4b62b57f6fd572a9e053ae609 (diff) | |
| download | camu-907766e7d59af88d125aef603fa9c61f67abd328.tar.gz camu-907766e7d59af88d125aef603fa9c61f67abd328.tar.bz2 camu-907766e7d59af88d125aef603fa9c61f67abd328.zip | |
Don't queue remove_sink, cleanup input simulator
Signed-off-by: Andrew Opalach <andrew@akon.city>
| -rw-r--r-- | flake.lock | 24 | ||||
| -rwxr-xr-x | scripts/line_count.sh | 6 | ||||
| -rw-r--r-- | src/fruits/cmv/cmv.c | 6 | ||||
| -rw-r--r-- | src/fruits/cmv/input_simulator.h | 6 | ||||
| -rw-r--r-- | src/fruits/cmv/meson.build | 2 | ||||
| -rw-r--r-- | src/liana/list.c | 8 | ||||
| -rw-r--r-- | src/screen/screen.c | 4 | ||||
| -rw-r--r-- | src/screen/screen.h | 2 | ||||
| -rw-r--r-- | src/server/server.c | 3 | ||||
| -rw-r--r-- | src/sink/desktop.c | 19 | ||||
| -rw-r--r-- | src/sink/input_simulator.c (renamed from src/fruits/cmv/input_simulator.c) | 17 | ||||
| -rw-r--r-- | src/sink/input_simulator.h | 7 | ||||
| -rw-r--r-- | src/sink/meson.build | 3 |
13 files changed, 63 insertions, 44 deletions
@@ -41,11 +41,11 @@ ] }, "locked": { - "lastModified": 1733317578, - "narHash": "sha256-anN/LcP5IuqEARvhPETg1vnbyG3IQ0wdvSAYEJfIQzA=", + "lastModified": 1733754861, + "narHash": "sha256-3JKzIou54yjiMVmvgdJwopekEvZxX3JDT8DpKZs4oXY=", "owner": "nix-community", "repo": "home-manager", - "rev": "ad48eb25cd0b00ce730da00fa1f8e6e6c27b397d", + "rev": "9ebaa80a227eaca9c87c53ed515ade013bc2bca9", "type": "github" }, "original": { @@ -57,11 +57,11 @@ }, "nixos-hardware": { "locked": { - "lastModified": 1733217105, - "narHash": "sha256-fc6jTzIwCIVWTX50FtW6AZpuukuQWSEbPiyg6ZRGWFY=", + "lastModified": 1733481457, + "narHash": "sha256-IS3bxa4N1VMSh3/P6vhEAHQZecQ3oAlKCDvzCQSO5Is=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "cceee0a31d2f01bcc98b2fbd591327c06a4ea4f9", + "rev": "e563803af3526852b6b1d77107a81908c66a9fcf", "type": "github" }, "original": { @@ -78,11 +78,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1731682434, - "narHash": "sha256-HnZFPB7akVIy0KuPq/tEkiB+Brt1qi0DUIDzR8z25qI=", + "lastModified": 1733754474, + "narHash": "sha256-+Fd2VIEFgLJAYIzRkCCSvbYXovoZj9k7K04cmUUzlHI=", "owner": "nix-community", "repo": "NixOS-WSL", - "rev": "a6b9cf0b7805e2c50829020a73e7bde683fd36dd", + "rev": "7c85eb172eef3a8814e6c1127f0e64b6e8ffc3b7", "type": "github" }, "original": { @@ -110,11 +110,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1733212471, - "narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=", + "lastModified": 1733581040, + "narHash": "sha256-Qn3nPMSopRQJgmvHzVqPcE3I03zJyl8cSbgnnltfFDY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "55d15ad12a74eb7d4646254e13638ad0c4128776", + "rev": "22c3f2cf41a0e70184334a958e6b124fb0ce3e01", "type": "github" }, "original": { diff --git a/scripts/line_count.sh b/scripts/line_count.sh index fdd6278..281f765 100755 --- a/scripts/line_count.sh +++ b/scripts/line_count.sh @@ -1,10 +1,10 @@ #! /usr/bin/env sh find ./src -type f \ + -not -path "*__pycache__*" \ + -not -path "./src/fruits/droid/*" \ -not -path "./src/portal/cpy/portal.c" \ -not -path "./src/portal/cpy/portal.h" \ -not -path "./src/portal/patches/*" \ - -not -path "./src/portal/tests/*" \ + -not -path "./src/portal/py/tests/*" \ -not -path "./src/portal/vendor/*" \ - -not -path "./src/fruits/droid/*" \ - -not -path "*__pycache__*" \ -exec wc -l {} + diff --git a/src/fruits/cmv/cmv.c b/src/fruits/cmv/cmv.c index 9e3be3f..0fe33ad 100644 --- a/src/fruits/cmv/cmv.c +++ b/src/fruits/cmv/cmv.c @@ -11,8 +11,6 @@ #include "../../server/common.c" #endif -#include "input_simulator.h" - struct cmv { struct aki_event_loop loop; struct camu_desktop desktop; @@ -123,12 +121,8 @@ s32 wmain(s32 argc, wchar_t **argv) struct aki_thread thread0; aki_thread_create(&thread0, event_loop_thread, &c); - //cmv_input_simulator_run(&c.desktop.sink); - while (camu_desktop_tick(&c.desktop)) {} - //cmv_input_simulator_stop(); - camu_desktop_stop(&c.desktop); aki_thread_join(&thread0); camu_desktop_free(&c.desktop); diff --git a/src/fruits/cmv/input_simulator.h b/src/fruits/cmv/input_simulator.h deleted file mode 100644 index 5380bb2..0000000 --- a/src/fruits/cmv/input_simulator.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -#include "../../libsink/sink.h" - -void cmv_input_simulator_run(struct camu_sink *sink); -void cmv_input_simulator_stop(void); diff --git a/src/fruits/cmv/meson.build b/src/fruits/cmv/meson.build index b2ab0a2..9b83847 100644 --- a/src/fruits/cmv/meson.build +++ b/src/fruits/cmv/meson.build @@ -1,4 +1,4 @@ -cmv_src = ['cmv.c', 'input_simulator.c'] +cmv_src = ['cmv.c'] cmv_deps = [common_deps, desktop] cmv_args = [] if get_option('sink-only') diff --git a/src/liana/list.c b/src/liana/list.c index a192848..059cd07 100644 --- a/src/liana/list.c +++ b/src/liana/list.c @@ -567,11 +567,9 @@ void lia_list_add_sink(struct lia_list *list, void (*callback)(void *, u8, struc void lia_list_remove_sink(struct lia_list *list, void *userdata) { - struct lia_list_cmd *cmd = al_alloc_object(struct lia_list_cmd); - cmd->op = REMOVE_SINK; - cmd->userdata = userdata; - al_array_push(list->queue, cmd); - pump_queue(list); + // Don't queue remove sink because we can't let any currently queued commands + // touch this sink. + handle_remove_sink(list, userdata); } void lia_list_add(struct lia_list *list, void *opaque, u64 duration, wstr *name) diff --git a/src/screen/screen.c b/src/screen/screen.c index b10d486..30d6860 100644 --- a/src/screen/screen.c +++ b/src/screen/screen.c @@ -184,8 +184,8 @@ static bool key_callback(void *userdata, u8 state, u8 button) case 0x12: // e scr->callback(scr->userdata, CAMU_SCREEN_RESEEK, NULL); break; - case 0x16: // u - scr->callback(scr->userdata, CAMU_SCREEN_UNSET, NULL); + case 0x19: // p + scr->callback(scr->userdata, CAMU_SCREEN_DEBUG, NULL); break; case 0x13: { // r struct camu_view *view = get_view_from_mouse_pos(scr); diff --git a/src/screen/screen.h b/src/screen/screen.h index 23a85d0..9467d35 100644 --- a/src/screen/screen.h +++ b/src/screen/screen.h @@ -34,8 +34,8 @@ enum { CAMU_SCREEN_TOGGLE_PAUSE, CAMU_SCREEN_SEEK, CAMU_SCREEN_RESEEK, - CAMU_SCREEN_UNSET, CAMU_SCREEN_VOLUME, + CAMU_SCREEN_DEBUG, CAMU_SCREEN_CLOSE }; diff --git a/src/server/server.c b/src/server/server.c index a72a1b1..f53eb52 100644 --- a/src/server/server.c +++ b/src/server/server.c @@ -301,7 +301,7 @@ static void handle_add_command(struct camu_server *server, struct lia_list *list { u8 op = aki_packet_read_u8(packet); struct cch_entry *entry = NULL; - struct camu_resource *resource; + struct camu_resource *resource = NULL; wstr name; switch (op) { case CAMU_RESOURCE_FILE: { @@ -353,6 +353,7 @@ static void handle_add_command(struct camu_server *server, struct lia_list *list break; } } + al_assert(resource); resource->load = CAMU_RESOURCE_NOT_LOADED; resource->entry = entry; resource->node = lia_server_create_node(&server->data.server, resource->entry); diff --git a/src/sink/desktop.c b/src/sink/desktop.c index 11da0f9..85080ba 100644 --- a/src/sink/desktop.c +++ b/src/sink/desktop.c @@ -10,6 +10,9 @@ #include "desktop.h" #include "common.h" +#ifdef _DEBUG_ +#include "input_simulator.h" +#endif static u8 sink_callback(void *userdata, u8 op, u8 type, void *opaque) { @@ -47,8 +50,15 @@ static void screen_callback(void *userdata, u8 op, void *opaque) case CAMU_SCREEN_RESEEK: camu_sink_reseek(&c->sink); break; - case CAMU_SCREEN_UNSET: - camu_sink_unset(&c->sink); + case CAMU_SCREEN_DEBUG: +#ifdef _DEBUG_ + if (camu_input_simulator_running()) { + camu_input_simulator_stop(); + } else { + camu_input_simulator_run(&c->sink); + } + //camu_sink_unset(&c->sink); +#endif break; case CAMU_SCREEN_VOLUME: { f64 amount = *(f64 *)opaque; @@ -111,6 +121,11 @@ bool camu_desktop_tick(struct camu_desktop *c) void camu_desktop_stop(struct camu_desktop *c) { +#ifdef _DEBUG_ + if (camu_input_simulator_running()) { + camu_input_simulator_stop(); + } +#endif camu_mixer_pause(&c->mixer); camu_mixer_clear(&c->mixer); camu_screen_set_state(&c->scr, CAMU_SCREEN_CLOSED); diff --git a/src/fruits/cmv/input_simulator.c b/src/sink/input_simulator.c index 7bc3125..b9c92ca 100644 --- a/src/fruits/cmv/input_simulator.c +++ b/src/sink/input_simulator.c @@ -3,14 +3,15 @@ #include "input_simulator.h" +// This is ignoring all thread-safety. +static s32 quit = 1; static struct aki_thread thread; -static s32 quit = 0; enum { SKIP = 0, BACKSKIP, SHUFFLE, - BASE, // count + MARK, // count TOGGLE_PAUSE, SEEK, }; @@ -20,7 +21,7 @@ static aki_thread_result AKI_THREADCALL input_simulation_thread(void *userdata) struct camu_sink *sink = (struct camu_sink *)userdata; while (!quit) { aki_thread_sleep(AKI_TS_FROM_USEC(30000)); - switch (al_rand() % BASE) { + switch (al_rand() % MARK) { case SKIP: camu_sink_skip(sink, (al_rand() % 5)); break; @@ -41,12 +42,18 @@ static aki_thread_result AKI_THREADCALL input_simulation_thread(void *userdata) return 0; } -void cmv_input_simulator_run(struct camu_sink *sink) +void camu_input_simulator_run(struct camu_sink *sink) { + quit = 0; aki_thread_create(&thread, input_simulation_thread, sink); } -void cmv_input_simulator_stop(void) +bool camu_input_simulator_running(void) +{ + return quit == 0; +} + +void camu_input_simulator_stop(void) { quit = 1; aki_thread_join(&thread); diff --git a/src/sink/input_simulator.h b/src/sink/input_simulator.h new file mode 100644 index 0000000..40253d0 --- /dev/null +++ b/src/sink/input_simulator.h @@ -0,0 +1,7 @@ +#pragma once + +#include "../libsink/sink.h" + +void camu_input_simulator_run(struct camu_sink *sink); +bool camu_input_simulator_running(void); +void camu_input_simulator_stop(void); diff --git a/src/sink/meson.build b/src/sink/meson.build index 73a9276..067b045 100644 --- a/src/sink/meson.build +++ b/src/sink/meson.build @@ -1,4 +1,7 @@ desktop_src = ['desktop.c'] +if is_debug + desktop_src += ['input_simulator.c'] +endif desktop_deps = [libsink] desktop_args = ['-DCAMU_MIXER_THREADED', '-DCAMU_SCREEN_THREADED'] desktop = declare_dependency(sources: desktop_src, dependencies: desktop_deps, |