En Google, luchamos por la equidad racial de la comunidad negra. Más información

nl::Weave::Sistema::Capa

#include <src/system/SystemLayer.h>

This provides access to timers according to the configured event handling model.

Resumen

Para WEAVE_SYSTEM_CONFIG_USE_SOCKETS, la notificación de preparación de eventos se maneja mediante la implementación de encuestas o selecciones tradicionales en la adaptación de la plataforma.

En el caso de WEAVE_SYSTEM_CONFIG_USE_LWIP, la notificación de preparación de eventos se controla mediante eventos / mensajes y hooks específicos de la plataforma y el sistema para el sistema de eventos/mensajes.

Constructores y destructores

Layer(void)

Tipos públicos

EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

Funciones públicas

AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
Error
Esto agrega un delegado de controlador de eventos a la capa del sistema para extender su capacidad para controlar eventos LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Con este método, se cancela un temporizador único, que comenzó antes mediante StartTimer().
DispatchEvent(Event aEvent)
Error
Esto envía el evento especificado para que lo controle esta instancia.
DispatchEvents(void)
Error
Se trata de un wrapper sintáctico alrededor de un hook específico de la plataforma que produce un bucle de eventos, a la espera de una cola que presta servicios a esta instancia, extrayendo los eventos de esa cola y despachándolos para su control.
GetPlatformData(void) const
void *
Esto muestra cualquier dato de plataforma específico del cliente asignado a la instancia, si se configuró anteriormente.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Esto implementa el despacho y la administración reales de un evento de Layer del sistema de Weave.
HandlePlatformTimer(void)
Error
Controla el evento de vencimiento del temporizador de la plataforma.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Maneja E/S desde una llamada seleccionada.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Esto publica un evento o un mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específico de la plataforma de esta instancia.
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Prepara los conjuntos de descriptores de archivos para que select() funcionen.
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Programa una función con una firma idéntica a TimerCompleteFunct para que se ejecute lo antes posible en el subproceso de Weave.
SetPlatformData(void *aPlatformData)
void
De esta manera, se configuran los datos específicos de la plataforma del cliente en la instancia para que la plataforma cliente los recupere más tarde.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Este método inicia un temporizador único.
State(void) const
LayerState
Esto muestra el estado actual del objeto de capa.
WakeSelect(void)
void
Para activar el subproceso de E/S que supervisa los descriptores de archivos mediante select(), escribe un solo byte en la canalización de activación.

Funciones estáticas públicas

GetClock_Monotonic(void)
uint64_t
Muestra el tiempo del sistema monótono en unidades de microsegundos.
GetClock_MonotonicHiRes(void)
uint64_t
Muestra el tiempo del sistema monotónico de alta resolución (posiblemente) en unidades de microsegundos.
GetClock_MonotonicMS(void)
uint64_t
Muestra el tiempo del sistema monótono en unidades de milisegundos.
GetClock_RealTime(uint64_t & curTime)
Error
Muestra la hora real (civil) actual en formato de tiempo Unix de microsegundos.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Muestra la hora real (civil) actual en formato Unix de tiempo Unix.
SetClock_RealTime(uint64_t newCurTime)
Error
Establece la noción de la plataforma del tiempo real actual (civil).

Tipos públicos

EventHandler

Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)

TimerCompleteFunct

void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)

Funciones públicas

AddEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Esto agrega un delegado de controlador de eventos a la capa del sistema para extender su capacidad para controlar eventos LwIP.

Detalles
Parámetros
[in] aDelegate
Estructura delegada de un controlador de eventos LwIP no inicializado
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación se realiza correctamente
WEAVE_SYSTEM_ERROR_BAD_ARGS
Si el puntero de función de aDelegate es NULL.

Cancelar temporizador

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Con este método, se cancela un temporizador único, que comenzó antes mediante StartTimer().

Detalles
Parámetros
[in] aOnComplete
Un puntero para la función de devolución de llamada usada para llamar a StartTimer().
[in] aAppState
Un puntero para el objeto de estado de la aplicación que se usa en la llamada a StartTimer().

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Esto envía el evento especificado para que lo controle esta instancia.

La agrupación del tipo y los argumentos del evento se controla mediante un hook específico de la plataforma que, luego, debe devolver la llamada a Layer::HandleEvent para el despacho real.

Detalles
Parámetros
[in] aEvent
El objeto de evento específico de la plataforma que se enviará a fin de controlarlo.
Qué muestra
WEAVE_System_NO_ERROR si la operación fue exitosa; de lo contrario, es un error específico que indica el motivo de la falla de inicialización.

Eventos de despacho

Error DispatchEvents(
  void
)

Se trata de un wrapper sintáctico alrededor de un hook específico de la plataforma que produce un bucle de eventos, a la espera de una cola que presta servicios a esta instancia, extrayendo los eventos de esa cola y despachándolos para su control.

Detalles
Qué muestra
WEAVE_System_NO_ERROR si se ejecuta correctamente; de lo contrario, es un error específico que indica el motivo de la falla de inicialización.

GetPlatformData

void * GetPlatformData(
  void
) const 

Esto muestra cualquier dato de plataforma específico del cliente asignado a la instancia, si se configuró anteriormente.

Detalles
Qué muestra
Datos de la plataforma específicos del cliente, si ya se configuraron; de lo contrario, son NULL.

HandleEvent

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

Esto implementa el despacho y la administración reales de un evento de Layer del sistema de Weave.

Detalles
Parámetros
[in,out] aTarget
Una referencia al objeto de capa al que se orienta el evento.
[in] aEventType
El tipo de evento o mensaje que se administrará.
[in] aArgument
El argumento asociado con el evento o mensaje.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación se realiza correctamente
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si el estado del objeto InetLayer es incorrecto.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Si no se reconoce el tipo de evento.

Controlador de la instancia de controlador

Error HandlePlatformTimer(
  void
)

Controla el evento de vencimiento del temporizador de la plataforma.

Llama a nl::Weave::System::Timer::HandleExpirationTimers para controlar los temporizadores vencidos. Se supone que se llama a esta API solo mientras se encuentra en el subproceso que posee el objeto Layer del sistema de Weave.

Detalles
Qué muestra
WEAVE_System_NO_ERROR si la operación fue exitosa, de lo contrario, se usará el código de error.

NombreDeControlDeSelect

void HandleSelectResult(
  int aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet
)

Maneja E/S desde una llamada seleccionada.

Este método registra el evento de E/S pendiente en cada extremo activo y, luego, invoca las funciones de control de E/S respectivas para esos extremos.

Detalles
Parámetros
[in] aSetSize
El valor que se muestra de la llamada seleccionada.
[in] aReadSet
Un puntero para el conjunto de descriptores de archivos de lectura.
[in] aWriteSet
Un puntero para el conjunto de descriptores de archivos de escritura.
[in] aExceptionSet
Un puntero para el conjunto de descriptores de archivos con errores.

Init

Error Init(
  void *aContext
)

Capa

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvento

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

Esto publica un evento o un mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específico de la plataforma de esta instancia.

Detalles
Parámetros
[in,out] aTarget
Un puntero para el objeto Layer del sistema de Weave que realiza la solicitud de publicación.
[in] aEventType
El tipo de evento que se publicará.
[in,out] aArgument
El argumento asociado con el evento que se publicará.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación se realiza correctamente
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si el estado del objeto Layer es incorrecto.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la fila del evento ya está llena
other
Se produjeron errores específicos de la plataforma que indican el motivo del error.

PrepareSeleccionar

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

Prepara los conjuntos de descriptores de archivos para que select() funcionen.

Detalles
Parámetros
[out] aSetSize
Es el rango de descriptores de archivos en el conjunto de descriptores de archivos.
[in] aReadSet
Un puntero para el conjunto de descriptores de archivo legibles.
[in] aWriteSet
Un puntero para el conjunto de descriptores de archivos que admiten escritura.
[in] aExceptionSet
Un puntero para el conjunto de descriptores de archivos con errores.
[in] aSleepTime
Una referencia al tiempo de sueño máximo.

Programar Trabajo

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Programa una función con una firma idéntica a TimerCompleteFunct para que se ejecute lo antes posible en el subproceso de Weave.

