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
זוהי wrapper תחבירי סביב הוק ספציפי לפלטפורמה, שמשפיע על לולאת אירוע, בהמתנה בתור שמספק שירות למכונה הזו, שולפת אירועים מהתור הזה ואז שולחת אותם לטיפול.
|
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. |
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() , כותבים בייט יחיד ל-Wke pipe.
|
פונקציות סטטיות ציבוריות |
|
---|---|
GetClock_Monotonic(void)
|
uint64_t
מחזירה זמן מערכת מונוטוני ביחידות של מיקרו-שניות.
|
GetClock_MonotonicHiRes(void)
|
uint64_t
מחזירה זמן מערכת מונוטוני (אולי) ברזולוציה גבוהה, ביחידות של מיקרו-שניות.
|
GetClock_MonotonicMS(void)
|
uint64_t
מחזירה זמן מערכת מונוטוני ביחידות של אלפיות השנייה.
|
GetClock_RealTime(uint64_t & curTime)
|
Error
מחזירה את הזמן האמיתי (civil) בפורמט זמן מיקרו-שנייה של יוניקס.
|
GetClock_RealTimeMS(uint64_t & curTimeMS)
|
Error
מחזירה את הזמן האמיתי (civil) בפורמט זמן יוניקס של אלפית השנייה.
|
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.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
מוחזר ערכים |
|
CancelTimer
void CancelTimer( TimerCompleteFunct aOnComplete, void *aAppState )
השיטה הזו מבטלת טיימר חד-פעמי, שהתחיל מוקדם יותר עד StartTimer()
.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
DispatchEvent
Error DispatchEvent( Event aEvent )
הפעולה הזו שולחת את האירוע שצוין לטיפול במכונה הזו.
ביטול הסידור של הסוג והארגומנטים מהאירוע מטופל על ידי הוק ספציפי לפלטפורמה, שלאחר מכן צריך לקרוא חזרה אל Layer::HandleEvent בשביל השליחה בפועל.
פרטים | |||
---|---|---|---|
פרמטרים |
|
||
החזרות |
WEAVE_SYSTEM_NO_ERRORבהצלחה; אחרת, שגיאה ספציפית שמציינת את הסיבה לכשל באתחול.
|
DispatchEvents
Error DispatchEvents( void )
זוהי wrapper תחבירי סביב הוק ספציפי לפלטפורמה, שמשפיע על לולאת אירוע, בהמתנה בתור שמספק שירות למכונה הזו, שולפת אירועים מהתור הזה ואז שולחת אותם לטיפול.
פרטים | |
---|---|
החזרות |
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::System::Timer::HandleExpirationTimers לטיפול בטיימרים שפג תוקפם. ההנחה היא שה-API הזה מופעל רק במהלך ה-thread שהוא הבעלים של האובייקט Layer של Weave System.
פרטים | |
---|---|
החזרות |
WEAVE_SYSTEM_NO_ERROR במצב הצלחה, אחרת קוד שגיאה.
|
HandleSelectResult
void HandleSelectResult( int aSetSize, fd_set *aReadSet, fd_set *aWriteSet, fd_set *aExceptionSet )
לטפל בקלט/פלט בשיחה נבחרת.
ה-method הזה רושם את אירוע הקלט/פלט (I/O) שנמצא בהמתנה בכל נקודת קצה פעילה, ואז מפעיל את פונקציות הטיפול המתאימות בקלט/פלט (I/O) באותם נקודות קצה.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
Init
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.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
מוחזר ערכים |
|
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() , כותבים בייט יחיד ל-Wke pipe.
הערה: אם מתבצעת קריאה אל WakeSelect()
מתוך HandleSelectResult()
, אפשר לדלג על הכתיבה אל צינור עיבוד הנתונים כי ה-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 )
מחזירה את הזמן האמיתי (civil) בפורמט זמן מיקרו-שנייה של יוניקס.
השיטה הזו מחזירה את התפיסה של הפלטפורמה המקומית לגבי זמן אמת נוכחי, מבוטא כערך זמן 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 )
מחזירה את הזמן האמיתי (civil) בפורמט זמן יוניקס של אלפית השנייה.
השיטה הזו מחזירה את התפיסה של הפלטפורמה המקומית לגבי זמן אמת נוכחי, מבוטא כערך זמן 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.
מובטח שהפונקציה הזו תהיה בטוחה לשרשורים בכל פלטפורמה שבה משתמשים בשרשור.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
מוחזר ערכים |
|