nl:: Weave:: System:: Layer
#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 implementasi polling/pilih tradisional pada adaptasi platform.
Untuk WEAVE_SYSTEM_CONFIG_USE_LWIP
, notifikasi kesiapan peristiwa ditangani melalui peristiwa / pesan serta hook khusus platform dan sistem untuk sistem peristiwa/pesan.
Konstruktor dan Destruktor |
|
---|---|
Layer(void)
|
Jenis publik |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
Fungsi publik |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
Ini 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 hingga
StartTimer() . |
DispatchEvent(Event aEvent)
|
Error
Tindakan ini akan mengirimkan peristiwa yang ditentukan untuk ditangani oleh 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 spesifik per klien yang ditetapkan ke instance, jika telah ditetapkan sebelumnya.
|
HandleEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Tindakan ini akan menerapkan pengiriman dan penanganan sebenarnya untuk peristiwa Layer Sistem Weave.
|
HandlePlatformTimer(void)
|
Error
Menangani peristiwa habis masa berlaku timer platform.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
Tangani I/O dari panggilan tertentu.
|
Init(void *aContext)
|
Error
|
NewTimer(Timer *& aTimerPtr)
|
Error
|
PostEvent(Object & aTarget, EventType aEventType, uintptr_t aArgument)
|
Error
Tindakan ini akan memposting peristiwa / pesan dari jenis yang ditentukan dengan argumen yang diberikan ke antrean peristiwa khusus platform instance ini.
|
PrepareSelect(int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime)
|
void
Siapkan kumpulan deskriptor file yang akan digunakan
select() . |
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 mengembalikan status objek lapisan saat ini.
|
WakeSelect(void)
|
void
Aktifkan thread I/O yang memantau deskriptor file menggunakan select() dengan menulis satu byte ke pipa bangun.
|
Fungsi statis publik |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
Menampilkan waktu sistem monoton dalam satuan mikrodetik.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
Menampilkan waktu sistem monoton resolusi tinggi (yang berpotensi) dalam satuan mikrodetik.
|
GetClock_MonotonicMS(void)
|
uint64_t
Menampilkan waktu sistem monotonik dalam satuan milidetik.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
Menampilkan waktu riil (sipil) saat ini dalam format waktu Unix mikrodetik.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
Menampilkan waktu riil (sipil) saat ini dalam format waktu Unix milidetik.
|
SetClock_RealTime(uint64_t newCurTime)
|
Error
Menetapkan gagasan platform tentang waktu nyata (sipil) saat ini.
|
Jenis publik
EventHandler
Error(* EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
TimerCompleteFunct
void(* TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
Fungsi publik
AddEventHandlerDelegate
Error AddEventHandlerDelegate( LwIPEventHandlerDelegate & aDelegate )
Ini menambahkan delegasi pengendali peristiwa ke lapisan sistem untuk memperluas kemampuannya dalam menangani peristiwa LwIP.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
||||
Nilai yang Ditampilkan |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
Metode ini membatalkan timer satu kali, yang dimulai lebih awal hingga StartTimer()
.
Detail | |||||
---|---|---|---|---|---|
Parameter |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
Tindakan ini akan mengirimkan peristiwa yang ditentukan untuk ditangani oleh instance ini.
Penguraian jenis dan argumen dari peristiwa akan ditangani oleh hook khusus platform yang kemudian akan memanggil kembali Layer::HandleEvent untuk pengiriman yang sebenarnya.
Detail | |||
---|---|---|---|
Parameter |
|
||
Hasil |
WEAVE_SYSTEM_NO_ERROR saat berhasil; jika tidak, error tertentu 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 | |
---|---|
Hasil |
WEAVE_SYSTEM_NO_ERROR saat berhasil; jika tidak, error tertentu yang menunjukkan alasan kegagalan inisialisasi.
|
GetPlatformData
void * GetPlatformData( void ) const
Tindakan ini akan menampilkan data platform spesifik per klien yang ditetapkan ke instance, jika telah ditetapkan sebelumnya.
Detail | |
---|---|
Hasil |
Data platform khusus klien, jika telah ditetapkan sebelumnya; jika tidak, maka akan menjadi NULL.
|
HandleEvent
Error HandleEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Tindakan ini akan menerapkan pengiriman dan penanganan sebenarnya untuk peristiwa Layer Sistem Weave.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
Menangani peristiwa habis masa berlaku timer platform.
Memanggil nl::Weave::System::Timer::HandleExpirationTimer untuk menangani timer yang telah habis masa berlakunya. Diasumsikan bahwa API ini hanya dipanggil saat di thread yang memiliki objek Layer Sistem Weave.
Detail | |
---|---|
Hasil |
WEAVE_SYSTEM_NO_ERROR jika berhasil, kode error jika tidak.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
Tangani I/O dari panggilan 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 |
|
Init
Error Init( void *aContext )
Lapisan
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
Tindakan ini akan memposting peristiwa / pesan dari jenis yang ditentukan dengan argumen yang diberikan ke antrean peristiwa khusus platform instance ini.
Detail | |||||||||
---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||
Nilai yang Ditampilkan |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
Siapkan kumpulan deskriptor file yang akan digunakan select()
.
Detail | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
Menjadwalkan fungsi dengan tanda tangan yang identik dengan TimerCompleteFunct
untuk dijalankan sesegera mungkin di thread Weave.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
Tindakan ini menetapkan data platform khusus klien yang ditentukan ke instance untuk diambil nanti oleh platform klien.
Detail | |||
---|---|---|---|
Parameter |
|
Nonaktif
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
Metode ini memulai timer satu kali.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Hasil |
WEAVE_SYSTEM_NO_ERROR Jika berhasil.
|
||||||
Hasil |
WEAVE_SYSTEM_ERROR_NO_MEMORY Jika timer tidak dapat ditentukan.
|
||||||
Hasil |
Nilai Lainnya yang menunjukkan timer gagal dimulai.
|
Negara Bagian
LayerState State( void ) const
Tindakan ini akan mengembalikan status objek lapisan saat ini.
WakeSelect
void WakeSelect( void )
Aktifkan thread I/O yang memantau deskriptor file menggunakan select() dengan menulis satu byte ke pipa bangun.
Catatan:Jika WakeSelect()
dipanggil dari dalam HandleSelectResult()
, penulisan ke pipa aktif dapat dilewati, karena thread I/O sudah aktif.
Selain itu, kita tidak peduli apakah penulisan ini gagal karena satu-satunya kegagalan yang cukup mungkin adalah pipa penuh, dalam hal ini thread panggilan yang dipilih akan tetap aktif.
Fungsi statis publik
GetClock_Monotonic
uint64_t GetClock_Monotonic( void )
Menampilkan waktu sistem monotonik dalam satuan mikrodetik.
Fungsi ini menampilkan waktu yang telah berlalu dalam mikrodetik karena epoch arbitrer yang ditentukan platform. Nilai yang ditampilkan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara proses mulai ulang sistem. Selain itu, sumber waktu yang mendasarinya dijamin akan terus berdetak selama mode tidur sistem apa pun yang tidak memerlukan mulai ulang saat bangun.
Meskipun beberapa platform dapat memilih untuk menampilkan nilai yang mengukur waktu sejak booting untuk sistem, aplikasi tidak boleh bergantung pada nilai ini. Selain itu, epoch untuk GetClock_Monotonic() tidak harus sama dengan epoch 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 pada platform apa pun yang menggunakan threading.
Detail | |
---|---|
Hasil |
Waktu berlalu dalam mikrodetik sejak epoch arbitrer yang ditentukan platform.
|
GetClock_MonotonicHiRes
uint64_t GetClock_MonotonicHiRes( void )
Menampilkan waktu sistem monoton resolusi tinggi (yang berpotensi) dalam satuan mikrodetik.
Fungsi ini menampilkan waktu yang telah berlalu dalam mikrodetik karena epoch arbitrer yang ditentukan platform. Nilai yang ditampilkan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara proses mulai ulang sistem. Namun, timer yang mendasarinya tidak diperlukan untuk terus bekerja selama status tidur nyenyak sistem.
Beberapa platform dapat mengimplementasikan GetClock_MonotonicHiRes() menggunakan timer resolusi tinggi yang mampu memberikan presisi lebih baik daripada GetClock_Monotonic(), dan yang tidak mengalami penyesuaian jam secara bertahap (slewing). Sistem yang tidak memiliki timer seperti itu dapat menampilkan nilai yang sama dengan GetClock_Monotonic().
Epoch untuk waktu yang ditampilkan oleh GetClock_MonotonicHiRes() tidak harus sama dengan epoch fungsi GetClock... lainnya, termasuk GetClock_Monotonic().
Fungsi ini dijamin aman untuk thread pada platform apa pun yang menggunakan threading.
Detail | |
---|---|
Hasil |
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 berlalu dalam milidetik sejak epoch arbitrer yang ditentukan platform. Nilai yang ditampilkan dijamin akan terus meningkat (yaitu tidak pernah digabungkan) di antara proses mulai ulang sistem. Selain itu, sumber waktu yang mendasarinya dijamin akan terus berdetak selama mode tidur sistem apa pun yang tidak memerlukan mulai ulang saat bangun.
Meskipun beberapa platform dapat memilih untuk menampilkan nilai yang mengukur waktu sejak booting untuk sistem, aplikasi tidak boleh bergantung pada nilai ini. Selain itu, epoch untuk GetClock_Monotonic() tidak harus sama dengan epoch 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 pada platform apa pun yang menggunakan threading.
Detail | |
---|---|
Hasil |
Waktu berlalu dalam milidetik sejak epoch arbitrer yang ditentukan oleh platform.
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
Menampilkan waktu riil (sipil) saat ini dalam format waktu Unix mikrodetik.
Metode ini menampilkan gagasan platform lokal tentang real time saat ini, yang dinyatakan sebagai nilai waktu Unix yang diskalakan ke mikrodetik. Jam yang mendasarinya dijamin untuk berdetak pada kecepatan setidaknya seluruh detik (nilai 1.000.000), tetapi pada beberapa platform mungkin berdetak lebih cepat.
Jika platform dasar dapat melacak real time, tetapi saat ini sistem tidak disinkronkan, 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 akan 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 pada platform apa pun yang menggunakan threading.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
Menampilkan waktu riil (sipil) saat ini dalam format waktu Unix milidetik.
Metode ini menampilkan gagasan platform lokal tentang real time saat ini, yang dinyatakan sebagai nilai waktu Unix yang diskalakan ke milidetik. Jam yang mendasarinya dijamin untuk berdetak pada kecepatan setidaknya seluruh detik (nilai 1.000.000), tetapi pada beberapa platform mungkin berdetak lebih cepat.
Jika platform dasar dapat melacak real time, tetapi saat ini sistem tidak disinkronkan, GetClock_RealTimeMS() akan menampilkan error WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
Pada platform yang tidak dapat melacak secara real time, metode GetClock_RealTimeMS() mungkin tidak ada, sehingga akan 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 pada platform apa pun yang menggunakan threading.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
Menetapkan gagasan 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 baru dinyatakan sebagai nilai waktu Unix yang diskalakan ke mikrodetik.
Setelah disetel, jam platform dasar dijamin untuk melacak waktu nyata dengan tingkat perincian setidaknya seluruh detik.
Beberapa platform dapat membatasi aplikasi atau proses mana yang dapat melakukan pengaturan secara real time. Jika pemanggil tidak diizinkan untuk mengubah secara real time, fungsi SetClock_RealTime() akan menampilkan error WEAVE_SYSTEM_ERROR_ACCESS_DENIED.
Pada platform yang tidak dapat melacak secara real-time, atau tidak menawarkan kemampuan untuk menetapkan secara real time, fungsi SetClock_RealTime() mungkin tidak ada, sehingga akan 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 pada platform apa pun yang menggunakan threading.
Detail | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Nilai yang Ditampilkan |
|