nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
מספק מקודד יעיל בזיכרון לכתיבת נתונים בפורמט TLV של Weave.
סיכום
TLVWriter מטמיע מקודד בסגנון העברה בלבד עבור נתוני Weave TLV. אפליקציות כותבים נתונים לקידוד על ידי קריאה לאחת משיטות ה-Put() של הכותב, ומעבירה מידע על התג והערך המשויכים לפי הצורך. באופן דומה, אפליקציות יכולות לקודד סוגי קונטיינרים של TLV (מבנים, מערכים או נתיבים) על ידי קריאה ל-method של OpenContainer() או EnterContainer() .
אובייקט TLVWriter יכול לכתוב נתונים ישירות למאגר פלט קבוע, או לשרשרת של אובייקט PacketBuffer אחד או יותר. בנוסף, אפליקציות יכולות לספק פונקציות GetNewBuffer
ו-FinalizeBuffer
משלהן כדי להפנות פלט ליעד שרירותי, כמו שקע או תור אירועים.
ירושה
מחלקות משנה ידועות ידועות: 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.
|
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)
|
קידוד של ערך מחרוזת UTF8 מסוג TLV.
|
PutString(uint64_t tag, const char *buf, uint32_t len)
|
קידוד של ערך מחרוזת UTF8 מסוג TLV.
|
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)
|
יישום של פונקציית GetNewBuffer TLVWriter לכתיבה במאגר נתונים זמני דינמי.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
יישום של פונקציית GetNewBuffer TLVWriter לכתיבה בשרשרת של PacketBuffers.
|
פונקציות מוגנות |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
קובעים אם המאגר צריך לשריין מקום לסמל NearbyContainer בנקודת ההתחלה או הפתיחה של המאגר.
|
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.
מתבצעת קריאה לפונקציות מהסוג הזה כשמתבצעת קריאה לשיטה 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 בכל פעם שתתבצע קריאה לשיטת Finalize() שלו. אפליקציות יכולות להגדיר את מצביע הפונקציה בכל נקודה לפני הקריאה לפונקציה Finalize(). כברירת מחדל, מיקום הסמן מוגדר ל-NULL, וכתוצאה מכך השיטה Finalize() מוותרת על הפעלת הפונקציה.
מידע נוסף על הטמעת פונקציית FinalizeBufferFunct זמין בהגדרת הסוג 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(), כדי להעביר הפניה לאותו כותב קונטיינרים לשתי השיטות.
כשהמערכת מחזירה את הפונקציה 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. השיטה כותבת את כל רכיב מאגר התגים החדש בקריאה אחת, ומעתיקה את הסוג, התג והרכיבים של מאגר התגים מקידוד המקור. כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||||
ערכים מוחזרים |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
קידוד של רכיב מאגר TLV מתוך קבוצה מקודדת מראש של רכיבי חבר.
השיטה CopyContainer() מקודדת רכיב מאגר TLV חדש (מבנה, מערך או נתיב) שמכיל קבוצה של רכיבי חבר שנלקחו מאובייקט TLVReader. לאחר הפעלת השיטה, אובייקט הקורא שסופק אמור להיות ממוקם על רכיב מאגר TLV. למאגר התגים המקודד החדש יהיו אותו סוג וחברים כמו מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.
כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||||
ערכים מוחזרים |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
מקודד רכיב מאגר TLV שמכיל רכיבי חבר ממאגר מקודד מראש.
השיטה CopyContainer() מקודדת רכיב קונטיינר TLV חדש (מבנה, מערך או נתיב) המכיל קבוצה של רכיבי חבר שנלקחו מהתוכן של מאגר מקודד מראש שסופק. כשמפעילים את השיטה, הנתונים במאגר הנתונים הזמני שסופק מנותחים כרכיב מאגר TLV. לאחר מכן, נכתב מאגר חדש בעל סוג וחברים זהים לאלה של מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.
כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.
פרטים | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||||||
ערכים מוחזרים |
|
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
מעתיק רכיב TLV מאובייקט של קורא אל הכותב.
השיטה CopyElement() מקודדת רכיב TLV חדש שהסוג, התג והערך שלו נלקחים מאובייקט TLVReader. לאחר הפעלת השיטה, אובייקט הקורא שסופק אמור להיות ממוקם ברכיב המקור 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 כותב כרגע.
השיטה GetContainerType() מחזירה את הסוג של מאגר התגים TLV שבו ה-TLVWriter כותב כרגע. אם ה-TLVWriter לא כותב רכיבים בתוך מאגר (כלומר, אם כותבים ברמה החיצונית ביותר של קידוד), השיטה מחזירה את הערך kTLVType_NotSpecified.
פרטים | |
---|---|
החזרות |
ה-TLVType של המאגר הנוכחי, או kTLVType_NotSpecified אם ה-TLVWriter לא כותב רכיבים בתוך מאגר.
|
GetLengthWritten
uint32_t GetLengthWritten( void )
מחזירה את המספר הכולל של הבייטים שנכתבו מאז שהמחבר אותחל.
פרטים | |
---|---|
החזרות |
המספר הכולל של הבייטים שנכתבו מאז שהמחבר אותחל.
|
הפעלה
void Init( uint8_t *buf, uint32_t maxLen )
הפעלה
void Init( PacketBuffer *buf, uint32_t maxLen )
הפעלה
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.
לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
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 )
קידוד של ערך מחרוזת UTF8 מסוג TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
PutString
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
קידוד של ערך מחרוזת UTF8 מסוג TLV.
פרטים | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
פרמטרים |
|
||||||||||||
ערכים מוחזרים |
|
PutStringF
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
לקודד את פלט המחרוזת בפורמט שתואם לפורמט של הרכיב TLV.
PutStringF הוא אנלוגי של ספרינט, שבו הפלט מאוחסן ברכיב TLV, בניגוד למאגר תווים זמני. כאשר פונקציית הדפסה מורחבת זמינה, הפונקציה יכולה להפיק פלט של מחרוזת התוצאה לתוך אחסון בסיסי שאינו רציף. היישום תומך בשיפורי Printf הבאים:
הפלטפורמה מספקת vcbprintf
שמבוססת על קריאה חוזרת (callback) שמאפשרת לבצע קריאה חוזרת בהתאמה אישית במקום לשחק ב-putchar.
הפלטפורמה מספקת וריאציה של vsnprintf
בשם vsnprintf_ex
, שפועלת בדיוק כמו vsnprintf, אבל יש בה תנאים להשמטת 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 הוא אנלוגי של ספרינט, שבו הפלט מאוחסן ברכיב TLV, בניגוד למאגר תווים זמני. כאשר פונקציית הדפסה מורחבת זמינה, הפונקציה יכולה להפיק פלט של מחרוזת התוצאה לתוך אחסון בסיסי שאינו רציף. היישום תומך בשיפורי Printf הבאים:
הפלטפורמה מספקת vcbprintf
שמבוססת על קריאה חוזרת (callback) שמאפשרת לבצע קריאה חוזרת בהתאמה אישית במקום לשחק ב-putchar.
הפלטפורמה מספקת וריאציה של vsnprintf
בשם vsnprintf_ex
, שפועלת בדיוק כמו vsnprintf, אבל יש בה תנאים להשמטת 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().
אפשר לעיין בהגדרת הסוג FinalizeBufferFunct כדי לקבל מידע נוסף על ה-API של הפונקציה FinalizePacketBuffer().
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
יישום של פונקציית GetNewBuffer TLVWriter לכתיבה במאגר נתונים זמני דינמי.
הפונקציה GetNewBuffer_Malloced() מספקת שטח פלט חדש ל-TLVWriter על ידי הכפלת הגודל של המאגר הדינמי הבסיסי, לפי הצורך לאחסון הקידוד. הפונקציה תוקצה למצביע הפונקציה GetNewBuffer TLVWriter.
למידע נוסף על ה-API של הפונקציה GetNewBuffer_Malloced(), אפשר לעיין בהגדרת הסוג GetNewBufferFunct.
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
יישום של פונקציית GetNewBuffer TLVWriter לכתיבה בשרשרת של PacketBuffers.
הפונקציה GetNewPacketBuffer() מספקת שטח פלט חדש ל-TLVWriter על ידי הקצאת שרשרת של PacketBuffer אחד או יותר לפי הצורך לאחסון הקידוד. הפונקציה תוקצה למצביע הפונקציה GetNewBuffer TLVWriter.
שימו לב שכאשר משתמשים ב-GetNewPacketBuffer עם TLVWriter, צריך להשתמש גם בפונקציה FinalizePacketBuffer() התואמת (או פונקציה דומה) כדי לסיים את שרשרת החיץ.
למידע נוסף על ה-API של הפונקציה GetNewPacketBuffer(), ניתן לעיין בהגדרת הסוג GetNewBufferFunct.
פונקציות מוגנות
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
קובעים אם המאגר צריך לשריין מקום לסמל NearbyContainer בנקודת ההתחלה או הפתיחה של המאגר.
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 )