Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.
Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

nl::Menenun::Sistem::Lapisan

#include <src/system/SystemLayer.h>

This provides access to timers according to the configured event handling model.

Ringkasan

Untuk WEAVE_SYSTEM_CONFIG_USE_SOCKETS, notifikasi kesiapan peristiwa ditangani melalui penerapan polling/pilihan tradisional di adaptasi platform.

Untuk WEAVE_SYSTEM_CONFIG_USE_LWIP, notifikasi kesiapan peristiwa ditangani melalui peristiwa/pesan dan hook khusus platform dan sistem untuk sistem pesan/peristiwa.

Konstruktor dan Destruktor

Layer(void)

Jenis publik

EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument) typedef
Error(*
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError) typedef
void(*

Fungsi publik

AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
Error
Tindakan ini akan menambahkan delegasi pengendali peristiwa ke lapisan sistem untuk memperluas kemampuannya dalam menangani peristiwa LwIP.
CancelTimer(TimerCompleteFunct aOnComplete, void *aAppState)
void
Metode ini membatalkan timer satu kali, yang dimulai lebih awal melalui StartTimer().
DispatchEvent(Event aEvent)
Error
Tindakan ini akan mengirim peristiwa yang ditentukan untuk menangani instance ini.
DispatchEvents(void)
Error
Ini adalah wrapper sintaksis di sekitar hook khusus platform yang memengaruhi loop peristiwa, menunggu antrean yang melayani instance ini, menarik peristiwa dari antrean tersebut, lalu mengirimkannya untuk ditangani.
GetPlatformData(void) const
void *
Tindakan ini akan menampilkan data platform khusus klien yang ditetapkan ke instance, jika sebelumnya telah ditetapkan.
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Hal ini menerapkan pengiriman dan penanganan yang sebenarnya dari peristiwa Layer Sistem Weave.
HandlePlatformTimer(void)
Error
Menangani peristiwa berakhirnya masa berlaku platform.
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
void
Tangani I/O dari panggilan telepon tertentu.
Init(void *aContext)
Error
NewTimer(Timer *& aTimerPtr)
Error
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
Error
Tindakan ini memposting peristiwa / pesan dari jenis yang ditentukan dengan argumen yang diberikan ke antrean peristiwa khusus platform dari instance ini.
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
void
Siapkan kumpulan deskripsi file untuk select() yang akan digunakan.
ScheduleWork(TimerCompleteFunct aComplete, void *aAppState)
Error
Menjadwalkan fungsi dengan tanda tangan yang identik dengan TimerCompleteFunct untuk dijalankan sesegera mungkin di thread Weave.
SetPlatformData(void *aPlatformData)
void
Tindakan ini menetapkan data platform khusus klien yang ditentukan ke instance untuk diambil nanti oleh platform klien.
Shutdown(void)
Error
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
Error
Metode ini memulai timer satu kali.
State(void) const
LayerState
Tindakan ini akan menampilkan status objek lapisan saat ini.
WakeSelect(void)
void
Mengaktifkan thread I/O yang memantau deskriptor file menggunakan select() dengan menulis byte tunggal ke pipeline wake.

Fungsi statis publik

GetClock_Monotonic(void)
uint64_t
Menampilkan waktu sistem monotonik dalam unit mikrodetik.
GetClock_MonotonicHiRes(void)
uint64_t
Menampilkan (kemungkinan) waktu sistem monotonik resolusi tinggi dalam satuan mikrodetik.
GetClock_MonotonicMS(void)
uint64_t
Menampilkan waktu sistem monotonik dalam satuan milidetik.
GetClock_RealTime(uint64_t & curTime)
Error
Menampilkan waktu nyata (sejarah) saat ini dalam format waktu Unix mikrodetik.
GetClock_RealTimeMS(uint64_t & curTimeMS)
Error
Menampilkan waktu nyata (sipil) saat ini dalam format waktu Unix milidetik.
SetClock_RealTime(uint64_t newCurTime)
Error
Menetapkan konsep platform tentang waktu nyata (sipil) saat ini.

Jenis publik

Pengendali Acara

Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)

TimerCompleteFunct

