SensorWatchでフェイス画面をプログラミングする場合、その都度時刻設定をしなければいけないため大変ですね。
これはSensorWatchにかぎったことではなく、iPhoneやAndroidアプリなんかでも同じ問題に遭遇します。
なんらかのタイミングによって処理を発生させたい場合に、その都度、設定画面から時刻を合わせていたのでは効率が悪いです。テストの効率を上げることが品質を高めることに繋がります。
(ちなみにiPhoneではコードから時刻変更はできなかったと思います。AndroidはRoot権限がないと無理だったと思います。)
ということで、今回はSensorWatchの時刻設定をコードからやる方法です。
setup関数があります。これはロード時一回しか呼ばれないので、ここで設定をすると良いです。またSetting構造体を取得できるタイミングなので、ここから設定値をいじってやるとよいです。(どこでも設定値をいじれるというわけではないようです。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void FACENAME_setup(movement_settings_t *settings, uint8_t watch_face_index, void ** context_ptr) { (void) settings; if (*context_ptr == NULL) { *context_ptr = malloc(sizeof(FACENAME_state_t)); memset(*context_ptr, 0, sizeof(FACENAME_state_t)); //debug 時刻の変更 watch_date_time datetime = watch_rtc_get_date_time(); datetime.unit.year = 2022 - WATCH_RTC_REFERENCE_YEAR; datetime.unit.month = 12; datetime.unit.day = 31; datetime.unit.hour = 23; datetime.unit.minute= 59; datetime.unit.second= 30; watch_rtc_set_date_time(datetime); //degug 設定値の変更 settings->bit.clock_mode_24h = true; //24時間表記 settings->bit.to_interval = 1;//0=60sec 1=2m 2=5m 3=30m watch_store_backup_data(settings->reg, 0); } } |
year の変更だけは定数からの差分を入れることに気をつけてください。
datetime構造体のYearデータは基準年(WATCH_RTC_REFERENCE_YEAR)からの差分で管理されています。