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 controla mediante la encuesta tradicional o la implementación seleccionada en la adaptación de la plataforma.
En el caso de WEAVE_SYSTEM_CONFIG_USE_LWIP
, la notificación de preparación del evento se controla a través de eventos, 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 del 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 en
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 para un hook específico de la plataforma que afecta un bucle de eventos, a la espera de una cola que entrega esta instancia, extrae eventos de esa cola y, luego, los envía para su control.
|
GetPlatformData(void) const
|
void *
Esto muestra todos los datos de plataforma específicos del cliente asignados a la instancia, si se configuró con anterioridad.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
De esta manera, se implementa el envío y el manejo reales de un evento de la capa 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
Controlar 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 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 con los que
select() trabajará. |
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 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 de un solo intento.
|
State(void) const
|
LayerState
Esto muestra el estado actual del objeto de capa.
|
WakeSelect(void)
|
void
Activa el subproceso de E/S que supervisa los descriptores de archivos con select() escribiendo un solo byte en la canalización de activación.
|
Funciones estáticas públicas |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Muestra un tiempo del sistema monótono en unidades de microsegundos.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Muestra un tiempo del sistema monótono (potencialmente) de alta resolución en unidades de microsegundos.
|
GetClock_MonotonicMS(void)
|
uint64_t
Muestra un tiempo del sistema monótono en unidades de milisegundos.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Muestra la hora real actual (civil) en formato de hora Unix de microsegundos.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Muestra la hora real actual (civil) 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 del controlador de eventos a la capa del sistema para extender su capacidad de controlar eventos de LwIP.
Detalles | |||||
---|---|---|---|---|---|
Parámetros |
|
||||
Valores que se muestran |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Este método cancela un temporizador de un solo intento que se inició antes en 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 |
|
||
Qué muestra |
WEAVE_SYSTEM_NO_ERROR si se realiza correctamente; de lo contrario, un error específico que indica el motivo del error de inicialización.
|
DispatchEvents
Error DispatchEvents( void )
Este es un wrapper sintáctico para un hook específico de la plataforma que afecta un bucle de eventos, a la espera de una cola que entrega esta instancia, extrae eventos de esa cola y, luego, los envía para su control.
Detalles | |
---|---|
Qué muestra |
WEAVE_SYSTEM_NO_ERROR cuando se realiza de forma correcta; de lo contrario, un error específico que indica el motivo del error de inicialización.
|
GetPlatformData
void * GetPlatformData( void ) const
Esto muestra todos los datos de plataforma específicos del cliente asignados a la instancia, si se configuró con anterioridad.
Detalles | |
---|---|
Qué muestra |
Datos de la plataforma específicos del cliente, si se configuraron con anterioridad; de lo contrario, son NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
De esta manera, se implementa el envío y el manejo reales de un evento de la capa del sistema de Weave.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores que se muestran |
|
HandlePlatformTimer
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 esta API se llama 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 es exitosa; de lo contrario, se produce un código de error.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Controlar 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 )
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 esta instancia.
Detalles | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parámetros |
|
||||||||
Valores que se muestran |
|
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 select()
trabajará.
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 que se muestran |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
Esto establece los datos especificados 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 )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Este método inicia un temporizador de un solo intento.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Qué muestra |
WEAVE_SYSTEM_NO_ERROR Si la operación se realizó correctamente.
|
||||||
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.
|
Estado
LayerState State( void ) const
Esto muestra el estado actual del objeto de capa.
WakeSelect
void WakeSelect( void )
Activa el subproceso de E/S que supervisa los descriptores de archivos con select() escribiendo 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 interesa que esta escritura falle, ya que la única falla razonablemente probable es que la canalización esté llena, en cuyo caso el subproceso de llamada de selección se activará de todas formas.
Funciones estáticas públicas
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Muestra un tiempo del sistema monótono 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 (es decir, nunca se ajustará) entre los reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente se active de forma continua durante los modos de suspensión del sistema que no impliquen un reinicio después de la activación.
Aunque algunas plataformas pueden optar por mostrar un valor que mide el tiempo desde el inicio para el sistema, las aplicaciones no deben basarse en esto. Además, no se requiere que el ciclo de entrenamiento de GetClock_Monotonic() sea el mismo que el de ninguna 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 es segura para los subprocesos en cualquier plataforma que utilice subprocesos.
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 un tiempo del sistema monótono (potencialmente) 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 (es decir, nunca se ajustará) entre los reinicios del sistema. Sin embargo, no es necesario que el temporizador subyacente funcione para funcionar 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 mayor precisión que GetClock_Monotonic() y que no esté sujeto a ajustes graduales del reloj (desplazamiento). Los sistemas sin ese temporizador pueden mostrar simplemente el mismo valor que GetClock_Monotonic().
No es necesario que el ciclo de entrenamiento para la hora que muestra GetClock_MonotonicHiRes() sea el mismo que el de ninguna de las otras funciones de GetClock..., incluida GetClock_Monotonic().
Se garantiza que esta función es segura para los subprocesos en cualquier plataforma que utilice subprocesos.
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 un tiempo del sistema monótono 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 (es decir, nunca se ajustará) entre los reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente se active de forma continua durante los modos de suspensión del sistema que no impliquen un reinicio después de la activación.
Aunque algunas plataformas pueden optar por mostrar un valor que mide el tiempo desde el inicio para el sistema, las aplicaciones no deben basarse en esto. Además, no se requiere que el ciclo de entrenamiento de GetClock_Monotonic() sea el mismo que el de ninguna 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 es segura para los subprocesos en cualquier plataforma que utilice subprocesos.
Detalles | |
---|---|
Qué 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 actual (civil) en formato de hora Unix de microsegundos.
Este método muestra la noción de la plataforma local del tiempo real actual, expresada como un valor de tiempo Unix escalado a microsegundos. Se garantiza que el reloj subyacente se marque a una velocidad mínima de segundos enteros (valores de 1,000,000), pero en algunas plataformas es posible que funcione más rápido.
Si la plataforma subyacente es capaz de realizar un seguimiento en tiempo real, pero el sistema actualmente no está sincronizado, GetClock_RealTime() mostrará el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
En las plataformas que no pueden realizar el seguimiento en tiempo real, es posible que el método GetClock_RealTime() no esté presente, lo que generaría un error de vínculo para cualquier aplicación que haga referencia a él. Como alternativa, estas 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 los subprocesos en cualquier plataforma que utilice subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores que se muestran |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Muestra la hora real actual (civil) en formato de tiempo Unix en milisegundos.
Este método muestra la noción de la plataforma local del tiempo real actual, expresada como un valor de tiempo Unix ajustado a milisegundos. Se garantiza que el reloj subyacente se marque a una velocidad mínima de segundos enteros (valores de 1,000,000), pero en algunas plataformas es posible que funcione más rápido.
Si la plataforma subyacente es capaz de realizar un seguimiento en tiempo real, pero el sistema actualmente no está sincronizado, GetClock_RealTimeMS() mostrará el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
En las plataformas que no pueden realizar el seguimiento en tiempo real, es posible que el método GetClock_RealTimeMS() no aparezca, lo que generaría un error de vínculo para cualquier aplicación que haga referencia a él. Como alternativa, estas 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 los subprocesos en cualquier plataforma que utilice subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores que se muestran |
|
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 de Unix ajustado a microsegundos.
Una vez que se establece, 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 las aplicaciones o los procesos que pueden establecer datos 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 el seguimiento en tiempo real o que no ofrecen la posibilidad de configurarlo, es posible que la función SetClock_RealTime() no aparezca, 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 los subprocesos en cualquier plataforma que utilice subprocesos.
Detalles | |||||||
---|---|---|---|---|---|---|---|
Parámetros |
|
||||||
Valores que se muestran |
|