void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)

Fungsi publik

MenambahkanEventHandlerDelegate

Error AddEventHandlerDelegate(
  LwIPEventHandlerDelegate & aDelegate
)

Tindakan ini akan menambahkan delegasi pengendali peristiwa ke lapisan sistem untuk memperluas kemampuannya dalam menangani peristiwa LwIP.

Detail
Parameter
[in] aDelegate
Struktur delegasi pengendali peristiwa LwIP yang tidak diinisialisasi
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika berhasil.
WEAVE_SYSTEM_ERROR_BAD_ARGS
Jika pointer fungsi yang terdapat dalam aDelegate adalah NULL

Batalkan Pengatur Waktu

void CancelTimer(
  TimerCompleteFunct aOnComplete,
  void *aAppState
)

Metode ini membatalkan timer satu kali, yang dimulai lebih awal melalui StartTimer().

Detail
Parameter
[in] aOnComplete
Pointer ke fungsi callback yang digunakan dalam memanggil StartTimer().
[in] aAppState
Pointer ke objek status aplikasi yang digunakan dalam memanggil StartTimer().

DispatchEvent

Error DispatchEvent(
  Event aEvent
)

Tindakan ini akan mengirim peristiwa yang ditentukan untuk menangani instance ini.

Unmarshalling dari jenis dan argumen dari peristiwa ditangani oleh hook khusus platform yang kemudian harus memanggil kembali ke Layer::HandleEvent untuk pengiriman sebenarnya.

Detail
Parameter
[in] aEvent
Objek peristiwa khusus platform yang akan dikirimkan untuk ditangani.
Menampilkan
WEAVE_SYSTEM_NO_ERROR saat berhasil; jika tidak, kesalahan khusus yang menunjukkan alasan kegagalan inisialisasi.

DispatchEvents

Error DispatchEvents(
  void
)

Ini adalah wrapper sintaksis di sekitar hook khusus platform yang memengaruhi loop peristiwa, menunggu antrean yang melayani instance ini, menarik peristiwa dari antrean tersebut, lalu mengirimkannya untuk ditangani.

Detail
Menampilkan
WEAVE_SYSTEM_NO_ERROR jika berhasil; jika tidak, error tertentu akan menunjukkan alasan kegagalan inisialisasi.

MendapatkanPlatform

void * GetPlatformData(
  void
) const 

Tindakan ini akan menampilkan data platform khusus klien yang ditetapkan ke instance, jika sebelumnya telah ditetapkan.

Detail
Menampilkan
Data platform khusus klien, jika sudah ditetapkan sebelumnya; jika tidak, NULL.

HandleEvent

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

Hal ini menerapkan pengiriman dan penanganan yang sebenarnya dari peristiwa Layer Sistem Weave.

Detail
Parameter
[in,out] aTarget
Referensi ke objek lapisan tempat peristiwa ditargetkan.
[in] aEventType
Jenis peristiwa / pesan yang akan ditangani.
[in] aArgument
Argumen yang terkait dengan peristiwa / pesan.
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika berhasil.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jika status objek InetLayer salah.
WEAVE_SYSTEM_ERROR_UNEXPECTED_EVENT
Jika jenis acara tidak dikenali.

HandlePlatformTimer

Error HandlePlatformTimer(
  void
)

Menangani peristiwa berakhirnya masa berlaku platform.

Panggilan nl::Weave::System::Timer::HandleExpirationTimers untuk menangani semua timer yang telah berakhir. Diasumsikan bahwa API ini hanya dipanggil saat berada di thread yang memiliki objek Layer Sistem Weave.

Detail
Menampilkan
WEAVE_SYSTEM_NO_ERROR saat berhasil, kode error jika tidak berhasil.

HandleSelectResult

void HandleSelectResult(
  int aSetSize,
  fd_set *aReadSet,
  fd_set *aWriteSet,
  fd_set *aExceptionSet
)

Tangani I/O dari panggilan telepon tertentu.

Metode ini mendaftarkan peristiwa I/O yang tertunda di setiap endpoint aktif, lalu memanggil fungsi penanganan I/O masing-masing untuk endpoint tersebut.

