nl:: Weave:: System:: Layer
#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 del evento se maneja mediante la implementación tradicional de encuestas o selecciones en la adaptación de la plataforma.
Para WEAVE_SYSTEM_CONFIG_USE_LWIP
, la notificación de preparación del evento se maneja a través de eventos y mensajes, y hooks específicos de la plataforma y del sistema para el sistema de eventos o 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 de controlar eventos de LwIP.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
Este método cancela un temporizador de un solo intento que se inició antes hasta el
StartTimer() . |
DispatchEvent(Event aEvent)
|
Error
Esto envía el evento especificado para que lo controle esta instancia.
|
DispatchEvents(void)
|
Error
Este es un wrapper sintáctico en torno a un hook específico de la plataforma que produce un bucle de eventos, espera en una cola que entrega esta instancia, extrae eventos de esa cola y, luego, los despacha para su manejo.
|
GetPlatformData(void) const
|
void *
Esto muestra los datos de plataforma específicos del cliente asignados a la instancia, si se configuraron previamente.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Esto implementa el envío y el control 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
Controla la 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 mensaje del tipo especificado con el argumento proporcionado en la cola de eventos específica de la plataforma de la instancia.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
Prepara los conjuntos de descriptores de archivos con los que trabajará
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 subproceso de Weave. |
SetPlatformData(void *aPlatformData)
|
void
Esto establece los datos especificados de la plataforma específicos del cliente en la instancia para que la plataforma del cliente los recupere más tarde.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
Este método inicia un temporizador de un solo intento.
|
State(void) const
|
LayerState
De esta forma, se muestra el estado actual del objeto de la capa.
|
WakeSelect(void)
|
void
Activa el subproceso de E/S que supervisa los descriptores de archivos con select(). Para ello, escribe un solo byte en el canal de activación.
|
Funciones estáticas públicas |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Muestra el tiempo monótono del sistema en unidades de microsegundos.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Muestra un tiempo (potencialmente) del sistema monotónico de alta resolución en unidades de microsegundos.
|
GetClock_MonotonicMS(void)
|
uint64_t
Muestra el tiempo monótono del sistema 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 de tiempo Unix en milisegundos.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Establece la noción de la plataforma del tiempo real (civil) actual.
|
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 de controlar eventos de LwIP.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores de retorno |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Este método cancela un temporizador de un solo intento que comenzó antes hasta el StartTimer()
.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Esto envía el evento especificado para que lo controle esta instancia.
La desalineación del tipo y los argumentos del evento se controla mediante un hook específico de la plataforma que luego debe volver a llamar a Layer::HandleEvent para el envío real.
Detalles | |||
---|---|---|---|
Parámetros |
|
||
Resultado que se muestra |
WEAVE_SYSTEM_NO_ERROR si la operación se realizó correctamente; De lo contrario, un error específico que indique el motivo de la falla de inicialización.
|
DispatchEvents
Error DispatchEvents( void )
Este es un wrapper sintáctico en torno a un hook específico de la plataforma que produce un bucle de eventos, espera en una cola que entrega esta instancia, extrae eventos de esa cola y, luego, los despacha para su manejo.
Detalles | |
---|---|
Resultado que se muestra |
WEAVE_SYSTEM_NO_ERROR en el caso de éxito; De lo contrario, un error específico que indique el motivo de la falla de inicialización.
|
GetPlatformData
void * GetPlatformData( void ) const
Esto muestra los datos de plataforma específicos del cliente asignados a la instancia, si se configuraron previamente.
Detalles | |
---|---|
Resultado que se muestra |
Datos de la plataforma específicos del cliente, si se configuraron previamente de lo contrario, NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Esto implementa el envío y el control reales de un evento de Layer del sistema de Weave.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores de retorno |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Controla el evento de vencimiento del temporizador de la plataforma.
Llama a nl::Weave::System::Timer::HandleExpiredTimers para controlar los temporizadores vencidos. Se supone que solo se llama a esta API mientras se encuentra en el subproceso que posee el objeto Layer del sistema de Weave.
Detalles | |
---|---|
Resultado que se muestra |
WEAVE_SYSTEM_NO_ERROR si la operación se realiza correctamente; de lo contrario, se produce un error de código.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Controla la 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 manejo de E/S respectivas para esos extremos.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
Init
Error Init( void *aContext )
Capa
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Esto publica un evento o mensaje del tipo especificado con el argumento proporcionado en la cola de eventos específica de la plataforma de la instancia.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||
Valores de retorno |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Prepara los conjuntos de descriptores de archivos con los que trabajará 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 subproceso de Weave.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores de retorno |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
Esto establece los datos especificados de la plataforma específicos del cliente en la instancia para que la plataforma del cliente los recupere más tarde.
Detalles | |||
---|---|---|---|
Parámetros |
|
Cierre
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Este método inicia un temporizador de un solo intento.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Resultado que se muestra |
WEAVE_SYSTEM_NO_ERROR Si la operación se realiza correctamente.
|
||||||
Resultado que se muestra |
WEAVE_SYSTEM_ERROR_NO_MEMORY Si no se puede asignar un temporizador.
|
||||||
Resultado que se muestra |
Otro valor que indica que no se pudo iniciar el temporizador.
|
Estado
LayerState State( void ) const
De esta forma, se muestra el estado actual del objeto de la capa.
WakeSelect
void WakeSelect( void )
Activa el subproceso de E/S que supervisa los descriptores de archivos con select(). Para ello, escribe un solo byte en el canal 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 interesa si esta escritura falla, ya que el único error razonablemente probable es que la canalización esté llena, en cuyo caso el subproceso de llamada seleccionado se activará de todas formas.
Funciones estáticas públicas
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Muestra el tiempo monótono del sistema en unidades de microsegundos.
Esta función muestra un tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma. Se garantiza que el valor que se muestra aumente constantemente (es decir, que nunca se ajuste) entre los reinicios del sistema. Además, se garantiza que la fuente de la hora subyacente se marque continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al activarse.
Aunque 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 las otras funciones 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 es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Resultado que se muestra |
Tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma.
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Muestra un tiempo (potencialmente) del sistema monotónico de alta resolución en unidades de microsegundos.
Esta función muestra un tiempo transcurrido en microsegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma. Se garantiza que el valor que se muestra aumente constantemente (es decir, que nunca se ajuste) entre los 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() con un temporizador de alta resolución capaz de ofrecer una mayor precisión que GetClock_Monotonic() y que no esté sujeto a ajustes graduales del reloj (desplazamiento). Los sistemas sin este tipo de temporizador pueden simplemente mostrar el mismo valor que GetClock_Monotonic().
No se requiere que el tiempo para el tiempo que muestra GetClock_MonotonicHiRes() sea el mismo que para cualquiera de las otras funciones GetClock..., incluida GetClock_Monotonic().
Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Resultado que se 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 monótono del sistema en unidades de milisegundos.
Esta función muestra un tiempo transcurrido en milisegundos desde un ciclo de entrenamiento arbitrario definido por la plataforma. Se garantiza que el valor que se muestra aumente constantemente (es decir, que nunca se ajuste) entre los reinicios del sistema. Además, se garantiza que la fuente de la hora subyacente se marque continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al activarse.
Aunque 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 las otras funciones 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 es segura para subprocesos en cualquier plataforma que emplee subprocesos.
Detalles | |
---|---|
Resultado que se muestra |
Tiempo transcurrido en milisegundos desde un ciclo de entrenamiento 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 de tiempo real actual, expresada como un valor de tiempo Unix escalado a microsegundos. Se garantiza que el reloj subyacente funcione a una velocidad mínima de 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 un seguimiento en tiempo real, pero el sistema no está sincronizado actualmente, 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 el método GetClock_RealTime() esté ausente, lo que generará un error de vínculo para cualquier aplicación que haga referencia a él. Como alternativa, esas plataformas pueden proporcionar una implementación de GetClock_RealTime() que siempre muestra 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 de retorno |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Muestra la hora real (civil) actual en formato de tiempo Unix en milisegundos.
Este método muestra la noción de la plataforma local de tiempo real actual, expresada como un valor de tiempo Unix escalado a milisegundos. Se garantiza que el reloj subyacente funcione a una velocidad mínima de 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 un seguimiento en tiempo real, pero el sistema no está sincronizado actualmente, 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 el método GetClock_RealTimeMS() no esté presente, lo que generará un error de vínculo para cualquier aplicación que haga referencia a él. De manera alternativa, esas plataformas pueden proporcionar una implementación de GetClock_RealTimeMS() que siempre muestra 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 de retorno |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Establece la noción de la plataforma del tiempo real (civil) actual.
Las aplicaciones pueden llamar a esta función para establecer la noción de la plataforma local del tiempo real actual. La nueva hora actual se expresa como un valor de tiempo Unix escalado a microsegundos.
Una vez establecido, se garantiza que el reloj de la plataforma subyacente se registre en tiempo real con un nivel de detalle de, al menos, segundos enteros.
Algunas plataformas pueden restringir las aplicaciones o los procesos que pueden establecerse en tiempo real. Si el emisor no tiene permiso para 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 que no ofrecen la capacidad de establecer el tiempo real, es posible que la función SetClock_RealTime() no esté disponible, lo que generará un error de vínculo para cualquier aplicación que haga referencia a ella. Como alternativa, esas plataformas pueden proporcionar una implementación de SetClock_RealTime() que siempre muestra 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 de retorno |
|