nl:: Weave:: TLV:: TLVWriter
#include <src/lib/core/WeaveTLV.h>
يوفر برنامج ترميز فعال للذاكرة لكتابة البيانات بتنسيق Weave TLV.
ملخّص
تنفِّذ TLVWriter برنامج ترميز يعيد توجيه الرسائل الإلكترونية فقط بأسلوب البث المباشر لبيانات Weave TLV. وتكتب التطبيقات البيانات إلى أحد الترميزات من خلال استدعاء إحدى طرق Put() التي يستخدمها الكاتب، وتمرير معلومات العلامة والقيمة المرتبطة بها عند الضرورة. وبالمثل، يمكن للتطبيقات ترميز أنواع حاويات TLV (البِنى أو الصفائف أو المسارات) عن طريق استدعاء طريقة OpenContainer() للكاتب أو EnterContainer() للكاتب.
يمكن للكائن 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 بعد استدعاء 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 للكتابة في واحد أو أكثر من حزم البيانات.
|
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 FinalizeBuffer للكتابة على سلسلة من PacketBuffers.
|
GetNewBuffer_Malloced(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
تنفيذ لدالة TLVWriter GetNewBuffer للكتابة في مخزن مؤقت ديناميكي.
|
GetNewPacketBuffer(TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen)
|
تنفيذ لدالة TLVWriter GetNewBuffer للكتابة على سلسلة من PacketBuffers.
|
الدوال المحمية |
|
---|---|
IsCloseContainerReserved(void) const
|
bool
حدّد ما إذا كان يجب أن تحتفظ الحاوية بمساحة لرمز CloseContainer عند نقطة بدء / فتح الحاوية.
|
IsContainerOpen(void) const
|
bool
|
SetCloseContainerReserved(bool aCloseContainerReserved)
|
void
حدِّد ما إذا كان يجب أن تحتفظ الحاوية بمساحة لرمز CloseContainer عند نقطة بدء / فتح الحاوية.
|
SetContainerOpen(bool aContainerOpen)
|
void
|
WriteData(const uint8_t *p, uint32_t len)
|
|
WriteElementHead(TLVElementType elemType, uint64_t tag, uint64_t lenOrVal)
|
|
WriteElementWithData(TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen)
|
الأنواع المحمية
72@
@72
الأنواع العامة
FinalizeBufferFunct
WEAVE_ERROR(* FinalizeBufferFunct)(TLVWriter &writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t bufLen)
دالة تُستخدَم لإنهاء الناتج من كائن TLVWriter.
ويتم استدعاء الدوال من هذا النوع عند استدعاء طريقة 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 للحصول على معلومات إضافية حول تنفيذ دالة FinalizeBuffer.
GetNewBuffer
GetNewBufferFunct GetNewBuffer
مؤشر إلى دالة ستوفّر مساحة جديدة للمخزن المؤقت للمخرجات إلى TLVWriter.
يستدعي الكائن TLVWriter الدالة GetNewBuffer عندما يتم إجراء محاولة لكتابة بيانات تتجاوز حجم المخزن المؤقت الحالي للمخرجات. في حال الضبط على "NULL" (القيمة التلقائية)، سيعرض الكاتب القيمة WEAVE_ERROR_NO_MEMORY إذا تجاوزت بيانات الإخراج المخزن المؤقت الحالي.
يمكن ضبط GetNewBuffer من خلال أحد التطبيقات في أي وقت، ولكن يتم ضبطه عادةً عند إعداد صانع المحتوى.
راجِع تعريف النوع GetNewBufferFunct للحصول على معلومات إضافية حول تنفيذ دالة GetNewBuffer.
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. تكتب هذه الطريقة عنصر الحاوية الجديد بالكامل في استدعاء واحد، مع نسخ نوع الحاوية وعلامتها وعناصرها من ترميز المصدر. وعند عرض الطريقة، يمكن استخدام كائن writer لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||||||||
قيم الإرجاع |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, TLVReader & container )
ترميز عنصر حاوية TLV من مجموعة عناصر تابعة مرمّزة مسبقًا.
تعمل الطريقة CopyContainer() على ترميز عنصر حاوية TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من العناصر الفرعية المأخوذة من كائن TLVReader. عند استدعاء الطريقة، من المتوقع وضع كائن القارئ المزود على عنصر الحاوية TLV. ستكون الحاوية التي تم ترميزها حديثًا من النوع نفسه والأعضاء كحاوية الإدخال. يتم تحديد علامة الحاوية الجديدة كمَعلمة إدخال.
وعند عرض الطريقة، يمكن استخدام كائن writer لكتابة عناصر TLV إضافية بعد عنصر الحاوية.
التفاصيل | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||||||||
قيم الإرجاع |
|
CopyContainer
WEAVE_ERROR CopyContainer( uint64_t tag, const uint8_t *encodedContainer, uint16_t encodedContainerLen )
يتم ترميز عنصر حاوية TLV يحتوي على عناصر تابعة من حاوية تم تشفيرها مسبقًا.
تعمل الطريقة CopyContainer() على ترميز عنصر حاوية TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من العناصر الأعضاء المأخوذة من محتوى الحاوية المقدَّمة المشفَّرة مسبقًا. عند استدعاء الطريقة، يتم تحليل البيانات في المخزن المؤقت للإدخال الذي تم توفيره كعنصر حاوية TLV، وتتم كتابة حاوية جديدة لها نفس النوع والأعضاء كحاوية الإدخال. يتم تحديد علامة الحاوية الجديدة كمَعلمة إدخال.
وعند عرض الطريقة، يمكن استخدام كائن writer لكتابة عناصر 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 )
يعرض إجمالي عدد وحدات البايت التي تمت كتابتها منذ بدء تشغيل أداة الكتابة.
التفاصيل | |
---|---|
المرتجعات |
إجمالي عدد وحدات البايت التي تمت كتابتها منذ بدء تشغيل أداة الكتابة
|
Init
void Init( uint8_t *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
يؤدي هذا الإعداد إلى إعداد كائن TLVWriter للكتابة في واحد أو أكثر من حزم البيانات.
تبدأ الكتابة فورًا بعد آخر بايت من البيانات الموجودة في المخزن المؤقت المحدد. في حال ضبط السياسة allowDiscontiguousBuffers
على "صحيح"، سيتم تخصيص خدمات 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 )
ترميز قيمة فارغة TLV.
التفاصيل | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
المعلمات |
|
||||||||||||
قيم الإرجاع |
|
PutPreEncodedContainer
WEAVE_ERROR PutPreEncodedContainer( uint64_t tag, TLVType containerType, const uint8_t *data, uint32_t dataLen )
ترميز عنصر حاوية TLV من مجموعة عناصر تابعة مرمّزة مسبقًا.
تعمل الطريقة PutPreEncodedContainer() على ترميز عنصر حاوية TLV جديد (بنية أو مصفوفة أو مسار) يحتوي على مجموعة من العناصر الأعضاء المأخوذة من مخزن مؤقّت تم ترميزه مسبقًا. من المتوقع ألا يحتوي المخزن المؤقت للإدخال على عناصر TLV بترميز كامل أو أكثر، مع علامات تتوافق مع القواعد المرتبطة بنوع الحاوية المحدّد (على سبيل المثال، يجب أن يكون لأعضاء البنية علامات، بينما لا يجب أن يكون لأعضاء الصفيفة).
تعمل الطريقة على ترميز عنصر الحاوية بالكامل في استدعاء واحد. عند عرض الدالة PutPreEncodedContainer()، يمكن استخدام كائن writer لكتابة عناصر 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 الممتدة، تتمكن الدالة من إخراج سلسلة النتيجة إلى وحدة تخزين أساسية غير مستمرة. يدعم التنفيذ تحسينات printf التالية:
توفّر المنصة vcbprintf
يعتمد على معاودة الاتصال ويتيح طلب معاودة اتصال مخصّصة بدلاً من وضعputchar.
توفّر المنصة نسخة من vsnprintf
تُسمّى vsnprintf_ex
، وتعمل بشكل مماثل للنوع مقارنةً بـvsnprintf، باستثناء أنّها تتضمن أحكامًا بشأن حذف أول n
حرف من النتيجة.
يُرجى العِلم أنّه على الرغم من أنّ الدالة المستندة إلى معاودة الاتصال قد تكون الأبسط وأقلّ مقدار من الرموز البرمجية، ستستهلك دوال vsprintf_ex
المتنوعة دالة تكديس أقل.
في حال عدم توفّر أي من الخيارات المذكورة أعلاه، ولكنّ النظام الأساسي يوفّر malloc
، ستخصّص الدالة موردًا مؤقتًا مؤقتًا للاحتفاظ بالناتج. عندما لا توفّر المنصة تحسينات لعائلة printf أو Maloc، يتم اقتطاع الناتج بحيث يتناسب مع الحالة المستمرة في مساحة تخزين 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 الممتدة، تتمكن الدالة من إخراج سلسلة النتيجة إلى وحدة تخزين أساسية غير مستمرة. يدعم التنفيذ تحسينات printf التالية:
توفّر المنصة vcbprintf
يعتمد على معاودة الاتصال ويتيح طلب معاودة اتصال مخصّصة بدلاً من وضعputchar.
توفّر المنصة نسخة من vsnprintf
تُسمّى vsnprintf_ex
، وتعمل بشكل مماثل للنوع مقارنةً بـvsnprintf، باستثناء أنّها تتضمن أحكامًا بشأن حذف أول n
حرف من النتيجة.
يُرجى العِلم أنّه على الرغم من أنّ الدالة المستندة إلى معاودة الاتصال قد تكون الأبسط وأقلّ مقدار من الرموز البرمجية، ستستهلك دوال vsprintf_ex
المتنوعة دالة تكديس أقل.
في حال عدم توفّر أي من الخيارات المذكورة أعلاه، ولكنّ النظام الأساسي يوفّر malloc
، ستخصّص الدالة موردًا مؤقتًا مؤقتًا للاحتفاظ بالناتج. عندما لا توفّر المنصة تحسينات لعائلة printf أو Maloc، يتم اقتطاع الناتج بحيث يتناسب مع الحالة المستمرة في مساحة تخزين TLV الحالية.
التفاصيل | |||||||
---|---|---|---|---|---|---|---|
المعلمات |
|
||||||
قيم الإرجاع |
|
الدوال الثابتة العامة
FinalizePacketBuffer
WEAVE_ERROR FinalizePacketBuffer( TLVWriter & writer, uintptr_t bufHandle, uint8_t *bufStart, uint32_t dataLen )
تنفيذ للدالة TLVWriter FinalizeBuffer للكتابة على سلسلة من PacketBuffers.
تؤدي الدالة 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().
GetNewPacketBuffer
WEAVE_ERROR GetNewPacketBuffer( TLVWriter & writer, uintptr_t & bufHandle, uint8_t *& bufStart, uint32_t & bufLen )
تنفيذ لدالة TLVWriter GetNewBuffer للكتابة على سلسلة من PacketBuffers.
توفر الدالة GetNewPacketBuffer() مساحة إخراج جديدة لـ TLVWriter من خلال تخصيص سلسلة من PacketBuffer واحد أو أكثر حسب الحاجة لتخزين الترميز. تم تصميم الدالة ليتم تخصيصها لمؤشر الدالة TLVWriter GetNewBuffer.
تجدر الإشارة إلى أنّه عند استخدام GetNewPacketBuffer مع TLVWriter، يجب أيضًا استخدام الدالة FinalizePacketBuffer() (أو ما يعادلها) لإتمام سلسلة المخزن المؤقت.
راجِع تعريف النوع GetNewBufferFunct للحصول على معلومات إضافية عن واجهة برمجة التطبيقات للدالة GetNewPacketBuffer().
الدوال المحمية
IsCloseContainerReserved
bool IsCloseContainerReserved( void ) const
حدّد ما إذا كان يجب أن تحتفظ الحاوية بمساحة لرمز CloseContainer عند نقطة بدء / فتح الحاوية.
IsContainerOpen
bool IsContainerOpen( void ) const
SetCloseContainerReserved
void SetCloseContainerReserved( bool aCloseContainerReserved )
حدِّد ما إذا كان يجب أن تحتفظ الحاوية بمساحة لرمز CloseContainer عند نقطة بدء / فتح الحاوية.
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
WriteData
WEAVE_ERROR WriteData( const uint8_t *p, uint32_t len )
WriteElementHead
WEAVE_ERROR WriteElementHead( TLVElementType elemType, uint64_t tag, uint64_t lenOrVal )
WriteElementWithData
WEAVE_ERROR WriteElementWithData( TLVType type, uint64_t tag, const uint8_t *data, uint32_t dataLen )