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{
  kEndOfContainerMarkerSize = 1
}
טיפוסים בני מנייה (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)
מעתיק רכיב מאגר TLV מאובייקט TLVReader.
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)
מפעיל אובייקט TLVWriter חדש לכתיבת החברים ברכיב TLV.
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. הפונקציה צפויה לבצע את כל פעולות הניקוי או הסופיות הדרושות הקשורים לצריכת הפלט של אובייקט הכותב. דוגמאות לכך כוללות דברים כמו הקלטת האורך הסופי של הקידוד או סגירת מתאר קובץ.

פרטים
פרמטרים
[in] writer
הפניה לאובייקט TLVWriter שנמצא בתהליך סיום.
[in,out] bufHandle
ערך הקשר של uintptr_t שהוגדר על ידי קריאות קודמות לפונקציה GetNewBuffer.
[in,out] bufStart
מצביע על תחילתו של מאגר הפלט הנוכחי (והסופי) של הפלט.
[in,out] bufLen
מספר הבייטים במאגר הנתונים הזמני שאליו מפנה bufStart.
ערכים מוחזרים
WEAVE_NO_ERROR
אם החישוב הסתיים בהצלחה.
other
קודי שגיאה אחרים הספציפיים ל-Weave או לפלטפורמה, שמציינים שאירעה שגיאה במהלך החישוב הסופי.

GetNewBufferFunct

WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)

פונקציה שמספקת שטח חדש למאגר אחסון זמני פלט ל-TLVWriter.

פונקציות מהסוג הזה משמשות כדי להכין שטח מאגר חדש ל-TLVWriter שאליו אפשר לכתוב. כשהפונקציה נקראת, היא אמורה להחזיר מצביע למיקום בזיכרון שבו יש לכתוב נתונים חדשים, בצירוף האורך המקסימלי שלו. הפונקציה יכולה לספק שטח כתיבה על ידי הקצאת מאגר נתונים זמני חדש לשמירת הנתונים או על ידי ניקוי נתונים שנכתבו בעבר ממאגר נתונים קיים.

פרטים
פרמטרים
[in] writer
הפניה לאובייקט TLVWriter שמבקש שטח אחסון זמני חדש.
[in,out] bufHandle
הפניה לערך uintptr_t שהפונקציה יכולה להשתמש בו כדי לאחסן נתוני הקשר בין קריאות. הערך הזה מאותחל ל-0 לפני הקריאה הראשונה.
[in,out] bufStart
הפניה לסימון נתונים. בכניסה לפונקציה, bufStart מצביע על ההתחלה של מאגר הפלט הנוכחי. ביציאה, bufStart צפוי להצביע על ההתחלה של מאגר הנתונים הזמני החדש. ערך המצביע החדש יכול להיות זהה לערך הקודם (למשל, אם הפונקציה העתיקה את הנתונים הקיימים למקום אחר), או שהוא יכול להפנות למיקום חדש לחלוטין.
[in,out] bufLen
הפניה למספר שלם לא חתום. בכניסה לפונקציה, bufLen מכיל את מספר הבייטים של שטח לא בשימוש במאגר הזמני. ביציאה, bufLen צפוי להכיל את המספר המקסימלי של בייטים שניתן לכתוב למאגר הפלט החדש.
ערכים מוחזרים
WEAVE_NO_ERROR
אם הפונקציה הצליחה לספק שטח אחסון זמני יותר לכותב.
other
קודי שגיאה אחרים הספציפיים ל-Weave או לפלטפורמה מסוימת, שמציינים שאירעה שגיאה המונעת מהפונקציה לייצר שטח אחסון זמני נוסף.

מאפיינים ציבוריים

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 נוספים שמופיעים אחרי רכיב הקונטיינר. בשלב הזה, צריך להתייחס לכותב הקונטיינר שסופק כ 'לא מאותחל' ואין להשתמש בו ללא אתחול מחדש.

פרטים
פרמטרים
[in] containerWriter
הפניה לאובייקט TLVWriter שסופק לשיטה OpenContainer().
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_INCORRECT_STATE
אם מחבר הקונטיינר שסופק לא במצב הנכון.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב אחר של מאגר תגים נפתח ונפתח עדיין בכותב מאגר התגים שסופק.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם השלמת הקידוד של הקונטיינר תחרוג מהמגבלה על מספר הבייטים המרבי שצוין כשהכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

