nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
מקודד יעיל בזיכרון לכתיבת נתונים בפורמט TLV של Weave.
סיכום
TLVWriter מטמיעים מקודד בפורמט פורוורד בלבד בשביל נתוני Weave TLV. אפליקציות כותבות נתונים לקידוד על ידי קריאה לאחת מ-methods Put() של הכותב, תוך העברת מידע על התג והערך המשויכים לפי הצורך. באופן דומה, אפליקציות יכולות לקודד סוגי קונטיינרים TLV (מבנים, מערכים או נתיבים) על ידי קריאה ל-methods OpenContainer() או EnterContainer() של הכותב.
אובייקט TLVWriter יכול לכתוב נתונים ישירות למאגר נתונים זמני של פלט, או לשרשרת של אובייקט PacketBuffer אחד או יותר. בנוסף, אפליקציות יכולות לספק פונקציות GetNewBuffer
ו-FinalizeBuffer
משלהן כדי להפנות פלט ליעד שרירותי, למשל. socket או תור אירועים.
ירושה
מחלקות משנה מוכרות ישירות: nl::Weave::TLV::CircularTLVWriter
סוגים מוגנים |
|
---|---|
@72{
|
טיפוסים בני מנייה (enum) |
סוגים ציבוריים |
|
---|---|
FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
|
WEAVE_ERROR(* פונקציה שמשמשת לביצוע סיכום הפלט מאובייקט TLVWriter. |
GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
|
WEAVE_ERROR(* פונקציה שמספקת שטח חדש למאגר הנתונים הזמני של הפלט ל-TLVWriter. |
מאפיינים ציבוריים |
|
---|---|
AppData
|
void *
שדה מצביע שאפשר להשתמש בו לנתונים ספציפיים לאפליקציה.
|
FinalizeBuffer
|
מצביע אל פונקציה שתיקרא בסיום ה-TLVWriter.
|
GetNewBuffer
|
מצביע לפונקציה שמספקת שטח אחסון נתונים זמני לפלט חדש ל-TLVWriter.
|
ImplicitProfileId
|
uint32_t
מזהה הפרופיל של התגים שצריך לקודד בצורה משתמעת.
|
מאפיינים מוגנים |
|
---|---|
mBufHandle
|
uintptr_t
|
mBufStart
|
uint8_t *
|
mContainerType
|
|
mLenWritten
|
uint32_t
|
mMaxLen
|
uint32_t
|
mRemainingLen
|
uint32_t
|
mWritePoint
|
uint8_t *
|
פונקציות ציבוריות |
|
---|---|
CloseContainer(TLVWriter & containerWriter)
|
משלימה את הכתיבה של קונטיינר TLV אחרי קריאה ל-OpenContainer().
|
ContinuePutBytes(const uint8_t *buf, uint32_t len)
|
הפונקציה מקודדת ערך מחרוזת של בייט TLV.
|
CopyContainer(TLVReader & container)
|
|
CopyContainer(uint64_t tag, TLVReader & container)
|
הפונקציה מקודדת רכיב קונטיינר TLV מקבוצה מקודדת מראש של רכיבים רכיבים.
|
CopyContainer(uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen)
|
הפונקציה מקודדת רכיב קונטיינר TLV שמכיל רכיבים מחברים מתוך קונטיינר שמקודד מראש.
|
CopyElement(TLVReader & reader)
|
מעתיק רכיב TLV מאובייקט קורא לכותב.
|
CopyElement(uint64_t tag, TLVReader & reader)
|
|
EndContainer(TLVType outerContainerType)
|
הפונקציה משלימה את הקידוד של רכיב קונטיינר מסוג TLV.
|
Finalize(void)
|
עליכם לסיים את הכתיבה של קידוד TLV.
|
GetContainerType(void) const
|
הפונקציה מחזירה את סוג הקונטיינר שבו ה-TLVWriter כותב כרגע.
|
GetLengthWritten(void)
|
uint32_t
הפונקציה מחזירה את המספר הכולל של הבייטים שנכתבו מאז אתחול הכותב.
|
Init(uint8_t *buf, uint32_t maxLen)
|
void
מאתחלת אובייקט TLVWriter כדי לכתוב במאגר נתונים זמני של פלט.
|
Init(PacketBuffer *buf, uint32_t maxLen)
|
void
מאתחלת אובייקט TLVWriter כדי לכתוב ב-PacketBuffer יחיד.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
מאתחלת אובייקט TLVWriter כדי לכתוב ב-PacketBuffers אחד או יותר.
|
InitMalloced(uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen)
|
void
מאתחלת אובייקט TLVWriter כדי לכתוב בתוך מאגר דינמי דינמי.
|
OpenContainer(uint64_t tag, TLVType containerType, TLVWriter & containerWriter)
|
|
Put(uint64_t tag, int8_t v)
|
מקודד ערך של מספר שלם חתום TLV.
|
Put(uint64_t tag, int8_t v, bool preserveSize)
|
מקודד ערך של מספר שלם חתום TLV.
|
Put(uint64_t tag, int16_t v)
|
|
Put(uint64_t tag, int16_t v, bool preserveSize)
|
|
Put(uint64_t tag, int32_t v)
|
|
Put(uint64_t tag, int32_t v, bool preserveSize)
|
|
Put(uint64_t tag, int64_t v)
|
|
Put(uint64_t tag, int64_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint8_t v)
|
הפונקציה מקודדת ערך של מספר שלם לא חתום מסוג TLV.
|
Put(uint64_t tag, uint8_t v, bool preserveSize)
|
הפונקציה מקודדת ערך של מספר שלם לא חתום מסוג TLV.
|
Put(uint64_t tag, uint16_t v)
|
|
Put(uint64_t tag, uint16_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint32_t v)
|
|
Put(uint64_t tag, uint32_t v, bool preserveSize)
|
|
Put(uint64_t tag, uint64_t v)
|
|
Put(uint64_t tag, uint64_t v, bool preserveSize)
|
|
Put(uint64_t tag, float v)
|
|
Put(uint64_t tag, double v)
|
מקודד ערך של נקודה צפה (TLV) מסוג TLV.
|
PutBoolean(uint64_t tag, bool v)
|
הפונקציה מקודדת ערך בוליאני TLV.
|
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
|
הפונקציה מקודדת ערך מחרוזת של בייט TLV.
|
PutNull(uint64_t tag)
|
הפונקציה מקודדת ערך null מסוג TLV.
|
PutPreEncodedContainer(uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen)
|
הפונקציה מקודדת רכיב קונטיינר TLV מקבוצה מקודדת מראש של רכיבים רכיבים.
|
PutString(uint64_t tag, const char *buf)
|
הפונקציה מקודדת ערך מחרוזת מסוג TLV בתקן UTF8.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
הפונקציה מקודדת ערך מחרוזת מסוג TLV בתקן UTF8.
|
PutStringF(uint64_t tag, const char *fmt, ...)
|
מקודדים את פלט המחרוזת בפורמט שתואם לפורמט שברכיב TLV.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
מתחיל לקודד רכיב TLV חדש.
|
StartPutBytes(uint64_t tag, uint32_t totalLen)
|
הפונקציה מקודדת מחרוזת בייטים מסוג TLV בכמה מקטעים.
|
VPutStringF(uint64_t tag, const char *fmt, va_list ap)
|
מקודדים את פלט המחרוזת בפורמט שתואם לפורמט שברכיב TLV.
|
פונקציות סטטיות ציבוריות |
|
---|---|
FinalizePacketBuffer(TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen)
|
הטמעה של פונקציית TLVWriter FinalizeBuffer לכתיבה בשרשרת של PacketBuffers.
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
הטמעה של פונקציית TLVWriter GetNewBuffer לכתיבה במאגר דינמי דינמי.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
הטמעה של פונקציית TLVWriter GetNewBuffer לכתיבה לשרשרת של PacketBuffers.
|
פונקציות מוגנות |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
קובעים אם הקונטיינר צריך לשמור מקום לסמל CloseContainer בנקודת ההפעלה או הפתיחה של הקונטיינר.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
מגדירים אם הקונטיינר צריך לשמור מקום בשביל הסמל של CloseContainer בזמן ההפעלה או הפתיחה של הקונטיינר.
|
SetContainerOpen(bool aContainerOpen)
|
void
|
WriteData(const uint8_t *p, uint32_t len)
|
|
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
|
|
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)
|
סוגים מוגנים
72@
@72
סוגים ציבוריים
FinalizeBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
פונקציה שמשמשת לביצוע סיכום הפלט מאובייקט TLVWriter.
מתבצעת קריאה לפונקציות מהסוג הזה כשמתבצעת קריאה ל-method Finalize() של TLVWriter. הפונקציה צפויה לבצע את כל הניקיון או הפעולה הסופיים הנדרשים שקשורים לשימוש בפלט של אובייקט הכתיבה. דוגמאות לכך כוללות, למשל, הקלטת האורך הסופי של הקידוד או סגירת מתאר קובץ.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
מוחזר ערכים |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
פונקציה שמספקת שטח חדש למאגר הנתונים הזמני של הפלט ל-TLVWriter.
פונקציות מהסוג הזה משמשות ליצירת מקום חדש למאגר נתונים זמני ש-TLVWriter צריך לכתוב בו. כשמפעילים את הפונקציה, היא אמורה להחזיר מצביע אל מיקום זיכרון שבו צריך לכתוב נתונים חדשים, יחד עם אורך מקסימלי משויך. הפונקציה יכולה לספק שטח כתיבה על ידי הקצאת מאגר נתונים זמני חדש לשמירת הנתונים או על ידי הסרת נתונים שנכתבו בעבר ממאגר נתונים קיים.
פרטים | |||||||||
---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||
מוחזר ערכים |
|
מאפיינים ציבוריים
AppData
void * AppData
שדה מצביע שאפשר להשתמש בו לנתונים ספציפיים לאפליקציה.
FinalizeBuffer
FinalizeBufferFunct FinalizeBuffer
מצביע אל פונקציה שתיקרא בסיום ה-TLVWriter.
אובייקט TLVWriter יקרא לפונקציה FinalizeBuffer בכל פעם שתתבצע קריאה ל-method Finalize(). אפליקציות יכולות להגדיר את מצביע הפונקציה בכל נקודה לפני הקריאה ל-Finalize(). כברירת מחדל, המצביע מוגדר ל-NULL, מה שגורם לשיטה Finalize() לוותר על הקריאה לפונקציה.
למידע נוסף על הטמעת הפונקציה FinalizeBuffer, ראו הגדרה של סוג FinalizeBufferFunct.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
מצביע לפונקציה שמספקת שטח אחסון נתונים זמני לפלט חדש ל-TLVWriter.
אובייקט TLVWriter יפעיל את הפונקציה GetNewBuffer בכל פעם שמתבצע ניסיון לכתוב נתונים שחורגים מהגודל של מאגר הפלט הנוכחי. אם מוגדר כ-NULL (ערך ברירת המחדל), הכותב יחזיר WEAVE_ERROR_NO_MEMORY אם נתוני הפלט חורגים ממאגר הנתונים הזמני.
אפליקציה יכולה להגדיר את GetNewBuffer בכל שלב, אבל בדרך כלל היא מוגדרת באמצעות אתחול הכותב.
למידע נוסף על יישום פונקציית GetNewBuffer, ראו הגדרה של סוג GetNewBufferFunct.
ImplicitProfileId
uint32_t ImplicitProfileId
מזהה הפרופיל של התגים שצריך לקודד בצורה משתמעת.
כשכותב מתבקש לקודד רכיב חדש, אם מזהה הפרופיל של התג המשויך לרכיב החדש תואם לערך של החבר ImplicitProfileId
, הכותב יקודד את התג בצורה משתמעת, תוך השמטת מזהה הפרופיל מהתהליך.
כברירת מחדל, המאפיין ImplicitProfileId
מוגדר לערך kProfileIdNotSpecified, שמורה לכותב לא להוציא תגים בקידוד מרומז. אפליקציות יכולות להגדיר את ImplicitProfileId
בכל שלב כדי להפעיל תגי קידוד בצורה משתמעת החל מהנקודה הנוכחית בקידוד. מזהה הפרופיל המתאים שצריך להגדיר תלוי בדרך כלל בהקשר של האפליקציה או הפרוטוקול שבהם נאמר.
מאפיינים מוגנים
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
mContainerType
TLVType mContainerType
mLenWritten
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
mRemainingLen
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
פונקציות ציבוריות
CloseContainer
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
משלימה את הכתיבה של קונטיינר TLV אחרי קריאה ל-OpenContainer().
שיטת CloseContainer() משחזרת את המצב של אובייקט TLVWriter אחרי קריאה ל-OpenContainer(). בכל קריאה לאפליקציות OpenContainer() צריך לבצע קריאה תואמת ל-CloseContainer(), ומעבירה הפניה לאותו מחבר קונטיינר לשתי ה-methods.
כשמחזירים CloseContainer(), אפליקציות יכולות להמשיך להשתמש בכותב ההורה כדי לכתוב רכיבי TLV נוספים שמופיעים אחרי רכיב הקונטיינר. בשלב זה, מחבר הקונטיינר שסופק צריך להיחשב כ'ללא אתחול' ואין להשתמש בו בלי אתחול מחדש.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
ContinuePutBytes
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
הפונקציה מקודדת ערך מחרוזת של בייט TLV.
צריך להשתמש בו עם StartPutBytes.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
CopyContainer
WEAVE_ERROR CopyContainer( TLVReader & container )
העתקה של רכיב קונטיינר TLV מאובייקט TLVReader.
הרכיב CopyContainer() מקודד רכיב קונטיינר חדש מסוג TLV על ידי העתקה של רכיב קונטיינר מקודד מראש שנמצא במיקום הנוכחי של אובייקט TLVReader. השיטה כותבת את כל רכיב הקונטיינר החדש בקריאה אחת, ומעתיקה את הסוג, התג והרכיבים של הקונטיינר מקידוד המקור. כשה-method מחזירה, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||||
מוחזר ערכים |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
הפונקציה מקודדת רכיב קונטיינר TLV מקבוצה מקודדת מראש של רכיבים רכיבים.
השיטה CopyContainer() מקודדת רכיב קונטיינר חדש מסוג TLV (מבנה, מערך או נתיב) שמכיל קבוצת רכיבים של רכיבים שנלקחים מאובייקט TLVReader. כשקוראים ל-method, האובייקט של הקורא שסופק ימוקם ברכיב קונטיינר TLV. הקונטיינר החדש שמקודד יהיה מאותו סוג ויהיו זהים לאלה של מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.
כשה-method מחזירה, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||||
מוחזר ערכים |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
הפונקציה מקודדת רכיב קונטיינר TLV שמכיל רכיבים מחברים מתוך קונטיינר שמקודד מראש.
השיטה CopyContainer() מקודדת רכיב קונטיינר חדש מסוג TLV (מבנה, מערך או נתיב) שמכיל קבוצה של רכיבי רכיב שנלקחים מהתוכן של קונטיינר שסופק מראש עם קידוד מראש. כשקוראים ל-method, הנתונים במאגר הנתונים הזמני שיסופקו מנותחים כרכיב קונטיינר TLV בקונטיינר חדש, מאותו סוג ומאומרים כמו אלה של מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.
כשה-method מחזירה, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||
מוחזר ערכים |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
מעתיק רכיב TLV מאובייקט קורא לכותב.
ה-method CopyElement() מקודדת רכיב TLV חדש שהסוג, התג והערך שלו נלקחים מאובייקט TLVReader. כשקוראים ל-method, האובייקט של הקורא שסופק ימוקם ברכיב המקור TLV. הסוג, התג והתוכן של הרכיב המקודד החדש יהיו זהים לאלה של מאגר הקלט. אם הרכיב שסופק הוא קונטיינר TLV (מבנה, מערך או נתיב), יועתק כל התוכן של הקונטיינר.
פרטים | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||||
מוחזר ערכים |
|
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
EndContainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
הפונקציה משלימה את הקידוד של רכיב קונטיינר מסוג TLV.
שיטת EndContainer() משלימה את הקידוד של רכיב קונטיינר TLV ומשחזרת את המצב של אובייקט TLVWrite אחרי קריאה קודמת ל-StartContainer(). בכל קריאה ל-StartContainer(), צריך לבצע קריאה תואמת ל-EndContainer(), ומעביר את ערך ה-TLVType שמוחזר על ידי הקריאה של StartContainer(). כשמחזירים EndContainer(), אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים שעוקבים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
סיום
WEAVE_ERROR Finalize( void )
עליכם לסיים את הכתיבה של קידוד TLV.
שיטת Finalize() משלימה את תהליך הכתיבה של קידוד TLV למאגר הנתונים הזמני של הפלט. האפליקציה צריכה לקרוא לשיטה לפני שהיא משתמשת בתוכן של מאגר הנתונים הזמני. ניתן לקרוא ל-Finalize() רק כשאין יוצרי קונטיינרים פתוחים בשביל הכותב הנוכחי. (פרטים נוספים ב-OpenContainer()
).
פרטים | |||||||
---|---|---|---|---|---|---|---|
מוחזר ערכים |
|
GetContainerType
TLVType GetContainerType( void ) const
הפונקציה מחזירה את סוג הקונטיינר שבו ה-TLVWriter כותב כרגע.
ה-method GetContainerType() מחזירה את סוג הקונטיינר TLV שבו נכתב כרגע ה-TLVWriter. אם TLVWriter לא כותב רכיבים בתוך קונטיינר (כלומר, אם כותבים ברמת הקידוד החיצונית ביותר), ה-method מחזירה kTLVType_NotSpecified.
פרטים | |
---|---|
החזרות |
ה-TLVType של הקונטיינר הנוכחי, או kTLVType_NotSpecified אם ה-TLVWriter לא כותב רכיבים בתוך קונטיינר.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
הפונקציה מחזירה את המספר הכולל של הבייטים שנכתבו מאז אתחול הכותב.
פרטים | |
---|---|
החזרות |
המספר הכולל של הבייטים שנכתבו מאז אתחול הכותב.
|
Init
void Init( uint8_t *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
מאתחלת אובייקט TLVWriter כדי לכתוב ב-PacketBuffers אחד או יותר.
הכתיבה מתחילה מיד אחרי הבייט האחרון של הנתונים הקיימים במאגר הנתונים הזמני. אם הערך של allowDiscontiguousBuffers
הוא True, המערכת תקצה עוד PacketBuffers נוספים למאגר הנתונים שסופק ותוסיף אותם למאגר הנתונים הזמני, לפי הצורך, כדי לכלול את כמות הנתונים שנכתבה. אם מאגר הנתונים הזמני של הפלט שצוין הוא כבר הראשי בשרשרת של מאגרי הנתונים הזמניים, הפלט ייכתב למאגרי הנתונים הבאים בשרשרת לפני ההקצאה של מאגרי נתונים זמניים חדשים.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
מאתחלת אובייקט TLVWriter כדי לכתוב בתוך מאגר דינמי דינמי.
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
OpenContainer
WEAVE_ERROR OpenContainer( uint64_t tag, TLVType containerType, TLVWriter & containerWriter )
מאתחלת אובייקט TLVWriter חדש עבור כתיבת רכיבי קונטיינר TLV.
השיטה OpenContainer() משמשת לכתיבת רכיבי קונטיינר TLV (מבנה, מערכים או נתיבים) בקידוד. השיטה מתבססת על הסוג והתג (אם יש) של מאגר התגים החדש, והפניה לאובייקט כתיבה חדש (כותב הקונטיינר) שיופעל לצורך כתיבת הרכיבים של מאגר התגים. האפליקציות מנסות לכתוב את החברים בקונטיינר החדש באמצעות הכתיבה של הקונטיינר, ואז קוראות ל-CloseContainer() כדי להשלים את הקידוד של הקונטיינר.
בזמן שכלי הכתיבה של הקונטיינר פתוח, אסור לאפליקציות לבצע הפעלות או לשנות בכל דרך אחרת את המצב של כלי הכתיבה הראשי.
המשתמש שכתב את מאגר התגים יורש מאפייני תצורה שונים מכותב ההורה. סוגים אלה הם:
- מזהה הפרופיל המשתמע (ImplicitProfileId)
- הסמן של נתוני האפליקציה (AppData)
- מצביעי הפונקציה GetNewBuffer ו-FinalizeBuffer
פרטים | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||
מוחזר ערכים |
|
הצבה
WEAVE_ERROR Put( uint64_t tag, int8_t v )
מקודד ערך של מספר שלם חתום TLV.
זוהי פונקציה למשתמשים בעומס יתר, לנוחיותכם. היא שונה מהפונקציה שלמעלה רק באילו ארגומנטים היא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
הצבה
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
מקודד ערך של מספר שלם חתום TLV.
זוהי פונקציה למשתמשים בעומס יתר, לנוחיותכם. היא שונה מהפונקציה שלמעלה רק באילו ארגומנטים היא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
הצבה
WEAVE_ERROR Put( uint64_t tag, int16_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, int32_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, int64_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
הפונקציה מקודדת ערך של מספר שלם לא חתום מסוג TLV.
זוהי פונקציה למשתמשים בעומס יתר, לנוחיותכם. היא שונה מהפונקציה שלמעלה רק באילו ארגומנטים היא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
הצבה
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
הפונקציה מקודדת ערך של מספר שלם לא חתום מסוג TLV.
זוהי פונקציה למשתמשים בעומס יתר, לנוחיותכם. היא שונה מהפונקציה שלמעלה רק באילו ארגומנטים היא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
הצבה
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
הצבה
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
הצבה
WEAVE_ERROR Put( uint64_t tag, float v )
הצבה
WEAVE_ERROR Put( uint64_t tag, double v )
מקודד ערך של נקודה צפה (TLV) מסוג TLV.
זוהי פונקציה למשתמשים בעומס יתר, לנוחיותכם. היא שונה מהפונקציה שלמעלה רק באילו ארגומנטים היא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutBoolean
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
הפונקציה מקודדת ערך בוליאני TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutBytes
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
הפונקציה מקודדת ערך מחרוזת של בייט TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutNull
WEAVE_ERROR PutNull( uint64_t tag )
הפונקציה מקודדת ערך null מסוג TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
הפונקציה מקודדת רכיב קונטיינר TLV מקבוצה מקודדת מראש של רכיבים רכיבים.
השיטה PutPreEncodedContainer() מקודדת רכיב קונטיינר חדש של TLV (מבנה, מערך או נתיב) שמכיל קבוצה של רכיבים רכיבים שנלקחים ממאגר נתונים זמני ומקודד מראש. מאגר הנתונים הזמני של הקלט אמור להכיל אפס או יותר רכיבי TLV בקידוד מלא, עם תגים שתואמים לכללים שמשויכים לסוג המאגר שצוין (למשל, חברי מבנה חייבים להכיל תגים, אבל לא לחברי מערך אסור).
השיטה מקודדת את כל רכיב הקונטיינר בקריאה אחת. כשמחזירים PutPreEncodedContainer(), אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||
מוחזר ערכים |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
הפונקציה מקודדת ערך מחרוזת מסוג TLV בתקן UTF8.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
הפונקציה מקודדת ערך מחרוזת מסוג TLV בתקן UTF8.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
PutStringF
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
מקודדים את פלט המחרוזת בפורמט שתואם לפורמט שברכיב TLV.
ה-putStringF הוא אנלוגי של sprintf, שבו הפלט מאוחסן ברכיב TLV, בניגוד למאגר נתונים זמני של תווים. כשיש פונקציונליות מורחבת של Printf, הפונקציה יכולה להפיק פלט של מחרוזת התוצאה באחסון בסיסי רציף. ההטמעה תומכת בשיפורי ה-printf הבאים:
הפלטפורמה מספקת vcbprintf
מבוסס-קריאה חוזרת (callback) שמאפשר לבצע קריאה חוזרת (callback) בהתאמה אישית במקום Putchar.
הפלטפורמה מספקת וריאנט של vsnprintf
בשם vsnprintf_ex
, שפועל בדיוק כמו לעומתnprintf, אבל יש בו תנאים להשמטת n
התווים הראשונים של הפלט.
חשוב לדעת: יכול להיות שהפונקציה שמבוססת על קריאה חוזרת (callback) היא הפשוטה ביותר ותצרוך הכי פחות קוד, אבל מגוון הפונקציות של vsprintf_ex
יצרוך פחות סטאק.
אם אף אחת מהאפשרויות שלמעלה לא זמינה אבל הפלטפורמה מספקת malloc
, הפונקציה תקצה מאגר נתונים זמני לשמירת הפלט. אם הפלטפורמה לא מספקת שיפור למשפחת Printf או Malloc, הפלט נחתך כך שיתאים למצב הרציף באחסון הנוכחי של TLV
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
מוחזר ערכים |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
מתחיל לקודד רכיב TLV חדש.
השיטה StartContainer() משמשת לכתיבת רכיבי קונטיינר TLV (מבנה, מערכים או נתיבים) בקידוד. השיטה מתבססת על הסוג והתג (אם יש) של מאגר התגים החדש, והפניה לערך TLVType שישמשו לשמירת ההקשר הנוכחי של הכותב בזמן שהוא משמש לכתיבת הקונטיינר.
אחרי שהשיטה StartContainer() מחזירה, האפליקציה צריכה להשתמש באובייקט TLVWriter הנוכחי כדי לכתוב את הרכיבים של הקונטיינר. בסיום, האפליקציה חייבת לקרוא לשיטה EndContainer() כדי לסיים את הקידוד של הקונטיינר.
פרטים | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||
מוחזר ערכים |
|
StartPutBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
הפונקציה מקודדת מחרוזת בייטים מסוג TLV בכמה מקטעים.
צריך להשתמש בו עם ContinuePutBytes.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
מוחזר ערכים |
|
VPutStringF
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
מקודדים את פלט המחרוזת בפורמט שתואם לפורמט שברכיב TLV.
ה-putStringF הוא אנלוגי של sprintf, שבו הפלט מאוחסן ברכיב TLV, בניגוד למאגר נתונים זמני של תווים. כשיש פונקציונליות מורחבת של Printf, הפונקציה יכולה להפיק פלט של מחרוזת התוצאה באחסון בסיסי רציף. ההטמעה תומכת בשיפורי ה-printf הבאים:
הפלטפורמה מספקת vcbprintf
מבוסס-קריאה חוזרת (callback) שמאפשר לבצע קריאה חוזרת (callback) בהתאמה אישית במקום Putchar.
הפלטפורמה מספקת וריאנט של vsnprintf
בשם vsnprintf_ex
, שפועל בדיוק כמו לעומתnprintf, אבל יש בו תנאים להשמטת n
התווים הראשונים של הפלט.
חשוב לדעת: יכול להיות שהפונקציה שמבוססת על קריאה חוזרת (callback) היא הפשוטה ביותר ותצרוך הכי פחות קוד, אבל מגוון הפונקציות של vsprintf_ex
יצרוך פחות סטאק.
אם אף אחת מהאפשרויות שלמעלה לא זמינה אבל הפלטפורמה מספקת malloc
, הפונקציה תקצה מאגר נתונים זמני לשמירת הפלט. אם הפלטפורמה לא מספקת שיפור למשפחת Printf או Malloc, הפלט נחתך כך שיתאים למצב הרציף באחסון הנוכחי של TLV
פרטים | |||||||
---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||
מוחזר ערכים |
|
פונקציות סטטיות ציבוריות
FinalizePacketBuffer
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
הטמעה של פונקציית TLVWriter FinalizeBuffer לכתיבה בשרשרת של PacketBuffers.
הפונקציה FinalizePacketBuffer() מבצעת את ההשלמה הנדרשת שנדרשת כשמשתמשים ב-TLVWriter כדי לכתוב בשרשרת של PacketBuffers. הפונקציה תוכננה לשימוש בשילוב עם הפונקציה GetNewPacketBuffer().
למידע נוסף על ה-API של הפונקציה FinalizePacketBuffer(), אפשר לעיין בהגדרה של סוג FinalizeBufferFunct.
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
הטמעה של פונקציית TLVWriter GetNewBuffer לכתיבה במאגר דינמי דינמי.
הפונקציה GetNewBuffer_Malloced() מספקת שטח פלט חדש ל-TLVWriter בהכפלת הגודל של מאגר הנתונים הזמני הבסיסי לפי הצורך לאחסון הקידוד. הפונקציה תוקצה לסמן של הפונקציה TLVWriter GetNewBuffer.
מידע נוסף על ה-API של הפונקציה GetNewBuffer_Malloced() זמין בהגדרה של סוג GetNewBufferFunct.
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
הטמעה של פונקציית TLVWriter GetNewBuffer לכתיבה לשרשרת של PacketBuffers.
הפונקציה GetNewPacketBuffer() מספקת שטח פלט חדש ל-TLVWriter על ידי הקצאת שרשרת של PacketBuffer אחד או יותר לפי הצורך לאחסון הקידוד. הפונקציה תוקצה לסמן של הפונקציה TLVWriter GetNewBuffer.
הערה: כשמשתמשים ב-GetNewPacketBuffer עם רכיב TLVWriter, צריך להשתמש גם בפונקציה FinalizePacketBuffer() המתאימה (או בפונקציה מקבילה) כדי לסיים את שרשרת מאגר הנתונים הזמני.
מידע נוסף על ה-API של הפונקציה GetNewPacketBuffer() זמין בהגדרה של סוג GetNewBufferFunct.
פונקציות מוגנות
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
קובעים אם הקונטיינר צריך לשמור מקום לסמל CloseContainer בנקודת ההפעלה או הפתיחה של הקונטיינר.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
מגדירים אם הקונטיינר צריך לשמור מקום בשביל הסמל של CloseContainer בזמן ההפעלה או הפתיחה של הקונטיינר.
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
WriteData
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
WriteElementHead
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
WriteElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )