nl :: Tejido:: 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 a través de la implementación tradicional de encuesta / selección en la adaptación de la plataforma.
Para WEAVE_SYSTEM_CONFIG_USE_LWIP
, la notificación de preparación de eventos se maneja a través de eventos / mensajes y WEAVE_SYSTEM_CONFIG_USE_LWIP
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) | typedefError(* |
TimerCompleteFunct )(Layer *aLayer, void *aAppState, Error aError) | typedefvoid(* |
Funciones publicas | |
---|---|
AddEventHandlerDelegate ( LwIPEventHandlerDelegate & aDelegate) | Error Esto agrega un delegado de controlador de eventos a la capa del sistema para ampliar su capacidad para manejar eventos LwIP. |
CancelTimer (TimerCompleteFunct aOnComplete, void *aAppState) | void Este método cancela un temporizador de una sola vez, iniciado antes a través de StartTimer() . |
DispatchEvent (Event aEvent) | Error Esto envía el evento especificado para que lo maneje esta instancia. |
DispatchEvents (void) | Error Este es un contenedor sintáctico alrededor de un gancho específico de la plataforma que efectúa un bucle de eventos, esperando en una cola que da servicio a esta instancia, sacando eventos de esa cola y luego enviándolos para su manejo. |
GetPlatformData (void) const | void * Esto devuelve cualquier dato de plataforma específico del cliente asignado a la instancia, si se ha configurado previamente. |
HandleEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument) | Error |
HandlePlatformTimer (void) | Error Maneja el evento de expiración del temporizador de la plataforma. |
HandleSelectResult (int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet) | void Manejar 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 / mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específicos de la plataforma de esta instancia. |
PrepareSelect (int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime) | void Prepare los conjuntos de descriptores de archivo con los que trabajar con select() . |
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 hilo Weave. |
SetPlatformData (void *aPlatformData) | void Esto establece los datos de la plataforma específicos del cliente especificados en la instancia para su posterior recuperación por parte de la plataforma del cliente. |
Shutdown (void) | Error |
StartTimer (uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState) | Error Este método inicia un temporizador de un disparo. |
State (void) const | LayerState Esto devuelve el estado actual del objeto de capa. |
WakeSelect (void) | void Active el subproceso de E / S que monitorea los descriptores de archivo usando select () escribiendo un solo byte en la tubería de activación. |
Funciones estáticas públicas | |
---|---|
GetClock_Monotonic (void) | uint64_t Devuelve un tiempo del sistema monótono en unidades de microsegundos. |
GetClock_MonotonicHiRes (void) | uint64_t Devuelve un tiempo del sistema monótono (potencialmente) de alta resolución en unidades de microsegundos. |
GetClock_MonotonicMS (void) | uint64_t Devuelve un tiempo del sistema monótono en unidades de milisegundos. |
GetClock_RealTime (uint64_t & curTime) | Error Devuelve el tiempo real (civil) actual en formato de tiempo Unix de microsegundos. |
GetClock_RealTimeMS (uint64_t & curTimeMS) | Error Devuelve el tiempo real (civil) actual en milisegundos en formato de tiempo Unix. |
SetClock_RealTime (uint64_t newCurTime) | Error Establece la noción de tiempo real (civil) actual de la plataforma. |
Tipos públicos
Controlador de eventos
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Funciones publicas
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
Esto agrega un delegado de controlador de eventos a la capa del sistema para ampliar su capacidad de manejar eventos LwIP.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
| ||||
Valores devueltos |
|
Cancelar temporizador
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Este método cancela un temporizador de una sola vez, iniciado antes a través de StartTimer()
.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Esto envía el evento especificado para que lo maneje esta instancia.
La descomposición del tipo y los argumentos del evento se maneja mediante un gancho específico de la plataforma que luego debe volver a llamar a Layer :: HandleEvent para el envío real.
Detalles | |||
---|---|---|---|
Parámetros |
| ||
Devoluciones | WEAVE_SYSTEM_NO_ERROR en caso de éxito; de lo contrario, un error específico que indica el motivo del error de inicialización. |
DispatchEvents
Error DispatchEvents( void )
Este es un contenedor sintáctico alrededor de un gancho específico de la plataforma que efectúa un bucle de eventos, esperando en una cola que atiende esta instancia, sacando eventos de esa cola y luego enviándolos para su manejo.
Detalles | |
---|---|
Devoluciones | WEAVE_SYSTEM_NO_ERROR en caso de éxito; de lo contrario, un error específico que indica el motivo del error de inicialización. |
GetPlatformData
void * GetPlatformData( void ) const
Esto devuelve cualquier dato de plataforma específico del cliente asignado a la instancia, si se ha configurado previamente.
Detalles | |
---|---|
Devoluciones | Datos de plataforma específicos del cliente, si se ha configurado previamente; de lo contrario, NULL. |
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Esto implementa el envío real y el manejo de un evento de capa del sistema de tejido .
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|
ManejarPlataformaTimer
Error HandlePlatformTimer( void )
Manejar el evento de expiración del temporizador de la plataforma
Llama a nl :: Weave :: System :: Timer :: HandleExpiredTimers para manejar cualquier temporizador caducado. Se supone que esta API se llama solo mientras está en el hilo que posee el objeto Weave System Layer .
Detalles | |
---|---|
Devoluciones | WEAVE_SYSTEM_NO_ERROR en caso de éxito, código de error en caso contrario. |
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Manejar E / S desde una llamada seleccionada.
Este método registra el evento de E / S pendiente en cada punto final activo y luego invoca las funciones de manejo de E / S respectivas para esos puntos finales.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
En eso
Error Init( void *aContext )
Capa
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
Posterior al evento
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Esto publica un evento / mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específicos de la plataforma de esta instancia.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
| ||||||||
Valores devueltos |
|
PrepararSeleccionar
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Prepare los conjuntos de descriptores de archivo con los que trabajar con select()
.
Detalles | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
ScheduleWork
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 hilo Weave.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
Esto establece los datos de la plataforma específicos del cliente especificados en la instancia para su posterior recuperación por parte de la plataforma del cliente.
Detalles | |||
---|---|---|---|
Parámetros |
|
Cerrar
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Este método inicia un temporizador de un disparo.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Devoluciones | WEAVE_SYSTEM_NO_ERROR Si tiene éxito. | ||||||
Devoluciones | WEAVE_SYSTEM_ERROR_NO_MEMORY Si no se puede asignar un temporizador. | ||||||
Devoluciones | Otro Valor que indica que el temporizador no se pudo iniciar. |
Expresar
LayerState State( void ) const
Esto devuelve el estado actual del objeto de capa.
WakeSelect
void WakeSelect( void )
Active el subproceso de E / S que monitorea los descriptores de archivo usando select () escribiendo un solo byte en la tubería de activación.
Nota: Si WakeSelect()
se llama desde dentro HandleSelectResult()
, entonces la escritura del conducto estela se pueden omitir, ya que el flujo de entrada / O ya está despierto. Además, no nos importa si esta escritura falla, ya que la única falla razonablemente probable es que la tubería esté llena, en cuyo caso el hilo de llamada seleccionado se activará de todos modos.
Funciones estáticas públicas
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Devuelve un tiempo de sistema monótono en unidades de microsegundos.
Esta función devuelve un tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marcará continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al despertar.
Aunque algunas plataformas pueden optar por devolver un valor que mide el tiempo desde el inicio del sistema, las aplicaciones no deben depender de esto. Además, no se requiere que la época de GetClock_Monotonic () sea la misma que la de cualquiera de las otras funciones de GetClock ... Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores devueltos por la misma función.
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Devoluciones | Tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. |
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Devuelve un tiempo de sistema monótono (potencialmente) de alta resolución en unidades de microsegundos.
Esta función devuelve un tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Sin embargo, no es necesario que el temporizador subyacente marque de forma continua durante los estados de suspensión profunda del sistema.
Algunas plataformas pueden implementar GetClock_MonotonicHiRes () usando un temporizador de alta resolución capaz de mayor precisión que GetClock_Monotonic () , y que no está sujeto a ajustes graduales de reloj (rotación). Los sistemas sin un temporizador de este tipo pueden simplemente devolver el mismo valor que GetClock_Monotonic () .
No se requiere que la época para el tiempo devuelta por GetClock_MonotonicHiRes () sea la misma que para cualquiera de las otras funciones de GetClock ..., incluyendo GetClock_Monotonic () .
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Devoluciones | Tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. |
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
Devuelve un tiempo del sistema monótono en unidades de milisegundos.
Esta función devuelve un tiempo transcurrido en milisegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marcará continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al despertar.
Aunque algunas plataformas pueden optar por devolver un valor que mide el tiempo desde el inicio del sistema, las aplicaciones no deben depender de esto. Además, no se requiere que la época de GetClock_Monotonic () sea la misma que la de cualquiera de las otras funciones de GetClock ... Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores devueltos por la misma función.
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Devoluciones | Tiempo transcurrido en milisegundos desde una época arbitraria definida por la plataforma. |
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
Devuelve el tiempo real (civil) actual en formato de tiempo Unix de microsegundos.
Este método devuelve la noción de tiempo real actual de la plataforma local, expresada como un valor de tiempo Unix escalado a microsegundos. Se garantiza que el reloj subyacente funcionará a una velocidad mínima de segundos enteros (valores de 1.000.000), pero en algunas plataformas puede marcar más rápido.
Si la plataforma subyacente es capaz de rastrear en tiempo real, pero el sistema no está sincronizado actualmente, GetClock_RealTime () devolverá el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
En plataformas que son incapaces de realizar un seguimiento en tiempo real, el método GetClock_RealTime () puede estar ausente, lo que genera un error de enlace para cualquier aplicación que haga referencia a él. Alternativamente, dichas plataformas pueden proporcionar una implementación de GetClock_RealTime () que siempre devuelve el error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Devuelve el tiempo real (civil) actual en milisegundos en formato de tiempo Unix.
Este método devuelve la noción de tiempo real actual de la plataforma local, expresada como un valor de tiempo Unix escalado a milisegundos. Se garantiza que el reloj subyacente funcionará a una velocidad mínima de segundos enteros (valores de 1.000.000), pero en algunas plataformas puede marcar más rápido.
Si la plataforma subyacente es capaz de rastrear en tiempo real, pero el sistema no está sincronizado actualmente, GetClock_RealTimeMS () devolverá el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
En plataformas que son incapaces de realizar un seguimiento en tiempo real, el método GetClock_RealTimeMS () puede estar ausente, lo que genera un error de enlace para cualquier aplicación que haga referencia a él. Alternativamente, tales plataformas pueden proporcionar una implementación de GetClock_RealTimeMS () que siempre devuelve el error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Establece la noción de tiempo real (civil) actual de la plataforma.
Las aplicaciones pueden llamar a esta función para establecer la noción de tiempo real actual de la plataforma local. La nueva hora actual se expresa como un valor de tiempo Unix escalado a microsegundos.
Una vez configurado, se garantiza que el reloj de la plataforma subyacente rastreará el tiempo real con una granularidad de al menos segundos completos.
Algunas plataformas pueden restringir qué aplicaciones o procesos pueden configurarse en tiempo real. Si la persona que llama no puede cambiar el tiempo real, la función SetClock_RealTime () devolverá el error WEAVE_SYSTEM_ERROR_ACCESS_DENIED.
En plataformas que son incapaces de rastrear tiempo real, o que no ofrecen la capacidad de establecer tiempo real, la función SetClock_RealTime () puede estar ausente, dando como resultado un error de enlace para cualquier aplicación que haga referencia a ella. Alternativamente, tales plataformas pueden proporcionar una implementación de SetClock_RealTime () que siempre devuelve el error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
| ||||||
Valores devueltos |
|