nl:: بافت:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
یک تجزیه کننده کارآمد حافظه برای داده های کدگذاری شده در قالب Weave TLV ارائه می دهد.
خلاصه
TLVReader یک تجزیه کننده فقط به جلو و "به سبک کششی" برای داده های Weave TLV پیاده سازی می کند. شی TLVReader به عنوان مکان نما عمل می کند که می تواند برای تکرار روی یک دنباله از عناصر TLV و تفسیر محتوای آنها استفاده شود. هنگامی که برنامهها روی یک عنصر قرار میگیرند، میتوانند با متدهای Get() خواننده تماس بگیرند تا نوع و برچسب عنصر فعلی را پرس و جو کنند و هر مقدار مرتبط را استخراج کنند. متد Next() Reader برای پیشروی از عنصری به عنصر دیگر استفاده می شود.
یک شی TLVReader همیشه قبل، روی یا بعد از یک عنصر TLV قرار می گیرد. هنگامی که برای اولین بار مقداردهی اولیه می شود، یک TLVReader بلافاصله قبل از اولین عنصر رمزگذاری قرار می گیرد. برای شروع خواندن، یک برنامه باید یک فراخوانی اولیه با متد ()Next برقرار کند تا خواننده را روی عنصر اول قرار دهد. هنگامی که یک عنصر کانتینر با یک ساختار، یک آرایه یا یک مسیر مواجه میشود، میتوان از روشهای OpenContainer() یا EnterContainer() برای تکرار در محتویات ظرف استفاده کرد.
هنگامی که خواننده به پایان رمزگذاری TLV یا آخرین عنصر درون یک ظرف می رسد، با برگرداندن یک خطای WEAVE_END_OF_TLV از متد ()Next به برنامه سیگنال می دهد. خواننده به بازگرداندن WEAVE_END_OF_TLV ادامه میدهد تا زمانی که مجدداً مقداردهی اولیه شود، یا ظرف فعلی خارج شود (از طریق CloseContainer() / ExitContainer() ).
یک شی TLVReader می تواند داده ها را مستقیماً از یک بافر ورودی ثابت یا از زنجیره ای از یک یا چند PacketBuffer تجزیه کند. علاوه بر این، برنامهها میتوانند یک تابع GetNextBuffer
برای تغذیه دادهها به خواننده از یک منبع دلخواه، مانند سوکت یا پورت سریال، ارائه کنند.
وراثت
زیر کلاس های مستقیم شناخته شده:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl:: بافت::TLV::دایره TLVReader
انواع عمومی | |
---|---|
GetNextBufferFunct )(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) | WEAVE_ERROR(*WEAVE_ERROR (* تابعی که می تواند برای بازیابی داده های TLV اضافی برای تجزیه استفاده شود. |
صفات عمومی | |
---|---|
AppData | void * یک فیلد اشاره گر که می تواند برای داده های خاص برنامه استفاده شود. |
GetNextBuffer | اشاره گر به تابعی که داده های ورودی را برای شی TLVReader تولید می کند. |
ImplicitProfileId | uint32_t شناسه نمایه برای استفاده از برچسب های نمایه که به صورت ضمنی کدگذاری شده اند. |
ویژگی های محافظت شده | |
---|---|
mBufEnd | const uint8_t * |
mBufHandle | uintptr_t |
mContainerType | |
mControlByte | uint16_t |
mElemLenOrVal | uint64_t |
mElemTag | uint64_t |
mLenRead | uint32_t |
mMaxLen | uint32_t |
mReadPoint | const uint8_t * |
توابع عمومی | |
---|---|
CloseContainer ( TLVReader & containerReader) | خواندن ظرف TLV را پس از تماس با OpenContainer() کامل می کند. |
DupBytes (uint8_t *& buf, uint32_t & dataLen) | یک بافر حاوی مقدار بایت فعلی یا رشته UTF8 را اختصاص داده و برمی گرداند. |
DupString (char *& buf) | یک بافر حاوی مقدار تهی بایت فعلی یا رشته UTF8 را اختصاص داده و برمی گرداند. |
EnterContainer ( TLVType & outerContainerType) | |
ExitContainer ( TLVType outerContainerType) | |
Get (bool & v) | مقدار عنصر فعلی را به عنوان یک نوع bool بدست آورید. |
Get (int8_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 8 بیتی دریافت کنید. |
Get (int16_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 16 بیتی دریافت کنید. |
Get (int32_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 32 بیتی دریافت کنید. |
Get (int64_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 64 بیتی دریافت کنید. |
Get (uint8_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 8 بیتی دریافت کنید. |
Get (uint16_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 16 بیتی دریافت کنید. |
Get (uint32_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 32 بیتی دریافت کنید. |
Get (uint64_t & v) | مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 64 بیتی دریافت کنید. |
Get (float & v) | |
Get (double & v) | مقدار عنصر فعلی را به عنوان یک عدد ممیز شناور با دقت دو برابر دریافت کنید. |
GetBufHandle (void) const | uintptr_t |
GetBytes (uint8_t *buf, uint32_t bufSize) | مقدار بایت فعلی یا عنصر رشته UTF8 را دریافت کنید. |
GetContainerType (void) const | نوع محفظه ای را که TLVReader در حال خواندن در آن است برمی گرداند. |
GetControlByte (void) const | uint16_t بایت کنترل مرتبط با عنصر TLV فعلی را برمی گرداند. |
GetDataPtr (const uint8_t *& data) | یک اشاره گر به بایت کدگذاری شده اولیه یک بایت TLV یا عنصر رشته UTF8 دریافت کنید. |
GetLength (void) const | uint32_t طول داده های مرتبط با عنصر TLV فعلی را برمی گرداند. |
GetLengthRead (void) const | uint32_t تعداد کل بایت های خوانده شده از زمان شروع اولیه خواننده را برمی گرداند. |
GetReadPoint (void) const | const uint8_t * نقطه ای را در بافر ورودی زیرین که با موقعیت فعلی خواننده مطابقت دارد، دریافت می کند. |
GetRemainingLength (void) const | uint32_t تعداد کل بایت هایی را که می توان تا رسیدن به حداکثر طول خواندن خواند، برمی گرداند. |
GetString (char *buf, uint32_t bufSize) | مقدار بایت فعلی یا عنصر رشته UTF8 را به عنوان یک رشته پایان یافته تهی دریافت کنید. |
GetTag (void) const | uint64_t برچسب مرتبط با عنصر TLV فعلی را برمیگرداند. |
GetType (void) const | نوع عنصر TLV فعلی را برمیگرداند. |
Init (const TLVReader & aReader) | void |
Init (const uint8_t *data, uint32_t dataLen) | void یک شی TLVReader را برای خواندن از یک بافر ورودی راه اندازی می کند. |
Init ( PacketBuffer *buf, uint32_t maxLen) | void یک شی TLVReader را برای خواندن از یک PacketBuffer راه اندازی می کند. |
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers) | void یک شی TLVReader را برای خواندن از یک یا چند PacketBuffer راه اندازی می کند. |
Next (void) | |
Next ( TLVType expectedType, uint64_t expectedTag) | |
OpenContainer ( TLVReader & containerReader) | |
Skip (void) | |
VerifyEndOfContainer (void) | تأیید می کند که شی TVLReader در انتهای یک ظرف TLV است. |
توابع محافظت شده | |
---|---|
ClearElementState (void) | void وضعیت TLVReader را پاک کنید. |
ElementType (void) const | TLVElementType این یک روش خصوصی است که TLVElementType را از mControlByte برمی گرداند. |
EnsureData ( WEAVE_ERROR noDataErr) | |
GetElementHeadLength (uint8_t & elemHeadBytes) const | این یک روش خصوصی است که برای محاسبه طول یک سر عنصر TLV استفاده می شود. |
IsContainerOpen (void) const | bool |
ReadData (uint8_t *buf, uint32_t len) | |
ReadElement (void) | |
ReadTag (TLVTagControl tagControl, const uint8_t *& p) | uint64_t |
SetContainerOpen (bool aContainerOpen) | void |
SkipData (void) | با خواندن روی آن بدون بافر مقصد، از هر گونه داده موجود در TLV فعلی رد شوید. |
SkipToEndOfContainer (void) | |
VerifyElement (void) |
توابع استاتیک محافظت شده | |
---|---|
FailGetNextBuffer ( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen) | |
GetNextPacketBuffer ( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen) |
انواع عمومی
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
تابعی که می تواند برای بازیابی داده های TLV اضافی برای تجزیه استفاده شود.
توابع از این نوع برای تغذیه داده های ورودی به TLVReader استفاده می شود. هنگام فراخوانی، انتظار می رود که تابع داده های اضافی را برای خواننده تولید کند تا بتواند آن را تجزیه کند یا به خواننده سیگنال دهد که داده دیگری در دسترس نیست.
جزئیات | |||||||||
---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||
ارزش های بازگشتی |
|
صفات عمومی
اطلاعات برنامه
void * AppData
یک فیلد اشاره گر که می تواند برای داده های خاص برنامه استفاده شود.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
اشاره گر به تابعی که داده های ورودی را برای شی TLVReader تولید می کند.
اگر روی NULL (مقدار پیشفرض) تنظیم شود، خواننده فرض میکند که هیچ داده ورودی دیگری در دسترس نیست.
GetNextBuffer می تواند توسط یک برنامه در هر زمانی تنظیم شود، اما معمولاً زمانی تنظیم می شود که خواننده اولیه تنظیم شود.
برای اطلاعات بیشتر در مورد اجرای تابع GetNextBuffer به تعریف نوع GetNextBufferFunct مراجعه کنید.
ImplicitProfileId
uint32_t ImplicitProfileId
شناسه نمایه برای استفاده از برچسب های نمایه که به صورت ضمنی کدگذاری شده اند.
هنگامی که خواننده با یک تگ مخصوص پروفایل مواجه می شود که به شکل ضمنی کدگذاری شده است، از مقدار ویژگی ImplicitProfileId
به عنوان شناسه نمایه فرضی برای تگ استفاده می کند.
به طور پیش فرض، ویژگی ImplicitProfileId
روی kProfileIdNotSpecified تنظیم شده است. هنگام رمزگشایی TLV که حاوی برچسبهای رمزگذاری شده ضمنی است، برنامهها باید ImplicitProfileId
را قبل از خواندن هر عنصر TLV دارای چنین برچسبهایی تنظیم کنند. شناسه نمایه مناسب معمولاً به زمینه برنامه یا پروتکلی که گفته می شود بستگی دارد.
اگر در حالی که ImplicitProfileId
روی kProfileIdNotSpecified تنظیم شده است با یک برچسب رمزگذاری ضمنی مواجه شد، خواننده یک خطای WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG را برمیگرداند.
ویژگی های محافظت شده
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
توابع عمومی
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
خواندن ظرف TLV را پس از تماس با OpenContainer() کامل می کند.
متد ()CloseContainer وضعیت یک شی TLVReader والد را پس از فراخوانی ()OpenContainer بازیابی می کند. برای هر فراخوانی به OpenContainer() برنامه ها باید یک فراخوانی متناظر با CloseContainer() داشته باشند و به هر دو متد ارجاع به همان Container Reader ارسال کنند.
وقتی CloseContainer() برمی گردد، خواننده والد بلافاصله قبل از اولین عنصری که پس از ظرف قرار می گیرد قرار می گیرد. از این نقطه یک برنامه کاربردی می تواند از متد Next() برای پیشروی در میان عناصر باقی مانده استفاده کند.
برنامهها میتوانند CloseContainer() را در یک خواننده والد در هر مقطع زمانی فراخوانی کنند، بدون توجه به اینکه آیا همه عناصر موجود در ظرف زیرین خوانده شدهاند یا خیر. پس از فراخوانی ()CloseContainer ، برنامه باید کانتینر خوان را بهعنوان «deitialized» در نظر بگیرد و نباید بدون مقداردهی مجدد از آن استفاده کند.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||
ارزش های بازگشتی |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
یک بافر حاوی مقدار بایت فعلی یا رشته UTF8 را اختصاص داده و برمی گرداند.
این روش یک بافر ایجاد می کند و یک کپی از داده های مرتبط با بایت یا عنصر رشته UTF-8 را در موقعیت فعلی برمی گرداند. حافظه بافر با malloc() به دست می آید و زمانی که دیگر به آن نیازی نباشد باید توسط تماس گیرنده با () free آزاد شود.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||
ارزش های بازگشتی |
|
DupString
WEAVE_ERROR DupString( char *& buf )
یک بافر حاوی مقدار تهی بایت فعلی یا رشته UTF8 را اختصاص داده و برمی گرداند.
این روش یک بافر برای داده های مرتبط با بایت یا عنصر رشته UTF-8 در موقعیت فعلی ایجاد می کند و یک کپی با پایان تهی را برمی گرداند. حافظه بافر با malloc() به دست می آید و زمانی که دیگر به آن نیازی نباشد باید توسط تماس گیرنده با () free آزاد شود.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||
ارزش های بازگشتی |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
یک شی TLVReader را برای خواندن اعضای عنصر ظرف TLV آماده می کند.
متد ()EnterContainer شی TLVReader فعلی را برای شروع خواندن عناصر عضو یک ظرف TLV (یک ساختار، آرایه یا مسیر) آماده میکند. برای هر تماس با EnterContainer () برنامهها باید یک فراخوانی متناظر با ExitContainer () برقرار کنند.
وقتی EnterContainer() نامیده می شود، شی TLVReader باید روی عنصر کانتینر قرار گیرد تا خوانده شود. این متد ارجاع به مقدار TLVType را به عنوان آرگومان می گیرد که برای ذخیره متن خواننده در حین خواندن ظرف استفاده می شود.
هنگامی که متد EnterContainer() برمی گردد، خواننده بلافاصله قبل از اولین عضو ظرف قرار می گیرد. با فراخوانی مکرر Next() خواننده از طریق اعضای مجموعه پیش میرود تا زمانی که به پایان برسد، در این مرحله خواننده WEAVE_END_OF_TLV را برمیگرداند.
هنگامی که برنامه خواندن یک ظرف را به پایان رساند، می تواند با فراخوانی متد ExitContainer() به خواندن عناصر بعد از ظرف ادامه دهد.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
خواندن یک ظرف TLV را کامل می کند و یک شی TLVReader را برای خواندن عناصر بعد از ظرف آماده می کند.
متد ExitContainer() وضعیت یک شی TLVReader را پس از فراخوانی EnterContainer() بازیابی می کند. برای هر فراخوانی به EnterContainer() برنامه ها باید یک فراخوانی متناظر با ExitContainer() برقرار کنند و مقدار متنی که توسط متد ()EnterContainer برگردانده شده است را ارسال کنند.
هنگامی که ExitContainer() برمی گردد، خواننده بلافاصله قبل از اولین عنصری که پس از ظرف قرار می گیرد قرار می گیرد. از این نقطه یک برنامه کاربردی می تواند از متد Next() برای پیشروی در میان عناصر باقی مانده استفاده کند.
هنگامی که EnterContainer() فراخوانی شد، برنامهها میتوانند ExitContainer() را در هر زمان از خواننده فراخوانی کنند، بدون توجه به اینکه آیا تمام عناصر موجود در کانتینر زیرین خوانده شدهاند یا خیر.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( bool & v )
گرفتن
WEAVE_ERROR Get( int8_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 8 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( int16_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 16 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( int32_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 32 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( int64_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح امضا شده 64 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( uint8_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 8 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد. به طور مشابه، اگر مقدار عدد صحیح رمزگذاری شده منفی باشد، مقدار به بدون علامت تبدیل می شود.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( uint16_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 16 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد. به طور مشابه، اگر مقدار عدد صحیح رمزگذاری شده منفی باشد، مقدار به بدون علامت تبدیل می شود.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( uint32_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 32 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده بزرگتر از نوع داده خروجی باشد، مقدار حاصل کوتاه خواهد شد. به طور مشابه، اگر مقدار عدد صحیح رمزگذاری شده منفی باشد، مقدار به بدون علامت تبدیل می شود.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( uint64_t & v )
مقدار عنصر فعلی را به عنوان یک عدد صحیح بدون علامت 64 بیتی دریافت کنید.
اگر مقدار عدد صحیح کدگذاری شده منفی باشد، مقدار به بدون علامت تبدیل می شود.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
گرفتن
WEAVE_ERROR Get( float & v )
گرفتن
WEAVE_ERROR Get( double & v )
مقدار عنصر فعلی را به عنوان یک عدد ممیز شناور با دقت دو برابر دریافت کنید.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
مقدار بایت فعلی یا عنصر رشته UTF8 را دریافت کنید.
برای تعیین اندازه بافر ورودی مورد نیاز، قبل از فراخوانی GetBytes( ) متد GetLength() را فراخوانی کنید.
جزئیات | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||
ارزش های بازگشتی |
|
GetContainerType
TLVType GetContainerType( void ) const
نوع محفظه ای را که TLVReader در حال خواندن در آن است برمی گرداند.
متد GetContainerType() نوع محفظه TLV را که TLVReader در آن می خواند را برمی گرداند. اگر TLVReader در بیرونی ترین سطح یک رمزگذاری TLV قرار گیرد (یعنی قبل، روی یا بعد از خارجی ترین عنصر TLV )، روش kTLVType_NotSpecified را برمی گرداند.
جزئیات | |
---|---|
برمی گرداند | TLVType کانتینر فعلی یا kTLVType_NotSpecified اگر TLVReader در داخل یک ظرف قرار نگرفته باشد. |
GetControlByte
uint16_t GetControlByte( void ) const
بایت کنترل مرتبط با عنصر TLV فعلی را برمی گرداند.
در حالت ایده آل، هیچ کس نیازی به دانستن بایت کنترل ندارد و فقط پیاده سازی داخلی TLV باید به آن دسترسی داشته باشد. اما، با این وجود، دسترسی به بایت کنترل برای اهداف اشکال زدایی توسط TLV Debug Utilities مفید است (که سعی می کنند بایت کنترل برچسب را هنگام چاپ زیبای محتویات بافر TLV رمزگشایی کنند).
جزئیات | |
---|---|
برمی گرداند | یک عدد صحیح بدون علامت حاوی بایت کنترل مرتبط با عنصر TLV فعلی. اگر خواننده روی یک عنصر قرار نگیرد، kTLVControlByte_NotSpecified برگردانده می شود. |
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
یک اشاره گر به بایت کدگذاری شده اولیه یک بایت TLV یا عنصر رشته UTF8 دریافت کنید.
این روش یک اشاره گر مستقیم مقدار رشته کدگذاری شده را در بافر ورودی زیرین برمی گرداند. برای موفقیت، روش مستلزم آن است که کل مقدار رشته در یک بافر وجود داشته باشد. در غیر این صورت روش WEAVE_ERROR_TLV_UNDERRUN را برمی گرداند. این باعث می شود که روش در هنگام خواندن داده ها از چند بافر ناپیوسته استفاده محدود داشته باشد.
جزئیات | |||||||||
---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||
ارزش های بازگشتی |
|
GetLength
uint32_t GetLength( void ) const
طول داده های مرتبط با عنصر TLV فعلی را برمی گرداند.
طول داده فقط برای عناصر نوع رشته UTF8 یا رشته بایت اعمال می شود. برای رشتههای UTF8، مقدار بازگشتی تعداد بایتهای رشته است، نه تعداد کاراکترها.
جزئیات | |
---|---|
برمی گرداند | طول (بر حسب بایت) داده های مرتبط با عنصر TLV فعلی، یا 0 اگر عنصر فعلی یک رشته UTF8 یا رشته بایت نباشد، یا اگر خواننده روی یک عنصر قرار نداشته باشد. |
GetLengthRead
uint32_t GetLengthRead( void ) const
تعداد کل بایت های خوانده شده از زمان شروع اولیه خواننده را برمی گرداند.
جزئیات | |
---|---|
برمی گرداند | تعداد کل بایت های خوانده شده از زمان شروع اولیه خواننده. |
GetReadPoint
const uint8_t * GetReadPoint( void ) const
نقطه ای را در بافر ورودی زیرین که با موقعیت فعلی خواننده مطابقت دارد، دریافت می کند.
جزئیات | |
---|---|
برمی گرداند | یک اشاره گر به بافر ورودی زیرین که با موقعیت فعلی خواننده مطابقت دارد. |
GetRemainingLength
uint32_t GetRemainingLength( void ) const
تعداد کل بایت هایی را که می توان تا رسیدن به حداکثر طول خواندن خواند، برمی گرداند.
جزئیات | |
---|---|
برمی گرداند | تعداد کل بایت هایی که تا رسیدن به حداکثر طول خواندن قابل خواندن هستند. |
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
مقدار بایت فعلی یا عنصر رشته UTF8 را به عنوان یک رشته پایان یافته تهی دریافت کنید.
برای تعیین اندازه بافر ورودی مورد نیاز، قبل از فراخوانی GetBytes( ) متد GetLength() را فراخوانی کنید. بافر ورودی باید حداقل یک بایت بزرگتر از طول رشته باشد تا کاراکتر تهی را در خود جای دهد.
جزئیات | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||
ارزش های بازگشتی |
|
GetTag
uint64_t GetTag( void ) const
برچسب مرتبط با عنصر TLV فعلی را برمیگرداند.
مقدار بازگردانده شده توسط GetTag() را می توان با توابع ابزار برچسب ( IsProfileTag() ، IsContextTag() ، ProfileIdFromTag() و غیره) برای تعیین نوع تگ و استخراج مقادیر مختلف فیلد برچسب استفاده کرد.
جزئیات | |
---|---|
برمی گرداند | یک عدد صحیح بدون علامت حاوی اطلاعات مربوط به برچسب مرتبط با عنصر TLV فعلی. |
GetType
TLVType GetType( void ) const
شروع کنید
void Init( const TLVReader & aReader )
شروع کنید
void Init( const uint8_t *data, uint32_t dataLen )
شروع کنید
void Init( PacketBuffer *buf, uint32_t maxLen )
یک شی TLVReader را برای خواندن از یک PacketBuffer راه اندازی می کند.
تجزیه از موقعیت شروع بافر (buf->DataStart()) شروع می شود و تا پایان داده ها در بافر (همانطور که با buf->Datalen() مشخص می شود) ادامه می یابد، یا بایت های maxLen تجزیه شوند.
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
|
شروع کنید
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
یک شی TLVReader را برای خواندن از یک یا چند PacketBuffer راه اندازی می کند.
تجزیه از موقعیت شروع بافر اولیه (buf->DataStart()) شروع می شود. اگر allowDiscontiguousBuffers درست باشد، خواننده از طریق زنجیرهای از بافرها که توسط اشارهگر ()Next به هم مرتبط شدهاند، پیش میرود. تجزیه تا زمانی ادامه می یابد که تمام داده های زنجیره بافر مصرف شود (همانطور که با buf->Datalen() مشخص می شود)، یا بایت های maxLen تجزیه شوند.
جزئیات | |||||||
---|---|---|---|---|---|---|---|
مولفه های |
|
بعد
WEAVE_ERROR Next( void )
شی TLVReader را به عنصر TLV بعدی برای خواندن ارتقا می دهد.
متد ()Next شی خواننده را روی عنصر بعدی در یک کدگذاری TLV قرار می دهد که در همان زمینه محتوی قرار دارد. به طور خاص، اگر خواننده در بیرونی ترین سطح یک رمزگذاری TLV قرار گیرد، فراخوانی Next() خواننده را به بالاترین عنصر بعدی هدایت می کند. اگر خواننده در داخل یک عنصر ظرف TLV (یک ساختار، آرایه یا مسیر) قرار گرفته باشد، فراخوانی Next() خواننده را به عنصر عضو بعدی ظرف هدایت میکند.
از آنجایی که Next() حرکت خواننده را محدود به زمینه محفظه فعلی می کند، فراخوانی Next() زمانی که خواننده روی یک عنصر کانتینر قرار می گیرد، روی ظرف پیش می رود و از عناصر عضو آن (و اعضای هر کانتینر تو در تو) می گذرد تا زمانی که به اولین کانتینر برسد. عنصر بعد از ظرف
وقتی هیچ عنصر دیگری در یک زمینه خاص وجود نداشته باشد، متد ()Next یک خطای WEAVE_END_OF_TLV را برمیگرداند و موقعیت خواننده بدون تغییر باقی میماند.
جزئیات | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ارزش های بازگشتی |
|
بعد
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
شی TLVReader را به عنصر TLV بعدی که باید خوانده شود، ارتقا می دهد و نوع و برچسب عنصر جدید را مشخص می کند.
متد Next(TLVType expectType, uint64_t expectTag) یک روش راحت است که رفتاری مشابه با Next() دارد، اما همچنین تأیید می کند که نوع و تگ عنصر TLV جدید با آرگومان های ارائه شده مطابقت دارد.
جزئیات | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
مولفه های |
| ||||||||||||||||
ارزش های بازگشتی |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
یک شی TLVReader جدید را برای خواندن اعضای یک عنصر ظرف TLV راه اندازی می کند.
روش OpenContainer() یک شی TLVReader جدید را برای خواندن عناصر عضو یک ظرف TLV (یک ساختار، آرایه یا مسیر) مقداردهی اولیه می کند. هنگامی که OpenContainer() فراخوانی می شود، شی TLVReader فعلی باید روی عنصر کانتینر قرار گیرد تا خوانده شود. این روش تنها آرگومان خود را ارجاع به یک خواننده جدید میگیرد که برای خواندن ظرف مقداردهی اولیه میشود. این خواننده به عنوان خواننده کانتینر شناخته می شود در حالی که خواننده ای که OpenContainer() روی آن فراخوانی می شود به عنوان خواننده والد شناخته می شود.
هنگامی که متد OpenContainer() برمی گردد، خواننده کانتینر بلافاصله قبل از اولین عضو کانتینر قرار می گیرد. فراخوانی Next() در خواننده کانتینر از طریق اعضای مجموعه پیش می رود تا به پایان برسد، در این مرحله خواننده WEAVE_END_OF_TLV را برمی گرداند.
وقتی کانتینر خوان باز است، برنامه ها نباید با آن تماس بگیرند یا وضعیت خواننده اصلی را تغییر دهند. هنگامی که یک برنامه استفاده از Container Reader را تمام کرد، باید آن را با فراخوانی ()CloseContainer در خواننده والد ببندد، و Container reader را به عنوان آرگومان ارسال کند. برنامهها ممکن است کانتینرخوان را در هر نقطه، با یا بدون خواندن همه عناصر موجود در ظرف زیرین ببندند. پس از بسته شدن کانتینر خوان، برنامه ها ممکن است به استفاده خود از خواننده والد ادامه دهند.
Container Reader ویژگی های پیکربندی مختلفی را از خواننده اصلی به ارث می برد. اینها هستند:
- شناسه نمایه ضمنی (ImplicitProfileId)
- نشانگر داده برنامه (AppData)
- نشانگر تابع GetNextBuffer
جزئیات | |||||
---|---|---|---|---|---|
مولفه های |
| ||||
ارزش های بازگشتی |
|
پرش کنید
WEAVE_ERROR Skip( void )
شی TLVReader را بلافاصله بعد از عنصر TLV فعلی به جلو می برد.
متد ()Skip شی خواننده را بلافاصله بعد از عنصر TLV فعلی قرار می دهد، به طوری که یک فراخوان بعدی به ()Next خواننده را به عنصر زیر می برد. مانند Next() ، اگر خواننده در زمان فراخوانی روی عنصر کانتینر قرار گیرد، اعضای کانتینر نادیده گرفته می شوند. اگر خواننده روی هیچ عنصری قرار نگیرد، موقعیت آن بدون تغییر باقی میماند.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ارزش های بازگشتی |
|
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )
تأیید می کند که شی TVLReader در انتهای یک ظرف TLV است.
روش VerifyEndOfContainer() تأیید می کند که هیچ عنصر TLV دیگری برای خواندن در ظرف TLV فعلی وجود ندارد. This is a convenience method that is equivalent to calling Next() and checking for a return value of WEAVE_END_OF_TLV.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ارزش های بازگشتی |
|
توابع محافظت شده
ClearElementState
void ClearElementState( void )
ElementType
TLVElementType ElementType( void ) const
This is a private method that returns the TLVElementType from mControlByte.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
This is a private method used to compute the length of a TLV element head.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
ReadTag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContainerOpen
void SetContainerOpen( bool aContainerOpen )
SkipData
WEAVE_ERROR SkipData( void )
Skip any data contained in the current TLV by reading over it without a destination buffer.
جزئیات | |||||
---|---|---|---|---|---|
ارزش های بازگشتی |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
WEAVE_ERROR VerifyElement( void )
Protected static functions
FailGetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
جز در مواردی که غیر از این ذکر شده باشد، محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است و نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است. Thread علامت تجاری ثبتشده Thread Group, Inc است.
تاریخ آخرین بهروزرسانی 2022-08-30 بهوقت ساعت هماهنگ جهانی.