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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Valores de retorno |
|
CancelarTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Esse método cancela um timer único, iniciado antes de StartTimer()
.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
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 |
|
||
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 |
|
||||||
Valores de retorno |
|
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 |
|
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 |
|
||||||||
Valores de retorno |
|
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 |
|
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 |
|
||||||
Valores de retorno |
|
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 |
|
Desligamento
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Esse método inicia um timer único.
Detalhes | |||||||
---|---|---|---|---|---|---|---|
Parâmetros |
|
||||||
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 |
|
||||||
Valores de retorno |
|
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 |
|
||||||
Valores de retorno |
|
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 |
|
||||||
Valores de retorno |
|