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) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

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
[in] aDelegate
Una estructura delegada del controlador de eventos LwIP no inicializada
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación es exitosa.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Si el puntero de función contenido en aDelegate es NULL

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
[in] aOnComplete
Un puntero para la función de devolución de llamada que se usa para llamar a StartTimer().
[in] aAppState
Un puntero para el objeto de estado de la aplicación que se usa para llamar a StartTimer().

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
[in] aEvent
El objeto de evento específico de la plataforma que se enviará para su control.
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
[in,out] aTarget
Es una referencia al objeto de capa al que se orienta el evento.
[in] aEventType
El tipo de evento o mensaje que se controlará.
[in] aArgument
Es el argumento asociado con el evento o mensaje.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación es exitosa.
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.

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
[in] aSetSize
El valor que se muestra de la llamada de selección.
[in] aReadSet
Un puntero para el conjunto de descriptores de archivos de lectura.
[in] aWriteSet
Un puntero para el conjunto de descriptores de archivo 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
)

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
[in,out] aTarget
Un puntero al 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
Es el argumento asociado con el evento que se publicará.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si la operación es exitosa.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si el estado del objeto Layer es incorrecto.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la cola de eventos ya está llena.
other
Errores específicos de la plataforma generados que indican el motivo del error.

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
[out] aSetSize
El rango de descriptores de archivo en el conjunto de descriptores de archivo.
[in] aReadSet
Un puntero para el conjunto de descriptores de archivos 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 máximo de sueño.

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
[in] aComplete
Un puntero a una función de devolución de llamada a la que se llamará cuando se active este temporizador.
[in] aAppState
Un puntero a 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 temporizador nuevo,
WEAVE_SYSTEM_NO_ERROR
Si la operación es exitosa.

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
[in] aPlatformData
Los datos de la plataforma específicos del cliente que se configurarán.

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
[in] aMilliseconds
Tiempo de vencimiento 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 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
[out] curTime
Hora actual, expresada como tiempo Unix ajustado a microsegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se muestra si la plataforma es capaz de realizar un seguimiento en tiempo real, pero no está sincronizada en este momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no puede hacer un seguimiento en tiempo real

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
[out] curTime
La hora actual, expresada como tiempo Unix ajustado a milisegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se muestra si la plataforma es capaz de realizar un seguimiento en tiempo real, pero no está sincronizada en este momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no puede hacer un seguimiento en tiempo real

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
[in] newCurTime
Indica la nueva hora actual, expresada como tiempo Unix ajustado a microsegundos.
Valores que se muestran
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma no puede hacer un seguimiento en tiempo real
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Si la aplicación que realiza la llamada no tiene el privilegio para configurar la hora actual