Detail
Parameter
[in] aSetSize
Nilai hasil dari panggilan pilih.
[in] aReadSet
Pointer ke kumpulan deskriptor file yang telah dibaca.
[in] aWriteSet
Pointer ke kumpulan deskripsi file tulis.
[in] aExceptionSet
Pointer ke kumpulan deskripsi file dengan error.

Init

Error Init(
  void *aContext
)

Lapisan

 Layer(
  void
)

Pengatur Waktu Baru

Error NewTimer(
  Timer *& aTimerPtr
)

Setelah Acara

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

Tindakan ini memposting peristiwa / pesan dari jenis yang ditentukan dengan argumen yang diberikan ke antrean peristiwa khusus platform dari instance ini.

Detail
Parameter
[in,out] aTarget
Pointer ke objek Layer Sistem Weave yang membuat permintaan postingan.
[in] aEventType
Jenis peristiwa yang akan diposting.
[in,out] aArgument
Argumen yang terkait dengan peristiwa untuk diposting.
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika berhasil.
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jika status objek Layer salah.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jika antrean acara sudah penuh.
other
Error khusus platform yang dihasilkan menunjukkan alasan kegagalan.

PersiapanPilih

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

Siapkan kumpulan deskripsi file untuk select() yang akan digunakan.

Detail
Parameter
[out] aSetSize
Rentang deskriptor file dalam kumpulan deskriptor file.
[in] aReadSet
Pointer ke kumpulan deskriptor file yang dapat dibaca.
[in] aWriteSet
Pointer ke kumpulan deskripsi file yang dapat ditulis.
[in] aExceptionSet
Pointer ke kumpulan deskripsi file dengan error.
[in] aSleepTime
Referensi ke waktu tidur maksimum.

Menjadwalkan Pekerjaan

Error ScheduleWork(
  TimerCompleteFunct aComplete,
  void *aAppState
)

Menjadwalkan fungsi dengan tanda tangan yang identik dengan TimerCompleteFunct untuk dijalankan sesegera mungkin di thread Weave.

Detail
Parameter
[in] aComplete
Pointer ke fungsi callback yang akan dipanggil saat timer ini diaktifkan.
[in] aAppState
Pointer ke objek status aplikasi yang akan diteruskan ke fungsi callback sebagai argumen.
Nilai yang Ditampilkan
WEAVE_SYSTEM_ERROR_UNEXPECTED_STATE
Jika SystemLayer belum diinisialisasi.
WEAVE_SYSTEM_ERROR_NO_MEMORY
Jika SystemLayer tidak dapat mengalokasikan timer baru.
WEAVE_SYSTEM_NO_ERROR
Jika berhasil.

SetPlatformData

void SetPlatformData(
  void *aPlatformData
)

Tindakan ini menetapkan data platform khusus klien yang ditentukan ke instance untuk diambil nanti oleh platform klien.

Detail
Parameter
[in] aPlatformData
Data platform khusus klien yang akan ditetapkan.

Mematikan

Error Shutdown(
  void
)

StartTimer

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

Metode ini memulai timer satu kali.

Detail
Parameter
[in] aMilliseconds
Waktu habis masa berlaku dalam milidetik.
[in] aComplete
Pointer ke fungsi yang dipanggil saat timer berakhir.
[in] aAppState
Pointer ke objek status aplikasi yang digunakan saat timer berakhir.
Menampilkan
WEAVE_SYSTEM_NO_ERROR Jika berhasil.
Menampilkan
WEAVE_SYSTEM_ERROR_NO_MEMORY Jika timer tidak dapat dialokasikan.
Menampilkan
Nilai Lainnya yang menunjukkan timer gagal dimulai.

Negara bagian

LayerState State(
  void
) const 

Tindakan ini akan menampilkan status objek lapisan saat ini.

Pilih Wake

void WakeSelect(
  void
)

Mengaktifkan thread I/O yang memantau deskriptor file menggunakan select() dengan menulis byte tunggal ke pipeline wake.

