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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Valores que se muestran |
|
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 |
|
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 |
|
||
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 |
|
||||||
Valores que se muestran |
|
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 |
|
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 |
|
||||||||
Valores que se muestran |
|
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 |
|
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 |
|
||||||
Valores que se muestran |
|
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 |
|
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 |
|
||||||
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 |
|
||||||
Valores que se muestran |
|
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 |
|
||||||
Valores que se muestran |
|
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 |
|
||||||
Valores que se muestran |
|