mirror of
https://github.com/google/pebble
synced 2026-10-17 08:44:11 +02:00
Import of the watch repository from Pebble
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2024 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "util/list.h"
|
||||
|
||||
typedef void (*RegularTimerCallback)(void* data);
|
||||
|
||||
typedef struct RegularTimerInfo {
|
||||
ListNode list_node;
|
||||
RegularTimerCallback cb;
|
||||
void* cb_data;
|
||||
|
||||
// the following fields are for internal use by the regular timer service and should not be touched
|
||||
uint16_t private_reset_count;
|
||||
uint16_t private_count;
|
||||
bool is_executing;
|
||||
bool pending_delete;
|
||||
} RegularTimerInfo;
|
||||
|
||||
void regular_timer_init(void);
|
||||
|
||||
//! Add a callback that will be called every second.
|
||||
void regular_timer_add_seconds_callback(RegularTimerInfo* cb);
|
||||
//! Add a callback that will be called every n seconds. This can also be called to change the schedule of an existing
|
||||
//! seconds timer, from inside or outside the callback procedure.
|
||||
void regular_timer_add_multisecond_callback(RegularTimerInfo* cb, uint16_t seconds);
|
||||
|
||||
//! Add a callback that will be called every minute
|
||||
void regular_timer_add_minutes_callback(RegularTimerInfo* cb);
|
||||
//! Add a callback that will be called every n minutes. This can also be called to change the schedule of an existing
|
||||
//! minute timer, from inside or outside the callback procedure.
|
||||
void regular_timer_add_multiminute_callback(RegularTimerInfo* cb, uint16_t minutes);
|
||||
|
||||
//! Remove a callback already registered for either seconds or minutes.
|
||||
//! WARNING: If you call this from your callback procedure, you are NOT allowed to free up the memory used for
|
||||
//! the RegulartTimerInfo structure until after your callback exits!
|
||||
//! @return true iff the timer was successfully stopped (false may indicate no timer was
|
||||
//! scheduled at all or the cb is currently executing)
|
||||
bool regular_timer_remove_callback(RegularTimerInfo* cb);
|
||||
|
||||
//! Check if a regular timer is currently scheduled
|
||||
//! @params cb pointer to the RegularTimerInfo struct for the timer
|
||||
//! @returns true if scheduled or pending deletion, false otherwise
|
||||
bool regular_timer_is_scheduled(RegularTimerInfo *cb);
|
||||
|
||||
//! Check if a regular timer is pending deletion. This means the timer
|
||||
//! has been unscheduled but is in the process of executing
|
||||
//! TODO: It would probably make sense to just fold this into the logic
|
||||
//! for _is_scheduled() once we verify no consumers are relying on
|
||||
//! this odd behavior
|
||||
//! @params cb pointer to the RegularTimerInfo struct for the timer
|
||||
bool regular_timer_pending_deletion(RegularTimerInfo *cb);
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// For testing:
|
||||
|
||||
void regular_timer_deinit(void);
|
||||
|
||||
//! Fires the second callbacks, for which (seconds_interval % secs) is 0.
|
||||
void regular_timer_fire_seconds(uint8_t secs);
|
||||
|
||||
//! Fires the minutes callbacks, for which (minutes_interval % mins) is 0.
|
||||
void regular_timer_fire_minutes(uint8_t mins);
|
||||
|
||||
//! The number of registered (multi) second callbacks.
|
||||
uint32_t regular_timer_seconds_count(void);
|
||||
|
||||
//! The number of registered (multi) minute callbacks.
|
||||
uint32_t regular_timer_minutes_count(void);
|
||||
Reference in New Issue
Block a user