summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml3
-rw-r--r--make.mk11
-rw-r--r--movement/alt_fw/alt_time.h2
-rw-r--r--movement/alt_fw/backer.h2
-rw-r--r--movement/alt_fw/deep_space_now.h2
-rw-r--r--movement/alt_fw/focus.h2
-rw-r--r--movement/alt_fw/the_athlete.h2
-rw-r--r--movement/alt_fw/the_backpacker.h2
-rw-r--r--movement/alt_fw/the_stargazer.h2
-rw-r--r--movement/alt_fw/timers.h2
-rwxr-xr-xmovement/make/make_alternate_fw.sh4
-rw-r--r--movement/movement.c22
-rw-r--r--movement/movement.h1
-rw-r--r--movement/movement_config.h1
-rw-r--r--movement/watch_faces/clock/repetition_minute_face.c14
-rw-r--r--movement/watch_faces/clock/simple_clock_bin_led_face.c12
-rw-r--r--movement/watch_faces/clock/simple_clock_face.c16
-rw-r--r--movement/watch_faces/clock/weeknumber_clock_face.c12
-rw-r--r--utils/movement_bulk_installer/standard-red.uf2bin217088 -> 217088 bytes
-rw-r--r--watch-library/shared/watch/watch_private_display.c2
-rw-r--r--watch-library/simulator/watch/watch_rtc.c5
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:
diff --git a/make.mk b/make.mk
index bf61708c..955ea310 100644
--- a/make.mk
+++ b/make.mk
@@ -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
index 385c611a..b74e539c 100644
--- a/utils/movement_bulk_installer/standard-red.uf2
+++ b/utils/movement_bulk_installer/standard-red.uf2
Binary files differ
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;
}