ContinuePutBytes

WEAVE_ERROR ContinuePutBytes(
  const uint8_t *buf,
  uint32_t len
)

מקודדת ערך מחרוזת בבייט TLV.

יש להשתמש בו עם StartPutBytes.

פרטים
פרמטרים
[in] buf
מצביע על מאגר נתונים זמני שמכיל את מחרוזת הבייטים שיש לקודד.
[in] len
מספר הבייטים לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

CopyContainer

WEAVE_ERROR CopyContainer(
  TLVReader & container
)

מעתיק רכיב מאגר TLV מאובייקט TLVReader.

הרכיב CopyContainer() מקודד רכיב קונטיינר חדש מסוג TLV על ידי העתקת רכיב קונטיינר מקודד מראש שנמצא במיקום הנוכחי של אובייקט TLVReader. השיטה כותבת את כל רכיב מאגר התגים החדש בקריאה אחת, ומעתיקה את הסוג, התג והרכיבים של מאגר התגים מקידוד המקור. כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.

פרטים
פרמטרים
[in] container
הפניה לאובייקט TLVReader שמזהה את מאגר ה-TLV המקודד מראש שיש להעתיק.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_INCORRECT_STATE
אם הקורא שסופק לא ממוקם על רכיב של מאגר.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_TLV_UNDERRUN
אם קידוד ה-TLV הבסיסי שמשויך לקורא שסופק הסתיים מוקדם מדי.
WEAVE_ERROR_INVALID_TLV_ELEMENT
אם הקורא שסופק נתקל ברכיב TLV לא תקין או שאינו נתמך.
WEAVE_ERROR_INVALID_TLV_TAG
אם הקורא שסופק נתקל בתג TLV בהקשר לא חוקי, או שהתג שמשויך למאגר התגים לא חוקי או לא מתאים בהקשר שבו נכתב מאגר התגים החדש.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות שקשורות ל-Weave או לפלטפורמה מסוימת, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו או על ידי הפונקציה GetNextBuffer() המשויכת לאובייקט הקורא.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  TLVReader & container
)

קידוד של רכיב מאגר TLV מתוך קבוצה מקודדת מראש של רכיבי חבר.

השיטה CopyContainer() מקודדת רכיב מאגר TLV חדש (מבנה, מערך או נתיב) שמכיל קבוצה של רכיבי חבר שנלקחו מאובייקט TLVReader. לאחר הפעלת השיטה, אובייקט הקורא שסופק אמור להיות ממוקם על רכיב מאגר TLV. למאגר התגים המקודד החדש יהיו אותו סוג וחברים כמו מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.

כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם מאגר התגים, או AnonymousTag אם צריך לקודד את המאגר ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] container
הפניה לאובייקט TLVReader, שמזהה מאגר תגים TLV מקודד מראש שיש להעתיק את הסוג שלו ואת איברים בו.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_INCORRECT_STATE
אם הקורא שסופק לא ממוקם על רכיב של מאגר.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_TLV_UNDERRUN
אם קידוד ה-TLV הבסיסי שמשויך לקורא שסופק הסתיים מוקדם מדי.
WEAVE_ERROR_INVALID_TLV_ELEMENT
אם הקורא שסופק נתקל ברכיב TLV לא תקין או שאינו נתמך.
WEAVE_ERROR_INVALID_TLV_TAG
אם הקורא שסופק נתקל בתג TLV בהקשר לא חוקי, או אם התג שסופק לא תקין או לא הולם בהקשר שבו נכתב מאגר התגים החדש.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות שקשורות ל-Weave או לפלטפורמה מסוימת, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו או על ידי הפונקציה GetNextBuffer() המשויכת לאובייקט הקורא.

CopyContainer

WEAVE_ERROR CopyContainer(
  uint64_t tag,
  const uint8_t *encodedContainer,
  uint16_t encodedContainerLen
)

מקודד רכיב מאגר TLV שמכיל רכיבי חבר ממאגר מקודד מראש.

