nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
מספק מנתח יעיל בזיכרון עבור נתונים המקודדים בפורמט TLV של Weave.
סיכום
TLVReader מטמיע מנתח מסוג 'סגנון משיכה' להעברת נתוני Weave TLV בלבד. האובייקט TLVReader פועל כסמן שאפשר להשתמש בו כדי לחזור על רצף של רכיבי TLV ולפרש את התוכן שלהם. כשמציבים אותן על רכיב מסוים, האפליקציות יכולות לבצע קריאות לשיטות Get() של הקורא כדי לשלוח שאילתה לגבי הסוג והתג של הרכיב הנוכחי ולחלץ כל ערך משויך. שיטת Next() של הקורא משמשת להתקדמות ברכיב.
אובייקט TLVReader ממוקם תמיד לפני רכיב TLV, מעליו או אחריו. כשהוא מאותחל לראשונה, TLVReader ממוקם ממש לפני הרכיב הראשון של הקידוד. כדי להתחיל בקריאה, האפליקציה צריכה לבצע קריאה ראשונית לשיטה Next() כדי למקם את הקורא ברכיב הראשון. כשיש רכיב בקונטיינר במבנה, אפשר להשתמש במערך או בנתיב, בשיטות OpenContainer() או EnterContainer(), כדי לבצע איטרציה בתוכן של הקונטיינר.
כשהקורא מגיע לסוף קידוד TLV, או לאלמנט האחרון בתוך מאגר, הוא מאותת לאפליקציה על ידי החזרת שגיאת WEAVE_END_OF_TLV משיטת Next(). הקורא ימשיך להחזיר WEAVE_END_OF_TLV עד שיתבצע אתחול מחדש או עד ליציאה מהמאגר הנוכחי (דרך CloseContainer() / ExitContainer()).
אובייקט TLVReader יכול לנתח נתונים ישירות ממאגר קלט קבוע, או משרשרת של PacketBuffers אחד או יותר. בנוסף, אפליקציות יכולות לספק פונקציית GetNextBuffer
כדי להזין נתונים לקורא ממקור שרירותי, כמו שקע או יציאה טורית.
ירושה
Direct known Subclasses:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
סוגים ציבוריים |
|
---|---|
GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* פונקציה שאפשר להשתמש בה כדי לאחזר נתוני TLV נוספים לניתוח. |
מאפיינים ציבוריים |
|
---|---|
AppData
|
void *
שדה מצביע שיכול לשמש לנתונים ספציפיים לאפליקציה.
|
GetNextBuffer
|
מצביע אל פונקציה שתפיק נתוני קלט לאובייקט TLVReader.
|
ImplicitProfileId
|
uint32_t
מזהה הפרופיל שישמש לתגי פרופיל המקודדים בצורה מרומזת.
|
מאפיינים מוגנים |
|
---|---|
mBufEnd
|
const uint8_t *
|
mBufHandle
|
uintptr_t
|
mContainerType
|
|
mControlByte
|
uint16_t
|
mElemLenOrVal
|
uint64_t
|
mElemTag
|
uint64_t
|
mLenRead
|
uint32_t
|
mMaxLen
|
uint32_t
|
mReadPoint
|
const uint8_t *
|
תפקידים ציבוריים |
|
---|---|
CloseContainer(TLVReader & containerReader)
|
משלימה את הקריאה של מאגר TLV אחרי קריאה ל-OpenContainer().
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
הפונקציה מאתרת ומחזירה מאגר נתונים זמני שמכיל את הערך של הבייט הנוכחי או של מחרוזת ה-UTF8.
|
DupString(char *& buf)
|
הפונקציה משייכת ומחזירה מאגר נתונים זמני שמכיל ערך null, מסתיים בבייט הנוכחי או במחרוזת ה-UTF8.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
מקבלים את הערך של הרכיב הנוכחי כסוג בול.
|
Get(int8_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום בגודל 8 ביט.
|
Get(int16_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 16 ביט.
|
Get(int32_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 32 סיביות.
|
Get(int64_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 64 ביט.
|
Get(uint8_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 8 סיביות.
|
Get(uint16_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 16 סיביות.
|
Get(uint32_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם לא חתום בגודל 32 סיביות.
|
Get(uint64_t & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 64 סיביות.
|
Get(float & v)
|
|
Get(double & v)
|
מקבלים את הערך של הרכיב הנוכחי כמספר נקודה צפה בעלת דיוק כפול.
|
GetBufHandle(void) const
|
uintptr_t
|
GetBytes(uint8_t *buf, uint32_t bufSize)
|
מוצאים את הערך של הבייט הנוכחי או של רכיב מחרוזת ה-UTF8.
|
GetContainerType(void) const
|
מחזירה את סוג המאגר שבו ה-TLVReader קריאה כרגע.
|
GetControlByte(void) const
|
uint16_t
מחזירה את הבייט של הבקרה המשויך לרכיב TLV הנוכחי.
|
GetDataPtr(const uint8_t *& data)
|
מחפשים מצביע אל הבייט המקודד הראשוני של בייט TLV או של רכיב של מחרוזת UTF8.
|
GetLength(void) const
|
uint32_t
מחזירה את אורך הנתונים המשויכים לרכיב TLV הנוכחי.
|
GetLengthRead(void) const
|
uint32_t
מחזירה את המספר הכולל של הבייטים שנקראו מאז שהקורא אותחל.
|
GetReadPoint(void) const
|
const uint8_t *
הפונקציה מקבלת את הנקודה במאגר הנתונים הזמני של הקלט שתואמת למיקום הנוכחי של הקורא.
|
GetRemainingLength(void) const
|
uint32_t
מחזירה את המספר הכולל של הבייטים שניתן לקרוא עד שמגיעים לאורך הקריאה המקסימלי.
|
GetString(char *buf, uint32_t bufSize)
|
מקבלים את הערך של הבייט הנוכחי או של הרכיב של מחרוזת ה-UTF8 כמחרוזת עם סיום null.
|
GetTag(void) const
|
uint64_t
מחזירה את התג שמשויך לרכיב TLV הנוכחי.
|
GetType(void) const
|
מחזירה את הסוג של רכיב TLV הנוכחי.
|
Init(const TLVReader & aReader)
|
void
|
Init(const uint8_t *data, uint32_t dataLen)
|
void
מפעילה אובייקט TLVReader כדי לקרוא ממאגר קלט יחיד.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
מפעילה אובייקט TLVReader כדי לקרוא מ-PacketBuffer יחיד.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
מפעיל אובייקט TLVReader כדי לקרוא מ-PacketBuffers אחד או יותר.
|
Next(void)
|
|
Next(TLVType expectedType, uint64_t expectedTag)
|
|
OpenContainer(TLVReader & containerReader)
|
|
Skip(void)
|
|
VerifyEndOfContainer(void)
|
אימות שהאובייקט TVLReader נמצא בסוף מאגר TLV.
|
פונקציות מוגנות |
|
---|---|
ClearElementState(void)
|
void
מוחקים את המצב של ה-TLVReader.
|
ElementType(void) const
|
TLVElementType
זוהי שיטה פרטית שמחזירה את הערך TLVElementType מ-mControlByte.
|
EnsureData(WEAVE_ERROR noDataErr)
|
|
GetElementHeadLength(uint8_t & elemHeadBytes) const
|
זוהי שיטה פרטית שמשמשת לחישוב האורך של ראש רכיב TLV.
|
IsContainerOpen(void) const
|
bool
|
ReadData(uint8_t *buf, uint32_t len)
|
|
ReadElement(void)
|
|
ReadTag(TLVTagControl tagControl, const uint8_t *& p)
|
uint64_t
|
SetContainerOpen(bool aContainerOpen)
|
void
|
SkipData(void)
|
מדלגים על הנתונים שנכללים ב-TLV הנוכחי על ידי קריאה מעליו ללא מאגר הנתונים הזמני של היעד.
|
SkipToEndOfContainer(void)
|
|
VerifyElement(void)
|
פונקציות סטטיות מוגנות |
|
---|---|
FailGetNextBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
|
GetNextPacketBuffer(TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen)
|
סוגים ציבוריים
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
פונקציה שאפשר להשתמש בה כדי לאחזר נתוני TLV נוספים לניתוח.
פונקציות מהסוג הזה משמשות להזנת נתוני קלט ל-TLVReader. כשהפונקציה נקראת, היא אמורה להפיק נתונים נוספים שהקורא יוכל לנתח או לסמן לקורא שאין נתונים נוספים זמינים.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
ערכים מוחזרים |
|
מאפיינים ציבוריים
AppData
void * AppData
שדה מצביע שיכול לשמש לנתונים ספציפיים לאפליקציה.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
מצביע אל פונקציה שתפיק נתוני קלט לאובייקט TLVReader.
אם הוא מוגדר ל-NULL (ערך ברירת המחדל), הקורא יצא מנקודת הנחה שאין נתוני קלט נוספים זמינים.
אפליקציה תמיד יכולה להגדיר את GetNextBuffer, אבל היא בדרך כלל מוגדרת כשהקורא מופעל.
למידע נוסף על הטמעת פונקציית GetNextBuffer, אפשר לעיין בהגדרת הסוג GetNextBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
מזהה הפרופיל שישמש לתגי פרופיל המקודדים בצורה מרומזת.
כשהקורא נתקל בתג ספציפי לפרופיל שקודד בצורה מרומזת, הוא משתמש בערך של המאפיין ImplicitProfileId
כמזהה הפרופיל המשוער של התג.
כברירת מחדל, המאפיין ImplicitProfileId
מוגדר לערך kProfileIdNotSpecified. כשמקודדים תגים מסוג TLV בקידוד לא מפורש, האפליקציות צריכות להגדיר ImplicitProfileId
לפני קריאת רכיבי TLV שכוללים תגים כאלה. מזהה הפרופיל המתאים תלוי בדרך כלל בהקשר של האפליקציה או הפרוטוקול המדוברים.
אם נמצא תג בקידוד מרומז כאשר ImplicitProfileId
מוגדר ל-kProfileIdNotSpecified, הקורא יחזיר שגיאת WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG.
מאפיינים מוגנים
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
תפקידים ציבוריים
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
משלימה את הקריאה של מאגר TLV אחרי קריאה ל-OpenContainer().
השיטה CloseContainer() משחזרת את המצב של אובייקט הורה TLVReader אחרי קריאה ל-OpenContainer(). עבור כל קריאה ל-OpenContainer(), האפליקציות חייבות לבצע קריאה תואמת ל-CloseContainer(), כדי להעביר הפניה לאותו קורא קונטיינרים לשתי השיטות.
כאשר CloseContainer() חוזר, הקורא של ההורה ממוקם ממש לפני הרכיב הראשון שאחרי המאגר. מנקודה זו ואילך האפליקציה יכולה להשתמש בשיטה Next() כדי להתקדם בין הרכיבים שנותרו.
אפליקציות יכולות לקרוא לסגירה של CloseContainer() בקורא הורה בכל שלב, גם אם כל הרכיבים בקונטיינר הבסיסי קראו. לאחר הקריאה ל-CloseContainer(), האפליקציה צריכה להגדיר את קורא הקונטיינרים כ 'de-e-initialization' ולא ניתן להמשיך להשתמש בו בלי לאתחל אותו מחדש.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
הפונקציה מאתרת ומחזירה מאגר נתונים זמני שמכיל את הערך של הבייט הנוכחי או של מחרוזת ה-UTF8.
השיטה הזו יוצרת מאגר נתונים זמני ומחזירה עותק של הנתונים שמשויכים לרכיב הבייט או לרכיב מחרוזת ה-UTF-8 במיקום הנוכחי. הזיכרון של מאגר הנתונים הזמני נוצר באמצעות Maloc() וצריך לשחרר אותו עם Free() כשאין בו יותר צורך.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
DupString
WEAVE_ERROR DupString( char *& buf )
הפונקציה משייכת ומחזירה מאגר נתונים זמני שמכיל ערך null, מסתיים בבייט הנוכחי או במחרוזת ה-UTF8.
השיטה הזו יוצרת מאגר נתונים זמני ומחזירה עותק שהסיומת שלו היא null של הנתונים שמשויכים לרכיב הבייט או לרכיב מחרוזת ה-UTF-8 במיקום הנוכחי. הזיכרון של מאגר הנתונים הזמני נוצר באמצעות Maloc() וצריך לשחרר אותו עם Free() כשאין בו יותר צורך.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
הכנת אובייקט TLVReader לקריאת רכיבי הקונטיינר TLV.
השיטה EnterContainer() מכינה את אובייקט TLVReader הנוכחי כך שיתחיל לקרוא את הרכיבים המקושרים של מאגר TLV (מבנה, מערך או נתיב). בכל קריאה ל-EnterContainer(), צריך לבצע קריאה תואמת אל ExitContainer().
כשהפונקציה EnterContainer() נקראת, האובייקט TLVReader צריך להיות ממוקם ברכיב הקונטיינר כדי לקרוא אותו. השיטה משתמשת כארגומנט של הפניה לערך TLVType שישמש לשמירת ההקשר של הקורא בזמן קריאת המאגר.
כשהשיטה EnterContainer() חוזרת, הקורא ממוקם ממש לפני האיבר הראשון במאגר. קריאות חוזרות ונשנות ל-Next() יעבירו את הקורא בין חברי האוסף עד שיגיעו לסוף האוסף, ובשלב זה הקורא יחזור WEAVE_END_OF_TLV.
לאחר שהאפליקציה מסיימת לקרוא מאגר, היא יכולה להמשיך לקרוא את הרכיבים אחרי המאגר על ידי קריאה לשיטה ExitContainer().
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
להשלמת הקריאה של מאגר TLV ולהכנת אובייקט TLVReader כך שיקרא רכיבים אחרי המאגר.
השיטה ExitContainer() משחזרת את המצב של אובייקט TLVReader אחרי קריאה ל-EnterContainer(). עבור כל קריאה ל-EnterContainer(), האפליקציות צריכות לבצע קריאה תואמת ל-ExitContainer(), ולהעביר את ערך ההקשר שהוחזר על ידי השיטה EnterContainer().
כאשר ExitContainer() חוזר, הקורא ממוקם ממש לפני הרכיב הראשון שמופיע אחרי המאגר. מנקודה זו ואילך האפליקציה יכולה להשתמש בשיטה Next() כדי להתקדם בין הרכיבים שנותרו.
לאחר הקריאה ל-EnterContainer(), אפליקציות יכולות לקרוא ל-ExitContainer() בקורא בכל שלב, גם אם כל הרכיבים בקונטיינר הבסיסי נקראו.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( bool & v )
הורדה
WEAVE_ERROR Get( int8_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום בגודל 8 ביט.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( int16_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 16 ביט.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( int32_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 32 סיביות.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( int64_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם חתום של 64 ביט.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( uint8_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 8 סיביות.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך. באופן דומה, אם הערך של המספר השלם המקודד הוא שלילי, הערך יומר לערך ללא חתימה.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( uint16_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 16 סיביות.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך. באופן דומה, אם הערך של המספר השלם המקודד הוא שלילי, הערך יומר לערך ללא חתימה.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( uint32_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם לא חתום בגודל 32 סיביות.
אם הערך של המספר השלם המקודד גדול מסוג נתוני הפלט, הערך שמתקבל ייחתך. באופן דומה, אם הערך של המספר השלם המקודד הוא שלילי, הערך יומר לערך ללא חתימה.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( uint64_t & v )
מקבלים את הערך של הרכיב הנוכחי כמספר שלם ללא סימן 64 סיביות.
אם הערך של המספר השלם המקודד הוא שלילי, הערך יומר לערך ללא סימן חתום.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
הורדה
WEAVE_ERROR Get( float & v )
הורדה
WEAVE_ERROR Get( double & v )
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
מוצאים את הערך של הבייט הנוכחי או של רכיב מחרוזת ה-UTF8.
כדי לקבוע את הגודל הנדרש למאגר הנתונים הזמני, צריך לקרוא לשיטה GetLength() לפני הקריאה ל-GetBytes().
פרטים | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||
ערכים מוחזרים |
|
GetContainerType
TLVType GetContainerType( void ) const
מחזירה את סוג המאגר שבו ה-TLVReader קריאה כרגע.
השיטה GetContainerType() מחזירה את הסוג של מאגר התגים TLV שבו ה-TLVReader קורא. אם ה-TLVReader ממוקם ברמה החיצונית ביותר של קידוד TLV (כלומר לפני, על או אחרי רכיב ה-TLV החיצוני ביותר), השיטה תחזיר את הערך kTLVType_NotSpecified.
פרטים | |
---|---|
החזרות |
ה-TLVType של המאגר הנוכחי, או kTLVType_NotSpecified אם ה-TLVReader לא ממוקם בתוך מאגר.
|
GetControlByte
uint16_t GetControlByte( void ) const
מחזירה את הבייט של הבקרה המשויך לרכיב TLV הנוכחי.
במצב אידיאלי, אף אחד לא צריך לדעת על בייט הבקרה, ורק להטמעה הפנימית של TLV צריכה להיות גישה אליו. אבל עם זאת, גישה ל-control בייט יכולה לעזור לכם לנפות באגים בעזרת כלי העזרלניפוי באגיםשל TLV (המנסים לפענח את הבייט של פקד התג כשמדפיסים בצורה יפה את תוכן המאגר של TLV).
פרטים | |
---|---|
החזרות |
מספר שלם לא סימן שמכיל את בייט הבקרה המשויך לרכיב ה-TLV הנוכחי. הערך kTLVControlByte_NotSpecified יוחזר אם הקורא לא ממוקם על רכיב מסוים.
|
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
מחפשים מצביע אל הבייט המקודד הראשוני של בייט TLV או של רכיב של מחרוזת UTF8.
השיטה הזו מחזירה מצביע ישיר את ערך המחרוזת המקודדת בתוך מאגר הקלט הבסיסי. כדי להצליח, השיטה דורשת שכל ערך המחרוזת יופיע במאגר נתונים זמני. אחרת השיטה מחזירה את הערך WEAVE_ERROR_TLV_UNDERRUN. כך נעשה שימוש מוגבל בקריאת נתונים ממספר אגפים לא-רציפים.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
ערכים מוחזרים |
|
GetLength
uint32_t GetLength( void ) const
מחזירה את אורך הנתונים המשויכים לרכיב TLV הנוכחי.
אורך הנתונים חל רק על רכיבים מסוג UTF8 או מחרוזת בייטים. למחרוזות UTF8, הערך שמוחזר הוא מספר הבייטים במחרוזת ולא מספר התווים.
פרטים | |
---|---|
החזרות |
האורך (בבייטים) של הנתונים שמשויכים לרכיב ה-TLV הנוכחי, או 0 אם הרכיב הנוכחי אינו מחרוזת UTF8 או מחרוזת בייט, או אם הקורא לא ממוקם על רכיב כלשהו.
|
GetLengthRead
uint32_t GetLengthRead( void ) const
מחזירה את המספר הכולל של הבייטים שנקראו מאז שהקורא אותחל.
פרטים | |
---|---|
החזרות |
המספר הכולל של בייטים שנקראו מאז שהקורא אותחל.
|
GetReadPoint
const uint8_t * GetReadPoint( void ) const
הפונקציה מקבלת את הנקודה במאגר הנתונים הזמני של הקלט שתואמת למיקום הנוכחי של הקורא.
פרטים | |
---|---|
החזרות |
הפניה למאגר הקלט הבסיסי שתואמת למיקום הנוכחי של הקורא.
|
GetRemainingLength
uint32_t GetRemainingLength( void ) const
מחזירה את המספר הכולל של הבייטים שניתן לקרוא עד שמגיעים לאורך הקריאה המקסימלי.
פרטים | |
---|---|
החזרות |
המספר הכולל של הבייטים שניתן לקרוא עד שהם מגיעים לאורך הקריאה המקסימלי.
|
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
מקבלים את הערך של הבייט הנוכחי או של הרכיב של מחרוזת ה-UTF8 כמחרוזת עם סיום null.
כדי לקבוע את הגודל הנדרש למאגר הנתונים הזמני, צריך לקרוא לשיטה GetLength() לפני שקוראים ל-GetBytes(). מאגר הנתונים הזמני של הקלט צריך להיות גדול לפחות בבייט אחד מאורך המחרוזת כדי להכיל את תו ה-null.
פרטים | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||
ערכים מוחזרים |
|
GetTag
uint64_t GetTag( void ) const
מחזירה את התג שמשויך לרכיב TLV הנוכחי.
הערך שהחזיר GetTag() יכול לשמש לפונקציות השירות של התג (IsProfileTag() , IsContextTag() , ProfileIdFromTag() וכו') כדי לקבוע את סוג התג ולחלץ ערכים שונים של שדות בתג.
פרטים | |
---|---|
החזרות |
מספר שלם לא חתום שמכיל מידע על התג שמשויך לרכיב ה-TLV הנוכחי.
|
GetType
TLVType GetType( void ) const
הפעלה
void Init( const TLVReader & aReader )
הפעלה
void Init( const uint8_t *data, uint32_t dataLen )
הפעלה
void Init( PacketBuffer *buf, uint32_t maxLen )
מפעילה אובייקט TLVReader כדי לקרוא מ-PacketBuffer יחיד.
הניתוח מתחיל במיקום ההתחלה של מאגר הנתונים הזמני (buf->DataStart() ) ונמשך עד לסוף הנתונים במאגר הנתונים הזמני (כפי שמצוין על ידי buf->Datalen() ) או עד לניתוח של maxLen בתים.
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
הפעלה
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
מפעיל אובייקט TLVReader כדי לקרוא מ-PacketBuffers אחד או יותר.
הניתוח מתחיל בנקודת ההתחלה של מאגר הנתונים הזמני (buf->DataStart() ). אם הערך allowDiscontiguousBuffers הוא נכון, הקורא יתקדם בשרשרת המאגרים שקושרו באמצעות מצביעי Next(). הניתוח ממשיך עד שכל הנתונים בשרשרת מאגר הנתונים הזמני נצרכו (כפי שמצוין על ידי buf->Datalen() ), או עד לניתוח של maxLen בתים.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
הבא
WEAVE_ERROR Next( void )
העברת האובייקט TLVReader לרכיב TLV הבא שאותו יש לקרוא.
השיטה Next() מציבה את אובייקט הקורא ברכיב הבא בקידוד TLV שנמצא באותו הקשר לבלימה. באופן ספציפי, אם הקורא ממוקם ברמה החיצונית ביותר של קידוד TLV, קריאה ל-Next() תעביר אותו לרכיב הבא ברמה העליונה. אם הקורא ממוקם בתוך רכיב מאגר תגים מסוג TLV (מבנה, מערך או נתיב), קריאה ל-Next() תעביר אותו לרכיב החבר הבא במאגר.
מאחר ש-Next() מגבילה את תנועת הקוראים בהקשר המאגר הנוכחי, קריאה ל-Next() כשהקורא ממוקם על רכיב קונטיינר יתקדם מעל המאגר, תוך דילוג על הרכיבים שלו (ועל החברים בכל מאגרי תגים בתוך מאגר) עד שהם יגיעו לרכיב הראשון אחרי המאגר.
כשאין רכיבים נוספים בהקשר של עצירה מסוימת, שיטת Next() תחזיר שגיאת WEAVE_END_OF_TLV ומיקום הקורא לא ישתנה.
פרטים | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ערכים מוחזרים |
|
הבא
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
מקדם את האובייקט TLVReader אל רכיב TLV הבא לקריאה, תוך טענה לגבי הסוג והתג של הרכיב החדש.
השיטה Next(TLVTypeexpectedType, uint64_texpectedTag) היא שיטה נוחה בעלת התנהגות זהה לזו של Next(), אך היא גם מאמתת שהסוג והתג של רכיב ה-TLV החדש תואמים לארגומנטים שסופקו.
פרטים | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||
ערכים מוחזרים |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
מפעיל אובייקט TLVReader חדש לקריאת החברים ברכיב TLV של מאגר.
השיטה OpenContainer() מפעילה אובייקט TLVReader חדש כדי לקרוא את הרכיבים המקושרים של מאגר TLV (מבנה, מערך או נתיב). כשמתבצעת קריאה ל-OpenContainer(), האובייקט TLVReader הנוכחי חייב להיות ממוקם ברכיב הקונטיינר כדי לקרוא אותו. השיטה מתייחסת כארגומנט היחיד שלה להפניה לקורא חדש שיתחיל לקרוא את הקונטיינר. הקורא הזה נקרא קורא קונטיינרים ואילו הקורא שבו קוראים ל-OpenContainer() נקרא קורא הורה.
כשהשיטה OpenContainer() חוזרת, קורא הקונטיינר ממוקם ממש לפני האיבר הראשון במאגר. קריאה ל-Next() בקורא הקונטיינרים תתקדם בין חברי האוסף עד שתגיעו לסוף האוסף, ובשלב זה הקורא יחזור WEAVE_END_OF_TLV.
כשקורא הקונטיינרים פתוח, אסור לאפליקציות לבצע קריאות לפעולה או לשנות את המצב של קורא ההורה. לאחר שאפליקציה מסיימת להשתמש בקורא הקונטיינרים, היא חייבת לסגור אותה על ידי קריאה ל-CloseContainer() בקורא ההורה, העברה של קורא הקונטיינרים כארגומנט. אפליקציות עלולות לסגור את קורא הקונטיינר בכל שלב, עם או בלי לקרוא את כל הרכיבים שכלולים במאגר התגים הבסיסי. אחרי שסוגר את קורא הקונטיינר, האפליקציות יכולות להמשיך להשתמש בקורא ההורה.
קורא הקונטיינרים יורש מאפייני תצורה שונים מהקורא ההורה. הבדלים אלו הם:
- מזהה הפרופיל המשתמע (ImplicitProfileId)
- מצביע הנתונים של האפליקציה (AppData)
- מצביע הפונקציה GetNextBuffer
פרטים | |||||
---|---|---|---|---|---|
פרמטרים |
|
||||
ערכים מוחזרים |
|
דילוג
WEAVE_ERROR Skip( void )
רכיב TLVReader מתקדם מיד אחרי רכיב TLV הנוכחי.
השיטה Skip() מציבה את אובייקט הקורא אחרי רכיב ה-TLV הנוכחי, כך שקריאה נוספת ל-Next() תקדם את הקורא לרכיב הבא. כמו ב-Next(), אם הקורא ממוקם על רכיב מאגר תגים בזמן הקריאה, המערכת תדלג על החברים במאגר. אם הקורא לא ממוקם על רכיב כלשהו, המיקום שלו נשאר ללא שינוי.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ערכים מוחזרים |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
אימות שהאובייקט TVLReader נמצא בסוף מאגר TLV.
השיטה VerifyEndOfContainer() מאמתת שאין רכיבי TLV נוספים שאפשר לקרוא במאגר TLV הנוכחי. זוהי שיטת נוחות שמקבילה לקריאה ל-Next() ולבדיקת הערך המוחזר WEAVE_END_OF_TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ערכים מוחזרים |
|
פונקציות מוגנות
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
זוהי שיטה פרטית שמחזירה את הערך TLVElementType מ-mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
זוהי שיטה פרטית שמשמשת לחישוב האורך של ראש רכיב TLV.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
מדלגים על הנתונים שנכללים ב-TLV הנוכחי על ידי קריאה מעליו ללא מאגר הנתונים הזמני של היעד.
פרטים | |||||
---|---|---|---|---|---|
ערכים מוחזרים |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
פונקציות סטטיות מוגנות
FailGetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )