nl::Weave::System::Layer

#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 de eventos é processada pela implementação tradicional de enquete/seleção na adaptação da plataforma.

Para WEAVE_SYSTEM_CONFIG_USE_LWIP, a notificação de prontidão do evento é processada por eventos / mensagens e hooks 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 lidar com eventos LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Esse método cancela um timer one-shot, iniciado anteriormente até StartTimer().
DispatchEvent(Event aEvent)
Error
Isso despacha o evento especificado para ser manipulado por essa instância.
DispatchEvents(void)
Error
Esse é um wrapper sintático em torno de um hook específico da plataforma que afeta um loop de eventos, aguardando uma fila que atende essa instância, extraindo eventos dessa fila e, em seguida, despachando-os para processamento.
GetPlatformData(void) const
void *
Isso retorna todos os dados da plataforma específicos do cliente atribuídos à instância, se eles tiverem sido definidos anteriormente.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Isso implementa o envio e o tratamento reais de um evento Layer do sistema Weave.
HandlePlatformTimer(void)
Error
Processa o evento de expiração do timer da plataforma.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Processar E/S de uma chamada selecionada.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Publica um evento / uma mensagem do tipo especificado com o argumento fornecido na fila de eventos específica da plataforma da 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 para o select() trabalhar.
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Programa uma função com uma assinatura idêntica a TimerCompleteFunct para ser executada o mais rápido possível na linha de execução do Weave.
SetPlatformData(void *aPlatformData)
void
Isso define os dados especificados da plataforma específicos do cliente para a instância, para recuperação posterior pela plataforma do cliente.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Esse método inicia um timer one-shot.
State(void) const
LayerState
Isso retorna o estado atual do objeto da camada.
WakeSelect(void)
void
Ative a linha de execução de E/S que monitora os descritores do arquivo usando select() escrevendo um único byte no wake pipe.

Funções estáticas públicas

GetClock_Monotonic(void)
uint64_t
Retorna o tempo de um sistema monotônico em unidades de microssegundos.
GetClock_MonotonicHiRes(void)
uint64_t
Retorna o tempo monotônico de alta resolução (possivelmente) do sistema em unidades de microssegundos.
GetClock_MonotonicMS(void)
uint64_t
Retorna o tempo monotônico do sistema em unidades de milissegundos.
GetClock_RealTime(uint64_t & curTime)
Error
Retorna a hora real (civil) atual em formato de hora Unix de microssegundos.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Retorna o horário real (civil) atual no formato de milissegundos de hora Unix.
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 lidar com eventos LwIP.

Detalhes
Parâmetros
[in] aDelegate
Uma estrutura de delegação do manipulador de eventos LwIP não inicializada
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se a operação for bem-sucedida.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Se o ponteiro de função contido em aDelegate for NULL

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Esse método cancela um timer one-shot, iniciado anteriormente até StartTimer().

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

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Isso despacha o evento especificado para ser manipulado por essa instância.

A unmarshalling do tipo e argumentos do evento é processada por um hook específico da plataforma que, por sua vez, precisa chamar de volta para Layer::HandleEvent para o envio real.

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

DispatchEvents

Error DispatchEvents(
  void
)

Esse é um wrapper sintático em torno de um hook específico da plataforma que afeta um loop de eventos, aguardando uma fila que atende essa instância, extraindo eventos dessa fila e, em seguida, despachando-os para processamento.

Detalhes
Retornos
WEAVE_SYSTEM_NO_ERROR se tiver sucesso; caso contrário, um erro específico indicando o motivo da falha na inicialização.

GetPlatformData

void * GetPlatformData(
  void
) const 

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

Detalhes
Retornos
dados de plataformas específicos do cliente, se tiverem sido definidos anteriormente; caso contrário, NULL.

HandleEvent

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

Isso implementa o envio e o tratamento reais de um evento Layer do sistema Weave.

Detalhes
Parâmetros
[in,out] aTarget
Uma referência ao objeto da camada para o qual o evento é segmentado.
[in] aEventType
O tipo de evento / mensagem a ser processado.
[in] aArgument
O argumento associado ao evento / mensagem.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se a operação for bem-sucedida.
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
)

Processa o evento de expiração do timer da plataforma.

Chamadas nl::Weave::System::Timer::HandleExpiresTimers para lidar com timers expirados. Presume-se que essa API seja chamada somente enquanto estiver na linha de execução proprietária do objeto Layer do sistema Weave.

Detalhes
Retornos
WEAVE_SYSTEM_NO_ERROR em caso de sucesso; caso contrário, o código do erro.

HandleSelectResult

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

Processar E/S de uma chamada selecionada.

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

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

Init

Error Init(
  void *aContext
)

Camada

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

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

Publica um evento / uma mensagem do tipo especificado com o argumento fornecido na fila de eventos específica da plataforma da instância.

Detalhes
Parâmetros
[in,out] aTarget
Um ponteiro para o objeto Layer do sistema Weave 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 de retorno
WEAVE_SYSTEM_NO_ERROR
Se a operação for bem-sucedida.
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 dos 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 arquivos 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
)

Programa uma função com uma assinatura idêntica a TimerCompleteFunct para ser executada o mais rápido possível na linha de execução do Weave.

