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
, המערכת מטפלת בהתראות מוּכנוּת לאירועים באמצעות אירועים או הודעות וקטעי הוק (hooks) ספציפיים לפלטפורמה ולמערכת עבור מערכת האירועים/ההודעות.
בונים והורסים |
|
---|---|
Layer(void)
|
סוגים ציבוריים |
|
---|---|
EventHandler)(Object &aTarget, EventType aEventType, uintptr_t aArgument)
|
typedefError(*
|
TimerCompleteFunct)(Layer *aLayer, void *aAppState, Error aError)
|
typedefvoid(*
|
תפקידים ציבוריים |
|
---|---|
AddEventHandlerDelegate(LwIPEventHandlerDelegate & aDelegate)
|
Error
הפעולה הזאת מוסיפה הענקת גישה ל-event handler לשכבת המערכת, כדי להרחיב את היכולת שלה לטפל באירועי 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
פעולה זו מיישמת את השליחה והטיפול בפועל של אירוע Layer במערכת Weave.
|
HandlePlatformTimer(void)
|
Error
טיפול באירוע תפוגת התוקף של הטיימר של הפלטפורמה.
|
HandleSelectResult(int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet)
|
void
טיפול בקלט של קלט/פלט משיחה נבחרת.
|
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 thread. |
SetPlatformData(void *aPlatformData)
|
void
הפעולה הזאת מגדירה את נתוני הפלטפורמה הספציפיים ללקוח למכונה לצורך אחזור מאוחר יותר על ידי פלטפורמת הלקוח.
|
Shutdown(void)
|
Error
|
StartTimer(uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState)
|
Error
השיטה הזו מפעילה טיימר חד-פעמי.
|
State(void) const
|
LayerState
הפעולה הזו מחזירה את המצב הנוכחי של אובייקט השכבה.
|
WakeSelect(void)
|
void
להוציא ממצב שינה את ה-thread של קלט/פלט (I/O) שעוקב אחרי תיאורי הקבצים באמצעות select() . לשם כך צריך לכתוב בייט יחיד בצינור עיבוד הנתונים ממצב שינה.
|
פונקציות סטטיות ציבוריות |
|
---|---|
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 )
הפעולה הזאת מוסיפה הענקת גישה ל-event handler לשכבת המערכת, כדי להרחיב את היכולת שלה לטפל באירועי LwIP.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
השיטה הזו מבטלת טיימר חד-פעמי שהתחיל מוקדם יותר עד StartTimer()
.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
הפעולה הזו שולחת את האירוע שצוין לטיפול במופע הזה.
ביטול הסידור של הסוג והארגומנטים מהאירוע מתבצע באמצעות רכיב הוק (hook) ספציפי לפלטפורמה, שלאחר מכן צריך לחזור אל Layer::HandleEvent (שכבה::HandleEvent עבור השליחה בפועל).
פרטים | |||
---|---|---|---|
פרמטרים |
|
||
החזרות |
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 )
פעולה זו מיישמת את השליחה והטיפול בפועל של אירוע Layer במערכת Weave.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכים מוחזרים |
|
HandlePlatformTimer
Error HandlePlatformTimer( void )
טיפול באירוע תפוגת התוקף של הטיימר של הפלטפורמה.
שיחות nl::Weave::מערכת::טיימר::HandleExpiredTimers לטיפול בטיימרים שפג תוקפם. ההנחה היא שה-API הזה מופעל רק בזמן שהוא נמצא ב-thread שבבעלותו אובייקט Layer של מערכת Weave.
פרטים | |
---|---|
החזרות |
WEAVE_SYSTEM_NO_ERROR - בהצלחה, אחרת קוד השגיאה.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
טיפול בקלט של קלט/פלט משיחה נבחרת.
השיטה הזו רושמת את אירוע I/O שבהמתנה בכל נקודת קצה פעילה, ואז מפעילה את פונקציות הטיפול ב-I/O המתאימות לנקודות הקצה האלה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
הפעלה
Error Init( void *aContext )
שכבה
Layer( void )
NewTimer
Error NewTimer( Timer *& aTimerPtr )
PostEvent
Error PostEvent( Object & aTarget, EventType aEventType, uintptr_t aArgument )
הפעולה הזו שולחת אירוע / הודעה מהסוג שצוין עם הארגומנט שסופק לתור האירועים הספציפיים לפלטפורמה של המופע הזה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
ערכים מוחזרים |
|
PrepareSelect
void PrepareSelect( int & aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet, struct timeval & aSleepTime )
הכנת קבוצות של מתארי קבצים לשימוש ב-select()
.
פרטים | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
ScheduleWork
Error ScheduleWork( TimerCompleteFunct aComplete, void *aAppState )
מתזמנת פונקציה עם חתימה שזהה ל-TimerCompleteFunct
, ותרוץ בהקדם האפשרי ב-Weave thread.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכים מוחזרים |
|
SetPlatformData
void SetPlatformData( void *aPlatformData )
הפעולה הזאת מגדירה את נתוני הפלטפורמה הספציפיים ללקוח למכונה לצורך אחזור מאוחר יותר על ידי פלטפורמת הלקוח.
פרטים | |||
---|---|---|---|
פרמטרים |
|
כיבוי
Error Shutdown( void )
StartTimer
Error StartTimer( uint32_t aMilliseconds, TimerCompleteFunct aComplete, void *aAppState )
השיטה הזו מפעילה טיימר חד-פעמי.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
החזרות |
WEAVE_SYSTEM_NO_ERROR - בהצלחה.
|
||||||
החזרות |
WEAVE_SYSTEM_ERROR_NO_MEMORY אם לא ניתן להקצות טיימר.
|
||||||
החזרות |
ערך אחר המציין את הטיימר לא הופעל.
|
ארץ
LayerState State( void ) const
הפעולה הזו מחזירה את המצב הנוכחי של אובייקט השכבה.
WakeSelect
void WakeSelect( void )
להוציא ממצב שינה את ה-thread של קלט/פלט (I/O) שעוקב אחרי תיאורי הקבצים באמצעות select() . לשם כך צריך לכתוב בייט יחיד בצינור עיבוד הנתונים ממצב שינה.
הערה: אם מפעילים את הפונקציה WakeSelect()
מתוך HandleSelectResult()
, אפשר לדלג על הכתיבה בצינור ההשכמה, כי ה-thread של קלט/פלט (I/O) כבר לא פעיל.
בנוסף, לא משנה לנו אם הכתיבה תיכשל כי הכשל הסביר היחיד הוא שהצינור מלא, במקרה כזה ה-thread שנבחר יתעורר ממילא למצב שינה.
פונקציות סטטיות ציבוריות
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... אחרות, כולל GetClock_Monotonic().
אין ספק שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שכוללת שימוש בשרשור.
פרטים | |
---|---|
החזרות |
הזמן שחלף במיליוניות השנייה מאז תקופה שרירותית שהוגדרה על ידי פלטפורמה.
|
GetClock_MonotonicMS
uint64_t GetClock_MonotonicMS( void )
מחזירה את הזמן במערכת מונוטונית ביחידות של אלפיות השנייה.
הפונקציה מחזירה את הזמן שחלף באלפיות השנייה מאז תקופה שרירותית שהוגדרה על ידי פלטפורמה. מובטח שהערך שמוחזר ימשיך לעלות באופן קבוע (כלומר, לא גולש אף פעם) בין אתחולים מחדש של המערכת. בנוסף, מובטח שמקור הזמן הבסיסי יסומן באופן רציף בכל מצבי השינה של המערכת שלא כרוכים בהפעלה מחדש לאחר התעוררות.
למרות שפלטפורמות מסוימות עשויות להחזיר ערך שמודד את זמן האתחול של המערכת, אפליקציות לא צריכות להסתמך על כך. בנוסף, התקופה של GetClock_Monotonic() לא תהיה זהה לזו של פונקציות GetClock... אחרות. לכן, ניתן לבצע חישובים של זמן יחסי רק על ערכים שמוחזרת על ידי אותה פונקציה.
אין ספק שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שכוללת שימוש בשרשור.
פרטים | |
---|---|
החזרות |
הזמן שחלף באלפיות השנייה מאז תקופה שרירותית שהוגדרה על ידי פלטפורמה.
|
GetClock_RealTime
Error GetClock_RealTime( uint64_t & curTime )
מחזירה את הזמן האמיתי (האזרחי) הנוכחי בפורמט זמן Unix של מיקרו-שנייה.
השיטה הזו מחזירה את התפיסה של הפלטפורמה המקומית לגבי זמן אמת נוכחי, מבוטאת כערך זמן Unix המותאם למיליוניות השנייה. מובטח שהשעון הבסיסי יתנגן בקצב של שניות שלמות לפחות (ערך של 1,000,000), אבל בפלטפורמות מסוימות עלול לפעול מהר יותר.
אם הפלטפורמה הבסיסית יכולה לעקוב אחר זמן אמת, אך המערכת אינה מסונכרנת כרגע, GetClock_RealTime() יחזיר את השגיאה WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
בפלטפורמות שלא מסוגלות לעקוב בזמן אמת, ייתכן שהשיטה GetClock_RealTime() חסרה. כתוצאה מכך, תוצג שגיאת קישור לכל אפליקציה שמפנה אליה. לחלופין, פלטפורמות כאלה יכולות לספק יישום של GetClock_RealTime() שמחזיר תמיד את השגיאה WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
אין ספק שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שכוללת שימוש בשרשור.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכים מוחזרים |
|
GetClock_RealTimeMS
Error GetClock_RealTimeMS( uint64_t & curTimeMS )
מחזירה את הזמן האמיתי (האזרחי) הנוכחי בפורמט זמן Unix של אלפית שנייה.
השיטה הזו מחזירה את המושג של זמן אמת נוכחי בפלטפורמה המקומית, מבוטאת כערך זמן Unix המותאם לאלפיות השנייה. מובטח שהשעון הבסיסי יתנגן בקצב של שניות שלמות לפחות (ערך של 1,000,000), אבל בפלטפורמות מסוימות עלול לפעול מהר יותר.
אם הפלטפורמה הבסיסית יכולה לעקוב אחר זמן אמת, אך המערכת אינה מסונכרנת כרגע, GetClock_RealTimeMS() יחזיר את השגיאה WEAVE_SYSTEM_ERROR_REAL_TIME_NOT_SYNCED.
בפלטפורמות שלא מסוגלות לעקוב בזמן אמת, ייתכן שהשיטה GetClock_RealTimeMS() חסרה. כתוצאה מכך, תוצג שגיאת קישור לכל אפליקציה שמפנה אליה. לחלופין, פלטפורמות כאלה יכולות לספק יישום של GetClock_RealTimeMS() שמחזיר תמיד את השגיאה WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
אין ספק שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שכוללת שימוש בשרשור.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכים מוחזרים |
|
SetClock_RealTime
Error SetClock_RealTime( uint64_t newCurTime )
מגדיר את התפיסה של הפלטפורמה לגבי הזמן האמיתי (האזרחי) הנוכחי.
אפליקציות יכולות לקרוא לפונקציה הזו כדי להגדיר את התפיסה של הפלטפורמה המקומית לגבי זמן אמת נוכחי. השעה הנוכחית החדשה מבוטאת כערך זמן Unix, מותאם למיליוניות השנייה.
לאחר ההגדרה, מובטח ששעון הפלטפורמה יעקוב אחר זמן אמת ברמת פירוט של שניות שלמות לפחות.
פלטפורמות מסוימות עשויות להגביל את האפליקציות או התהליכים שאפשר להגדיר בזמן אמת. אם מבצע הקריאה החוזרת לא מורשה לשנות את הערך בזמן אמת, הפונקציה SetClock_RealTime() תחזיר את השגיאה WEAVE_SYSTEM_ERROR_ACCESS_DENIED.
בפלטפורמות שלא מסוגלות לעקוב אחר זמן אמת או שלא מאפשרות להגדיר זמן אמת, ייתכן שהפונקציה SetClock_RealTime() לא תהיה קיימת, וכתוצאה מכך תופיע שגיאת קישור לכל אפליקציה שמפנה אליה. לחלופין, פלטפורמות כאלה יכולות לספק יישום של SetClock_RealTime() שמחזיר תמיד את השגיאה WEAVE_SYSTEM_ERROR_NOT_SUPPORTED.
אין ספק שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שכוללת שימוש בשרשור.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
ערכים מוחזרים |
|