השיטה CopyContainer() מקודדת רכיב קונטיינר TLV חדש (מבנה, מערך או נתיב) המכיל קבוצה של רכיבי חבר שנלקחו מהתוכן של מאגר מקודד מראש שסופק. כשמפעילים את השיטה, הנתונים במאגר הנתונים הזמני שסופק מנותחים כרכיב מאגר TLV. לאחר מכן, נכתב מאגר חדש בעל סוג וחברים זהים לאלה של מאגר הקלט. התג של מאגר התגים החדש מצוין כפרמטר של קלט.

כאשר השיטה חוזרת, אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם מאגר התגים, או AnonymousTag אם צריך לקודד את המאגר ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] encodedContainer
מאגר נתונים זמני שמכיל מאגר תגים מסוג TLV מקודד מראש, שיש להעתיק את הסוג ואת בני הבית שלו.
[in] encodedContainerLen
האורך בבייטים של הקונטיינר המקודד מראש.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_TLV_UNDERRUN
אם הקונטיינר המקודד הסתיים מוקדם מדי.
WEAVE_ERROR_INVALID_TLV_ELEMENT
אם המאגר המקודד מכיל רכיב TLV לא תקין או שאינו נתמך.
WEAVE_ERROR_INVALID_TLV_TAG
אם המאגר המקודד מכיל תג TLV בהקשר לא חוקי, או אם התג שסופק לא חוקי או לא מתאים בהקשר שבו נכתב מאגר התגים החדש.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות שקשורות ל-Weave או לפלטפורמה מסוימת, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו או על ידי הפונקציה GetNextBuffer() המשויכת לאובייקט הקורא.

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

מעתיק רכיב TLV מאובייקט של קורא אל הכותב.

השיטה CopyElement() מקודדת רכיב TLV חדש שהסוג, התג והערך שלו נלקחים מאובייקט TLVReader. לאחר הפעלת השיטה, אובייקט הקורא שסופק אמור להיות ממוקם ברכיב המקור TLV. הסוג, התג והתוכן של הרכיב המקודד החדש יהיו זהים לאלה של מאגר הקלט. אם הרכיב שסופק הוא מאגר תגים מסוג TLV (מבנה, מערך או נתיב), כל התוכן של המאגר יועתק.

פרטים
פרמטרים
[in] reader
הפניה לאובייקט TLVReader המזהה רכיב TLV מקודד מראש שצריך להעתיק.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_INCORRECT_STATE
אם הקורא שסופק לא ממוקם על רכיב.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_TLV_UNDERRUN
אם קידוד ה-TLV הבסיסי שמשויך לקורא שסופק הסתיים מוקדם מדי.
WEAVE_ERROR_INVALID_TLV_ELEMENT
אם הקורא שסופק נתקל ברכיב TLV לא תקין או שאינו נתמך.
WEAVE_ERROR_INVALID_TLV_TAG
אם הקורא שסופק נתקל בתג TLV בהקשר לא חוקי, או אם התג שסופק לא תקין או לא הולם בהקשר שבו נכתב מאגר התגים החדש.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות שקשורות ל-Weave או לפלטפורמה מסוימת, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו או על ידי הפונקציה GetNextBuffer() המשויכת לאובייקט הקורא.

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 נוספים אחרי רכיב הקונטיינר.

פרטים
פרמטרים
[in] outerContainerType
ערך ה-TLVType שהוחזר על ידי השיטה StartContainer().
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_INCORRECT_STATE
אם לא בוצעה קריאה תואמת ל-StartContainer().
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

סיים

WEAVE_ERROR Finalize(
  void
)

מסיימים את הכתיבה של קידוד TLV.

שיטת Finalize() משלימה את תהליך הכתיבה של קידוד TLV למאגר הפלט הבסיסי. האפליקציה חייבת להפעיל את השיטה לפני שהיא תשתמש בתוכן של המאגר. ניתן לקרוא ל-Finalize() רק כאשר אין כותבי מאגרים פתוחים לכותב הנוכחי. (פרטים נוספים זמינים ב-OpenContainer()).