Detalles
Parámetros
[in] aComplete
Un puntero para una función de devolución de llamada que se llamará cuando se active este temporizador.
[in] aAppState
Un puntero para un objeto de estado de la aplicación que se pasará a la función de devolución de llamada como argumento.
Valores que se muestran
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si no se inicializó SystemLayer.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si SystemLayer no puede asignar un nuevo temporizador.
WEAVE_SYSTEM_NO_ERROR
Si la operación se realiza correctamente

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

De esta manera, se configuran los datos específicos de la plataforma del cliente en la instancia para que la plataforma cliente los recupere más tarde.

Detalles
Parámetros
[in] aPlatformData
Los datos de la plataforma específicos del cliente que se deben configurar.

Cierre

Error Shutdown(
  void
)

Temporizador de inicio

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

Este método inicia un temporizador único.

Detalles
Parámetros
[in] aMilliseconds
El tiempo de vencimiento expresado en milisegundos
[in] aComplete
Un puntero a la función a la que se llama cuando expira el temporizador.
[in] aAppState
Un puntero para el objeto de estado de la aplicación que se usa cuando vence el temporizador.
Qué muestra
WEAVE_System_NO_ERROR con éxito.
Qué muestra
WEAVE_System_ERROR_NO_MEMORY Si no se puede asignar un temporizador.
Qué muestra
Otro valor que indica que no se pudo iniciar el temporizador.

State

LayerState State(
  void
) const 

Esto muestra el estado actual del objeto de capa.

Activar

void WakeSelect(
  void
)

Para activar el subproceso de E/S que supervisa los descriptores de archivos mediante select(), escribe un solo byte en la canalización de activación.

Nota: Si se llama a WakeSelect() desde HandleSelectResult(), se puede omitir la escritura en la canalización de activación, dado que el subproceso de E/S ya está activo. Además, no nos importa si falla la escritura, ya que la única falla razonablemente probable es que la canalización esté llena, en cuyo caso, el subproceso de llamada seleccionado se activará de todos modos.

Funciones estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Muestra el tiempo del sistema monótono en unidades de microsegundos.

Esta función muestra el tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma. Se garantiza que el valor mostrado aumentará cada vez más (es decir, nunca se unirá) entre los reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marque de forma continua durante los modos de suspensión del sistema que no implican un reinicio después de la activación.

Si bien algunas plataformas pueden optar por mostrar un valor que mida el tiempo desde el inicio del sistema, las aplicaciones no deben basarse en esto. Además, el ciclo de entrenamiento de GetClock_Monotonic() no debe ser el mismo que el de cualquiera de las otras funciones de GetClock.... Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores que muestra la misma función.

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Qué muestra
Tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Muestra el tiempo del sistema monotónico de alta resolución (posiblemente) en unidades de microsegundos.

Esta función muestra el tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma. Se garantiza que el valor mostrado aumentará cada vez más (es decir, nunca se unirá) entre los reinicios del sistema. Sin embargo, no se requiere que el temporizador subyacente marque continuamente durante los estados de suspensión profunda del sistema.

Algunas plataformas pueden implementar GetClock_MonotonicHiRes() con un temporizador de alta resolución capaz de generar una precisión mayor que GetClock_Monotonic() y no está sujeto a ajustes graduales en el reloj (sing). Los sistemas sin temporizador pueden mostrar el mismo valor que GetClock_Monotonic().

No es necesario que el ciclo de tiempo que muestra GetClock_MonotonicHiRes() sea el mismo que para cualquier otra función GetClock..., incluida GetClock_Monotonic().

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Qué muestra
Tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Muestra el tiempo del sistema monótono en unidades de milisegundos.

Esta función muestra el tiempo transcurrido en milisegundos desde un ciclo de tiempo arbitrario definido por la plataforma. Se garantiza que el valor mostrado aumentará cada vez más (es decir, nunca se unirá) entre los reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marque de forma continua durante los modos de suspensión del sistema que no implican un reinicio después de la activación.

Si bien algunas plataformas pueden optar por mostrar un valor que mida el tiempo desde el inicio del sistema, las aplicaciones no deben basarse en esto. Además, el ciclo de entrenamiento de GetClock_Monotonic() no debe ser el mismo que el de cualquiera de las otras funciones de GetClock.... Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores que muestra la misma función.

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Qué muestra
Tiempo transcurrido en milisegundos desde un ciclo de ciclo arbitrario definido por la plataforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Muestra la hora real (civil) actual en formato de tiempo Unix de microsegundos.

