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 استفاده می شود. هنگام فراخوانی، انتظار می رود که تابع داده های اضافی را برای خواننده تولید کند تا بتواند آن را تجزیه کند یا به خواننده سیگنال دهد که داده دیگری در دسترس نیست.
جزئیات | |||||||||
---|---|---|---|---|---|---|---|---|---|
پارامترها |
| ||||||||
ارزش های بازگشتی |
|
صفات عمومی
AppData
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 فعلی وجود ندارد. این یک روش راحت است که معادل فراخوانی Next() و بررسی مقدار بازگشتی WEAVE_END_OF_TLV است.
جزئیات | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ارزش های بازگشتی |
|
توابع محافظت شده
کاپلیستستات
void ClearElementState( void )
عنصر
TLVElementType ElementType( void ) const
این یک روش خصوصی است که TlvelementType را از McOntrolByte برمی گرداند.
تضمین شده
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
طول getelementledl
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
این یک روش خصوصی است که برای محاسبه طول سر عنصر TLV استفاده می شود.
iscontaineropen
bool IsContainerOpen( void ) const
readdata
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
خواندن
WEAVE_ERROR ReadElement( void )
رجیت
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
setContainerOpen
void SetContainerOpen( bool aContainerOpen )
صعود
WEAVE_ERROR SkipData( void )
با خواندن بیش از آن بدون بافر مقصد ، از داده های موجود در TLV فعلی استفاده کنید.
جزئیات | |||||
---|---|---|---|---|---|
ارزش های بازگشتی |
|
SkiptoEndofContainer
WEAVE_ERROR SkipToEndOfContainer( void )
سنجش
WEAVE_ERROR VerifyElement( void )
توابع استاتیک محافظت شده
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 )
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates. The OPENTHREAD and related marks are trademarks of the Thread Group and are used under license.
تاریخ آخرین بهروزرسانی 2024-11-14 بهوقت ساعت هماهنگ جهانی.