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 preparação para o evento é 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 de eventos é processada por eventos / mensagens e hooks específicos da plataforma e do sistema para o sistema de eventos/mensagens.

Construtores e destrutores

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 ampliar a capacidade de lidar com eventos LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Esse método cancela um timer único, iniciado anteriormente por StartTimer().
DispatchEvent(Event aEvent)
Error
Isso envia o evento especificado para processamento por essa instância.
DispatchEvents(void)
Error
É um wrapper sintático em torno de um hook específico da plataforma que aplica um loop de eventos, aguardando uma fila que atende essa instância, extraindo eventos dessa fila e despacho deles para processamento.
GetPlatformData(void) const
void *
Isso retorna todos os dados da plataforma específicos do cliente atribuídos à instância, se tiverem sido definidos anteriormente.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Isso implementa o envio e o manuseio 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 a 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ífica da plataforma dessa 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 trabalhar com o select().
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Programa uma função com uma assinatura idêntica à 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 da plataforma específicos do cliente especificados na 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 único.
State(void) const
LayerState
Isso retorna o estado atual do objeto da camada.
WakeSelect(void)
void
Ativar a linha de execução de E/S que monitora os descritores de arquivo usando select(), gravando um único byte no pipe de ativação.

Funções estáticas públicas

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

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 ampliar a 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 der certo.
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 único, iniciado anteriormente por 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 na chamada de StartTimer().

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

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

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

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

DispatchEvents

Error DispatchEvents(
  void
)

É um wrapper sintático em torno de um hook específico da plataforma que aplica um loop de eventos, aguardando uma fila que atende essa instância, extraindo eventos dessa fila e despacho deles para processamento.

Detalhes
Retorna
WEAVE_SYSTEM_NO_ERROR em caso de sucesso. Caso contrário, um erro específico que indica 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 tiverem sido definidos anteriormente.

Detalhes
Retorna
Dados da plataforma 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 manuseio 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 que será processado.
[in] aArgument
O argumento associado ao evento / mensagem.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se der certo.
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.

Chamadas nl::Weave::System::Timer::HandleExpiresTimers para processar qualquer timer expirado. Presume-se que essa API é chamada apenas no encadeamento proprietário do objeto Layer do sistema Weave.

Detalhes
Retorna
WEAVE_SYSTEM_NO_ERROR em caso de êxito, caso contrário, código de erro.

HandleSelectResult

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

Processe a E/S de uma chamada selecionada.

Esse método registra o evento pendente de E/S em cada endpoint ativo e, em seguida, 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 lidos.
[in] aWriteSet
Um ponteiro para o conjunto de descritores de arquivos 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
)

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

Detalhes
Parâmetros
[in,out] aTarget
Um ponteiro para o objeto Layer do Weave System 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 de retorno
WEAVE_SYSTEM_NO_ERROR
Se der certo.
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 trabalhar com o select().

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 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 suspensão.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Programa uma função com uma assinatura idêntica à 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 callback a ser chamada quando esse timer for 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 a SystemLayer não tiver sido inicializada.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Se a SystemLayer não puder alocar um novo timer.
WEAVE_SYSTEM_NO_ERROR
Se der certo.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Isso define os dados da plataforma específicos do cliente especificados na 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 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
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.
Retorna
WEAVE_SYSTEM_NO_ERROR Em caso de êxito.
Retorna
WEAVE_SYSTEM_ERROR_NO_MEMORY Se um timer não pode ser alocado.
Retorna
Outro valor que indica falha ao iniciar o timer.

Estado

LayerState State(
  void
) const 

Isso retorna o estado atual do objeto da camada.

WakeSelect

void WakeSelect(
  void
)

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

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

Funções estáticas públicas

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Retorna o horário monotônico do sistema em unidades de microssegundos.

Essa função retorna um tempo decorrido em microssegundos desde um período arbitrário e definido pela plataforma. O valor retornado certamente aumentará sempre (ou seja, nunca será encapsulado) entre as reinicializações do sistema. Além disso, a fonte de tempo subjacente tem garantia de ativação contínua durante os modos de sono do sistema que não exigem reinicialização após a ativação.

Embora algumas plataformas possam optar por 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 o mesmo de qualquer outra função GetClock.... Portanto, os cálculos de tempo relativo só podem ser realizados em valores retornados pela mesma função.

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

Detalhes
Retorna
Tempo decorrido em microssegundos desde um período arbitrário definido pela plataforma.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Retorna um horário de sistema monotônico de alta resolução (possivelmente) em unidades de microssegundos.

Essa função retorna um tempo decorrido em microssegundos desde um período arbitrário e definido pela plataforma. O valor retornado certamente 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 precisão maior do que GetClock_Monotonic() e que não está sujeito a ajustes graduais do relógio (slewing). Os sistemas sem esse timer podem simplesmente retornar o mesmo valor que GetClock_Monotonic().

A época do tempo retornado por GetClock_MonotonicHiRes() não precisa ser a mesma de qualquer outra função GetClock..., incluindo GetClock_Monotonic().

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

Detalhes
Retorna
Tempo decorrido em microssegundos desde um período arbitrário definido 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. O valor retornado certamente aumentará sempre (ou seja, nunca será encapsulado) entre as reinicializações do sistema. Além disso, a fonte de tempo subjacente tem garantia de ativação contínua durante os modos de sono do sistema que não exigem reinicialização após a ativação.

Embora algumas plataformas possam optar por 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 o mesmo de qualquer outra função GetClock.... Portanto, os cálculos de tempo relativo só podem ser realizados em valores retornados pela mesma função.

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

Detalhes
Retorna
Tempo decorrido em milissegundos desde um período arbitrário definido pela plataforma.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Retorna o horário real (civil) atual no formato de tempo Unix de microssegundos.

Esse método retorna a noção de tempo real atual da plataforma local, expressa como um valor de hora Unix dimensionado para microssegundos. O relógio tem a garantia de uma frequência de,no mínimo,segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode marcar mais rápido.

Se a plataforma subjacente for capaz de monitorar 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 acompanhar 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 oferecer uma implementação de GetClock_RealTime() que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

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

Detalhes
Parâmetros
[out] curTime
O horário atual, expresso no formato Unix, dimensionado para microssegundos.
Valores de retorno
WEAVE_SYSTEM_NO_ERROR
Se o método tiver sido bem-sucedido,
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma for capaz de monitorar em tempo real, mas não estiver sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma não for capaz de fazer isso em tempo real.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

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

Esse método retorna a noção de tempo real atual da plataforma local, expressa como um valor de hora Unix dimensionado para milissegundos. O relógio tem a garantia de uma frequência de,no mínimo,segundos inteiros (valores de 1.000.000), mas em algumas plataformas pode marcar mais rápido.

Se a plataforma subjacente for capaz de monitorar 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 acompanhar 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 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 tiver sido bem-sucedido,
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Se a plataforma for capaz de monitorar em tempo real, mas não estiver sincronizada no momento.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Se a plataforma não for capaz de fazer isso em tempo real.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

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

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 do horário Unix dimensionado em microssegundos.

Depois de definido, o relógio da plataforma subjacente vai acompanhar em tempo real com uma granularidade de pelo menos segundos inteiros.

Algumas plataformas restringem quais aplicativos ou processos podem definir o tempo real. Se o autor da chamada não tem permissão para mudar em tempo real, a função SetClock_RealTime() retorna o erro WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Em plataformas que são incapazes de monitorar em tempo real ou que não oferecem a capacidade de definir esse tempo, 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 oferecer uma implementação de SetClock_RealTime() que sempre retorna o erro WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

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

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