Google is committed to advancing racial equity for Black communities. See how.

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 , notificação de eventos prontidão é tratada através de implementação tradicional poll / select na adaptação plataforma.

Para WEAVE_SYSTEM_CONFIG_USE_LWIP , notificação de eventos prontidão é pega por meio de eventos / mensagens e plataforma e ganchos específicos 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 temporizador one-shot, começou mais cedo através 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
Este implementa a expedição real e manuseio de um Weave Sistema Camada evento.
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 arquivos para select() para trabalhar.
ScheduleWork (TimerCompleteFunct aComplete, void *aAppState)
Error
Horários uma função com uma assinatura idêntica à TimerCompleteFunct a ser executado o mais rápido possível no segmento 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 de 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 temporizador one-shot, começou mais cedo através StartTimer() .

Detalhes
Parâmetros
[in] aOnComplete
Um apontador para a função de retorno utilizado na chamada StartTimer() .
[in] aAppState
Um apontador para o objecto de estado de aplicação usado na chamada StartTimer() .

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

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

O unmarshalling do tipo e argumentos do evento é tratado por um gancho específico da plataforma, que deve chamar de volta para Camada :: HandleEvent para a expedição 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
)

Este implementa a expedição real e manuseio de um Weave Sistema Camada evento.

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
)

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

Chama nl :: Weave :: System :: Timer :: HandleExpiredTimers para lidar com qualquer temporizador expirado. Supõe-se que essa API é chamado somente enquanto no segmento que possui o Weave Sistema Camada objeto.

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
)

Lidar 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 Weave Sistema Camada objeto que faz a solicitação post.
[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 da camada de objeto está 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 arquivos para select() para 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
)

Horários uma função com uma assinatura idêntica à TimerCompleteFunct a ser executado o mais rápido possível no segmento 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() está sendo chamado de dentro HandleSelectResult() , em seguida, escrever para o tubo de esteira pode ser ignorada, uma vez que a thread de E / S já está acordado. 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 como sempre crescente (ou seja, nunca empacotado) 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 podem optar por retornar um valor que mede o tempo desde a inicialização do sistema, os aplicativos não deve contar com isso. Além disso, a época para GetClock_Monotonic () não é obrigado a ser a mesma que para qualquer um dos outros GetClock ... funções. 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 de 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 é obrigado a assinalar de forma contínua durante sistema estados de sono profundo.

Algumas plataformas podem implementar GetClock_MonotonicHiRes () usando um timer de alta resolução capaz de maior precisão do que GetClock_Monotonic () , e que não está sujeito a ajustes de clock graduais (giro). Sistemas sem tais temporizador um pode simplesmente devolver o mesmo valor que GetClock_Monotonic () .

A época para o tempo retornado por GetClock_MonotonicHiRes () não é obrigado a ser a mesma que para qualquer um dos outros GetClock ... funções, 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 funcionar continuamente durante qualquer modo de hibernação do sistema que não implique uma reinicialização ao despertar.

Embora algumas plataformas podem optar por retornar um valor que mede o tempo desde a inicialização do sistema, os aplicativos não deve contar com isso. Além disso, a época para GetClock_Monotonic () não é obrigado a ser a mesma que para qualquer um dos outros GetClock ... funções. 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 mais rápido.

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

Em plataformas que são incapazes de rastreamento em tempo real, o GetClock_RealTime () método pode estar ausente, resultando um erro de ligação 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 é capaz de rastrear em tempo real, mas o sistema está dessincronizada, GetClock_RealTimeMS () retornará o erro WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Em plataformas que são incapazes de rastreamento em tempo real, os GetClock_RealTimeMS () método pode estar ausente, resultando um erro de ligação 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 é permitido alterar em tempo real, o SetClock_RealTime () função retornará o erro WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Em plataformas que são incapazes de rastreamento em tempo real, ou não oferecem a capacidade de definir em tempo real, o SetClock_RealTime () função pode estar ausente, resultando um erro de ligação para qualquer aplicativo que faz referência a ele. Alternativamente, tais plataformas podem fornecer uma implementação de SetClock_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
[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.