nl::Weave::System::Camada

#include <src/system/SystemLayer.h>

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

Resumo

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

Para WEAVE_SYSTEM_CONFIG_USE_LWIP, a notificação de prontidão de 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 de manipulador de eventos à camada do sistema para estender a capacidade de lidar com eventos LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Esse método cancela um timer único, iniciado antes de StartTimer().
DispatchEvent(Event aEvent)
Error
Isso envia o evento especificado para gerenciamento por essa instância.
DispatchEvents(void)
Error
Este é um wrapper sintático em torno de um hook específico da plataforma que afeta um loop de evento, aguardando em uma fila que atende essa instância, retirando eventos dessa fila e, em seguida, enviando-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 processamento reais de um evento Layer do sistema Weave.
HandlePlatformTimer(void)
Error
Processe o evento de expiração do timer da plataforma.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Processe E/S de uma chamada selecionada.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Isso publica um evento / mensagem do tipo especificado com o argumento fornecido na fila de eventos específicos 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 o select() funcionar.
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ífica do cliente para a instância, que poderão ser recuperados posteriormente pela plataforma do cliente.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Esse método inicia um timer único.
State(void) const
LayerState
Retorna o estado atual do objeto da camada.
WakeSelect(void)
void
Ative a linha de execução de E/S que monitora os descritores de arquivos usando select(). Para isso, grave um único byte no wake lock.

Funções estáticas públicas

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

Detalhes
Parâmetros
[in] aDelegate
Uma estrutura delegada de manipulador de eventos LwIP não inicializada
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Em caso de sucesso.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Se o ponteiro de função contido em aDelegate for NULL

CancelarTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Esse método cancela um timer único, iniciado antes de StartTimer().

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

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Isso envia o evento especificado para gerenciamento por essa instância.

O gerenciamento do tipo e dos argumentos do evento é processado por um hook específico da plataforma que deve chamar Layer::HandleEvent para o envio real.

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

DispatchEvents

Error DispatchEvents(
  void
)

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

Detalhes
Retorna
WEAVE_SYSTEM_NO_ERROR no caso de sucesso; caso contrário, um erro específico que indica o motivo da falha de 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
Retorna
Dados da plataforma específica do cliente, se tiverem sido definidos anteriormente. Caso contrário, serão NULL.

HandleEvent

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

Isso implementa o envio e o processamento 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
Tipo de evento / mensagem a ser processado.
[in] aArgument
O argumento associado ao evento / mensagem.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Em caso de 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
)

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

Chama nl::Weave::System::Timer::HandleExpiresTimers para processar os timers expirados. Presume-se que essa API é chamada apenas enquanto a linha de execução é proprietária do objeto Layer do sistema Weave.

Detalhes
Retorna
WEAVE_SYSTEM_NO_ERROR na conclusão, caso contrário o código de erro.

HandleSelectResult.

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

Processe E/S de uma chamada selecionada.

