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

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
[in] aDelegate
Una estructura delegada del controlador de eventos LwIP no inicializada
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Si tiene éxito.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Si el puntero de función que contiene aDelegate es NULL, haz lo siguiente:

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
[in] aOnComplete
Un puntero a la función de devolución de llamada que se usa para llamar a StartTimer().
[in] aAppState
Un puntero al 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 el manejo.
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
[in,out] aTarget
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 / mensaje.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Si tiene éxito.
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::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
[in] aSetSize
El valor que se muestra de la llamada de selección.
[in] aReadSet
Un puntero al conjunto de descriptores de archivos leídos.
[in] aWriteSet
Un puntero al conjunto de descriptores de archivos de escritura.
[in] aExceptionSet
Un puntero al 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 la instancia.

Detalles
Parámetros
[in,out] aTarget
Un puntero al objeto Layer del sistema de Weave que realiza la solicitud posterior.
[in] aEventType
El tipo de evento que se publicará.
[in,out] aArgument
El argumento asociado con el evento que se publicará.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Si tiene éxito.
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
Se generan errores específicos de la plataforma que indican el motivo de la falla.

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
[out] aSetSize
El rango de descriptores de archivos en el conjunto de descriptores de archivos.
[in] aReadSet
Un puntero al conjunto de descriptores de archivos legibles.
[in] aWriteSet
Un puntero al conjunto de descriptores de archivos que admiten escritura.
[in] aExceptionSet
Un puntero al conjunto de descriptores de archivos con errores.
[in] aSleepTime
Una referencia al tiempo de sueño máximo.

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 debe llamar cuando se activa 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 de retorno
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si no se inicializó la SystemLayer
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si la capa SystemLayer no puede asignar un temporizador nuevo
WEAVE_SYSTEM_NO_ERROR
Si tiene éxito.

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
[in] aPlatformData
Los datos de la plataforma específica 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 para la función a la que se llama cuando expira el temporizador.
[in] aAppState
Un puntero al objeto de estado de la aplicación que se usa cuando expira el temporizador.
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
[out] curTime
La hora actual, expresada como tiempo Unix escalado a microsegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma puede hacer 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 (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
[out] curTime
La hora actual, expresada como tiempo Unix escalado a milisegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma puede hacer 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 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
[in] newCurTime
La nueva hora actual, expresada como tiempo Unix escalado a microsegundos.
Valores de retorno
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 establecer la hora actual,