Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기
컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

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

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

타이머 취소

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
이벤트 유형을 인식할 수 없는 경우.

핸들 플랫폼 타이머

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

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

Init

Error Init(
  void *aContext
)

레이어

 Layer(
  void
)

새 타이머

Error NewTimer(
  Timer *& aTimerPtr
)

게시물 이벤트

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

이 인스턴스는 이 플랫폼의 플랫폼별 이벤트 큐에 제공된 인수와 함께 지정된 유형의 이벤트 / 메시지를 게시합니다.

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

준비 선택

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
최대 수면 시간에 관한 참조입니다.

작업 예약

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
성공했습니다.

플랫폼 플랫폼 데이터 세트

void SetPlatformData(
  void *aPlatformData
)

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

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

종료

Error Shutdown(
  void
)

시작 타이머

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 

이렇게 하면 레이어 객체의 현재 상태가 반환됩니다.

절전 모드 해제

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

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

세부정보
매개변수
[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 시간 값으로 표현됩니다. 기본 클록은 최소 초 단위 속도 (100만 개의 값)로 고정될 수 있지만, 일부 플랫폼에서는 더 빠르게 틱할 수 있습니다.

기본 플랫폼에서 실시간으로 추적할 수 있지만 시스템이 현재 동기화되지 않는 경우 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
호출 애플리케이션에 현재 시간을 설정할 권한이 없는 경우