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) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

공개 함수

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 이벤트 처리 기능이 확장됩니다.

세부정보
매개변수
[in] aDelegate
초기화되지 않은 LwIP 이벤트 핸들러 위임 구조
반환 값
WEAVE_SYSTEM_NO_ERROR
성공 시
WEAVE_SYSTEM_ERROR_BAD_ARGS
aDelegate에 포함된 함수 포인터가 NULL인 경우

CancelTimer

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

이 메서드는 이전에 StartTimer()를 통해 시작된 원샷 타이머를 취소합니다.

세부정보
매개변수
[in] aOnComplete
StartTimer() 호출에 사용된 콜백 함수에 대한 포인터입니다.
[in] aAppState
StartTimer() 호출에 사용된 애플리케이션 상태 객체를 가리키는 포인터입니다.

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

이 메서드는 지정된 이벤트를 전달하여 이 인스턴스에서 처리할 수 있도록 합니다.

이벤트의 유형 및 인수의 마셜링 해제는 플랫폼별 후크에 의해 처리되며, 이 후크는 실제 디스패치를 위해 Layer::HandleEvent를 다시 호출해야 합니다.

세부정보
매개변수
[in] aEvent
처리를 위해 전달할 플랫폼별 이벤트 객체입니다.
반환
성공 시 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 이벤트의 실제 디스패치 및 처리를 구현합니다.

세부정보
매개변수
[in,out] aTarget
이벤트가 타겟팅된 레이어 객체에 대한 참조입니다.
[in] aEventType
처리할 이벤트 / 메시지 유형입니다.
[in] aArgument
이벤트 / 메시지와 연결된 인수입니다.
반환 값
WEAVE_SYSTEM_NO_ERROR
성공 시
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
InetLayer 객체의 상태가 잘못된 경우
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
이벤트 유형을 인식할 수 없습니다.

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 처리 함수를 호출합니다.

세부정보
매개변수
[in] aSetSize
select 호출의 반환 값입니다.
[in] aReadSet
읽기 파일 설명자 집합에 대한 포인터입니다.
[in] aWriteSet
쓰기 파일 설명자 집합에 대한 포인터입니다.
[in] aExceptionSet
오류가 있는 파일 설명자 집합을 가리키는 포인터입니다.

Init

Error Init(
  void *aContext
)

레이어

 Layer(
  void
)

NewTimer

Error NewTimer(
  Timer *& aTimerPtr
)

PostEvent

Error PostEvent(
  Object & aTarget,
  EventType aEventType,
  uintptr_t aArgument
)

제공된 인수를 사용하여 지정된 유형의 이벤트 / 메시지를 이 인스턴스의 플랫폼별 이벤트 큐에 게시합니다.

세부정보
매개변수
[in,out] aTarget
게시 요청을 하는 Weave 시스템 Layer 객체에 대한 포인터입니다.
[in] aEventType
게시할 이벤트의 유형입니다.
[in,out] aArgument
게시할 이벤트와 연결된 인수입니다.
반환 값
WEAVE_SYSTEM_NO_ERROR
성공 시
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Layer(레이어) 객체의 상태가 잘못된 경우
WEAVE_SYSTEM_ERROR_NO_MEMORY
이벤트 대기열이 이미 가득 찼는지 여부
other
실패 이유를 나타내는 플랫폼별 오류가 생성되었습니다.

PrepareSelect

void PrepareSelect(
  int & aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet,
  struct timeval & aSleepTime
)

select()에서 사용할 파일 설명자 세트를 준비합니다.

세부정보
매개변수
[out] aSetSize
파일 설명자 집합의 파일 설명자 범위.
[in] aReadSet
읽을 수 있는 파일 설명자 집합에 대한 포인터입니다.
[in] aWriteSet
쓰기 가능한 파일 설명자 집합에 대한 포인터입니다.
[in] aExceptionSet
오류가 있는 파일 설명자 집합을 가리키는 포인터입니다.
[in] aSleepTime
최대 절전 시간에 대한 참조입니다.

ScheduleWork

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

TimerCompleteFunct와 동일한 서명이 있는 함수가 Weave 스레드에서 최대한 빨리 실행되도록 예약합니다.

세부정보
매개변수
[in] aComplete
이 타이머가 실행될 때 호출할 콜백 함수에 대한 포인터입니다.
[in] aAppState
콜백 함수에 인수로 전달할 애플리케이션 상태 객체에 대한 포인터입니다.
반환 값
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
SystemLayer가 초기화되지 않은 경우.
WEAVE_SYSTEM_ERROR_NO_MEMORY
SystemLayer가 새 타이머를 할당할 수 없는 경우.
WEAVE_SYSTEM_NO_ERROR
성공 시

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

이렇게 하면 클라이언트 플랫폼에서 나중에 검색할 수 있도록 지정된 클라이언트별 플랫폼 데이터가 인스턴스로 설정됩니다.

세부정보
매개변수
[in] aPlatformData
설정할 클라이언트별 플랫폼 데이터입니다.

종료

Error Shutdown(
  void
)

StartTimer

Error StartTimer(
  uint32_t aMilliseconds,
  TimerCompleteFunct aComplete,
  void *aAppState
)

이 메서드는 원샷 타이머를 시작합니다.

세부정보
매개변수
[in] aMilliseconds
만료 시간(밀리초)입니다.
[in] aComplete
타이머가 만료될 때 호출되는 함수에 대한 포인터입니다.
[in] 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()의 구현을 제공할 수 있습니다.

이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.

세부정보
매개변수
[out] curTime
현재 시간으로, 마이크로초 단위로 조정된 Unix 시간으로 표현됩니다.
반환 값
WEAVE_SYSTEM_NO_ERROR
메서드가 성공한 경우입니다.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
플랫폼이 실시간으로 추적할 수 있지만 현재 동기화되지 않은 경우.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
플랫폼이 실시간으로 추적할 수 없는 경우.

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()의 구현을 제공할 수 있습니다.

이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.

세부정보
매개변수
[out] curTime
현재 시간으로, 밀리초 단위로 조정된 Unix 시간으로 표시됩니다.
반환 값
WEAVE_SYSTEM_NO_ERROR
메서드가 성공한 경우입니다.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
플랫폼이 실시간으로 추적할 수 있지만 현재 동기화되지 않은 경우.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
플랫폼이 실시간으로 추적할 수 없는 경우.

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()의 구현을 제공할 수 있습니다.

이 함수는 스레딩을 사용하는 모든 플랫폼에서 스레드로부터 안전합니다.

세부정보
매개변수
[in] newCurTime
새로운 현재 시간으로, 마이크로초 단위로 조정된 Unix 시간으로 표시됩니다.
반환 값
WEAVE_SYSTEM_NO_ERROR
메서드가 성공한 경우입니다.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
플랫폼이 실시간으로 추적할 수 없는 경우.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
호출하는 애플리케이션에 현재 시간을 설정할 권한이 없는 경우.