פרטים
ערכים מוחזרים
WEAVE_NO_ERROR
אם הקידוד הוגדר בהצלחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
other
שגיאות אחרות שקשורות ל-Weave או לפלטפורמה, שהוחזרו על ידי הפונקציה FinalizeBuffer() שהוגדרה.

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
)

מפעיל אובייקט TLVWriter כדי לכתוב למאגר פלט אחד.

פרטים
פרמטרים
[in] buf
מצביע על המאגר שבו יש לכתוב את ה-TLV.
[in] maxLen
המספר המקסימלי של בייטים שיש לכתוב למאגר הפלט.

הפעלה

void Init(
  PacketBuffer *buf,
  uint32_t maxLen
)

מפעיל אובייקט TLVWriter כדי לכתוב ב-PacketBuffer יחיד.

הכתיבה מתחילה מיד אחרי הבייט האחרון של הנתונים הקיימים במאגר הנתונים הזמני.

פרטים
פרמטרים
[in] buf
מצביע ל-PacketBuffer שבו יש לכתוב את TLV.
[in] maxLen
המספר המקסימלי של בייטים שיש לכתוב למאגר הפלט.

הפעלה

void Init(
  PacketBuffer *buf,
  uint32_t maxLen,
  bool allowDiscontiguousBuffers
)

מפעיל אובייקט TLVWriter כדי לכתוב אותו ב-PacketBuffers אחד או יותר.

הכתיבה מתחילה מיד אחרי הבייט האחרון של הנתונים הקיימים במאגר הנתונים הזמני. אם הערך של allowDiscontiguousBuffers הוא true, PacketBuffers נוספים יוקצו ויקשרו למאגר הנתונים הזמני בהתאם לצורך כדי להכיל את כמות הנתונים שנכתבה. אם מאגר הפלט שצוין כבר משמש כראש שרשרת של מאגרי נתונים זמניים, הפלט ייכתב במאגרים הבאים בשרשרת לפני הקצאה של מאגרי נתונים חדשים.

פרטים
פרמטרים
[in] buf
מצביע ל-PacketBuffer שבו יש לכתוב את נתוני TLV.
[in] maxLen
המספר המקסימלי של בייטים שיש לכתוב למאגרי הפלט.
[in] allowDiscontiguousBuffers
אם הערך הוא true, כותבים נתונים לשרשרת PacketBuffers ומקצים מאגרי אחסון חדשים לפי הצורך, כדי לאחסן את הנתונים שנכתבו. אם False, הכתיבה תיכשל עם WEAVE_ERROR_BUFFER_TOO_small אם הנתונים הכתובים יחרגו מהשטח הזמין במאגר הפלט הראשוני.

InitMalloced

void InitMalloced(
  uint8_t *& outBuf,
  uint32_t initialBufSize,
  uint32_t maxLen
)

מפעיל אובייקט TLVWriter כדי לכתוב במאגר נתונים זמני.

פרטים
פרמטרים
[in] buf
הפניה למצביע שיקבל את המאגר הזמני שהוקצה.
[in] maxLen
המספר המקסימלי של בייטים שיש לכתוב למאגר הפלט.
[in] initialBufSize
מספר הבייטים הראשוני שיש להקצות למאגר הנתונים הזמני.

OpenContainer

WEAVE_ERROR OpenContainer(
  uint64_t tag,
  TLVType containerType,
  TLVWriter & containerWriter
)

מפעיל אובייקט TLVWriter חדש לכתיבת החברים ברכיב TLV.

השיטה OpenContainer() משמשת לכתיבת רכיבי הקונטיינר TLV (מבנה, מערכים או נתיבים) לקידוד. השיטה משתמשת בסוג ובתג (אם יש) של מאגר התגים החדש, וכן בהפניה לאובייקט כותב חדש (מחבר הקונטיינר) שיאתחל לצורך כתיבת רכיבי המאגר. אפליקציות כותבים את החלקים של מאגר התגים החדש באמצעות יוצר הקונטיינר וקוראות ל-CloseContainer() כדי להשלים את קידוד הקונטיינר.

כשכותב המאגר פתוח, אסור לאפליקציות לבצע קריאות לפעולה או לשנות את המצב של הכותב ההורה.

