O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

nl :: Tecer:: Sistema:: Camada

#include <src/system/SystemLayer.h>

This provides access to timers according to the configured event handling model.

Resumo

Para WEAVE_SYSTEM_CONFIG_USE_SOCKETS , a notificação de prontidão do evento é tratada por meio da implementação tradicional de pesquisa / seleção na adaptação da plataforma.

Para WEAVE_SYSTEM_CONFIG_USE_LWIP , a notificação de prontidão do evento é WEAVE_SYSTEM_CONFIG_USE_LWIP por meio de eventos / mensagens e ganchos específicos da plataforma e do sistema para o sistema de eventos / mensagens.

Construtores e Destruidores

Layer (void)

Tipos públicos

EventHandler )(Object &aTarget, EventType aEventType, uintptr_t aArgument) typedef
Error(*
TimerCompleteFunct )(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

Funções públicas

AddEventHandlerDelegate ( LwIPEventHandlerDelegate & aDelegate)
Error
Isso adiciona um delegado do manipulador de eventos à camada do sistema para estender sua capacidade de manipular eventos LwIP.
CancelTimer (TimerCompleteFunct aOnComplete, void *aAppState)
void
Este método cancela um cronômetro de disparo único, iniciado anteriormente por meio de StartTimer() .
DispatchEvent (Event aEvent)
Error
Isso despacha o evento especificado para tratamento por esta instância.
DispatchEvents (void)
Error
Este é um wrapper sintático em torno de um gancho específico de plataforma que efetua um loop de evento, esperando em uma fila que atende esta instância, puxando eventos dessa fila e, em seguida, despachando-os para tratamento.
GetPlatformData (void) const
void *
Isso retorna todos os dados de plataforma específicos do cliente atribuídos à instância, se tiverem sido configurados anteriormente.
HandleEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Isso implementa o envio real e o tratamento de um evento Weave System Layer .
HandlePlatformTimer (void)
Error
Lidar com o evento de expiração do cronômetro da plataforma.
HandleSelectResult (int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Lide com I / O de uma chamada selecionada.
Init (void *aContext)
Error
NewTimer ( Timer *& aTimerPtr)
Error
PostEvent ( Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Isso posta um evento / mensagem do tipo especificado com o argumento fornecido para a fila de eventos específica da plataforma desta instância.
PrepareSelect (int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Prepare os conjuntos de descritores de arquivo com os quais select() trabalhar.
ScheduleWork (TimerCompleteFunct aComplete, void *aAppState)
Error
Agenda uma função com uma assinatura idêntica a TimerCompleteFunct para ser executada o mais rápido possível no thread Weave.
SetPlatformData (void *aPlatformData)
void
Isso define os dados da plataforma específicos do cliente especificados para a instância para recuperação posterior pela plataforma do cliente.
Shutdown (void)
Error
StartTimer (uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Este método inicia um cronômetro de disparo único.
State (void) const
LayerState
Isso retorna o estado atual do objeto de camada.
WakeSelect (void)
void
Ative o thread de E / S que monitora os descritores de arquivo usando select () gravando um único byte no wake pipe.

Funções estáticas públicas

GetClock_Monotonic (void)
uint64_t
Retorna o tempo do sistema monotônico em unidades de microssegundos.
GetClock_MonotonicHiRes (void)
uint64_t
Retorna um tempo do sistema monotônico (potencialmente) de alta resolução em unidades de microssegundos.
GetClock_MonotonicMS (void)
uint64_t
Retorna um tempo de sistema monotônico em unidades de milissegundos.
GetClock_RealTime (uint64_t & curTime)
Error
Retorna a hora real (civil) atual no formato de hora Unix de microssegundos.
GetClock_RealTimeMS (uint64_t & curTimeMS)
Error
Retorna a hora real (civil) atual no formato de hora Unix de milissegundos.
SetClock_RealTime (uint64_t newCurTime)
Error
Define a noção da plataforma do tempo real (civil) atual.

Tipos públicos

EventHandler

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

TimerCompleteFunct

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

Funções públicas

AddEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Isso adiciona um delegado do manipulador de eventos à camada do sistema para estender sua capacidade de manipular eventos LwIP.

Detalhes
Parâmetros
[in] aDelegate
Uma estrutura de delegado do manipulador de eventos LwIP não inicializada
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Com sucesso.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Se o ponteiro de função contido em aDelegate for NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Este método cancela um cronômetro de disparo único, iniciado anteriormente com StartTimer() .

Detalhes
Parâmetros
[in] aOnComplete
Um ponteiro para a função de retorno de chamada usada na chamada de StartTimer() .
[in] aAppState
Um ponteiro para o objeto de estado do aplicativo usado na chamada de StartTimer() .

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Isso despacha o evento especificado para tratamento por esta instância.

O desempacotamento do tipo e dos argumentos do evento é tratado por um gancho específico da plataforma que deve então chamar de volta para Layer :: HandleEvent para o despacho real.

Detalhes
Parâmetros
[in] aEvent
O objeto de evento específico da plataforma a ser despachado para tratamento.
Devoluções
WEAVE_SYSTEM_NO_ERROR em caso de sucesso; caso contrário, um erro específico indicando o motivo da falha de inicialização.

DispatchEvents

Error DispatchEvents(
  void
)

Este é um wrapper sintático em torno de um gancho específico de plataforma que efetua um loop de evento, esperando em uma fila que atende esta instância, puxando eventos dessa fila e, em seguida, despachando-os para tratamento.

Detalhes
Devoluções
WEAVE_SYSTEM_NO_ERROR em caso de sucesso; caso contrário, um erro específico indicando o motivo da falha de inicialização.

GetPlatformData

void * GetPlatformData(
  void
) const 

Isso retorna todos os dados de plataforma específicos do cliente atribuídos à instância, se tiverem sido configurados anteriormente.

Detalhes
Devoluções
Dados de plataforma específicos do cliente, se tiverem sido configurados anteriormente; caso contrário, NULL.

HandleEvent

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

Isso implementa o envio real e o tratamento de um evento Weave System Layer .

Detalhes
Parâmetros
[in,out] aTarget
Uma referência ao objeto de camada ao qual o evento é direcionado.
[in] aEventType
O tipo de evento / mensagem a ser manipulado.
[in] aArgument
O argumento associado ao evento / mensagem.
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Com sucesso.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se o estado do objeto InetLayer estiver incorreto.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Se o tipo de evento não for reconhecido.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Lidar com o evento de expiração do cronômetro da plataforma.

Chama nl :: Weave :: System :: Timer :: HandleExpiredTimers para lidar com qualquer temporizador expirado. Presume-se que esta API seja chamada apenas enquanto estiver no encadeamento que possui o objeto Weave System Layer .

Detalhes
Devoluções
WEAVE_SYSTEM_NO_ERROR em caso de sucesso, código de erro caso contrário.

HandleSelectResult

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

Lide com I / O de uma chamada selecionada.

Este método registra o evento de E / S pendente em cada terminal ativo e, em seguida, invoca as respectivas funções de tratamento de E / S para esses terminais.

Detalhes
Parâmetros
[in] aSetSize
O valor de retorno da chamada selecionada.
[in] aReadSet
Um ponteiro para o conjunto de descritores de arquivos lidos.
[in] aWriteSet
Um ponteiro para o conjunto de descritores de arquivo de gravação.
[in] aExceptionSet
Um ponteiro para o conjunto de descritores de arquivo com erros.

Iniciar

Error Init(
  void *aContext
)

Camada

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

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

Isso posta um evento / mensagem do tipo especificado com o argumento fornecido para a fila de eventos específica da plataforma desta instância.

Detalhes
Parâmetros
[in,out] aTarget
Um ponteiro para o objeto Weave System Layer que faz a solicitação de postagem.
[in] aEventType
O tipo de evento a ser postado.
[in,out] aArgument
O argumento associado ao evento a ser postado.
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Com sucesso.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se o estado do objeto Layer estiver incorreto.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se a fila de eventos já estiver cheia.
other
Erros específicos da plataforma gerados, indicando o motivo da falha.

PrepareSelect

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

Prepare os conjuntos de descritores de arquivo para o select() trabalhar.

Detalhes
Parâmetros
[out] aSetSize
O intervalo de descritores de arquivo no conjunto de descritores de arquivo.
[in] aReadSet
Um ponteiro para o conjunto de descritores de arquivo legíveis.
[in] aWriteSet
Um ponteiro para o conjunto de descritores de arquivo graváveis.
[in] aExceptionSet
Um ponteiro para o conjunto de descritores de arquivo com erros.
[in] aSleepTime
Uma referência ao tempo máximo de sono.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Agenda uma função com uma assinatura idêntica a TimerCompleteFunct para ser executada o mais rápido possível no thread Weave.

Detalhes
Parâmetros
[in] aComplete
Um ponteiro para uma função de retorno de chamada a ser chamada quando este cronômetro é disparado.
[in] aAppState
Um ponteiro para um objeto de estado do aplicativo a ser passado para a função de retorno de chamada como argumento.
Valores Retornados
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se o SystemLayer não foi inicializado.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se o SystemLayer não puder alocar um novo cronômetro.
WEAVE_SYSTEM_NO_ERROR
Com sucesso.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Isso define os dados da plataforma específicos do cliente especificados para a instância para recuperação posterior pela plataforma do cliente.

Detalhes
Parâmetros
[in] aPlatformData
Os dados da plataforma específicos do cliente a serem configurados.

Desligar

Error Shutdown(
  void
)

StartTimer

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

Este método inicia um cronômetro de disparo único.

Detalhes
Parâmetros
[in] aMilliseconds
Tempo de expiração em milissegundos.
[in] aComplete
Um ponteiro para a função chamada quando o temporizador expira.
[in] aAppState
Um ponteiro para o objeto de estado do aplicativo usado quando o cronômetro expira.
Devoluções
WEAVE_SYSTEM_NO_ERROR Em caso de sucesso.
Devoluções
WEAVE_SYSTEM_ERROR_NO_MEMORY Se um cronômetro não puder ser alocado.
Devoluções
Outro valor indicando que o temporizador falhou ao iniciar.

Estado

LayerState State(
  void
) const 

Isso retorna o estado atual do objeto de camada.

WakeSelect

void WakeSelect(
  void
)

Ative o thread de E / S que monitora os descritores de arquivo usando select () gravando um único byte no wake pipe.

Nota: Se WakeSelect() estiver sendo chamado de dentro de HandleSelectResult() , a gravação no wake pipe pode ser ignorada, uma vez que o thread de E / S já está ativado. Além disso, não nos importamos se essa gravação falhar, pois a única falha razoavelmente provável é que o pipe está cheio, caso em que o thread de chamada selecionado será ativado de qualquer maneira.

Funções estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Retorna o tempo do sistema monotônico em unidades de microssegundos.

Esta função retorna um tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma. O valor retornado é garantido para ser sempre crescente (ou seja, nunca empacotando) entre as reinicializações do sistema. Além disso, a fonte de tempo subjacente é garantida para marcar continuamente durante qualquer modo de hibernação do sistema que não implique uma reinicialização ao despertar.

Embora algumas plataformas possam escolher retornar um valor que mede o tempo desde a inicialização do sistema, os aplicativos não devem depender disso. Além disso, a época para GetClock_Monotonic () não precisa ser a mesma que para qualquer uma das outras funções GetClock .... Portanto, os cálculos de tempo relativo só podem ser executados em valores retornados pela mesma função.

Esta função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Devoluções
Tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Retorna um tempo do sistema monotônico (potencialmente) de alta resolução em unidades de microssegundos.

Esta função retorna um tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma. O valor retornado é garantido para ser sempre crescente (ou seja, nunca empacotando) entre as reinicializações do sistema. No entanto, o temporizador subjacente não precisa marcar continuamente durante os estados de hibernação profunda do sistema.

Algumas plataformas podem implementar GetClock_MonotonicHiRes () usando um cronômetro de alta resolução capaz de maior precisão do que GetClock_Monotonic () e que não está sujeito a ajustes graduais de relógio (giro). Os sistemas sem esse temporizador podem simplesmente retornar o mesmo valor que GetClock_Monotonic () .

A época de tempo retornada por GetClock_MonotonicHiRes () não precisa ser a mesma que para qualquer uma das outras funções GetClock ..., incluindo GetClock_Monotonic () .

Esta função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Devoluções
Tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Retorna um tempo de sistema monotônico em unidades de milissegundos.

Esta função retorna um tempo decorrido em milissegundos desde uma época arbitrária definida pela plataforma. O valor retornado é garantido para ser sempre crescente (ou seja, nunca empacotando) entre as reinicializações do sistema. Além disso, a fonte de tempo subjacente é garantida para marcar continuamente durante qualquer modo de hibernação do sistema que não implique uma reinicialização ao despertar.

Embora algumas plataformas possam escolher retornar um valor que mede o tempo desde a inicialização do sistema, os aplicativos não devem depender disso. Além disso, a época para GetClock_Monotonic () não precisa ser a mesma que para qualquer uma das outras funções GetClock .... Portanto, os cálculos de tempo relativo só podem ser executados em valores retornados pela mesma função.

Esta função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Devoluções
Tempo decorrido em milissegundos desde uma época arbitrária definida pela plataforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Retorna a hora real (civil) atual no formato de hora Unix de microssegundos.

Este método retorna a noção da plataforma local de tempo real atual, expressa como um valor de tempo Unix escalado para microssegundos. O relógio subjacente tem garantia de tique-taque a uma taxa de pelo menos segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode tique-se mais rápido.

Se a plataforma subjacente for capaz de rastrear em tempo real, mas o sistema não estiver sincronizado, GetClock_RealTime () retornará o erro WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Em plataformas que são incapazes de rastrear em tempo real, o método GetClock_RealTime () pode estar ausente, resultando em um erro de link para qualquer aplicativo que faz referência a ele. Alternativamente, tais plataformas podem fornecer uma implementação de GetClock_RealTime () que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Esta função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como tempo Unix escalado para microssegundos.
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma for capaz de rastrear em tempo real, mas não estiver sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma for incapaz de rastrear em tempo real.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Retorna a hora real (civil) atual no formato de hora Unix de milissegundos.

Este método retorna a noção da plataforma local de tempo real atual, expressa como um valor de tempo Unix escalado para milissegundos. O relógio subjacente tem garantia de tique-taque a uma taxa de pelo menos segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode tique mais rápido.

Se a plataforma subjacente for capaz de rastrear em tempo real, mas o sistema não estiver sincronizado, GetClock_RealTimeMS () retornará o erro WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Em plataformas que são incapazes de rastrear em tempo real, o método GetClock_RealTimeMS () pode estar ausente, resultando em um erro de link para qualquer aplicativo que faz referência a ele. Alternativamente, tais plataformas podem fornecer uma implementação de GetClock_RealTimeMS () que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Esta função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como tempo Unix em milissegundos.
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma for capaz de rastrear em tempo real, mas não estiver sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma for incapaz de rastrear em tempo real.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Define a noção da plataforma do tempo real (civil) atual.

Os aplicativos podem chamar essa função para definir a noção de tempo real atual da plataforma local. A nova hora atual é expressa como um valor de hora Unix escalado para microssegundos.

Uma vez definido, o relógio da plataforma subjacente garante o rastreamento em tempo real com uma granularidade de pelo menos segundos inteiros.

Algumas plataformas podem restringir quais aplicativos ou processos podem definir em tempo real. Se o chamador não tiver permissão para alterar em tempo real, a função SetClock_RealTime () retornará o erro WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Em plataformas que são incapazes de rastrear o tempo real, ou não oferecem a capacidade de definir o tempo real, a função SetClock_RealTime () pode estar ausente, resultando em um erro de link para qualquer aplicativo que faz referência a ela. Alternativamente, tais plataformas podem fornecer uma implementação de SetClock_RealTime () que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Essa função é garantida como thread-safe em qualquer plataforma que empregue threading.

Detalhes
Parâmetros
[in] newCurTime
A nova hora atual, expressa como tempo Unix escalado para microssegundos.
Valores Retornados
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma for incapaz de rastrear em tempo real.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Se o aplicativo de chamada não tiver o privilégio de definir a hora atual.