Esse método registra o evento pendente de E/S em cada endpoint ativo e invoca as respectivas funções de processamento 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 de arquivo de leitura.
[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.

Init

Error Init(
  void *aContext
)

Camada

 Layer(
  void
)

Novo temporizador

Error NewTimer(
  Timer *& aTimerPtr
)

Pós-evento

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

Isso publica um evento / mensagem do tipo especificado com o argumento fornecido na fila de eventos específicos da plataforma desta 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
Em caso de 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 arquivos para o select() funcionar.

Detalhes
Parâmetros
[out] aSetSize
O intervalo de descritores de arquivo no conjunto de descritor de arquivo.
[in] aReadSet
Um ponteiro para o conjunto de descritores de arquivos 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.

Agendartrabalho

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 temporizador for 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 de retorno
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Se a SystemLayer não foi inicializada.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se o SystemLayer não puder alocar um novo temporizador.
WEAVE_SYSTEM_NO_ERROR
Em caso de sucesso.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Isso define os dados especificados da plataforma específica do cliente para a instância, que poderão ser recuperados posteriormente pela plataforma do cliente.

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

Desligamento

Error Shutdown(
  void
)

StartTimer

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

Esse método inicia um timer único.

Detalhes
Parâmetros
[in] aMilliseconds
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 temporizador expira.
Retorna
WEAVE_SYSTEM_NO_ERROR Caso tenha êxito.
Retorna
WEAVE_SYSTEM_ERROR_NO_MEMORY Se um temporizador não puder ser alocado.
Retorna
Outro valor indicando que não foi possível iniciar o timer.

Estado

LayerState State(
  void
) const 

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 de arquivos usando select(). Para isso, grave um único byte no wake lock.

Observação: se WakeSelect() estiver sendo chamado de dentro de HandleSelectResult(), a gravação para o wake lock poderá ser ignorada, já que a linha de execução de E/S já estará ativa. Além disso, não nos importamos se essa gravação falhar, porque a única falha razoável é que a barra vertical está cheia. Nesse caso, o thread de chamada selecionado será ativado mesmo assim.

Funções estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

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

Essa função retorna um tempo decorrido em microssegundos desde uma época arbitrária e definida pela plataforma. O valor retornado é cada vez maior (ou seja, nunca é encapsulado) entre as reinicializações do sistema. Além disso, é garantido que a fonte de tempo subjacente continuará funcionando durante os modos de suspensão do sistema que não exigirão uma reinicialização após o despertar.

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

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

Detalhes
Retorna
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 de alta resolução em unidades de microssegundos.

Essa função retorna um tempo decorrido em microssegundos desde uma época arbitrária e definida pela plataforma. O valor retornado é cada vez maior (ou seja, nunca é encapsulado) entre as reinicializações do sistema. No entanto, o timer subjacente não é acionado 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(), e que não está sujeito a ajustes graduais de relógio (inclinação). Sistemas sem esse temporizador podem simplesmente retornar o mesmo valor que GetClock_Monotonic().

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

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

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

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

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

Essa função retorna um tempo decorrido em milissegundos desde uma época arbitrária e definida pela plataforma. O valor retornado é cada vez maior (ou seja, nunca é encapsulado) entre as reinicializações do sistema. Além disso, é garantido que a fonte de tempo subjacente continuará funcionando durante os modos de suspensão do sistema que não exigirão uma reinicialização após o despertar.

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

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

Detalhes
Retorna
Tempo decorrido em milissegundos desde uma época arbitrária e definida pela plataforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

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

Esse método retorna a noção atual da plataforma local em tempo real, expressa como um valor de hora Unix em escala de microssegundos. O relógio subjacente funciona com uma velocidade de pelo menos a segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode funcionar mais rápido.

Se a plataforma subjacente for capaz de rastrear o 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 que não conseguem rastrear em tempo real, o método GetClock_RealTime() pode estar ausente, resultando em um erro de link para qualquer aplicativo que faça referência a ele. 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 conversas em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como um horário Unix dimensionado em 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 for capaz de rastrear em tempo real, mas não está sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma é incapaz de acompanhar em tempo real.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Retorna o tempo real atual (civil) em milissegundos no formato Unix.

Esse método retorna a noção atual da plataforma local em tempo real, expressa como um valor de hora Unix em escala de milissegundos. O relógio subjacente funciona com uma velocidade de pelo menos a segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode funcionar mais rápido.

Se a plataforma subjacente for capaz de rastrear o 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 que não conseguem rastrear em tempo real, o método GetClock_RealTimeMS() pode estar ausente, resultando em um erro de link para qualquer aplicativo que faça referência a ele. 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 conversas em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[out] curTime
A hora atual, expressa como o horário Unix dimensionado em 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 for capaz de rastrear em tempo real, mas não está sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma é incapaz de acompanhar em tempo real.

Relógio_de_relógio_real

Error SetClock_RealTime(
  uint64_t newCurTime
)

Define a noção da plataforma sobre o horário real (civil) atual.

Os aplicativos podem chamar essa função para definir a noção da plataforma local em tempo real. O novo horário atual é expresso como um valor de horário Unix dimensionado para microssegundos.

Depois de definido, o relógio subjacente da plataforma tem a garantia de rastrear em tempo real com uma granularidade de pelo menos segundos inteiros.

Algumas plataformas restringem quais aplicativos ou processos podem ser configurados 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 são incapazes de acompanhar em 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 faça referência a ela. 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 conversas em qualquer plataforma que use linhas de execução.

Detalhes
Parâmetros
[in] newCurTime
O novo horário atual, expresso como um 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 é incapaz de acompanhar em tempo real.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Se o aplicativo de chamada não tiver o privilégio para definir o horário atual.