הכותב של מאגר התגים יורש מאפייני תצורה שונים מכותב ההורה. הבדלים אלו הם:

  • מזהה הפרופיל המשתמע (ImplicitProfileId)
  • מצביע הנתונים של האפליקציה (AppData)
  • מצביעי הפונקציות GetNewBuffer ו-FinalizeBuffer

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם מאגר התגים, או AnonymousTag אם צריך לקודד את המאגר ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] containerType
סוג הקונטיינר לקידוד. חייב להיות אחד מהערכים kTLVType_Structure, kTLVType_Array או kTLVType_Path.
[out] containerWriter
הפניה לאובייקט TLVWriter שיאותחל לצורך כתיבת החברים ברכיב הקונטיינר החדש. כל הנתונים המשויכים לאובייקט שסופק יוחלפו.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_WRONG_TLV_TYPE
אם הערך שצוין עבור containerType שגוי.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

הצב

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

מקודד ערך של מספר שלם מסומן TLV.

לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

הצב

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

מקודד ערך של מספר שלם מסומן TLV.

לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
[in] preserveSize
הערך יהיה True אם צריך לקודד את הערך באותו מספר בייטים כמו בסוג הקלט. False אם צריך לקודד את הערך במספר הבייטים המינימלי שדרוש כדי לייצג את הערך. הערה: באפליקציות מומלץ מאוד להגדיר את הפרמטר הזה כ-False.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

הצב

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 ללא סימן של מספר שלם.

לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

הצב

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

קידוד של ערך TLV ללא סימן של מספר שלם.

לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
[in] preserveSize
הערך יהיה True אם צריך לקודד את הערך באותו מספר בייטים כמו בסוג הקלט. False אם צריך לקודד את הערך במספר הבייטים המינימלי שדרוש כדי לייצג את הערך. הערה: באפליקציות מומלץ מאוד להגדיר את הפרמטר הזה כ-False.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

הצב

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.

לנוחותך, זוהי פונקציית עומס יתר. הפונקציה שונה מהפונקציה שלמעלה רק מבחינת הארגומנטים שהיא מקבלת.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

מקודד ערך בוליאני TLV.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] v
הערך לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

מקודדת ערך מחרוזת בבייט TLV.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] buf
מצביע על מאגר נתונים זמני שמכיל את מחרוזת הבייטים שיש לקודד.
[in] len
מספר הבייטים לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

מקודדת ערך אפס (null) מסוג TLV.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutPreEncodedContainer

WEAVE_ERROR PutPreEncodedContainer(
  uint64_t tag,
  TLVType containerType,
  const uint8_t *data,
  uint32_t dataLen
)

קידוד של רכיב מאגר TLV מתוך קבוצה מקודדת מראש של רכיבי חבר.

השיטה PutPreEncodedContainer() מקודדת רכיב מאגר TLV חדש (מבנה, מערך או נתיב) שמכיל קבוצה של רכיבי חבר שנלקחו ממאגר נתונים זמני שמקודד מראש. מאגר הקלט של הקלט אמור להכיל אפס או יותר רכיבי TLV בקידוד מלא, עם תגים שתואמים לכללים שמשויכים לסוג המאגר שצוין (למשל, חברים במבנה חייבים לכלול תגים, ואילו חברים במערך לא יכולים להכיל תגים).

השיטה מקודדת את כל רכיב הקונטיינר בקריאה אחת. כשהמערכת מחזירה את הערך PutPreEncodedContainer(), אפשר להשתמש באובייקט הכותב כדי לכתוב רכיבי TLV נוספים אחרי רכיב הקונטיינר.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם מאגר התגים, או AnonymousTag אם צריך לקודד את המאגר ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] containerType
סוג הקונטיינר לקידוד. חייב להיות אחד מהערכים kTLVType_Structure, kTLVType_Array או kTLVType_Path.
[in] data
מצביע על מאגר שמכיל אפס רכיבי TLV מקודדים יותר שיהפכו לחברים במאגר החדש.
[in] dataLen
מספר הבייטים במאגר הנתונים הזמני data.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_WRONG_TLV_TYPE
אם הערך שצוין עבור containerType שגוי.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

קידוד של ערך מחרוזת UTF8 מסוג TLV.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] buf
מצביע למחרוזת UTF-8 עם סיום אפס שצריך לקודד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

