You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
3.0 KiB
61 lines
3.0 KiB
/* |
|
* standby.h — режим standby с duty-cycle (активный/неактивный интервалы) |
|
* |
|
* Для chatgui-android: когда приложение в фоне, вместо постоянной работы |
|
* узел периодически просыпается: ACTIVE (X сек) → SLEEP (Y сек) → ACTIVE ... |
|
* |
|
* Потребители периодической работы используют standby_wait(): колбэк |
|
* срабатывает на старте следующего активного интервала, а при выходе из |
|
* standby (приложение вернулось в форграунд) — немедленно. |
|
*/ |
|
#ifndef STANDBY_H |
|
#define STANDBY_H |
|
|
|
#include "u_async.h" |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
struct UTUN_INSTANCE; |
|
|
|
/* Привязать модуль к uasync. Вызывается после каждого uasync_create(). */ |
|
void standby_init(struct UASYNC* ua); |
|
|
|
/* Отмена таймеров и освобождение пула (без вызова колбэков). */ |
|
void standby_deinit(void); |
|
|
|
/* Включить/выключить standby-режим. Логирует вход/выход (GENERAL info) |
|
* и вызывает switch-callback. Флаг дублируется в inst->standby_enabled. */ |
|
void standby_set_enabled(struct UTUN_INSTANCE* inst, int enabled); |
|
int standby_is_enabled(void); |
|
|
|
/* Колбэк, вызываемый при каждом переключении standby-режима. */ |
|
void standby_set_switch_callback(void (*cb)(int enabled, void* arg), void* arg); |
|
|
|
/* Сколько TB спать сейчас (0 = активный интервал или standby выключен). */ |
|
int standby_get_sleep_tb(void); |
|
|
|
/* Сколько TB осталось активного режима (0 = спим или standby выключен). */ |
|
int standby_get_active_remaining_tb(void); |
|
|
|
/* Ждёт до начала следующего активного интервала (как uasync timeout). |
|
* При выходе из standby таймер отменяется и cb вызывается немедленно. |
|
* Возвращает handle для standby_wait_cancel(). */ |
|
void* standby_wait(void* arg, void (*cb)(void* arg)); |
|
void standby_wait_cancel(void* handle); |
|
|
|
/* Уведомление о внешней сетевой активности (Android ConnectivityManager). |
|
* В фазе SLEEP после min_sleep пробуждает досрочно; иначе игнорируется. |
|
* Вызывается на uasync-потоке. */ |
|
void standby_notify_network_activity(void); |
|
|
|
/* Переопределить интервалы (мс), минуя chat_setting. Для тестов. |
|
* active_ms/sleep_ms <= 0 → вернуться к chat_setting. |
|
* min_sleep_ms может быть 0 (реагировать на сетевую активность сразу). */ |
|
void standby_set_intervals_ms(int active_ms, int sleep_ms, int min_sleep_ms); |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
#endif /* STANDBY_H */
|
|
|