org.bluez.GattCharacteristic(5) مدیریت سیستم لینوکس org.bluez.GattCharacteristic(5)

org.bluez.GattCharacteristic - مستندات واسط D-Bus مشخصه GATT در BlueZ

نمایش ویژگی‌های مشخصه (characteristic attribute) محلی/سرور و دوردست/کلاینت در GATT از یک واسط سطح‌بالای یکسان D-Bus بهره می‌برند.

اصطلاح محلی/سرور (Local/Server) به مشخصه‌های مبتنی بر GATT اشاره دارد که توسط یک افزونه (plugin) یا یک برنامه خارجی ارائه شده‌اند.

اصطلاح دوردست/کلاینت (Remote/Client) به مشخصه‌های GATT اشاره دارد که توسط دستگاه مقابل (peer) ارائه شده‌اند.

سرویس (Service)
org.bluez
رابط (Interface)
org.bluez.GattCharacteristic1
مسیر شیء (Object path)
[variable prefix]/{hci0,hci1,...}/dev_{BDADDR}/service#/char#
مورد استفاده توسط (Used by)
bluetoothctl-gatt(1)

سرویس (Service)
نام یکتا (unique name)
رابط (Interface)
org.bluez.GattCharacteristic1
مسیر شیء (Object path)
قابل تعریف به‌صورت آزاد (freely definable)

درخواستی برای خواندن مقدار مشخصه ارسال می‌کند و در صورت موفقیت‌آمیز بودن عملیات، مقدار را برمی‌گرداند.

گزینه‌های ممکن:

آفست شروع خواندن برحسب بایت.
مقدار MTU مبادله‌شده برحسب بایت.
شیء دستگاه.
نوع پیوند.

مقادیر ممکن:

"BR/EDR"
"LE"

خطاهای ممکن:

مثال‌ها:

> gatt.read [offset]

درخواستی برای نوشتن مقدار مشخصه ارسال می‌کند.

گزینه‌های ممکن:

آفست شروع نوشتن برحسب بایت.
مقادیر ممکن:
"command"
استفاده از روال نوشتن بدون پاسخ (Write without response).
"request"
استفاده از روال نوشتن با پاسخ (Write with response).
"reliable"
استفاده از روال نوشتن قابل اطمینان (Reliable Write).
مقدار MTU مبادله‌شده (فقط سرور).
مسیر دستگاه (فقط سرور).
نوع پیوند (فقط سرور).

مقادیر ممکن:

"BR/EDR"
"LE"
در صورت آماده‌سازی درخواست مجوز (prepare authorization request)، مقدار True است.

خطاهای ممکن:

مثال‌ها:

> gatt.write <data=xx xx ...> [offset] [type]

توصیف‌کننده فایل (file descriptor) و MTU را برای نوشتن دریافت می‌کند. تنها از سوکت‌ها پشتیبانی می‌شود. استفاده از WriteValue قفل خواهد شد و باعث بازگرداندن خطای NotPermitted می‌شود.

برای سرور، مقدار MTU بازگردانده‌شده باید مساوی یا کوچک‌تر از MTU توافق‌شده باشد.

برای کلاینت، تنها با مشخصه‌ای کار می‌کند که دارای ویژگی WriteAcquired باشد که خود متکی بر Flag از نوع write-without-response است.

برای آزادسازی قفل، کلاینت باید توصیف‌کننده فایل را ببندد؛ در صورت قطع اتصال دستگاه، یک سیگنال HUP ایجاد می‌شود.

نکته: توافق بر سر MTU تنها یک بار امکان‌پذیر است و متقارن می‌باشد، بنابراین این متد ممکن است برای تکمیل فرایند تبادل MTU با تاخیر مواجه شود؛ به همین دلیل، در صورت اتصال مجدد، توصیف‌کننده فایل بسته می‌شود چرا که MTU باید دوباره توافق شود.

گزینه‌های ممکن:

شیء دستگاه (فقط سرور).
مقدار MTU مبادله‌شده (فقط سرور).
نوع پیوند (فقط سرور).

مقادیر ممکن:

"BR/EDR"
"LE"

خطاهای ممکن:

مثال‌ها:

> gatt.acquire-write

توصیف‌کننده فایل و MTU را برای اعلان (notify) دریافت می‌کند. تنها از سوکت‌ها پشتیبانی می‌شود.

استفاده از StartNotify قفل خواهد شد و باعث بازگرداندن خطای org.bluez.Error.NotPermitted می‌شود.

برای سرور، مقدار MTU بازگردانده‌شده باید مساوی یا کوچک‌تر از MTU توافق‌شده باشد.

تنها با مشخصه‌ای کار می‌کند که دارای ویژگی NotifyAcquired باشد که خود متکی بر وجود Flag با مقدار "notify" یا "indicate" است و هیچ کلاینت دیگری StartNotify() را فراخوانی نکرده باشد.

اعلان‌ها در طول این رویه فعال هستند، بنابراین StartNotify() نباید فراخوانی شود؛ هرگونه اعلانی از طریق توصیف‌کننده فایل ارسال خواهد شد، از این رو در مدت زمانی که دریافت اعلان (notify) تصاحب شده است، ویژگی Value تحت تاثیر قرار نمی‌گیرد.