קידוד של ערך מחרוזת UTF8 מסוג TLV.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] buf
מצביע למחרוזת UTF-8 שיש לקודד.
[in] len
האורך (בבייטים) של המחרוזת שיש לקודד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

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 הנוכחי

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] fmt
מחרוזת הפורמט שמשמשת לעיצוב רשימת הארגומנטים. עוקב אחר אותם תחביר וכללים כמו מחרוזת הפורמט של משפחת הפונקציות printf.
[in] ...
רשימת ארגומנטים שיש לעצב בערך הפלט לפי FMt.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
other
אם קריאות בסיסיות אל TLVWriter WriteElementHead או GetNewBuffer נכשלו, השגיאה שלהן תועבר מיד אל מקבץ השיחות.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

התחלת הקידוד של רכיב מאגר TLV חדש.

השיטה StartContainer() משמשת לכתיבת רכיבי קונטיינר TLV (מבנה, מערכים או נתיבים) לקידוד. השיטה משתמשת בסוג ובתג (אם יש) של מאגר התגים החדש, ובהפניה לערך TLVType שישמש לשמירת ההקשר הנוכחי של הכותב בזמן כתיבת המאגר.

לאחר שהשיטה StartContainer() חוזרת, האפליקציה צריכה להשתמש באובייקט TLVWriter הנוכחי כדי לכתוב את רכיבי המאגר. בסיום התהליך, האפליקציה חייבת להפעיל את השיטה EndContainer() כדי לסיים את הקידוד של הקונטיינר.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם מאגר התגים, או AnonymousTag אם צריך לקודד את המאגר ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] containerType
סוג הקונטיינר לקידוד. חייב להיות אחד מהערכים kTLVType_Structure, kTLVType_Array או kTLVType_Path.
[out] outerContainerType
הפניה לערך TLVType שיקבל את ההקשר של הכותב.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_WRONG_TLV_TYPE
אם הערך שצוין עבור containerType שגוי.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

StartPutBytes

WEAVE_ERROR StartPutBytes(
  uint64_t tag,
  uint32_t totalLen
)

מקודד מחרוזת של TLV בבייטים מרובים.

יש להשתמש בו עם ContinuePutBytes.

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] totalLen
המספר הכולל של הבייטים לקידוד.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
WEAVE_ERROR_TLV_CONTAINER_OPEN
אם כותב מאגר תגים נפתח אצל הכותב הנוכחי ועדיין לא נסגר.
WEAVE_ERROR_INVALID_TLV_TAG
אם ערך התג שצוין אינו חוקי או בלתי הולם בהקשר שבו נכתב הערך.
WEAVE_ERROR_BUFFER_TOO_SMALL
אם כתיבת הערך תחרוג מהמגבלה על מספר הבייטים המקסימלי שצוין כאשר הכותב אותחל.
WEAVE_ERROR_NO_MEMORY
אם ניסיון להקצות מאגר נתונים זמני פלט נכשל עקב מחסור בזיכרון.
other
שגיאות אחרות ב-Weave או בפלטפורמה ספציפית, שהוחזרו על ידי הפונקציות GetNewBuffer() או FinalizeBuffer() שהוגדרו.

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 הנוכחי

פרטים
פרמטרים
[in] tag
התג TLV שיש לקודד עם הערך, או AnonymousTag אם צריך לקודד את הערך ללא תג. יש לבנות את ערכי התג באמצעות אחת מהפונקציות של הגדרת התג ProfileTag(), ContextTag() או CommonTag().
[in] fmt
מחרוזת הפורמט שמשמשת לעיצוב רשימת הארגומנטים. עוקב אחר אותם תחביר וכללים כמו מחרוזת הפורמט של משפחת הפונקציות printf.
[in] ap
רשימת ארגומנטים שיש לעצב בערך הפלט לפי FMt.
ערכים מוחזרים
WEAVE_NO_ERROR
אם השיטה הצליחה.
other
אם קריאות בסיסיות אל TLVWriter WriteElementHead או GetNewBuffer נכשלו, השגיאה שלהן תועבר מיד אל מקבץ השיחות.

פונקציות סטטיות ציבוריות

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
)