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)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
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 |
|
||||
Valores de retorno |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Esse método cancela um timer one-shot, iniciado anteriormente até StartTimer()
.
Detalhes | |||||
---|---|---|---|---|---|
Parâmetros |
|
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 |
|
||
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 |
|
||||||
Valores de retorno |
|
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 |
|
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 |
|
||||||||
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 arquivo para o select()
trabalhar.
Detalhes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parâmetros |
|
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 |
|
||||||
Valores de retorno |
|
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 |
|
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 |
|
||||||
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 |
|
||||||
Valores de retorno |
|
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 |
|
||||||
Valores de retorno |
|
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 |
|
||||||
Valores de retorno |
|