Este método muestra la noción de la plataforma local sobre el tiempo real actual, expresada como un valor de tiempo de Unix escalado a microsegundos. Se garantiza que el reloj subyacente muestre un ritmo de al menos en segundos enteros (valores de 1,000,000), pero en algunas plataformas puede funcionar más rápido.

Si la plataforma subyacente es capaz de realizar el seguimiento en tiempo real, pero el sistema no está sincronizado, GetClock_RealTime() mostrará el error WEAVE_System_ERROR_REAL_TIME_NOT_SYNCED.

En las plataformas que no pueden realizar un seguimiento en tiempo real, es posible que falte el método GetClock_RealTime(), lo que genera un error de vínculo para cualquier aplicación que haga referencia a él. Como alternativa, es posible que estas plataformas proporcionen una implementación de GetClock_RealTime() que siempre muestre el error WEAVE_System_ERROR_NOT_SUPPORTED.

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Parámetros
[out] curTime
La hora actual, expresada como hora Unix escalada a microsegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método funciona correctamente
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma puede realizar un seguimiento en tiempo real, pero no está sincronizada en este momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no es capaz de hacer el seguimiento en tiempo real

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Muestra la hora real (civil) actual en formato Unix de tiempo Unix.

Este método muestra la noción de la plataforma local sobre el tiempo real actual, expresada como un valor de tiempo de Unix escalado a milisegundos. Se garantiza que el reloj subyacente muestre un ritmo de al menos en segundos enteros (valores de 1,000,000), pero en algunas plataformas puede funcionar más rápido.

Si la plataforma subyacente es capaz de realizar el seguimiento en tiempo real, pero el sistema no está sincronizado, GetClock_RealTimeMS() mostrará el error WEAVE_System_ERROR_REAL_TIME_NOT_SYNCED.

En las plataformas que no pueden realizar un seguimiento en tiempo real, es posible que falte el método GetClock_RealTimeMS(), lo que genera un error de vínculo para cualquier aplicación que haga referencia a él. Como alternativa, es posible que estas plataformas proporcionen una implementación de GetClock_RealTimeMS() que siempre muestre el error WEAVE_System_ERROR_NOT_SUPPORTED.

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Parámetros
[out] curTime
La hora actual, expresada como hora Unix escalada a milisegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método funciona correctamente
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma puede realizar un seguimiento en tiempo real, pero no está sincronizada en este momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no es capaz de hacer el seguimiento en tiempo real

Establecer el reloj en tiempo real

Error SetClock_RealTime(
  uint64_t newCurTime
)

Establece la noción de la plataforma del tiempo real actual (civil).

Las aplicaciones pueden llamar a esta función para configurar la noción de la plataforma local del tiempo real actual. La nueva hora actual se expresa como un valor de tiempo de Unix escalado a microsegundos.

Una vez que se configura, se garantiza que el reloj de la plataforma subyacente realice un seguimiento en tiempo real con un nivel de detalle de al menos segundos enteros.

Algunas plataformas pueden restringir qué aplicaciones o procesos pueden establecer tiempo real. Si el emisor no está autorizado a cambiar en tiempo real, la función SetClock_RealTime() mostrará el error WEAVE_System_ERROR_ACCESS_DENIED.

En las plataformas que no pueden realizar un seguimiento en tiempo real o no ofrecen la posibilidad de establecerlo, es posible que falte la función SetClock_RealTime(), lo que generará un error de vínculo para cualquier aplicación que haga referencia a ella. Como alternativa, es posible que estas plataformas proporcionen una implementación de SetClock_RealTime() que siempre muestre el error WEAVE_System_ERROR_NOT_SUPPORTED.

Se garantiza que esta función sea segura para los subprocesos en cualquier plataforma que los use.

Detalles
Parámetros
[in] newCurTime
La nueva hora actual, expresada como hora Unix escalada a microsegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método funciona correctamente
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no es capaz de hacer el seguimiento en tiempo real
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Si la aplicación que realiza la llamada no tiene el privilegio para establecer la hora actual