Catatan: Jika WakeSelect() dipanggil dari dalam HandleSelectResult(), maka penulisan ke pipeline bangun dapat dilewati, karena thread I/O sudah aktif. Selain itu, kita tidak peduli jika penulisan ini gagal karena satu-satunya kemungkinan kegagalan yang wajar adalah bahwa pipa sudah penuh, dalam hal ini thread panggilan pilih akan tetap aktif.

Fungsi statis publik

GetClock_Monotonic

uint64_t GetClock_Monotonic(
  void
)

Menampilkan waktu sistem monotonik dalam unit mikrodetik.

Fungsi ini menampilkan waktu yang telah berlalu dalam mikrodetik sejak epoch yang ditentukan platform secara arbitrer. Nilai yang dikembalikan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara reboot sistem. Selain itu, sumber waktu yang mendasarinya dijamin terus aktif selama mode tidur sistem apa pun yang tidak mengharuskan mulai ulang saat bangun.

Meskipun beberapa platform dapat memilih untuk menampilkan nilai yang mengukur waktu sejak booting untuk sistem, aplikasi tidak boleh mengandalkan ini. Selain itu, epoch untuk GetClock_Monotonic() tidak harus sama dengan iterasi untuk fungsi GetClock... lainnya. Oleh karena itu, penghitungan waktu relatif hanya dapat dilakukan pada nilai yang ditampilkan oleh fungsi yang sama.

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Menampilkan
Waktu berlalu dalam mikrodetik sejak epoch arbitrer yang ditentukan platform.

GetClock_MonotonicHiRes

uint64_t GetClock_MonotonicHiRes(
  void
)

Menampilkan (kemungkinan) waktu sistem monotonik resolusi tinggi dalam satuan mikrodetik.

Fungsi ini menampilkan waktu yang telah berlalu dalam mikrodetik sejak epoch yang ditentukan platform secara arbitrer. Nilai yang dikembalikan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara reboot sistem. Namun, timer yang mendasarinya tidak diperlukan untuk terus centang selama status tidur nyenyak sistem.

Beberapa platform mungkin mengimplementasikan GetClock_MonotonicHiRes() menggunakan timer resolusi tinggi yang mampu memiliki presisi lebih tinggi daripada GetClock_Monotonic(), dan yang tidak tunduk pada penyesuaian jam bertahap (slewing). Sistem tanpa timer seperti ini dapat menampilkan nilai yang sama seperti GetClock_Monotonic().

Epoch untuk waktu yang ditampilkan oleh GetClock_MonotonicHiRes() tidak harus sama dengan fungsi GetClock... lainnya, termasuk GetClock_Monotonic().

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Menampilkan
Waktu berlalu dalam mikrodetik sejak epoch arbitrer yang ditentukan platform.

GetClock_MonotonicMS

uint64_t GetClock_MonotonicMS(
  void
)

Menampilkan waktu sistem monotonik dalam satuan milidetik.

Fungsi ini menampilkan waktu yang telah berlalu dalam milidetik sejak epoch yang ditentukan platform arbitrer. Nilai yang dikembalikan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara reboot sistem. Selain itu, sumber waktu yang mendasarinya dijamin terus aktif selama mode tidur sistem apa pun yang tidak mengharuskan mulai ulang saat bangun.

Meskipun beberapa platform dapat memilih untuk menampilkan nilai yang mengukur waktu sejak booting untuk sistem, aplikasi tidak boleh mengandalkan ini. Selain itu, epoch untuk GetClock_Monotonic() tidak harus sama dengan iterasi untuk fungsi GetClock... lainnya. Oleh karena itu, penghitungan waktu relatif hanya dapat dilakukan pada nilai yang ditampilkan oleh fungsi yang sama.

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Menampilkan
Waktu berlalu dalam milidetik sejak epoch yang ditentukan platform secara arbitrer.

GetClock_RealTime

Error GetClock_RealTime(
  uint64_t & curTime
)

Menampilkan waktu nyata (sejarah) saat ini dalam format waktu Unix mikrodetik.

Metode ini menampilkan pendapat platform lokal tentang real time saat ini, yang dinyatakan sebagai nilai waktu Unix yang diskalakan ke mikrodetik. Jam yang mendasarinya dijamin akan berdetak dengan kecepatan minimal setiap detik (nilai 1.000.000), tetapi pada beberapa platform mungkin lebih cepat.