Detalhes
Parâmetros
[in] aComplete
Um ponteiro para uma função de retorno de chamada a ser chamada quando este timer é disparado.
[in] aAppState
Um ponteiro para um objeto de estado do aplicativo a ser passado para a função de callback como argumento.
Valores de retorno
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se SystemLayer não tiver sido inicializada.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se SystemLayer não puder alocar um novo cronômetro.
WEAVE_SYSTEM_NO_ERROR
Se a operação for bem-sucedida.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

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

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

Encerramento

Error Shutdown(
  void
)

StartTimer

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

Esse método inicia um timer one-shot.

Detalhes
Parâmetros
[in] aMilliseconds
Tempo de expiração em milissegundos.
[in] aComplete
Um ponteiro para a função chamada quando o timer expira.
[in] aAppState
Um ponteiro para o objeto de estado do aplicativo usado quando o timer expira.
Retornos
WEAVE_SYSTEM_NO_ERROR Após a conclusão.
Retornos
WEAVE_SYSTEM_ERROR_NO_MEMORY: Se não for possível alocar um timer.
Retornos
Outro valor indicando que o timer não foi iniciado.

Estado

LayerState State(
  void
) const 

Isso retorna o estado atual do objeto da camada.

WakeSelect

void WakeSelect(
  void
)

Ative a linha de execução de E/S que monitora os descritores do arquivo usando select() gravando um único byte no pipe de ativação.

Observação:se WakeSelect() estiver sendo chamado de dentro de HandleSelectResult(), a gravação no wake pipe poderá ser ignorada, já que a linha de execução de E/S já está ativada. Além disso, não importa se essa gravação falha, porque a única falha razoavelmente provável é que o pipe esteja cheio. Nesse caso, a linha de execução de chamada selecionada será ativada de qualquer maneira.

Funções estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

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

Essa função retorna um tempo decorrido em microssegundos a partir de uma época arbitrária definida pela plataforma. É garantido que o valor retornado vai aumentar sempre (ou seja, nunca ser encapsulado) entre as reinicializações do sistema. Além disso, é garantido que a fonte de hora subjacente será ativada continuamente durante qualquer modo de suspensão do sistema que não exija reinicialização após a ativação.

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

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Retornos
Tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

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

Essa função retorna um tempo decorrido em microssegundos a partir de uma época arbitrária definida pela plataforma. É garantido que o valor retornado vai aumentar sempre (ou seja, nunca ser encapsulado) entre as reinicializações do sistema. No entanto, o timer não precisa ser ativado continuamente durante os estados de suspensão profunda do sistema.

Algumas plataformas podem implementar GetClock_MonotonicHiRes() usando um timer de alta resolução com maior precisão do que GetClock_Monotonic(). Esse timer não está sujeito a ajustes graduais de relógio (aceleração). Sistemas sem esse timer podem simplesmente retornar o mesmo valor que GetClock_Monotonic().

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

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Retornos
Tempo decorrido em microssegundos desde uma época arbitrária definida pela plataforma.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

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

Essa função retorna um tempo decorrido em milissegundos desde uma época arbitrária definida pela plataforma. É garantido que o valor retornado vai aumentar sempre (ou seja, nunca ser encapsulado) entre as reinicializações do sistema. Além disso, é garantido que a fonte de hora subjacente será ativada continuamente durante qualquer modo de suspensão do sistema que não exija reinicialização após a ativação.

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

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Retornos
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 em formato de hora Unix de microssegundos.

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

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

Em plataformas incapazes de rastrear em tempo real, o método GetClock_RealTime() pode estar ausente, resultando em um erro de link para qualquer aplicativo que o referencie. Como alternativa, essas plataformas podem fornecer uma implementação de GetClock_RealTime() que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como o horário Unix dimensionado para microssegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma é capaz de rastrear em tempo real, mas está dessincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma não for capaz de rastrear em tempo real.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Retorna o horário real (civil) atual no formato de milissegundos de hora Unix.

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

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

Em plataformas incapazes de rastrear em tempo real, o método GetClock_RealTimeMS() pode estar ausente, resultando em um erro de link para qualquer aplicativo que o referencie. Como alternativa, essas plataformas podem fornecer uma implementação de GetClock_RealTimeMS() que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como o horário Unix dimensionado para milissegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma é capaz de rastrear em tempo real, mas está dessincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma não for capaz 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. O novo horário atual é expresso como um valor de hora Unix dimensionado para microssegundos.

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

Algumas plataformas restringem quais aplicativos ou processos podem definir em tempo real. Se o autor da chamada 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 não são capazes de rastrear em tempo real ou que não oferecem a capacidade de configurá-lo em tempo real, a função SetClock_RealTime() pode estar ausente, resultando em um erro de link para qualquer aplicativo que a referencie. Como alternativa, essas plataformas podem fornecer uma implementação de SetClock_RealTime() que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Essa função é segura para linhas de execução em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[in] newCurTime
O novo horário atual, expresso como horário Unix dimensionado para microssegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se o método for bem-sucedido.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma não for capaz de rastrear em tempo real.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Se o aplicativo de chamada não tiver o privilégio para definir a hora atual.