nl:: Weave:: 시스템: 레이어
#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 System 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
단일 바이트의 wakeup에 쓰기 작업을 통해 파일 설명자를 모니터링하는 I/O 스레드의 절전 모드를 해제합니다.
|
공개 정적 함수 |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
단조 시스템 시간을 마이크로초 단위로 반환합니다.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
(잠재적으로) 고해상도 단조 시스템 시간을 마이크로초 단위로 반환합니다.
|
GetClock_MonotonicMS(void)
|
uint64_t
단조 시스템 시간을 밀리초 단위로 반환합니다.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
현재 실제 (시민) 시간을 마이크로초 Unix 시간 형식으로 반환합니다.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
현재 실제 (시민) 시간을 밀리초 단위의 Unix 시간 형식으로 반환합니다.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
플랫폼의 현재 실제 (시민) 시간의 개념을 설정합니다.
|
공개 유형
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
타이머 완료기능
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
공개 함수
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
이렇게 하면 이벤트 핸들러 위임이 시스템 레이어에 추가되어 LwIP 이벤트 처리 기능이 확장됩니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
타이머 취소
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 System Layer(이벤트) 이벤트의 실제 전달 및 처리를 구현합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
핸들 플랫폼 타이머
Error HandlePlatformTimer( void )
플랫폼 타이머의 만료 이벤트를 처리합니다.
만료된 타이머 처리를 위해 nl::Weave::System::타이머::Handle만료 타이머를 호출합니다. Weave System Layer 객체를 소유한 스레드에서만 이 API를 호출한다고 가정합니다.
세부정보 | |
---|---|
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR, 그렇지 않으면 오류 코드
|
핸들 선택 결과
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 )
새 타이머
Error NewTimer( Timer *& aTimerPtr )
게시물 이벤트
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
이 인스턴스는 이 플랫폼의 플랫폼별 이벤트 큐에 제공된 인수와 함께 지정된 유형의 이벤트 / 메시지를 게시합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||
반환 값 |
|
준비 선택
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
select()
에서 사용할 파일 설명자 세트를 준비합니다.
세부정보 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
작업 예약
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
TimerCompleteFunct
와 동일한 서명이 있는 함수가 Weave 스레드에서 최대한 빨리 실행되도록 예약합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
플랫폼 플랫폼 데이터 세트
void SetPlatformData( void *aPlatformData )
이렇게 하면 지정된 클라이언트별 플랫폼 데이터가 클라이언트 플랫폼에서 향후 검색할 수 있도록 인스턴스로 설정됩니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
종료
Error Shutdown( void )
시작 타이머
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
이 메서드는 원샷 타이머를 시작합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 |
성공 시 WEAVE_SYSTEM_NO_ERROR
|
||||||
반환 |
타이머를 할당할 수 없는 경우 WEAVE_SYSTEM_ERROR_NO_MEMORY입니다.
|
||||||
반환 |
기타 값이 타이머를 시작하지 못했음을 나타냅니다.
|
상태
LayerState State( void ) const
이렇게 하면 레이어 객체의 현재 상태가 반환됩니다.
절전 모드 해제
void WakeSelect( void )
단일 바이트의 wakeup에 쓰기 작업을 통해 파일 설명자를 모니터링하는 I/O 스레드의 절전 모드를 해제합니다.
참고: HandleSelectResult()
내에서 WakeSelect()
가 호출되는 경우 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 시간 형식으로 반환합니다.
이 메서드는 현재 시간의 실시간 플랫폼 개념을 나타내며 마이크로초 단위로 조정된 Unix 시간 값으로 표현됩니다. 기본 클록은 최소 초 단위 속도 (100만 개의 값)로 고정될 수 있지만, 일부 플랫폼에서는 더 빠르게 틱할 수 있습니다.
기본 플랫폼에서 실시간으로 추적할 수 있지만 시스템이 현재 동기화되지 않는 경우, 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 시간 형식으로 반환합니다.
이 메서드는 현재 시간의 실시간 플랫폼 개념을 반환하며, 밀리초로 조정된 Unix 시간 값으로 표현됩니다. 기본 클록은 최소 초 단위 속도 (100만 개의 값)로 고정될 수 있지만, 일부 플랫폼에서는 더 빠르게 틱할 수 있습니다.
기본 플랫폼에서 실시간으로 추적할 수 있지만 시스템이 현재 동기화되지 않는 경우 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() 구현을 제공할 수 있습니다.
이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|