Jika platform pokok dapat melacak real-time, namun sistem saat ini tidak sinkron, GetClock_RealTime() akan menampilkan error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Pada platform yang tidak dapat melacak secara real time, metode GetClock_RealTime() mungkin tidak ada, sehingga menghasilkan error link untuk aplikasi apa pun yang mereferensikannya. Atau, platform tersebut dapat menyediakan implementasi GetClock_RealTime() yang selalu menampilkan error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Parameter
[out] curTime
Waktu saat ini, dinyatakan sebagai waktu Unix yang diskalakan ke mikrodetik.
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika metode berhasil.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Jika platform dapat melacak secara real-time, namun saat ini belum disinkronkan.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Jika platform tidak dapat melacak secara real-time.

GetClock_RealTimeMS

Error GetClock_RealTimeMS(
  uint64_t & curTimeMS
)

Menampilkan waktu nyata (sipil) saat ini dalam format waktu Unix milidetik.

Metode ini menampilkan notasi real-time saat ini di platform lokal, yang dinyatakan sebagai nilai waktu Unix yang diskalakan ke milidetik. Jam yang mendasarinya dijamin akan berdetak dengan kecepatan minimal setiap detik (nilai 1.000.000), tetapi pada beberapa platform mungkin lebih cepat.

Jika platform pokok dapat melacak secara real-time, namun sistem saat ini tidak tersinkronisasi, GetClock_RealTimeMS() akan memunculkan error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.

Pada platform yang tidak dapat melacak secara real-time, metode GetClock_RealTimeMS() mungkin tidak ada, sehingga menghasilkan error link untuk aplikasi apa pun yang mereferensikannya. Atau, platform tersebut dapat menyediakan implementasi GetClock_RealTimeMS() yang selalu menampilkan error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Parameter
[out] curTime
Waktu saat ini, dinyatakan sebagai waktu Unix yang diskalakan ke milidetik.
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika metode berhasil.
#WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED
Jika platform dapat melacak secara real-time, namun saat ini belum disinkronkan.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Jika platform tidak dapat melacak secara real-time.

SetClock_RealTime

Error SetClock_RealTime(
  uint64_t newCurTime
)

Menetapkan konsep platform tentang waktu nyata (sipil) saat ini.

Aplikasi dapat memanggil fungsi ini untuk menetapkan gagasan platform lokal tentang real time saat ini. Waktu saat ini dinyatakan sebagai nilai waktu Unix yang diskalakan ke mikrodetik.

Setelah ditetapkan, jam platform yang mendasarinya dijamin akan melacak secara real time dengan perincian minimal satu detik penuh.

Beberapa platform mungkin membatasi aplikasi atau proses yang dapat disetel secara real-time. Jika pemanggil tidak diizinkan untuk mengubah secara real-time, fungsi SetClock_RealTime() akan mengembalikan error WEAVE_SYSTEM_ERROR_ACCESS_DENIED.

Pada platform yang tidak dapat melacak secara real time, atau tidak menawarkan kemampuan untuk menetapkan real time, fungsi SetClock_RealTime() mungkin tidak ada, sehingga menghasilkan error link untuk aplikasi apa pun yang mereferensikannya. Atau, platform tersebut dapat menyediakan implementasi SetClock_RealTime() yang selalu menampilkan error WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.

Fungsi ini dijamin aman untuk thread di platform apa pun yang menggunakan threading.

Detail
Parameter
[in] newCurTime
Waktu saat ini yang baru, dinyatakan sebagai waktu Unix yang diskalakan ke mikrodetik.
Nilai yang Ditampilkan
WEAVE_SYSTEM_NO_ERROR
Jika metode berhasil.
#WEAVE_SYSTEM_ERROR_NOT_SUPPORTED
Jika platform tidak dapat melacak secara real-time.
#WEAVE_SYSTEM_ERROR_ACCESS_DENIED
Jika aplikasi panggilan tidak memiliki hak istimewa untuk menetapkan waktu saat ini.