нл:: Переплетение:: Система:: Слой

#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.

Подробности
Параметры
[in] aDelegate
Неинициализированная структура делегата обработчика событий LwIP
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Об успехе.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Если указатель функции, содержащийся в aDelegate, равен NULL

ОтменаТаймер

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Этот метод отменяет одноразовый таймер, запущенный ранее с помощью StartTimer() .

Подробности
Параметры
[in] aOnComplete
Указатель на функцию обратного вызова, используемую при вызове StartTimer() .
[in] aAppState
Указатель на объект состояния приложения, используемый при вызове StartTimer() .

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Это отправляет указанное событие для обработки этим экземпляром.

Демаршалинг типа и аргументов события обрабатывается специфичным для платформы хуком, который затем должен вызывать Layer::HandleEvent для фактической отправки.

Подробности
Параметры
[in] aEvent
Объект события, специфичный для платформы, который необходимо отправить для обработки.
Возврат
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.

Подробности
Параметры
[in,out] aTarget
Ссылка на объект слоя, на который нацелено событие.
[in] aEventType
Тип события/сообщения для обработки.
[in] aArgument
Аргумент, связанный с событием/сообщением.
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Об успехе.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Если состояние объекта InetLayer неверно.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Если тип события не распознан.

РучкаПлатформаТаймер

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
)

Обработка ввода-вывода из выбранного вызова.

Этот метод регистрирует ожидающее событие ввода-вывода в каждой активной конечной точке, а затем вызывает соответствующие функции обработки ввода-вывода для этих конечных точек.

Подробности
Параметры
[in] aSetSize
Возвращаемое значение вызова select.
[in] aReadSet
Указатель на набор прочитанных файловых дескрипторов.
[in] aWriteSet
Указатель на набор дескрипторов файлов для записи.
[in] aExceptionSet
Указатель на набор файловых дескрипторов с ошибками.

В этом

Error Init(
  void *aContext
)

Слой

 Layer(
  void
)

НовыйТаймер

Error NewTimer(
  Timer *& aTimerPtr
)

Сообщение событие

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

Это отправляет событие/сообщение указанного типа с предоставленным аргументом в очередь событий для конкретной платформы этого экземпляра.

Подробности
Параметры
[in,out] aTarget
Указатель на объект слоя системы Weave, делающий запрос на публикацию.
[in] aEventType
Тип события для публикации.
[in,out] aArgument
Аргумент, связанный с событием для публикации.
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Об успехе.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Если состояние объекта Layer неверно.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Если очередь событий уже заполнена.
other
Возникают ошибки, специфичные для платформы, с указанием причины сбоя.

ПодготовитьВыбрать

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

Подготовьте наборы файловых дескрипторов для работы select() .

Подробности
Параметры
[out] aSetSize
Диапазон файловых дескрипторов в наборе файловых дескрипторов.
[in] aReadSet
Указатель на набор читаемых файловых дескрипторов.
[in] aWriteSet
Указатель на набор записываемых файловых дескрипторов.
[in] aExceptionSet
Указатель на набор файловых дескрипторов с ошибками.
[in] aSleepTime
Ссылка на максимальное время сна.

График работы

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Планирует как можно скорее запустить функцию с сигнатурой, идентичной TimerCompleteFunct , в потоке Weave.

Подробности
Параметры
[in] aComplete
Указатель на функцию обратного вызова, которая будет вызываться при срабатывании этого таймера.
[in] aAppState
Указатель на объект состояния приложения, который будет передан функции обратного вызова в качестве аргумента.
Возвращаемые значения
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Если SystemLayer не был инициализирован.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Если SystemLayer не может выделить новый таймер.
WEAVE_SYSTEM_NO_ERROR
Об успехе.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

При этом указанные данные платформы, специфичные для клиента, устанавливаются в экземпляр для последующего извлечения клиентской платформой.

Подробности
Параметры
[in] aPlatformData
Данные платформы, специфичные для клиента, которые необходимо установить.

Неисправность

Error Shutdown(
  void
)

Старттаймер

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

Этот метод запускает однократный таймер.

Подробности
Параметры
[in] aMilliseconds
Срок действия в миллисекундах.
[in] aComplete
Указатель на функцию, вызываемую по истечении времени таймера.
[in] aAppState
Указатель на объект состояния приложения, используемый по истечении времени таймера.
Возврат
WEAVE_SYSTEM_NO_ERROR В случае успеха.
Возврат
WEAVE_SYSTEM_ERROR_NO_MEMORY Если таймер не может быть назначен.
Возврат
Другое значение, указывающее, что таймер не запустился.

Состояние

LayerState State(
  void
) const 

Это возвращает текущее состояние объекта слоя.

ПробуждениеВыбрать

void WakeSelect(
  void
)

Разбудите поток ввода-вывода, который отслеживает файловые дескрипторы с помощью select(), записав один байт в канал пробуждения.

Примечание. Если WakeSelect() вызывается из HandleSelectResult() , запись в канал пробуждения можно пропустить, поскольку поток ввода-вывода уже активен. Более того, нас не волнует, если эта запись завершится неудачно, поскольку единственным разумно вероятным сбоем является то, что канал заполнен, и в этом случае поток, вызывающий выбор, все равно проснется.

Публичные статические функции

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.

Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.

Подробности
Параметры
[out] curTime
Текущее время, выраженное как время Unix, масштабированное до микросекунд.
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Если метод удался.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Если платформа способна отслеживать в реальном времени, но в данный момент она не синхронизирована.
#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.

Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.

Подробности
Параметры
[out] curTime
Текущее время, выраженное как время Unix, масштабированное до миллисекунд.
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Если метод удался.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Если платформа способна отслеживать в реальном времени, но в данный момент она не синхронизирована.
#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.

Эта функция гарантированно будет потокобезопасной на любой платформе, использующей многопоточность.

Подробности
Параметры
[in] newCurTime
Новое текущее время, выраженное как время Unix, масштабированное до микросекунд.
Возвращаемые значения
WEAVE_SYSTEM_NO_ERROR
Если метод удался.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Если платформа не способна отслеживать в реальном времени.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Если вызывающее приложение не имеет права устанавливать текущее время.