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

/*
* 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 */