нл:: Переплетение:: Система:: Слой
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
Краткое содержание
Для WEAVE_SYSTEM_CONFIG_USE_SOCKETS
уведомление о готовности события обрабатывается посредством традиционной реализации опроса/выбора в адаптации платформы.
Для WEAVE_SYSTEM_CONFIG_USE_LWIP
уведомление о готовности события обрабатывается через события/сообщения и специфичные для платформы и системы перехватчики для системы событий/сообщений.
Конструкторы и деструкторы | |
---|---|
Layer (void) |
Публичные типы | |
---|---|
EventHandler )(Object &aTarget, EventType aEventType, uintptr_t aArgument) | определение типаError(* |
TimerCompleteFunct )(Layer *aLayer, void *aAppState, Error aError) | определение типаvoid(* |
Общественные функции | |
---|---|
AddEventHandlerDelegate ( LwIPEventHandlerDelegate & aDelegate) | Error Это добавляет делегат обработчика событий на системный уровень, чтобы расширить его возможности по обработке событий LwIP. |
CancelTimer (TimerCompleteFunct aOnComplete, void *aAppState) | void Этот метод отменяет одноразовый таймер, запущенный ранее с помощью StartTimer() . |
DispatchEvent (Event aEvent) | Error Это отправляет указанное событие для обработки этим экземпляром. |
DispatchEvents (void) | Error Это синтаксическая оболочка вокруг специфичного для платформы перехватчика, который запускает цикл событий, ожидая очереди, обслуживающей этот экземпляр, извлекая события из этой очереди и затем отправляя их для обработки. |
GetPlatformData (void) const | void * Это возвращает любые данные платформы, специфичные для клиента, назначенные экземпляру, если они были установлены ранее. |
HandleEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument) | Error Это реализует фактическую отправку и обработку события уровня системы Weave. |
HandlePlatformTimer (void) | Error Обработка события истечения срока действия таймера платформы. |
HandleSelectResult (int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet) | void Обработка ввода-вывода из выбранного вызова. |
Init (void *aContext) | Error |
NewTimer ( Timer *& aTimerPtr) | Error |
PostEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument) | Error Это отправляет событие/сообщение указанного типа с предоставленным аргументом в очередь событий для конкретной платформы этого экземпляра. |
PrepareSelect (int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime) | void Подготовьте наборы файловых дескрипторов для работы select() . |
ScheduleWork (TimerCompleteFunct aComplete, void *aAppState) | Error Планирует как можно скорее запустить функцию с сигнатурой, идентичной TimerCompleteFunct , в потоке Weave. |
SetPlatformData (void *aPlatformData) | void При этом указанные данные платформы, специфичные для клиента, устанавливаются в экземпляр для последующего извлечения клиентской платформой. |
Shutdown (void) | Error |
StartTimer (uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState) | Error Этот метод запускает однократный таймер. |
State (void) const | LayerState Это возвращает текущее состояние объекта слоя. |
WakeSelect (void) | void Разбудите поток ввода-вывода, который отслеживает файловые дескрипторы с помощью select(), записав один байт в канал пробуждения. |
Публичные статические функции | |
---|---|
GetClock_Monotonic (void) | uint64_t Возвращает монотонное системное время в микросекундах. |
GetClock_MonotonicHiRes (void) | uint64_t Возвращает монотонное системное время (потенциально) высокого разрешения в микросекундах. |
GetClock_MonotonicMS (void) | uint64_t Возвращает монотонное системное время в миллисекундах. |
GetClock_RealTime (uint64_t & curTime) | Error Возвращает текущее реальное (гражданское) время в микросекундном формате времени Unix. |
GetClock_RealTimeMS (uint64_t & curTimeMS) | Error Возвращает текущее реальное (гражданское) время в миллисекундном формате времени Unix. |
SetClock_RealTime (uint64_t newCurTime) | Error Устанавливает представление платформы о текущем реальном (гражданском) времени. |
Публичные типы
Обработчик событий
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
ТаймерЗавершенФункция
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Общественные функции
Аддэвентхандлерделегате
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
Это добавляет делегат обработчика событий на системный уровень, чтобы расширить его возможности по обработке событий LwIP.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
ОтменаТаймер
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Этот метод отменяет одноразовый таймер, запущенный ранее с помощью StartTimer()
.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Это отправляет указанное событие для обработки этим экземпляром.
Демаршалинг типа и аргументов события обрабатывается специфичным для платформы хуком, который затем должен вызывать Layer::HandleEvent для фактической отправки.
Подробности | |||
---|---|---|---|
Параметры |
| ||
Возврат | WEAVE_SYSTEM_NO_ERROR в случае успеха; в противном случае — конкретная ошибка, указывающая причину сбоя инициализации. |
Отправка событий
Error DispatchEvents( void )
Это синтаксическая оболочка вокруг специфичного для платформы перехватчика, который запускает цикл событий, ожидая очереди, обслуживающей этот экземпляр, извлекая события из этой очереди и затем отправляя их для обработки.
Подробности | |
---|---|
Возврат | WEAVE_SYSTEM_NO_ERROR в случае успеха; в противном случае — конкретная ошибка, указывающая причину сбоя инициализации. |
Получить данные платформы
void * GetPlatformData( void ) const
Это возвращает любые данные платформы, специфичные для клиента, назначенные экземпляру, если они были установлены ранее.
Подробности | |
---|---|
Возврат | Данные платформы, специфичные для клиента, если они были установлены ранее; в противном случае НУЛЬ. |
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Это реализует фактическую отправку и обработку события уровня системы Weave.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
РучкаПлатформаТаймер
Error HandlePlatformTimer( void )
Обработка события истечения срока действия таймера платформы.
Вызывает nl::Weave::System::Timer::HandleExpiredTimers для обработки таймеров с истекшим сроком действия. Предполагается, что этот API вызывается только в потоке, которому принадлежит объект уровня системы Weave.
Подробности | |
---|---|
Возврат | WEAVE_SYSTEM_NO_ERROR в случае успеха, в противном случае — код ошибки. |
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Обработка ввода-вывода из выбранного вызова.
Этот метод регистрирует ожидающее событие ввода-вывода в каждой активной конечной точке, а затем вызывает соответствующие функции обработки ввода-вывода для этих конечных точек.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
|
Инициализировать
Error Init( void *aContext )
Слой
Layer( void )
НовыйТаймер
Error NewTimer( Timer *& aTimerPtr )
ПостСобытие
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Это отправляет событие/сообщение указанного типа с предоставленным аргументом в очередь событий для конкретной платформы этого экземпляра.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||
Возвращаемые значения |
|
ПодготовитьВыбрать
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Подготовьте наборы файловых дескрипторов для работы select()
.
Подробности | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
|
График работы
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Планирует как можно скорее запустить функцию с сигнатурой, идентичной TimerCompleteFunct
, в потоке Weave.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
При этом указанные данные платформы, специфичные для клиента, устанавливаются в экземпляр для последующего извлечения клиентской платформой.
Подробности | |||
---|---|---|---|
Параметры |
|
Неисправность
Error Shutdown( void )
Старттаймер
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Этот метод запускает однократный таймер.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возврат | WEAVE_SYSTEM_NO_ERROR В случае успеха. | ||||||
Возврат | WEAVE_SYSTEM_ERROR_NO_MEMORY Если таймер не может быть назначен. | ||||||
Возврат | Другое значение, указывающее, что таймер не запустился. |
Состояние
LayerState State( void ) const
Это возвращает текущее состояние объекта слоя.
ПробуждениеВыбрать
void WakeSelect( void )
Разбудите поток ввода-вывода, который отслеживает файловые дескрипторы с помощью select(), записав один байт в канал пробуждения.
Примечание. Если WakeSelect()
вызывается из HandleSelectResult()
, запись в канал пробуждения можно пропустить, поскольку поток ввода-вывода уже активен. Более того, нас не волнует, если эта запись завершится неудачей, поскольку единственным разумно вероятным сбоем является то, что канал заполнен, и в этом случае поток вызова select все равно проснется.
Публичные статические функции
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Возвращает монотонное системное время в микросекундах.
Эта функция возвращает время в микросекундах, прошедшее с произвольной, определенной платформой эпохи. Возвращаемое значение гарантированно будет постоянно увеличиваться (т. е. никогда не будет переноситься) между перезагрузками системы. Кроме того, базовый источник времени гарантированно будет непрерывно тикать во время любых режимов сна системы, которые не влекут за собой перезапуск после пробуждения.
Хотя некоторые платформы могут возвращать значение, измеряющее время, прошедшее с момента загрузки системы, приложения не должны на это полагаться. Кроме того, эпоха для GetClock_Monotonic() не обязательно должна совпадать с эпохой для любой другой функции GetClock.... Поэтому вычисления относительного времени могут выполняться только для значений, возвращаемых одной и той же функцией.
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |
---|---|
Возврат | Прошедшее время в микросекундах с произвольной, определяемой платформой эпохи. |
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Возвращает монотонное системное время (потенциально) высокого разрешения в микросекундах.
Эта функция возвращает время в микросекундах, прошедшее с произвольной, определенной платформой эпохи. Возвращаемое значение гарантированно будет постоянно увеличиваться (т. е. никогда не будет переноситься) между перезагрузками системы. Однако базовый таймер не обязан работать непрерывно во время состояния глубокого сна системы.
Некоторые платформы могут реализовать GetClock_MonotonicHiRes() с использованием таймера высокого разрешения, обеспечивающего большую точность, чем GetClock_Monotonic() , и не подверженного постепенной корректировке часов (повороту). Системы без такого таймера могут просто возвращать то же значение, что и GetClock_Monotonic() .
Эпоха времени, возвращаемая GetClock_MonotonicHiRes(), не обязательно должна совпадать с эпохой для любой другой функции GetClock..., включая GetClock_Monotonic() .
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |
---|---|
Возврат | Прошедшее время в микросекундах с произвольной, определяемой платформой эпохи. |
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Возвращает монотонное системное время в миллисекундах.
Эта функция возвращает время в миллисекундах, прошедшее с произвольной, определенной платформой эпохи. Возвращаемое значение гарантированно будет постоянно увеличиваться (т. е. никогда не будет переноситься) между перезагрузками системы. Кроме того, базовый источник времени гарантированно будет непрерывно тикать во время любых режимов сна системы, которые не влекут за собой перезапуск после пробуждения.
Хотя некоторые платформы могут возвращать значение, измеряющее время, прошедшее с момента загрузки системы, приложения не должны на это полагаться. Кроме того, эпоха для GetClock_Monotonic() не обязательно должна совпадать с эпохой для любой другой функции GetClock.... Поэтому вычисления относительного времени могут выполняться только для значений, возвращаемых одной и той же функцией.
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |
---|---|
Возврат | Прошедшее время в миллисекундах с произвольной, определяемой платформой эпохи. |
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
Возвращает текущее реальное (гражданское) время в микросекундном формате времени Unix.
Этот метод возвращает представление локальной платформы о текущем реальном времени, выраженное как значение времени Unix, масштабированное до микросекунд. Базовые часы гарантированно тикают со скоростью не менее целых секунд (значения 1 000 000), но на некоторых платформах могут идти быстрее.
Если базовая платформа способна отслеживать в реальном времени, но система в данный момент не синхронизирована, GetClock_RealTime() вернет ошибку WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
На платформах, которые не способны отслеживать в реальном времени, метод GetClock_RealTime() может отсутствовать, что приводит к ошибке связи для любого приложения, которое ссылается на него. В качестве альтернативы такие платформы могут предоставлять реализацию GetClock_RealTime() , которая всегда возвращает ошибку WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Возвращает текущее реальное (гражданское) время в миллисекундном формате времени Unix.
Этот метод возвращает представление локальной платформы о текущем реальном времени, выраженное как значение времени Unix, масштабированное до миллисекунд. Базовые часы гарантированно тикают со скоростью не менее целых секунд (значения 1 000 000), но на некоторых платформах могут идти быстрее.
Если базовая платформа способна отслеживать в реальном времени, но система в данный момент не синхронизирована, GetClock_RealTimeMS() вернет ошибку WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
На платформах, которые не способны отслеживать в реальном времени, метод GetClock_RealTimeMS() может отсутствовать, что приводит к ошибке связи для любого приложения, которое ссылается на него. В качестве альтернативы такие платформы могут предоставлять реализацию GetClock_RealTimeMS() , которая всегда возвращает ошибку WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Устанавливает представление платформы о текущем реальном (гражданском) времени.
Приложения могут вызывать эту функцию, чтобы установить представление локальной платформы о текущем реальном времени. Новое текущее время выражается как значение времени Unix, масштабированное до микросекунд.
После установки базовые часы платформы гарантированно отслеживают реальное время с точностью не менее целых секунд.
Некоторые платформы могут ограничивать приложения или процессы, которые могут устанавливать режим реального времени. Если вызывающему абоненту не разрешено изменять реальное время, функция SetClock_RealTime() вернет ошибку WEAVE_SYSTEM_ERROR_ACCESS_DENIED.
На платформах, которые не способны отслеживать реальное время или не предлагают возможности устанавливать реальное время, функция SetClock_RealTime() может отсутствовать, что приводит к ошибке связи для любого приложения, которое ссылается на нее. В качестве альтернативы такие платформы могут предоставлять реализацию SetClock_RealTime() , которая всегда возвращает ошибку WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|