nl:: Weave:: System:: Layer
#include <src/system/SystemLayer.h>
This provides access to timers according to the configured event handling model.
요약
WEAVE_SYSTEM_CONFIG_USE_SOCKETS
의 경우 이벤트 준비 알림은 플랫폼 조정의 기존 폴/선택 구현을 통해 처리됩니다.
WEAVE_SYSTEM_CONFIG_USE_LWIP
의 경우 이벤트 준비 알림은 이벤트 / 메시지 시스템의 이벤트/메시지와 플랫폼 및 시스템별 후크를 통해 처리됩니다.
생성자 및 소멸자 |
|
---|---|
Layer(void)
|
공개 유형 |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
공개 함수 |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
이렇게 하면 이벤트 핸들러 대리자가 시스템 레이어에 추가되어 LwIP 이벤트 처리 기능이 확장됩니다.
|
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
|
void
이 메서드는 이전에
StartTimer() 를 통해 시작된 원샷 타이머를 취소합니다. |
DispatchEvent(Event aEvent)
|
Error
이 메서드는 지정된 이벤트를 전달하여 이 인스턴스에서 처리할 수 있도록 합니다.
|
DispatchEvents(void)
|
Error
이는 이벤트 루프에 영향을 미치는 플랫폼별 후크 주변의 구문 래퍼로, 이 인스턴스를 처리하는 큐에서 대기하고 해당 큐에서 이벤트를 가져온 다음 처리를 위해 전달합니다.
|
GetPlatformData(void) const
|
void *
인스턴스에 할당된 클라이언트별 플랫폼 데이터가 이전에 설정된 경우 이를 반환합니다.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
이는 Weave 시스템 Layer 이벤트의 실제 디스패치 및 처리를 구현합니다.
|
HandlePlatformTimer(void)
|
Error
플랫폼 타이머 만료 이벤트를 처리합니다.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
특정 호출에서 I/O를 처리합니다.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
제공된 인수를 사용하여 지정된 유형의 이벤트 / 메시지를 이 인스턴스의 플랫폼별 이벤트 큐에 게시합니다.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
select() 에서 사용할 파일 설명자 세트를 준비합니다. |
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
|
Error
TimerCompleteFunct 와 동일한 서명이 있는 함수가 Weave 스레드에서 최대한 빨리 실행되도록 예약합니다. |
SetPlatformData(void *aPlatformData)
|
void
이렇게 하면 클라이언트 플랫폼에서 나중에 검색할 수 있도록 지정된 클라이언트별 플랫폼 데이터가 인스턴스로 설정됩니다.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
이 메서드는 원샷 타이머를 시작합니다.
|
State(void) const
|
LayerState
레이어 객체의 현재 상태를 반환합니다.
|
WakeSelect(void)
|
void
wake pipe에 단일 바이트를 기록하여 select()를 사용하여 파일 설명자를 모니터링하는 I/O 스레드의 절전 모드를 해제합니다.
|
공개 정적 함수 |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
마이크로초 단위의 단조 시스템 시간을 반환합니다.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
(가능한) 고해상도 단조 시스템 시간을 마이크로초 단위로 반환합니다.
|
GetClock_MonotonicMS(void)
|
uint64_t
단조 시스템 시간을 밀리초 단위로 반환합니다.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
현재 실제 (상용) 시간을 마이크로초 유닉스 시간 형식으로 반환합니다.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
현재 실제 (상용) 시간을 밀리초 유닉스 시간 형식으로 반환합니다.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
플랫폼의 현재 실제 (민간) 시간 개념을 설정합니다.
|
공개 유형
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
공개 함수
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
이렇게 하면 이벤트 핸들러 대리자가 시스템 레이어에 추가되어 LwIP 이벤트 처리 기능이 확장됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
이 메서드는 이전에 StartTimer()
를 통해 시작된 원샷 타이머를 취소합니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
이 메서드는 지정된 이벤트를 전달하여 이 인스턴스에서 처리할 수 있도록 합니다.
이벤트의 유형 및 인수의 마셜링 해제는 플랫폼별 후크에 의해 처리되며, 이 후크는 실제 디스패치를 위해 Layer::HandleEvent를 다시 호출해야 합니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
||
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR, 초기화 실패 이유를 나타내는 특정 오류입니다.
|
DispatchEvents
Error DispatchEvents( void )
이는 이벤트 루프에 영향을 미치는 플랫폼별 후크 주변의 구문 래퍼로, 이 인스턴스를 처리하는 큐에서 대기하고 해당 큐에서 이벤트를 가져온 다음 처리를 위해 전달합니다.
세부정보 | |
---|---|
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR, 초기화 실패 이유를 나타내는 특정 오류입니다.
|
GetPlatformData
void * GetPlatformData( void ) const
인스턴스에 할당된 클라이언트별 플랫폼 데이터가 이전에 설정된 경우 이를 반환합니다.
세부정보 | |
---|---|
반환 |
클라이언트별 플랫폼 데이터(이전에 설정된 경우) 그렇지 않으면 NULL입니다.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
이는 Weave 시스템 Layer 이벤트의 실제 디스패치 및 처리를 구현합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
플랫폼 타이머 만료 이벤트를 처리합니다.
nl::Weave::System::타이머::핸들만료된 타이머 를 호출하여 만료된 타이머를 처리합니다. 이 API는 Weave 시스템 Layer 객체를 소유한 스레드에서만 호출된다고 가정합니다.
세부정보 | |
---|---|
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR, 성공 시 오류 코드.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
특정 호출에서 I/O를 처리합니다.
이 메서드는 각 활성 엔드포인트에서 대기 중인 I/O 이벤트를 등록한 다음 해당 엔드포인트의 각 I/O 처리 함수를 호출합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
Init
Error Init( void *aContext )
레이어
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
제공된 인수를 사용하여 지정된 유형의 이벤트 / 메시지를 이 인스턴스의 플랫폼별 이벤트 큐에 게시합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||
반환 값 |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
select()
에서 사용할 파일 설명자 세트를 준비합니다.
세부정보 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
TimerCompleteFunct
와 동일한 서명이 있는 함수가 Weave 스레드에서 최대한 빨리 실행되도록 예약합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
이렇게 하면 클라이언트 플랫폼에서 나중에 검색할 수 있도록 지정된 클라이언트별 플랫폼 데이터가 인스턴스로 설정됩니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
종료
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
이 메서드는 원샷 타이머를 시작합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR.
|
||||||
반환 |
WEAVE_SYSTEM_ERROR_NO_MEMORY 타이머를 할당할 수 없는 경우.
|
||||||
반환 |
타이머를 시작하지 못했음을 나타내는 기타 값입니다.
|
주
LayerState State( void ) const
레이어 객체의 현재 상태를 반환합니다.
WakeSelect
void WakeSelect( void )
wake pipe에 단일 바이트를 기록하여 select()를 사용하여 파일 설명자를 모니터링하는 I/O 스레드의 절전 모드를 해제합니다.
참고: WakeSelect()
가 HandleSelectResult()
내에서 호출되는 경우 I/O 스레드가 이미 활성 상태이므로 wake 파이프에 쓰는 작업을 건너뛸 수 있습니다.
또한, 이 쓰기가 실패해도 상관 없습니다. 파이프가 가득 차서 어차피 선택 호출 스레드가 깨어나는 것이 합리적으로 유일하게 실패하기 때문입니다.
공개 정적 함수
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
마이크로초 단위의 단조 시스템 시간을 반환합니다.
이 함수는 임의의 플랫폼에 정의된 에포크 이후의 경과 시간(마이크로초 단위)을 반환합니다. 반환된 값은 시스템 재부팅 사이에 항상 증가 (즉, 래핑하지 않음)합니다. 또한 기본 시간 소스는 절전 모드 해제 시 다시 시작을 수반하지 않는 모든 시스템 절전 모드에서 지속적으로 가동됩니다.
일부 플랫폼에서는 시스템 부팅 이후의 시간을 측정하는 값을 반환하도록 선택할 수 있지만 애플리케이션은 이 값에 의존해서는 안 됩니다. 또한 GetClock_Monotonic()의 에포크는 다른 GetClock... 함수의 에포크와 동일할 필요가 없습니다. 따라서 상대적 시간 계산은 동일한 함수에서 반환된 값에 대해서만 수행할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |
---|---|
반환 |
플랫폼이 정의한 임의의 에포크 이후 경과된 시간(마이크로초)입니다.
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
(가능한) 고해상도 단조 시스템 시간을 마이크로초 단위로 반환합니다.
이 함수는 임의의 플랫폼에 정의된 에포크 이후의 경과 시간(마이크로초 단위)을 반환합니다. 반환된 값은 시스템 재부팅 사이에 항상 증가 (즉, 래핑하지 않음)합니다. 하지만 시스템 최대 절전 모드 상태에서는 기본 타이머가 지속적으로 작동하지 않습니다.
일부 플랫폼에서는 GetClock_Monotonic()보다 정밀도가 높은 고해상도 타이머를 사용하여 GetClock_MonotonicHiRes()를 구현할 수 있으며, 점진적인 클록 조정 (슬레잉)이 적용되지 않습니다. 이러한 타이머가 없는 시스템은 단순히 GetClock_Monotonic()과 동일한 값을 반환할 수 있습니다.
GetClock_MonotonicHiRes()에서 반환된 시간의 에포크는 GetClock_Monotonic()을 포함한 다른 GetClock... 함수의 에포크와 동일하지 않아도 됩니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |
---|---|
반환 |
플랫폼이 정의한 임의의 에포크 이후 경과된 시간(마이크로초)입니다.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
단조 시스템 시간을 밀리초 단위로 반환합니다.
이 함수는 임의의 플랫폼 정의 에포크 이후 경과된 시간(밀리초)을 반환합니다. 반환된 값은 시스템 재부팅 사이에 항상 증가 (즉, 래핑하지 않음)합니다. 또한 기본 시간 소스는 절전 모드 해제 시 다시 시작을 수반하지 않는 모든 시스템 절전 모드에서 지속적으로 가동됩니다.
일부 플랫폼에서는 시스템 부팅 이후의 시간을 측정하는 값을 반환하도록 선택할 수 있지만 애플리케이션은 이 값에 의존해서는 안 됩니다. 또한 GetClock_Monotonic()의 에포크는 다른 GetClock... 함수의 에포크와 동일할 필요가 없습니다. 따라서 상대적 시간 계산은 동일한 함수에서 반환된 값에 대해서만 수행할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |
---|---|
반환 |
플랫폼이 정의한 임의의 에포크 이후 경과된 시간(밀리초)입니다.
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
현재 실제 (상용) 시간을 마이크로초 유닉스 시간 형식으로 반환합니다.
이 메서드는 마이크로초 단위로 조정된 Unix 시간 값으로 표현되는 로컬 플랫폼의 현재 실시간 시간 개념을 반환합니다. 기본 시계는 최소 1초 (값 1,000,000)의 비율로 재조정되지만 일부 플랫폼에서는 더 빠르게 틱할 수 있습니다.
기본 플랫폼이 실시간 추적은 가능하지만 시스템이 현재 동기화되지 않은 경우, GetClock_RealTime()은 WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED 오류를 반환합니다.
실시간 추적이 불가능한 플랫폼에서는 GetClock_RealTime() 메서드가 없을 수 있으며, 이 경우 이 메서드를 참조하는 애플리케이션에서 링크 오류가 발생할 수 있습니다. 또는 이러한 플랫폼에서 항상 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 오류를 반환하는 GetClock_RealTime()의 구현을 제공할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
현재 실제 (상용) 시간을 밀리초 유닉스 시간 형식으로 반환합니다.
이 메서드는 밀리초 단위로 조정된 Unix 시간 값으로 표현되는 로컬 플랫폼의 현재 실시간 시간 개념을 반환합니다. 기본 시계는 최소 1초 (값 1,000,000)의 비율로 재조정되지만 일부 플랫폼에서는 더 빠르게 틱할 수 있습니다.
기본 플랫폼이 실시간 추적은 가능하지만 시스템이 현재 동기화되지 않은 경우, GetClock_RealTimeMS()는 WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED 오류를 반환합니다.
실시간 추적이 불가능한 플랫폼에서는 GetClock_RealTimeMS() 메서드가 없을 수 있으며, 이 경우 이 메서드를 참조하는 애플리케이션에서 링크 오류가 발생할 수 있습니다. 또는 이러한 플랫폼에서는 항상 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 오류를 반환하는 GetClock_RealTimeMS()의 구현을 제공할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
플랫폼의 현재 실제 (민간) 시간 개념을 설정합니다.
애플리케이션은 이 함수를 호출하여 로컬 플랫폼의 현재 실시간 개념을 설정할 수 있습니다. 새로운 현재 시간은 마이크로초 단위로 조정된 Unix 시간 값으로 표시됩니다.
설정되면 기본 플랫폼 시계가 최소 초 단위로 실시간 추적이 보장됩니다.
일부 플랫폼에서는 실시간으로 설정할 수 있는 애플리케이션이나 프로세스가 제한될 수 있습니다. 호출자가 실시간 변경이 허용되지 않는 경우 SetClock_RealTime() 함수는 WEAVE_SYSTEM_ERROR_ACCESS_DENIED 오류를 반환합니다.
실시간 추적이 불가능하거나 실시간 설정 기능을 제공하지 않는 플랫폼에서는 SetClock_RealTime() 함수가 없을 수 있으며, 이 경우 이 함수를 참조하는 애플리케이션에서 링크 오류가 발생할 수 있습니다. 또는 이러한 플랫폼은 항상 WEAVE_SYSTEM_ERROR_NOT_SUPPORTED 오류를 반환하는 SetClock_RealTime()의 구현을 제공할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|