برای آزادسازی قفل، کلاینت باید توصیف‌کننده فایل را ببندد؛ در صورت قطع اتصال دستگاه، یک سیگنال HUP ایجاد می‌شود.

در حالت کلاینت، اگر از رویه نشانه (indication) استفاده شود، تاییدیه پس از دریافت به صورت خودکار ایجاد می‌شود؛ برای سرور، اگر توصیف‌کننده فایل قابل نوشتن باشد (POLLOUT)، با دریافت تاییدیه از سوی کلاینت، یک بایت (0x01) در توصیف‌کننده فایل نوشته می‌شود.

نکته: توافق بر سر MTU تنها یک بار امکان‌پذیر است و متقارن می‌باشد، بنابراین این متد ممکن است برای تکمیل فرایند تبادل MTU با تاخیر مواجه شود؛ به همین دلیل، در صورت اتصال مجدد، توصیف‌کننده فایل بسته می‌شود چرا که MTU باید دوباره توافق شود.

گزینه‌های ممکن:

شیء دستگاه (فقط سرور).
مقدار MTU مبادله‌شده (فقط سرور).
نوع پیوند (فقط سرور).

مقادیر ممکن:

"BR/EDR"
"LE"

خطاهای ممکن:

مثال‌ها:

> gatt.acquire-notify

در صورتی که مشخصه از اعلان‌ها یا نشانه‌های مقدار (value notifications or indications) پشتیبانی کند، یک نشست اعلان از این مشخصه را آغاز می‌کند.

خطاهای ممکن:

مثال‌ها:

> gatt.notify <on/off>

نشستی را که قبلاً توسط StartNotify() ایجاد شده بود، متوقف یا لغو می‌کند.

توجه داشته باشید که اعلان‌های یک مشخصه میان نشست‌ها به اشتراک گذاشته می‌شوند، بنابراین فراخوانی StopNotify تنها یک نشست را آزاد خواهد کرد.

خطاهای ممکن:

دریافت مقدار را تایید می‌کند.

خطاهای ممکن:

org.bluez.Error.Failed

شناسه یکتای ۱۲۸ بیتی مشخصه (UUID).

مسیر شیء سرویس GATT که این مشخصه به آن تعلق دارد.

مقدار کش‌شده مشخصه. این ویژگی فقط پس از یک درخواست موفق خواندن و هنگام دریافت اعلان یا نشانه (notification or indication) به‌روزرسانی می‌شود که پس از آن سیگنال PropertiesChanged منتشر خواهد شد.

در صورتی که این مشخصه توسط کلاینتی با استفاده از AcquireWrite تصاحب شده باشد، مقدار True است.

برای کلاینت، در صورتی که فلگ 'write-without-response' تنظیم نشده باشد، این ویژگی حذف می‌شود.

برای سرور، وجود این ویژگی نشان‌دهنده پشتیبانی از AcquireWrite است.

در صورتی که این مشخصه توسط کلاینتی با استفاده از AcquireNotify تصاحب شده باشد، مقدار True است.

برای کلاینت، در صورتی که فلگ 'notify' تنظیم نشده باشد، این ویژگی حذف می‌شود.

برای سرور، وجود این ویژگی نشان‌دهنده پشتیبانی از AcquireNotify است.

در صورتی که اعلان‌ها یا نشانه‌ها (notifications or indications) روی این مشخصه در حال حاضر فعال باشند، مقدار True است.

نحوه استفاده از مقدار مشخصه را تعیین می‌کند. جدول ۳.۵ (میدان بیتی ویژگی‌های مشخصه) و جدول ۳.۸ (میدان بیتی ویژگی‌های گسترش‌یافته مشخصه) در مشخصات اصلی (Core spec) را ببینید.

فلگ‌های "x-notify" و "x-indicate" با اعمال محدودیت‌های نوشتن بر روی توصیف‌گر پیکربندی مشخصه کلاینت (client characteristic configuration descriptor)، دسترسی به اعلان‌ها و نشانه‌ها را محدود می‌کنند.

مقادیر ممکن:

"broadcast"
"read"
"write-without-response"
"write"
"notify"
"indicate"
"authenticated-signed-writes"
"extended-properties"
"reliable-write"
"writable-auxiliaries"
"encrypt-read"
"encrypt-write"
"encrypt-notify" (فقط سرور)
"encrypt-indicate" (فقط سرور)
"encrypt-authenticated-read"
"encrypt-authenticated-write"
"encrypt-authenticated-notify" (فقط سرور)
"encrypt-authenticated-indicate" (فقط سرور)
"secure-read" (فقط سرور)
"secure-write" (فقط سرور)
"secure-notify" (فقط سرور)
"secure-indicate" (فقط سرور)
"authorize"

هندل مشخصه (Characteristic handle).

هندل مشخصه. در صورت وجود در سرور، تلاش می‌شود تا از آن برای تخصیص در پایگاه‌داده استفاده شود که ممکن است ناموفق باشد؛ برای تخصیص خودکار باید از مقدار 0x0000 استفاده شود که باعث می‌شود پس از ثبت، هندلِ تخصیص‌یافته تنظیم گردد.

مقدار MTU مشخصه؛ این مقدار هم برای ReadValue() و هم برای WriteValue() معتبر است، اما هر یک از متدها می‌توانند در صورت پشتیبانی از رویه‌های طولانی (long procedures) استفاده کنند.

اکتبر 2023 BlueZ