From 0c9ba54a00f50532bd045b8e663dff0df7f44b08 Mon Sep 17 00:00:00 2001 From: gitknilch Date: Sat, 19 Mar 2011 21:17:43 +0100 Subject: [PATCH] add showcfg program --- firmware/fnordlicht-firmware/fnordlicht.c | 19 +++--- .../fnordlicht-firmware/static_programs.c | 59 +++++++++++++++++++ .../fnordlicht-firmware/static_programs.h | 3 +- 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/firmware/fnordlicht-firmware/fnordlicht.c b/firmware/fnordlicht-firmware/fnordlicht.c index f0b011b..62c4e40 100644 --- a/firmware/fnordlicht-firmware/fnordlicht.c +++ b/firmware/fnordlicht-firmware/fnordlicht.c @@ -44,19 +44,14 @@ static void startup(void) if (storage_valid_config()) { /* set global address to stored value */ global_remote.address = startup_config.startup_addr; + } - /* read default mode from storage (do nothing if mode is invalid) */ - if (startup_config.params.mode == STARTUP_PROGRAM) { - /* start program */ - script_start(0, startup_config.params.program, (union program_params_t *)startup_config.params.program_parameters); - } - } else { - /* start default program */ - script_start_default(); - -#if !CONFIG_SCRIPT - /* or set some default color */ - global_pwm.target.red = 50; +#if CONFIG_SCRIPT + /* start default program: showcfg FIXME cleanup magic values */ + script_start(0u, 4u, (union program_params_t *)startup_config.params.program_parameters); +#else + /* or set some default color */ + global_pwm.target.red = 50u; #endif } } diff --git a/firmware/fnordlicht-firmware/static_programs.c b/firmware/fnordlicht-firmware/static_programs.c index c437fe7..d5a79e0 100644 --- a/firmware/fnordlicht-firmware/static_programs.c +++ b/firmware/fnordlicht-firmware/static_programs.c @@ -37,8 +37,67 @@ PROGMEM program_handler static_programs[] = { program_colorwheel, program_random, program_replay, + program_showcfg, }; +PT_THREAD(program_showcfg(struct process_t *process)) +{ + static uint16_t sleep; + struct rgb_color_t c, d; + + PT_BEGIN(&process->pt); + + c.red = (remote_address() & 0x01u) * 128u; + c.green = (remote_address() & 0x02u) * 128u; + c.blue = (remote_address() & 0x04u) * 128u; + + d.red = d.green = d.blue = 128u; + + pwm_fade_rgb(&d, 0xffu, 0); + + PT_WAIT_UNTIL(&process->pt, pwm_target_reached()); + + /* sleep .5s (remember: we are called every 100ms) */ + sleep = 5; + while (sleep--) + PT_YIELD(&process->pt); + + pwm_fade_rgb(&c, 0xffu, 0); + + PT_WAIT_UNTIL(&process->pt, pwm_target_reached()); + + /* sleep 1s (remember: we are called every 100ms) */ + sleep = 10; + while (sleep--) + PT_YIELD(&process->pt); + pwm_fade_rgb(&d, 0xffu, 0); + + PT_WAIT_UNTIL(&process->pt, pwm_target_reached()); + + /* sleep .5s (remember: we are called every 100ms) */ + sleep = 5; + while (sleep--) + PT_YIELD(&process->pt); + + pwm_fade_rgb(&c, 0xffu, 0); + + PT_WAIT_UNTIL(&process->pt, pwm_target_reached()); + + /* sleep 1s (remember: we are called every 100ms) */ + sleep = 10; + while (sleep--) + PT_YIELD(&process->pt); + + /* now start default script */ + if (storage_valid_config() && (startup_config.params.mode == STARTUP_PROGRAM)) { + script_start(0, startup_config.params.program, (union program_params_t *)startup_config.params.program_parameters); + } else { + script_start_default(); + } + + PT_END(&process->pt); +} + PT_THREAD(program_colorwheel(struct process_t *process)) { static uint16_t sleep; diff --git a/firmware/fnordlicht-firmware/static_programs.h b/firmware/fnordlicht-firmware/static_programs.h index b544db5..7b3cc3f 100644 --- a/firmware/fnordlicht-firmware/static_programs.h +++ b/firmware/fnordlicht-firmware/static_programs.h @@ -90,12 +90,13 @@ struct process_t { #if CONFIG_SCRIPT /* global list of programs */ -#define STATIC_PROGRAMS_LEN 3 +#define STATIC_PROGRAMS_LEN 4 extern program_handler static_programs[]; PT_THREAD(program_colorwheel(struct process_t *process)); PT_THREAD(program_random(struct process_t *process)); PT_THREAD(program_replay(struct process_t *process)); +PT_THREAD(program_showcfg(struct process_t *process)); #endif #endif -- 2.39.2