En Google, luchamos por la equidad racial de la comunidad negra. Más información

nl :: Tejido:: 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 , notificación de eventos disposición se maneja a través de la aplicación tradicional de sondeo / selección de la adaptación de la plataforma.

Para WEAVE_SYSTEM_CONFIG_USE_LWIP , notificación de eventos disposición es mango a través de eventos / mensajes y la plataforma y ganchos específicos del sistema para el sistema de eventos / 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 publicas

AddEventHandlerDelegate ( LwIPEventHandlerDelegate & aDelegate)
Error
Esto agrega un delegado de controlador de eventos a la capa del sistema para ampliar su capacidad para manejar eventos LwIP.
CancelTimer (TimerCompleteFunct aOnComplete, void *aAppState)
void
Este método anula un temporizador de una sola vez, a través empezado antes StartTimer() .
DispatchEvent (Event aEvent)
Error
Esto envía el evento especificado para que lo maneje esta instancia.
DispatchEvents (void)
Error
Este es un contenedor sintáctico alrededor de un gancho específico de la plataforma que efectúa un bucle de eventos, esperando en una cola que da servicio a esta instancia, sacando eventos de esa cola y luego enviándolos para su manejo.
GetPlatformData (void) const
void *
Esto devuelve cualquier dato de plataforma específico del cliente asignado a la instancia, si se ha configurado previamente.
HandleEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Esto implementa el despacho real y el manejo de un sistema de armadura de la capa de eventos.
HandlePlatformTimer (void)
Error
Maneja el evento de expiración del temporizador de la plataforma.
HandleSelectResult (int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Manejar 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 / mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específicos de la plataforma de esta instancia.
PrepareSelect (int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Preparar los conjuntos de descriptores de fichero para select() para trabajar.
ScheduleWork (TimerCompleteFunct aComplete, void *aAppState)
Error
Horarios de una función con una firma idéntica a TimerCompleteFunct que se ejecute lo más pronto posible en el hilo de la armadura.
SetPlatformData (void *aPlatformData)
void
Esto establece los datos de la plataforma específicos del cliente especificados en la instancia para su posterior recuperación por parte de la plataforma del cliente.
Shutdown (void)
Error
StartTimer (uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Este método inicia un temporizador de una sola vez.
State (void) const
LayerState
Esto devuelve el estado actual del objeto de capa.
WakeSelect (void)
void
Active el subproceso de E / S que monitorea los descriptores de archivo usando select () escribiendo un solo byte en la tubería de activación.

Funciones estáticas públicas

GetClock_Monotonic (void)
uint64_t
Devuelve un tiempo de sistema monótono en unidades de microsegundos.
GetClock_MonotonicHiRes (void)
uint64_t
Devuelve un tiempo de sistema monótono (potencialmente) de alta resolución en unidades de microsegundos.
GetClock_MonotonicMS (void)
uint64_t
Devuelve un tiempo del sistema monótono en unidades de milisegundos.
GetClock_RealTime (uint64_t & curTime)
Error
Devuelve el tiempo real (civil) actual en formato de tiempo Unix de microsegundos.
GetClock_RealTimeMS (uint64_t & curTimeMS)
Error
Devuelve el tiempo real (civil) actual en milisegundos en formato de tiempo Unix.
SetClock_RealTime (uint64_t newCurTime)
Error
Establece la noción de tiempo real (civil) actual de la plataforma.

Tipos públicos

Controlador de eventos

Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)

TimerCompleteFunct

void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)

Funciones publicas

AddEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Esto agrega un delegado de controlador de eventos a la capa del sistema para ampliar su capacidad para manejar eventos LwIP.

Detalles
Parámetros
[in] aDelegate
Una estructura de delegado de controlador de eventos LwIP no inicializada
Valores devueltos
WEAVE_SYSTEM_NO_ERROR
Sobre el éxito.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Si el puntero de función contenido en aDelegate es NULL

Cancelar temporizador

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Este método anula un temporizador de una sola vez, a través empezado antes StartTimer() .

Detalles
Parámetros
[in] aOnComplete
Un puntero a la función de devolución de llamada usa en la llamada StartTimer() .
[in] aAppState
Un puntero al objeto de estado de la aplicación usa en la llamada StartTimer() .

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Esto envía el evento especificado para que lo maneje esta instancia.

El unmarshalling del tipo y argumentos del evento está a cargo de un gancho plataforma específica que luego debe llamar de nuevo a la capa :: 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 manejo.
Devoluciones
WEAVE_SYSTEM_NO_ERROR en caso de éxito; de lo contrario, un error específico que indica el motivo del error de inicialización.

DispatchEvents

Error DispatchEvents(
  void
)

Este es un contenedor sintáctico alrededor de un gancho específico de la plataforma que efectúa un bucle de eventos, esperando en una cola que da servicio a esta instancia, sacando eventos de esa cola y luego enviándolos para su manejo.

Detalles
Devoluciones
WEAVE_SYSTEM_NO_ERROR en el éxito; de lo contrario, un error específico que indica el motivo del error de inicialización.

GetPlatformData

void * GetPlatformData(
  void
) const 

Esto devuelve cualquier dato de plataforma específico del cliente asignado a la instancia, si se ha configurado previamente.

Detalles
Devoluciones
Datos de plataforma específicos del cliente, si se ha configurado previamente; de lo contrario, NULL.

HandleEvent

Error HandleEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

Esto implementa el despacho real y el manejo de un sistema de armadura de la capa de eventos.

Detalles
Parámetros
[in,out] aTarget
Una referencia al objeto de capa al que se dirige el evento.
[in] aEventType
El tipo de evento / mensaje que se va a manejar.
[in] aArgument
El argumento asociado con el evento / mensaje.
Valores devueltos
WEAVE_SYSTEM_NO_ERROR
Sobre el éxito.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si el estado del objeto InetLayer es incorrecto.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Si el tipo de evento no se reconoce.

ManejarPlataformaTimer

Error HandlePlatformTimer(
  void
)

Maneja el evento de expiración del temporizador de la plataforma.

Llama a nl :: Weave :: System :: Timer :: HandleExpiredTimers para manejar cualquier temporizador caducado. Se supone que esta API sólo se llama mientras que en el hilo que posee el sistema de la armadura de la capa objeto.

Detalles
Devoluciones
WEAVE_SYSTEM_NO_ERROR en caso de éxito, código de error en caso contrario.

HandleSelectResult

void HandleSelectResult(
  int aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet
)

Manejar E / S desde una llamada seleccionada.

Este método registra el evento de E / S pendiente en cada punto final activo y luego invoca las funciones de manejo de E / S respectivas para esos puntos finales.

Detalles
Parámetros
[in] aSetSize
El valor de retorno de la llamada seleccionada.
[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.

En eso

Error Init(
  void *aContext
)

Capa

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

Posterior al evento

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

Esto publica un evento / mensaje del tipo especificado con el argumento proporcionado a la cola de eventos específicos de la plataforma de esta instancia.

Detalles
Parámetros
[in,out] aTarget
Un puntero a la armadura del Sistema de Capa objeto realizar la consulta posterior.
[in] aEventType
El tipo de evento que se publicará.
[in,out] aArgument
El argumento asociado con el evento que se va a publicar.
Valores devueltos
WEAVE_SYSTEM_NO_ERROR
Sobre el éxito.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si el estado de la capa de objeto es incorrecta.
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 del error.

PrepararSeleccionar

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

Preparar los conjuntos de descriptores de fichero para select() para trabajar.

Detalles
Parámetros
[out] aSetSize
El rango de descriptores de archivo en el conjunto de descriptores de archivo.
[in] aReadSet
Un puntero al conjunto de descriptores de archivos legibles.
[in] aWriteSet
Un puntero al conjunto de descriptores de archivos grabables.
[in] aExceptionSet
Un puntero al 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
)

Horarios de una función con una firma idéntica a TimerCompleteFunct que se ejecute lo más pronto posible en el hilo de la armadura.

Detalles
Parámetros
[in] aComplete
Un puntero a una función de devolución de llamada 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 devueltos
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Si SystemLayer no se ha inicializado.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Si SystemLayer no puede asignar un nuevo temporizador.
WEAVE_SYSTEM_NO_ERROR
Sobre el éxito.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Esto establece los datos de la plataforma específicos del cliente especificados en la instancia para su posterior recuperación por parte de la plataforma del cliente.

Detalles
Parámetros
[in] aPlatformData
Los datos de la plataforma específicos del cliente que se van a configurar.

Cerrar

Error Shutdown(
  void
)

StartTimer

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

Este método inicia un temporizador de una sola vez.

Detalles
Parámetros
[in] aMilliseconds
Tiempo de caducidad en milisegundos.
[in] aComplete
Un puntero a la función llamada cuando expira el temporizador.
[in] aAppState
Un puntero al objeto de estado de la aplicación que se utiliza cuando expira el temporizador.
Devoluciones
WEAVE_SYSTEM_NO_ERROR Si tiene éxito.
Devoluciones
WEAVE_SYSTEM_ERROR_NO_MEMORY Si no se puede asignar un temporizador.
Devoluciones
Otro Valor que indica que el temporizador no se inició.

Expresar

LayerState State(
  void
) const 

Esto devuelve el estado actual del objeto de capa.

WakeSelect

void WakeSelect(
  void
)

Active el subproceso de E / S que monitorea los descriptores de archivo usando select () escribiendo un solo byte en la tubería de activación.

Nota: Si WakeSelect() se llama desde dentro HandleSelectResult() , entonces la escritura del conducto estela se pueden omitir, ya que el flujo de entrada / O ya está despierto. Además, no nos importa si esta escritura falla, ya que la única falla razonablemente probable es que la tubería esté llena, en cuyo caso el hilo de llamada seleccionado se activará de todos modos.

Funciones estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Devuelve un tiempo de sistema monótono en unidades de microsegundos.

Esta función devuelve un tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marcará continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al despertar.

Aunque algunas plataformas pueden optar por devolver un valor que mide el tiempo desde el inicio para el sistema, las aplicaciones no deben confiar en esto. Además, la época de GetClock_Monotonic () no está obligado a ser el mismo que el de cualquiera de las otras funciones ... GetClock. Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores devueltos por la misma función.

Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.

Detalles
Devoluciones
Tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Devuelve un tiempo de sistema monótono (potencialmente) de alta resolución en unidades de microsegundos.

Esta función devuelve un tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Sin embargo, no se requiere el temporizador subyacente a marcar de forma continua durante el sistema de estados de sueño profundo.

Algunas plataformas pueden implementar GetClock_MonotonicHiRes () usando un temporizador de alta resolución capaz de mayor precisión que GetClock_Monotonic () , y que no está sujeta a ajustes graduales de reloj (de giro). Los sistemas sin temporizador Tal simplemente pueden volver el mismo valor que GetClock_Monotonic () .

La época de tiempo devuelto por GetClock_MonotonicHiRes () no está obligado a ser el mismo que para cualquier otro de GetClock ... funciones, incluyendo GetClock_Monotonic () .

Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.

Detalles
Devoluciones
Tiempo transcurrido en microsegundos desde una época arbitraria definida por la plataforma.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Devuelve un tiempo del sistema monótono en milisegundos.

Esta función devuelve un tiempo transcurrido en milisegundos desde una época arbitraria definida por la plataforma. Se garantiza que el valor devuelto aumentará constantemente (es decir, nunca se ajustará) entre reinicios del sistema. Además, se garantiza que la fuente de tiempo subyacente marcará continuamente durante cualquier modo de suspensión del sistema que no implique un reinicio al despertar.

Aunque algunas plataformas pueden optar por devolver un valor que mide el tiempo desde el inicio para el sistema, las aplicaciones no deben confiar en esto. Además, la época de GetClock_Monotonic () no está obligado a ser el mismo que el de cualquiera de las otras funciones ... GetClock. Por lo tanto, los cálculos de tiempo relativo solo se pueden realizar en valores devueltos por la misma función.

Se garantiza que esta función es segura para subprocesos en cualquier plataforma que emplee subprocesos.

Detalles
Devoluciones
Tiempo transcurrido en milisegundos desde una época arbitraria definida por la plataforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Devuelve el tiempo real (civil) actual en formato de tiempo Unix de microsegundos.

Este método devuelve la noción de tiempo real actual de la plataforma local, expresada como un valor de tiempo Unix escalado a microsegundos. Se garantiza que el reloj subyacente funcionará a una velocidad mínima de segundos enteros (valores de 1.000.000), pero en algunas plataformas puede marcar más rápido.

Si la plataforma subyacente es capaz de rastrear en tiempo real, pero el sistema se encuentra actualmente sin sincronizar, GetClock_RealTime () devolverá el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

En las plataformas que son incapaces de seguimiento en tiempo real, la GetClock_RealTime () método puede estar ausente, dando como resultado un error de enlace para cualquier aplicación que hace referencia a ella. Alternativamente, tales plataformas pueden suministrar una implementación de GetClock_RealTime () que siempre devuelve 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
El tiempo actual, expresado como tiempo Unix escalado a microsegundos.
Valores devueltos
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma es capaz de rastrear en tiempo real, pero actualmente no está sincronizada.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma es incapaz de rastrear en tiempo real.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Devuelve el tiempo real (civil) actual en milisegundos en formato de tiempo Unix.

Este método devuelve la noción de tiempo real actual de la plataforma local, expresada como un valor de tiempo Unix escalado a milisegundos. Se garantiza que el reloj subyacente funcionará a una velocidad mínima de segundos enteros (valores de 1.000.000), pero en algunas plataformas puede marcar más rápido.

Si la plataforma subyacente es capaz de rastrear en tiempo real, pero el sistema está actualmente no sincronizados, GetClock_RealTimeMS () devolverá el error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

En las plataformas que son incapaces de seguimiento en tiempo real, los GetClock_RealTimeMS () método puede estar ausente, dando como resultado un error de enlace para cualquier aplicación que hace referencia a ella. Alternativamente, tales plataformas pueden suministrar una implementación de GetClock_RealTimeMS () que siempre devuelve 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 devueltos
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Si la plataforma es capaz de rastrear en tiempo real, pero actualmente no está sincronizada.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma es incapaz de rastrear en tiempo real.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Establece la noción de tiempo real (civil) actual de la plataforma.

Las aplicaciones pueden llamar a esta función para establecer la noción de tiempo real actual de la plataforma local. La nueva hora actual se expresa como un valor de tiempo Unix escalado a microsegundos.

Una vez configurado, se garantiza que el reloj de la plataforma subyacente rastrea el tiempo real con una granularidad de al menos segundos completos.

Algunas plataformas pueden restringir qué aplicaciones o procesos pueden configurarse en tiempo real. Si la persona que llama no está autorizado a cambiar en tiempo real, la SetClock_RealTime () función devolverá el error WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

En las plataformas que son incapaces de seguimiento en tiempo real, o no ofrecen la posibilidad de fijar en tiempo real, la SetClock_RealTime () la función puede estar ausente, dando como resultado un error de enlace para cualquier aplicación que hace referencia a ella. Alternativamente, tales plataformas pueden suministrar una implementación de SetClock_RealTime () que siempre devuelve 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 devueltos
WEAVE_SYSTEM_NO_ERROR
Si el método tuvo éxito.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Si la plataforma es incapaz de rastrear en tiempo real.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Si la aplicación que llama no tiene el privilegio de establecer la hora actual.