nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
يوفّر برنامج ترميز فعّالاً للذاكرة لكتابة البيانات بتنسيق Weave TLV.
الملخّص
تطبّق TLVWriter برنامج ترميز نمط البث المباشر الأمامي فقط لبيانات WeTV TLV. ترسِل التطبيقات البيانات إلى ترميز عن طريق استدعاء إحدى طرق put() من وفيقرة، مع تمرير المعلومات المرتبطة بالعلامة والقيمة حسب الضرورة. وبالمثل، يمكن للتطبيقات ترميز أنواع حاويات TLV (البنى أو المصفوفات أو المسارات) من خلال استدعاء الطريقة Opencontainer() أو Enterحاويات().
يمكن للكائن TLVWriter كتابة البيانات مباشرةً في مخزن مؤقت للإخراج الثابت أو إلى سلسلة تتضمّن عنصرًا واحدًا أو أكثر من كائنات PacketBuffer. بالإضافة إلى ذلك، يمكن للتطبيقات توفير وظائف GetNewBuffer
وFinalizeBuffer
الخاصة بها لتوجيه المخرجات إلى وجهة عشوائية، مثل مقبس أو قائمة انتظار للأحداث.
الاكتساب
الفئات الفرعية المباشرة المعروفة: nl::Weave::TLV::CircularTLVWriter
الأنواع المحمية |
|
---|---|
@72{
|
تعداد |
الأنواع المتاحة للجميع |
|
---|---|
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 بعد استدعاء Open حاوية().
|
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)
|
تعمل على ترميز قيمة فارغة 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.
|
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
الأنواع المتاحة للجميع
النهائي
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
دالة يتم استخدامها لإنهاء النتيجة من عنصر TLVWriter.
ويتم استدعاء الدوال من هذا النوع عند استدعاء الطريقة TLVWriter's Finalize(). من المتوقع أن تنفّذ الدالة أي عملية تنظيف أو إنهاء نهائية ضرورية تتعلق بإخراج كائن الكاتب. ومن الأمثلة على ذلك، مثل تسجيل المدة النهائية للترميز أو إغلاق واصف الملف.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||
قيم الإرجاع |
|
GetNewBufferFunct
WEAVE_ERROR(* GetNewBufferFunct)(TLVWriter &writer, uintptr_t &bufHandle, uint8_t *&bufStart, uint32_t &bufLen)
دالة توفّر مساحة تخزين مؤقت جديدة للمُخرج إلى TLVWriter.
ويتم استخدام الدوال من هذا النوع لإعداد مساحة تخزين مؤقت جديدة للكتابة عليها من أجل TLVWriter. عندما يتم استدعاء الدالة، من المتوقع أن تعرض الدالة مؤشرًا إلى موقع الذاكرة حيث يجب كتابة البيانات الجديدة، بالإضافة إلى الحد الأقصى للطول المرتبط. يمكن للدالة توفير مساحة للكتابة إما عن طريق تخصيص مخزن مؤقت جديد للاحتفاظ بالبيانات أو عن طريق محو البيانات المكتوبة مسبقًا من المخزن المؤقت الحالي.
التفاصيل | |||||||||
---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||
قيم الإرجاع |
|
السمات العامة
القائمة
void * AppData
حقل مؤشر يمكن استخدامه للبيانات الخاصة بالتطبيق.
النهائي
FinalizeBufferFunct FinalizeBuffer
مؤشر إلى دالة سيتم طلبها عند الانتهاء من TLVWriter.
سيستدعي العنصر TLVWriter دالة FinalizeBuffer عندما يتم استدعاء طريقة Finalize() . يمكن للتطبيقات ضبط مؤشر الدالة في أي وقت قبل استدعاء Finalize(). ويتم ضبط المؤشر تلقائيًا على "فارغ"، مما يؤدي إلى التخلي عن طريقة Finalize() للدالة.
راجِع تعريف نوع FinalizeBufferFunct للحصول على مزيد من المعلومات عن تنفيذ دالة FinalizeBuffer.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
مؤشر إلى دالة ستوفّر مساحة تخزين مؤقّتة جديدة على الإخراج إلى TLVWriter.
سيستدعي العنصر TLVWriter دالة GetNewBuffer عندما يتم إجراء محاولة لكتابة بيانات تتجاوز حجم المخزن المؤقت الحالي للإخراج. في حال ضبط القيمة على NULL (القيمة التلقائية)، سيعرض الكاتب القيمة WEAVE_ERROR_NO_MEMORY إذا تجاوزت بيانات المخرجات المخزن المؤقت الحالي.
يمكن إعداد GetNewBuffer من خلال تطبيق في أي وقت، ولكن يتم عادةً إعداده عند إعداد المؤلف.
راجع تعريف النوع GetNewBufferFunct للحصول على معلومات إضافية حول تنفيذ دالة GetNewBuffer.
معرّف الملف الشخصي الضمني
uint32_t ImplicitProfileId
معرّف الملف الشخصي للعلامات التي يجب ترميزها بشكل ضمني.
عندما يُطلب من كاتب ترميز عنصر جديد، في حال تطابق معرّف الملف الشخصي للعلامة المرتبطة بالعنصر الجديد مع قيمة عضو ImplicitProfileId
، سيعمل الكاتب على ترميز العلامة في شكل ضمني، مع حذف معرّف الملف الشخصي في العملية.
بشكل تلقائي، يتم ضبط الخاصية ImplicitProfileId
على kProfileIdNotSpecified والتي توجّه الكاتب إلى عدم إصدار علامات ضمنية. يمكن للتطبيقات ضبط ImplicitProfileId
في أي وقت لتفعيل علامات الترميز في شكل ضمني بدءًا من النقطة الحالية في الترميز. يعتمد عادةً معرّف الملف الشخصي المناسب على سياق التطبيق أو البروتوكول الذي يتم قوله.
السمات المحمية
mBufHandle
uintptr_t mBufHandle
mBufStart
uint8_t * mBufStart
mcontainerType
TLVType mContainerType
مكتوب
uint32_t mLenWritten
mMaxLen
uint32_t mMaxLen
mRemainingLen
uint32_t mRemainingLen
mWritePoint
uint8_t * mWritePoint
وظائف عامة
إغلاق الحاوية
WEAVE_ERROR CloseContainer( TLVWriter & containerWriter )
لإكمال كتابة حاوية TLV بعد استدعاء Open حاوية().
تعمل الطريقة Closecontainer() على استعادة حالة الكائن TLVWriter بعد استدعاء الدالة Open حاوية(). وبالنسبة إلى كل طلب استدعاء لتطبيقات Opencontainer()، يجب إجراء استدعاء مقابل لـ Closecontainer()، وتمرير مرجع إلى كاتب الحاوية نفسه لكلتا الطريقتَين.
عند رجوع Closecontainer()، قد تستمر التطبيقات في استخدام الكاتب الرئيسي لكتابة عناصر TLV إضافية تظهر بعد عنصر الحاوية. في هذه المرحلة، يجب مراعاة كاتب الحاوية التي تم توفيرها 'de-initialize' ويجب عدم استخدامها بدون إعادة التهيئة.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
المتابعة باستخدام الوضع
WEAVE_ERROR ContinuePutBytes( const uint8_t *buf, uint32_t len )
تعمل هذه السمة على ترميز قيمة سلسلة TLV بايت.
يجب استخدام هذه الأداة مع StartPlaceBytes.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
حاوية حاوية
WEAVE_ERROR CopyContainer( TLVReader & container )
لنسخ عنصر حاوية TLV من الكائن TLVReader.
يعمل Copy حاوية() على ترميز عنصر TLV جديد من خلال نسخ عنصر حاوية تم ترميزه مسبقًا في الموضع الحالي لعنصر TLVReader. تكتب الطريقة بأكملها حاوية العنصر الجديد في استدعاء واحد، وتنسخ نوع الحاوية والعلامة والعناصر من ترميز المصدر. عند عرض الطريقة، يمكن استخدام كائن الكاتب لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||||||
قيم الإرجاع |
|
حاوية حاوية
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
تعمل هذه السمة على ترميز عنصر حاوية TLV من مجموعة مشفّرة مسبقًا من عناصر الأعضاء.
تعمل الطريقة Copycontainer() على ترميز عنصر TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من عناصر الأعضاء المأخوذة من كائن TLVReader. عندما يتم استدعاء الطريقة، من المتوقع أن يتم وضع كائن القارئ الذي تم توفيره على عنصر حاوية TLV. تحتوي الحاوية المشفّرة حديثًا على النوع نفسه والأعضاء نفسها في حاوية الإدخال. ويتم تحديد علامة الحاوية الجديدة كمعلمة إدخال.
عند عرض الطريقة، يمكن استخدام كائن الكاتب لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||||||
قيم الإرجاع |
|
حاوية حاوية
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
تعمل هذه السمة على ترميز عنصر حاوية TLV يحتوي على عناصر عضو من حاوية مشفّرة مسبقًا.
تعمل الطريقة Copycontainer() على ترميز عنصر TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من عناصر الأعضاء المأخوذة من محتوى حاوية تم ترميزها مُسبقًا. عند استدعاء الطريقة، يتم تحليل البيانات في المخزن المؤقت للإدخال الذي تم توفيره كعنصر حاوية TLV تتم كتابة حاوية جديدة من النوع نفسه مثل الأعضاء في حاوية الإدخال. ويتم تحديد علامة الحاوية الجديدة كمعلمة إدخال.
عند عرض الطريقة، يمكن استخدام كائن الكاتب لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||||
قيم الإرجاع |
|
النسخ
WEAVE_ERROR CopyElement( TLVReader & reader )
لنسخ عنصر TLV من كائن قارئ إلى المؤلف.
تعمل الطريقة CopyElement() على ترميز عنصر TLV جديد يتم أخذ نوعه وعلامته وقيمته من عنصر TLVReader. عندما يتم استدعاء الطريقة، من المتوقع أن يتم وضع كائن القارئ الذي تم توفيره على العنصر المصدر TLV. سيكون للعنصر المرمّز حديثًا النوع نفسه والعلامة و المحتوى نفسه لحاوية الإدخال. إذا كان العنصر المزوّد حاوية TLV (بنية أو مصفوفة أو مسار)، سيتم نسخ محتوى الحاوية بالكامل.
التفاصيل | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||||||
قيم الإرجاع |
|
النسخ
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
End حاوية
WEAVE_ERROR EndContainer( TLVType outerContainerType )
إكمال ترميز عنصر حاوية TLV
تكتمل طريقة Endcontainer() ترميز عنصر الحاوية TLV وتستعيد حالة الكائن TLVWrite بعد استدعاء سابق للسمة Startcontainer(). بالنسبة إلى كل طلب استدعاء لتطبيقات Startcontainer()، يجب تمرير قيمة TLVType الناتجة عن الاستدعاء Startcontainer(). عند رجوع Endcontainer()، يمكن استخدام كائن الكاتب لكتابة عناصر TLV إضافية تتبع عنصر الحاوية.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
الصياغة النهائية
WEAVE_ERROR Finalize( void )
أكمِل كتابة ترميز TLV.
تكتمل طريقة Finalize() عملية كتابة ترميز TLV بالتخزين المؤقت للمخرجات الأساسية. يجب أن يستدعي التطبيق الطريقة قبل أن يستخدم محتوى المخزن المؤقت. يمكن استدعاء الدالة Finalize() فقط عندما لا يكون هناك مؤلّفون مفتوحون للكاتب الحالي. (راجِع OpenContainer()
).
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
قيم الإرجاع |
|
نوع الحاوية
TLVType GetContainerType( void ) const
لعرض نوع الحاوية التي يكتبها TLVWriter حاليًا.
تعرض طريقة GetcontainerType() نوع الحاوية TLV التي يتم داخلها كتابة TLVWriter حاليًا. إذا كانت TLVWriter لا تكتب العناصر داخل حاوية (أي إذا كانت مكتوبة على المستوى الأقصى للترميز)، ستعرض الطريقة kTLVType_NotSpecified.
التفاصيل | |
---|---|
المرتجعات |
TLVType من الحاوية الحالية أو kTLVType_NotSpecified إذا كان TLVWriter لا يكتب العناصر داخل الحاوية.
|
GetLengthWrite
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
على"صحيح"، سيتم تخصيص PacketBuffers الإضافي ووضعها في سلاسل المخزن المؤقت المخزّنة حسب الحاجة لاستيعاب حجم البيانات المكتوبة. وإذا كان المخزن المؤقت للإخراج المحدّد هو رأس سلسلة المخزن المؤقت، ستتم كتابة الإخراج إلى المخزن المؤقت التالي في السلسلة قبل تخصيص أي مخازن مؤقتة جديدة.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
InitMalloced
void InitMalloced( uint8_t *& outBuf, uint32_t initialBufSize, uint32_t maxLen )
إعداد كائن TLVWriter للكتابة في المخزن المؤقت الديناميكي.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
حاوية مفتوحة
WEAVE_ERROR OpenContainer( uint64_t tag, TLVType containerType, TLVWriter & containerWriter )
تعمل هذه السياسة على إعداد عنصر TLVWriter جديد لكتابة أعضاء عنصر TLV.
يتم استخدام الطريقة Opencontainer() لكتابة عناصر حاويات TLV (البنية أو المصفوفات أو المسارات) للترميز. تستخدم الطريقة نوعًا وعلامة (إن وُجدت) في الحاوية الجديدة ومرجعًا لعنصر كاتب جديد (كاتب الحاوية) سيتم إعداده لغرض كتابة عناصر الحاوية. وتكتب التطبيقات أعضاء الحاوية الجديدة باستخدام كاتب الحاوية، ثم تُطلب Closecontainer() لإكمال ترميز الحاوية.
أثناء فتح كاتب الحاوية، يجب ألا تجري التطبيقات عمليات استدعاء أو تغيير حالة الكاتب الرئيسي.
يكتسِب كاتب الحاوية خصائص الضبط المختلفة من الكاتب الرئيسي. وهي:
- رقم تعريف الملف الضمني (ImplicitProfileId)
- مؤشر بيانات التطبيق (AppData)
- مؤشرا الوظائف GetGetBuffer و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.
هذه الوظيفة الزائدة عن الأعضاء مُقدَّمة من أجل الراحة. ويختلف عن الدالة المذكورة أعلاه فقط في الوسيطة التي تقبلها.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
وضع منطقية
WEAVE_ERROR PutBoolean( uint64_t tag, bool v )
تعمل على ترميز قيمة منطقية TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
بايت
WEAVE_ERROR PutBytes( uint64_t tag, const uint8_t *buf, uint32_t len )
تعمل هذه السمة على ترميز قيمة سلسلة TLV بايت.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
بوتنل
WEAVE_ERROR PutNull( uint64_t tag )
تعمل على ترميز قيمة فارغة TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
وضع PreEncodedcontainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
تعمل هذه السمة على ترميز عنصر حاوية TLV من مجموعة مشفّرة مسبقًا من عناصر الأعضاء.
تعمل الطريقة PlacePreEncodedcontainer() على ترميز عنصر TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من عناصر الأعضاء المأخوذة من ذاكرة تخزين مؤقت مشفّرة مسبقًا. من المتوقع أن يحتوي المخزن المؤقت للإدخال على صفر أو أكثر من عناصر TLV المشفرة بالكامل، مع العلامات التي تتوافق مع القواعد المرتبطة بنوع الحاوية المحدد (على سبيل المثال، يجب أن يحتوي أعضاء البنية على علامات، بينما يجب ألا يحتوي أعضاء المصفوفة على علامات).
تعمل الطريقة على ترميز عنصر العنصر بالكامل في استدعاء واحد. عند رجوع PlacePreEncodedcontainer()، يمكن استخدام كائن الكاتب لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||
قيم الإرجاع |
|
سلسلة
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
تعمل على ترميز قيمة سلسلة UTF8 من TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
سلسلة
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
تعمل على ترميز قيمة سلسلة UTF8 من TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
وضع سلسلة
WEAVE_ERROR PutStringF( uint64_t tag, const char *fmt, ... )
ترميز مخرجات السلسلة المنسَّقة وفقًا للتنسيق في العنصر TLV.
وضع ذلك في السلسلة هو تناظري لـ sprintf حيث يتم تخزين المخرجات في عنصر TLV بدلاً من المخزن المؤقت للأحرف. عندما تتوفر وظيفة طباعة موسّعة، يمكن للدالة عرض سلسلة النتائج في مساحة تخزين أساسية غير متصلة. يتوافق التنفيذ مع التحسينات التالية على الصور المطبوعة:
وتوفّر المنصّة vcbprintf
استنادًا إلى معاودة الاتصال، ما يتيح إمكانية استدعاء استدعاء مخصّص بدلاً من سمةcharchar.
ويوفّر النظام الأساسي صيغة vsnprintf
باسم vsnprintf_ex
، والتي تعمل تمامًا مثل vsnprintf باستثناء أنّها تتضمّن أحكامًا لحذف أول n
حرف من الإخراج.
وتجدر الإشارة إلى أنه على الرغم من أن الدالة القائمة على رد الاتصال قد تكون الأبسط وتستخدم أقل قدر من الرمز، ستستهلك مجموعة الدوال المختلفة vsprintf_ex
عددًا أقل من الحزم.
إذا لم يكن أيٌّ مما سبق متاحًا، ولكن المنصّة توفّر malloc
، ستخصّص الدالة المخزن المؤقت مؤقتًا لإخراج النتيجة. عندما لا توفّر المنصّة أي تحسين لعائلة الطباعة أو مركز عملائي، يتم اقتطاع المخرجات لتلائم الحالة المستمرة في مساحة التخزين TLV الحالية.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||
قيم الإرجاع |
|
حاوية حاوية
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
بدء ترميز عنصر حاوية TLV جديد.
يتم استخدام طريقة Startcontainer() لكتابة عناصر حاوية TLV (البنية أو المصفوفات أو المسارات) للترميز. تأخذ الطريقة النوع والعلامة (إن وُجدتَ) من الحاوية الجديدة، ومرجعًا لقيمة TLVType التي سيتم استخدامها لحفظ السياق الحالي للكاتب أثناء استخدامها في كتابة الحاوية.
بعد عرض طريقة Startcontainer()، يجب أن يستخدم التطبيق العنصر TLVWriter الحالي لكتابة عناصر الحاوية. عند الانتهاء، يجب أن يستدعي التطبيق طريقة Endcontainer() لإنهاء ترميز الحاوية.
التفاصيل | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||||
قيم الإرجاع |
|
StartStartBytes
WEAVE_ERROR StartPutBytes( uint64_t tag, uint32_t totalLen )
لترميز سلسلة بايت بتنسيق TLV في أجزاء متعددة.
يجب استخدام هذا مع FollowPlaceBytes.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||||||||
قيم الإرجاع |
|
لعبة فيديو على الإنترنت
WEAVE_ERROR VPutStringF( uint64_t tag, const char *fmt, va_list ap )
ترميز مخرجات السلسلة المنسَّقة وفقًا للتنسيق في العنصر TLV.
وضع ذلك في السلسلة هو تناظري لـ sprintf حيث يتم تخزين المخرجات في عنصر TLV بدلاً من المخزن المؤقت للأحرف. عندما تتوفر وظيفة طباعة موسّعة، يمكن للدالة عرض سلسلة النتائج في مساحة تخزين أساسية غير متصلة. يتوافق التنفيذ مع التحسينات التالية على الصور المطبوعة:
وتوفّر المنصّة vcbprintf
استنادًا إلى معاودة الاتصال، ما يتيح إمكانية استدعاء استدعاء مخصّص بدلاً من سمةcharchar.
ويوفّر النظام الأساسي صيغة vsnprintf
باسم vsnprintf_ex
، والتي تعمل تمامًا مثل vsnprintf باستثناء أنّها تتضمّن أحكامًا لحذف أول n
حرف من الإخراج.
وتجدر الإشارة إلى أنه على الرغم من أن الدالة القائمة على رد الاتصال قد تكون الأبسط وتستخدم أقل قدر من الرمز، ستستهلك مجموعة الدوال المختلفة vsprintf_ex
عددًا أقل من الحزم.
إذا لم يكن أيٌّ مما سبق متاحًا، ولكن المنصّة توفّر malloc
، ستخصّص الدالة المخزن المؤقت مؤقتًا لإخراج النتيجة. عندما لا توفّر المنصّة أي تحسين لعائلة الطباعة أو مركز عملائي، يتم اقتطاع المخرجات لتلائم الحالة المستمرة في مساحة التخزين TLV الحالية.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلَمات |
|
||||||
قيم الإرجاع |
|
الدوال الثابتة العامة
فيسكين باكيت بوفر
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
تنفيذ دالة TLVWriter.
تنفّذ الدالة FinalizePacketBuffer() اللمسات اللازمة عند استخدام TLVWriter للكتابة على سلسلة من PacketBuffers. تم تصميم الدالة ليتم استخدامها مع الدالة GetNewPacketBuffer().
راجِع تعريف نوع FinalizeBufferFunct للحصول على معلومات إضافية عن واجهة برمجة التطبيقات للدالة FinalizePacketBuffer().
GetNewBuffer_Malloced
WEAVE_ERROR GetNewBuffer_Malloced( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
تنفيذ دالة TLVWriter GetNewBuffer للكتابة إلى المخزن المؤقت الديناميكي.
توفّر الدالة GetNewBuffer_Malloced() مساحة مخرجات جديدة إلى TLVWriter من خلال مضاعفة حجم المخزن المؤقت الديناميكي الأساسي حسب الحاجة لتخزين الترميز. تم تصميم الدالة ليتم تعيينها إلى مؤشر دالة TLVWriter GetNewBuffer.
يمكنك تعريف تعريف النوع GetNewBufferFunct للحصول على معلومات إضافية عن واجهة برمجة التطبيقات للدالة GetNewBuffer_Malloced().
الحصول على تخزين جديد
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
تنفيذ دالة TLVWriter GetNewBuffer للكتابة إلى سلسلة من PacketBuffers.
توفّر الدالة GetNewPacketBuffer() مساحة مخرجات جديدة إلى TLVWriter من خلال تخصيص سلسلة واحدة أو أكثر من PacketBuffers حسب الحاجة لتخزين الترميز. تم تصميم الدالة ليتم تعيينها إلى مؤشر دالة TLVWriter GetNewBuffer.
لاحظ أنه عند استخدام GetNewPacketBuffer مع دالة TLVWriter، يجب أيضًا استخدام الدالة FinalizePacketBuffer() (أو ما يعادلها) لإنهاء سلسلة المخزن المؤقت.
راجع تعريف النوع GetNewBufferFunct للحصول على معلومات إضافية عن واجهة برمجة التطبيقات للدالة GetNewPacketBuffer().
دوال محمية
محجوزة إغلاق
bool IsCloseContainerReserved( void ) const
تحدِّد ما إذا كانت الحاوية يجب أن تحجز مساحة لرمز Closecontainer عند نقطة البداية / الفتح.
حاوية حاوية مفتوحة
bool IsContainerOpen( void ) const
تم ضبط حاوية الإغلاق
void SetCloseContainerReserved( bool aCloseContainerReserved )
تحدِّد ما إذا كانت الحاوية يجب أن تحتفظ بمسافة لرمز Closecontainer عند نقطة البداية / فتح الحاوية.
SetcontainerOpen
void SetContainerOpen( bool aContainerOpen )
كتابة البيانات
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
نوع العنصر
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
كتابة عنصر مع بيانات
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )