diff options
-rw-r--r-- | .github/workflows/build.yml | 3 | ||||
-rw-r--r-- | make.mk | 11 | ||||
-rw-r--r-- | movement/alt_fw/alt_time.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/backer.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/deep_space_now.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/focus.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/the_athlete.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/the_backpacker.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/the_stargazer.h | 2 | ||||
-rw-r--r-- | movement/alt_fw/timers.h | 2 | ||||
-rwxr-xr-x | movement/make/make_alternate_fw.sh | 4 | ||||
-rw-r--r-- | movement/movement.c | 22 | ||||
-rw-r--r-- | movement/movement.h | 1 | ||||
-rw-r--r-- | movement/movement_config.h | 1 | ||||
-rw-r--r-- | movement/watch_faces/clock/repetition_minute_face.c | 14 | ||||
-rw-r--r-- | movement/watch_faces/clock/simple_clock_bin_led_face.c | 12 | ||||
-rw-r--r-- | movement/watch_faces/clock/simple_clock_face.c | 16 | ||||
-rw-r--r-- | movement/watch_faces/clock/weeknumber_clock_face.c | 12 | ||||
-rw-r--r-- | utils/movement_bulk_installer/standard-red.uf2 | bin | 217088 -> 217088 bytes | |||
-rw-r--r-- | watch-library/shared/watch/watch_private_display.c | 2 | ||||
-rw-r--r-- | watch-library/simulator/watch/watch_rtc.c | 5 |
21 files changed, 64 insertions, 55 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b150afb1..6b4fc793 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,6 +6,9 @@ on: branches-ignore: - gh-pages +env: + COLOR: BLUE + jobs: build: container: @@ -62,6 +62,7 @@ CFLAGS += -MD -MP -MT $(BUILD)/$(*F).o -MF $(BUILD)/$(@F).d LDFLAGS += -mcpu=cortex-m0plus -mthumb LDFLAGS += -Wl,--gc-sections LDFLAGS += -Wl,--script=$(TOP)/watch-library/hardware/linker/saml22j18.ld +LDFLAGS += -Wl,--print-memory-usage LIBS += -lm @@ -207,7 +208,15 @@ ifeq ($(LED), BLUE) CFLAGS += -DWATCH_IS_BLUE_BOARD endif -ifeq ($(LED), RED) +ifndef COLOR +$(error Set the COLOR variable to RED, BLUE, or GREEN depending on what board you have.) +endif + +ifeq ($(COLOR), BLUE) +CFLAGS += -DWATCH_IS_BLUE_BOARD +endif + +ifeq ($(COLOR), RED) CFLAGS += -DWATCH_INVERT_LED_POLARITY CFLAGS += -DNO_FREQCORR endif diff --git a/movement/alt_fw/alt_time.h b/movement/alt_fw/alt_time.h index 8108bcf3..956928d7 100644 --- a/movement/alt_fw/alt_time.h +++ b/movement/alt_fw/alt_time.h @@ -38,4 +38,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/backer.h b/movement/alt_fw/backer.h index 3abcf457..d41f567d 100644 --- a/movement/alt_fw/backer.h +++ b/movement/alt_fw/backer.h @@ -40,4 +40,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/deep_space_now.h b/movement/alt_fw/deep_space_now.h index 6cb34237..d2096a69 100644 --- a/movement/alt_fw/deep_space_now.h +++ b/movement/alt_fw/deep_space_now.h @@ -58,4 +58,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/focus.h b/movement/alt_fw/focus.h index ab5525a5..a8fd5736 100644 --- a/movement/alt_fw/focus.h +++ b/movement/alt_fw/focus.h @@ -40,4 +40,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/the_athlete.h b/movement/alt_fw/the_athlete.h index 5d9d9529..660a304c 100644 --- a/movement/alt_fw/the_athlete.h +++ b/movement/alt_fw/the_athlete.h @@ -40,4 +40,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/the_backpacker.h b/movement/alt_fw/the_backpacker.h index 01af7b06..0a599cff 100644 --- a/movement/alt_fw/the_backpacker.h +++ b/movement/alt_fw/the_backpacker.h @@ -41,4 +41,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/the_stargazer.h b/movement/alt_fw/the_stargazer.h index a13dc3ac..844c6807 100644 --- a/movement/alt_fw/the_stargazer.h +++ b/movement/alt_fw/the_stargazer.h @@ -42,4 +42,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/alt_fw/timers.h b/movement/alt_fw/timers.h index c4d27f50..4d36c664 100644 --- a/movement/alt_fw/timers.h +++ b/movement/alt_fw/timers.h @@ -40,4 +40,6 @@ const watch_face_t watch_faces[] = { #define MOVEMENT_NUM_FACES (sizeof(watch_faces) / sizeof(watch_face_t)) +#define SIGNAL_TUNE_DEFAULT + #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/make/make_alternate_fw.sh b/movement/make/make_alternate_fw.sh index d1ce7673..c65e72d3 100755 --- a/movement/make/make_alternate_fw.sh +++ b/movement/make/make_alternate_fw.sh @@ -2,7 +2,7 @@ fw_dir="firmware/download" sim_dir="firmware/simulate" -colors=("green" "blue") +colors=("green" "blue" "red") variants=("standard" "backer" "alt_time" "deep_space_now" "focus" "the_athlete" "the_backpacker" "the_stargazer") if [ -d "$fw_dir" ] ; then @@ -22,7 +22,7 @@ do do COLOR=$(echo "$color" | tr '[:lower:]' '[:upper:]') make clean - make LED=$COLOR FIRMWARE=$VARIANT + make COLOR=$COLOR FIRMWARE=$VARIANT mv "build/watch.uf2" "$fw_dir/$variant-$color.uf2" done rm -rf ./build-sim diff --git a/movement/movement.c b/movement/movement.c index 0a5ac2e4..f0868416 100644 --- a/movement/movement.c +++ b/movement/movement.c @@ -54,6 +54,8 @@ #include "alt_fw/deep_space_now.h" #endif +#include "movement_custom_signal_tunes.h" + // Default to no secondary face behaviour. #ifndef MOVEMENT_SECONDARY_FACE_INDEX #define MOVEMENT_SECONDARY_FACE_INDEX 0 @@ -292,7 +294,25 @@ void movement_request_wake() { } void movement_play_signal(void) { - watch_buzzer_play_sequence(signal_tune, NULL); + bool buzzer_enabled = watch_is_buzzer_or_led_enabled(); + if (!buzzer_enabled) { + watch_enable_buzzer(); + } + watch_buzzer_play_note(BUZZER_NOTE_C8, 75); + watch_buzzer_play_note(BUZZER_NOTE_REST, 100); + watch_buzzer_play_note(BUZZER_NOTE_C8, 100); + if (!buzzer_enabled) { + watch_disable_buzzer(); + } +} + +void movement_play_tune(void) { + if (!watch_is_buzzer_or_led_enabled()) { + watch_enable_buzzer(); + watch_buzzer_play_sequence(signal_tune, watch_disable_buzzer); + } else { + watch_buzzer_play_sequence(signal_tune, NULL); + } } void movement_play_alarm(void) { diff --git a/movement/movement.h b/movement/movement.h index 66bf6af4..5f30dfb8 100644 --- a/movement/movement.h +++ b/movement/movement.h @@ -307,6 +307,7 @@ void movement_cancel_background_task_for_face(uint8_t watch_face_index); void movement_request_wake(void); void movement_play_signal(void); +void movement_play_tune(void); void movement_play_alarm(void); void movement_play_alarm_beeps(uint8_t rounds, BuzzerNote alarm_note); diff --git a/movement/movement_config.h b/movement/movement_config.h index 1bd15133..6a7f87e0 100644 --- a/movement/movement_config.h +++ b/movement/movement_config.h @@ -51,6 +51,5 @@ const watch_face_t watch_faces[] = { /* Custom hourly chime tune. Check movement_custom_signal_tunes.h for options */ #define SIGNAL_TUNE_DEFAULT -#include "movement_custom_signal_tunes.h" #endif // MOVEMENT_CONFIG_H_ diff --git a/movement/watch_faces/clock/repetition_minute_face.c b/movement/watch_faces/clock/repetition_minute_face.c index a0fbe077..fc78b2d8 100644 --- a/movement/watch_faces/clock/repetition_minute_face.c +++ b/movement/watch_faces/clock/repetition_minute_face.c @@ -151,19 +151,7 @@ bool repetition_minute_face_loop(movement_event_t event, movement_settings_t *se else watch_clear_indicator(WATCH_INDICATOR_BELL); break; case EVENT_BACKGROUND_TASK: - // uncomment this line to snap back to the clock face when the hour signal sounds: - // movement_move_to_face(state->watch_face_index); - if (watch_is_buzzer_or_led_enabled()) { - // if we are in the foreground, we can just beep. - movement_play_signal(); - } else { - // if we were in the background, we need to enable the buzzer peripheral first, - watch_enable_buzzer(); - // beep quickly (this call blocks for 275 ms), - movement_play_signal(); - // and then turn the buzzer peripheral off again. - watch_disable_buzzer(); - } + movement_play_signal(); break; case EVENT_LIGHT_LONG_UP: /* diff --git a/movement/watch_faces/clock/simple_clock_bin_led_face.c b/movement/watch_faces/clock/simple_clock_bin_led_face.c index 640f0d77..cf39c188 100644 --- a/movement/watch_faces/clock/simple_clock_bin_led_face.c +++ b/movement/watch_faces/clock/simple_clock_bin_led_face.c @@ -180,17 +180,7 @@ bool simple_clock_bin_led_face_loop(movement_event_t event, movement_settings_t case EVENT_BACKGROUND_TASK: // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); - if (watch_is_buzzer_or_led_enabled()) { - // if we are in the foreground, we can just beep. - movement_play_signal(); - } else { - // if we were in the background, we need to enable the buzzer peripheral first, - watch_enable_buzzer(); - // beep quickly (this call blocks for 275 ms), - movement_play_signal(); - // and then turn the buzzer peripheral off again. - watch_disable_buzzer(); - } + movement_play_signal(); break; case EVENT_LIGHT_LONG_PRESS: if (state->flashing_state == 0) { diff --git a/movement/watch_faces/clock/simple_clock_face.c b/movement/watch_faces/clock/simple_clock_face.c index 91400b6c..ac9a97b2 100644 --- a/movement/watch_faces/clock/simple_clock_face.c +++ b/movement/watch_faces/clock/simple_clock_face.c @@ -136,17 +136,11 @@ bool simple_clock_face_loop(movement_event_t event, movement_settings_t *setting case EVENT_BACKGROUND_TASK: // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); - if (watch_is_buzzer_or_led_enabled()) { - // if we are in the foreground, we can just beep. - movement_play_signal(); - } else { - // if we were in the background, we need to enable the buzzer peripheral first, - watch_enable_buzzer(); - // beep quickly (this call blocks for 275 ms), - movement_play_signal(); - // and then turn the buzzer peripheral off again. - watch_disable_buzzer(); - } + #ifdef SIGNAL_TUNE_DEFAULT + movement_play_signal(); + #else + movement_play_tune(); + #endif break; default: return movement_default_loop_handler(event, settings); diff --git a/movement/watch_faces/clock/weeknumber_clock_face.c b/movement/watch_faces/clock/weeknumber_clock_face.c index 4e40ebdc..81df5847 100644 --- a/movement/watch_faces/clock/weeknumber_clock_face.c +++ b/movement/watch_faces/clock/weeknumber_clock_face.c @@ -130,17 +130,7 @@ bool weeknumber_clock_face_loop(movement_event_t event, movement_settings_t *set case EVENT_BACKGROUND_TASK: // uncomment this line to snap back to the clock face when the hour signal sounds: // movement_move_to_face(state->watch_face_index); - if (watch_is_buzzer_or_led_enabled()) { - // if we are in the foreground, we can just beep. - movement_play_signal(); - } else { - // if we were in the background, we need to enable the buzzer peripheral first, - watch_enable_buzzer(); - // beep quickly (this call blocks for 275 ms), - movement_play_signal(); - // and then turn the buzzer peripheral off again. - watch_disable_buzzer(); - } + movement_play_signal(); break; default: movement_default_loop_handler(event, settings); diff --git a/utils/movement_bulk_installer/standard-red.uf2 b/utils/movement_bulk_installer/standard-red.uf2 Binary files differindex 385c611a..b74e539c 100644 --- a/utils/movement_bulk_installer/standard-red.uf2 +++ b/utils/movement_bulk_installer/standard-red.uf2 diff --git a/watch-library/shared/watch/watch_private_display.c b/watch-library/shared/watch/watch_private_display.c index 245b20ed..c12957d9 100644 --- a/watch-library/shared/watch/watch_private_display.c +++ b/watch-library/shared/watch/watch_private_display.c @@ -93,7 +93,7 @@ void watch_display_character(uint8_t character, uint8_t position) { } if (character == 'T' && position == 1) watch_set_pixel(1, 12); // add descender - else if (position == 0 && (character == 'B' || character == 'D')) watch_set_pixel(0, 15); // add funky ninth segment + else if (position == 0 && (character == 'B' || character == 'D' || character == '@')) watch_set_pixel(0, 15); // add funky ninth segment else if (position == 1 && (character == 'B' || character == 'D' || character == '@')) watch_set_pixel(0, 12); // add funky ninth segment } diff --git a/watch-library/simulator/watch/watch_rtc.c b/watch-library/simulator/watch/watch_rtc.c index fa80d6b4..f6279eed 100644 --- a/watch-library/simulator/watch/watch_rtc.c +++ b/watch-library/simulator/watch/watch_rtc.c @@ -97,8 +97,7 @@ void watch_rtc_register_periodic_callback(ext_irq_cb_t callback, uint8_t frequen // 0x01 (1 Hz) will have 7 leading zeros for PER7. 0xF0 (128 Hz) will have no leading zeroes for PER0. uint8_t per_n = __builtin_clz(tmp); - // this also maps nicely to an index for our list of tick callbacks. - double interval = 1000 / frequency; // in msec + double interval = 1000.0 / frequency; // in msec if (tick_callbacks[per_n] != -1) emscripten_clear_interval(tick_callbacks[per_n]); tick_callbacks[per_n] = emscripten_set_interval(watch_invoke_periodic_callback, interval, (void *)callback); @@ -115,7 +114,7 @@ void watch_rtc_disable_periodic_callback(uint8_t frequency) { void watch_rtc_disable_matching_periodic_callbacks(uint8_t mask) { for (int i = 0; i < 8; i++) { - if (tick_callbacks[i] != -1 && (mask & (1 << (7 - i))) != 0) { + if (tick_callbacks[i] != -1 && (mask & (1 << i)) != 0) { emscripten_clear_interval(tick_callbacks[i]); tick_callbacks[i] = -1; } |