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 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
단일 바이트를 절전 모드 해제 파이프에 작성하여 select()를 사용하여 파일 설명자를 모니터링하는 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)

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 System 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::타이머::Handle축소타이머를 호출하여 만료된 타이머를 처리합니다. 이 API는 Weave System 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
)

단일 바이트를 절전 모드 해제 파이프에 작성하여 select()를 사용하여 파일 설명자를 모니터링하는 I/O 스레드의 절전 모드를 해제합니다.

참고: WakeSelect()HandleSelectResult() 내에서 호출되고 있는 경우 I/O 스레드가 이미 절전 모드에서 해제되어 있으므로 절전 모드 해제 파이프에 쓰는 작업을 건너뛸 수 있습니다. 또한 이 쓰기가 실패해도 문제가 되지는 않습니다. 합리적으로 가능성이 있는 유일한 실패는 파이프가 가득 차는 것이고 이 경우 select 호출 스레드가 어차피 절전 모드에서 해제된다는 것이기 때문입니다.

공개 정적 함수

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

단조 시스템 시간을 마이크로초 단위로 반환합니다.

이 함수는 플랫폼에서 정의한 임의의 에포크 이후 경과된 시간(단위: 마이크로초)을 반환합니다. 반환된 값은 시스템 재부팅 사이에 계속해서 증가 (즉, 래핑되지 않음)됩니다. 또한 기본 시간 소스는 절전 모드 해제 시 다시 시작할 필요가 없는 모든 시스템 절전 모드 중에 계속 틱하도록 보장됩니다.

일부 플랫폼에서는 시스템 부팅 이후 시간을 측정하는 값을 반환하도록 선택할 수도 있지만, 애플리케이션은 이 값에 의존해서는 안 됩니다. 또한 GetClock_Monotonic()의 에포크는 다른 GetClock... 함수의 에포크와 동일할 필요가 없습니다. 따라서 동일한 함수에서 반환된 값에 대해서만 상대적 시간을 계산할 수 있습니다.

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

세부정보
반환
플랫폼에서 정의한 임의의 에포크 이후 경과된 시간(단위: 마이크로초)입니다.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

고해상도 단조 시스템 시간을 마이크로초 단위로 반환합니다.

이 함수는 플랫폼에서 정의한 임의의 에포크 이후 경과된 시간(단위: 마이크로초)을 반환합니다. 반환된 값은 시스템 재부팅 사이에 계속해서 증가 (즉, 래핑되지 않음)됩니다. 하지만 시스템의 완전 절전 상태에서 기본 타이머가 계속 틱할 필요는 없습니다.

일부 플랫폼은 GetClock_MonotonicHiRes()GetClock_Monotonic()보다 정밀도가 높고 점진적인 클록 조정 (돌출)이 적용되지 않는 고해상도 타이머를 사용하여 구현할 수 있습니다. 이러한 타이머가 없는 시스템은 단순히 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 시간 값으로 표현되는 로컬 플랫폼의 현재 실시간 개념을 반환합니다. 기본 시계는 최소 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 시간 형식으로 반환합니다.

이 메서드는 밀리초 단위로 조정된 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 시간 값으로 표현됩니다.

일단 설정되면 기본 플랫폼 시계가 최소 1초 이상의 단위로 실시간 추적을 보장합니다.

일부 플랫폼에서는 실시간으로 설정할 수 있는 애플리케이션 또는 프로세스를 제한할 수 있습니다. 호출자가 실시간 변경이 허용되지 않는 경우 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
호출하는 애플리케이션에 현재 시간을 설정할 권한이 없는 경우