'\" t .\" Man page generated from reStructuredText .\" by the Docutils 0.23 manpage writer. . . .nr rst2man-indent-level 0 . .de1 rstReportMargin \\$1 \\n[an-margin] level \\n[rst2man-indent-level] level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] - \\n[rst2man-indent0] \\n[rst2man-indent1] \\n[rst2man-indent2] .. .de1 INDENT .\" .rstReportMargin pre: . RS \\$1 . nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin] . nr rst2man-indent-level +1 .\" .rstReportMargin post: .. .de UNINDENT . RE .\" indent \\n[an-margin] .\" old: \\n[rst2man-indent\\n[rst2man-indent-level]] .nr rst2man-indent-level -1 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]] .in \\n[rst2man-indent\\n[rst2man-indent-level]]u .. .TH "btmon" "1" "April 2021" "BlueZ" "مدیریت سیستم لینوکس" .SH "نام (NAME)" btmon \- مانیتورینگ و رهگیری ترافیک و بسته‌های پروتکل‌های بلوتوث HCI .SH "خلاصه دستور (SYNOPSIS)" .sp \fBbtmon\fP [\fIOPTIONS\fP ...] .SH "توضیحات (DESCRIPTION)" .sp دستور btmon(1) دسترسی به زیرساخت مانیتورینگ زیرسیستم بلوتوث را برای خواندن رهگیری‌های (traces) پروتکل HCI فراهم می‌کند. .SH "گزینه‌ها (OPTIONS)" .INDENT 0.0 .TP .BI \-r \ FILE\fR,\fB \ \-\-read \ FILE خواندن ردگیری‌ها (traces) با قالب btsnoop از \fIFILE\fP\&. .TP .BI \-w \ FILE\fR,\fB \ \-\-write \ FILE ذخیره ردگیری‌ها با قالب btsnoop در \fIFILE\fP\&. .TP .BI \-a \ FILE\fR,\fB \ \-\-analyze \ FILE تحلیل ردگیری‌ها با قالب btsnoop از \fIFILE\fP\&. این گزینه دستگاه‌های یافت‌شده در \fIFILE\fP را به همراه بسته‌های آن‌ها بر اساس نوع نمایش می‌دهد. اگر gnuplot روی سیستم نصب باشد، برای رسم نمودار تاخیر زمانی بسته‌ها نیز تلاش می‌کند. .TP .BI \-s \ SOCKET\fR,\fB \ \-\-server \ SOCKET راه‌اندازی سوکت سرور مانیتور. .TP .BI \-p \ PRIORITY\fR,\fB \ \-\-priority \ PRIORITY نمایش لاگ‌های کاربر تنها با اولویت مشخص‌شده یا پایین‌تر. .UNINDENT .TS box center; l|l. T{ \fIاولویت (PRIORITY)\fP T} T{ نام (NAME) T} _ T{ \fB3\fP T} T{ خطا (Error) T} _ T{ \fB4\fP T} T{ هشدار (Warning) T} _ T{ \fB6\fP T} T{ اطلاعات (پیش‌فرض) T} _ T{ \fB7\fP T} T{ اشکال‌زدایی (Debug). می‌توان از \fBdebug\fP نیز استفاده کرد. T} .TE .INDENT 0.0 .TP .BI \-i \ NUM\fR,\fB \ \-\-index \ NUM تنها کنترل‌کننده مشخص‌شده را نمایش می‌دهد. \fIhciNUM\fP نیز قابل قبول است. این گزینه برای ثبت و رهگیری ترافیک از یک کنترل‌کننده خاص در هنگام وجود چندین کنترل‌کننده کاربرد دارد. .TP .BI \-d \ TTY\fR,\fB \ \-\-tty \ TTY خواندن داده‌ها از \fITTY\fP\&. .TP .BI \-B \ SPEED\fR,\fB \ \-\-rate \ SPEED تنظیم سرعت TTY. مقدار پیش‌فرض \fISPEED\fP برابر 115300 است. .TP .BI \-V \ COMPID\fR,\fB \ \-\-vendor \ COMPID تنظیم شناسه پیش‌فرض شرکت سازنده. \fICOMPID\fP یک شماره یکتا است که توسط Bluetooth SIG به شرکت‌های عضو اختصاص داده می‌شود و در وب‌سایت Bluetooth SIG قابل جستجو و مشاهده است. .sp برای نمونه، شناسه اینتل (Intel) برابر 2 و ریالتک (Realtek) برابر 93 است. .TP .B \-M\fP,\fB \-\-mgmt باز کردن کانال برای رویدادهای مدیریتی (mgmt). .TP .B \-K\fP,\fB \-\-kernel باز کردن kmsg برای پیام‌های هسته (kernel). .TP .B \-t\fP,\fB \-\-time نمایش زمان به جای افست زمانی (فاصله زمانی از شروع). .TP .B \-T\fP,\fB \-\-date نمایش اطلاعات تاریخ و زمان به جای افست زمانی. .TP .B \-N\fP,\fB \-\-no\-time عدم نمایش کامل برچسب و افست زمانی. .TP .B \-S\fP,\fB \-\-sco تخلیه (Dump) ترافیک صوتی SCO با قالب هگزادسیمال خام. .TP .B \-A\fP,\fB \-\-a2dp تخلیه ترافیک استریم A2DP با قالب هگزادسیمال خام. .TP .B \-I\fP,\fB \-\-iso تخلیه ترافیک استریم همگام (ISO) با قالب هگزادسیمال خام. برای مشاهده داده‌های همگام LE Audio در خروجی مورد نیاز است. .TP .BI \-E \ IP\fR,\fB \ \-\-ellisys \ IP ارسال تزریق HCI الیسیس (Ellisys HCI Injection). .TP .B \-P\fP,\fB \-\-no\-pager غیرفعال کردن استفاده از پیجر (مانند less) هنگام خواندن فایل لاگ. .TP .BI \-J \ OPTIONS\fR,\fB \ \-\-jlink \ OPTIONS خواندن داده‌ها از RTT. هر گزینه بدون فاصله و با کاما (,) جدا می‌شود. .UNINDENT .TS box center; l|l. T{ \fIگزینه‌ها (OPTIONS)\fP T} T{ توضیحات (Description) T} _ T{ \fBDEVICE\fP T} T{ اجباری. تنظیم دستگاه هدف. T} _ T{ \fBSERIALNO\fP T} T{ (اختیاری) تنظیم شماره سریال USB. پیش‌فرض \fB0\fP است. T} _ T{ \fBINTERFACE\fP T} T{ (اختیاری) رابط هدف. پیش‌فرض \fBswd\fP است. T} _ T{ \fBSPEED\fP T} T{ (اختیاری) تنظیم سرعت رابط هدف بر حسب کیلوهرتز (kHz). پیش‌فرض \fB1000\fP است. T} .TE .INDENT 0.0 .TP .BI \-R \ OPTIONS\fR,\fB \ \-\-rtt \ OPTIONS پارامترهای بلوک کنترل RTT. هر گزینه بدون فاصله و با کاما (,) جدا می‌شود. .UNINDENT .TS box center; l|l. T{ \fIگزینه‌ها (OPTIONS)\fP T} T{ توضیحات (Description) T} _ T{ \fBADDRESS\fP T} T{ (اختیاری) آدرس بافر RTT. پیش‌فرض \fB0x00\fP است. T} _ T{ \fBAREA\fP T} T{ (اختیاری) اندازه محدوده برای جستجو در بافر RTT. پیش‌فرض \fB0\fP است. T} _ T{ \fBNAME\fP T} T{ (اختیاری) نام بافر. پیش‌فرض \fBbtmonitor\fP است. T} .TE .INDENT 0.0 .TP .BI \-C \ WIDTH\fR,\fB \ \-\-columns \ WIDTH عرض خروجی در صورتی که خروجی یک ترمینال نباشد. .TP .BI \-c \ MODE\fR,\fB \ \-\-color \ MODE تنظیم رنگ خروجی. مقادیر ممکن برای \fIMODE\fP عبارتند از: \fBauto|always|never\fP\&. .sp مقدار پیش‌فرض \fBauto\fP است. .TP .B \-v\fP,\fB \-\-version نمایش نسخه .TP .B \-h\fP,\fB \-\-help نمایش گزینه‌های راهنما .UNINDENT .SH "خواندن خروجی (READING THE OUTPUT)" .sp خروجی btmon به صورت جریانی از فریم‌ها سازمان‌دهی شده است که هر کدام نشان‌دهنده یک رویداد منفرد در زیرسیستم بلوتوث هستند. درک قالب خروجی برای عیب‌یابی و اشکال‌زدایی مشکلات بلوتوث ضروری است. .SS "پیشوندهای خطوط (Line Prefixes)" .sp هر فریم با یک پیشوند تک‌نویسه‌ای شروع می‌شود که منبع و نوع آن را مشخص می‌کند: .TS box center; l|l|l. T{ پیشوند (Prefix) T} T{ مفهوم (Meaning) T} T{ توضیحات (Description) T} _ T{ \fB<\fP T} T{ \fBارسال دستور / داده HCI (HCI Command / Data TX)\fP T} T{ ارسال‌شده از میزبان به کنترل‌کننده (خروجی). دستورات HCI، داده‌های ACL/SCO/ISO ارسال‌شده به کنترل‌کننده. T} _ T{ \fB>\fP T} T{ \fBدریافت رویداد / داده HCI (HCI Event / Data RX)\fP T} T{ دریافت‌شده از کنترل‌کننده به میزبان (ورودی). رویدادهای HCI، داده‌های ACL/SCO/ISO دریافت‌شده از کنترل‌کننده. T} _ T{ \fB@\fP T} T{ \fBترافیک مدیریتی (Management traffic)\fP T} T{ دستورات و رویدادهای رابط مدیریتی (MGMT) بین bluetoothd و لایه مدیریتی هسته (kernel). T} _ T{ \fB=\fP T} T{ \fBیادداشت‌های سیستمی (System notes)\fP T} T{ توضیحات و یادداشت‌های سطح سیستم: اطلاعات هسته، تغییرات ایندکس، پیام‌های لاگ فرایندها، و سیگنال‌های D\-Bus. T} .TE .SS "ترافیک HCI (HCI Traffic) (\fB<\fP و \fB>\fP)" .sp فریم‌های HCI نشان‌دهنده ارتباط واقعی بین نرم‌افزار میزبان و سخت‌افزار کنترل‌کننده بلوتوث هستند. .sp \fBکالبدشکافی یک خط دستور HCI\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Reset (0x03|0x0003) plen 0 #5 [hci0] 12:35:01.843185 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Timestamp │ │ │ │ │ │ └─ Controller │ │ │ │ │ └─ Frame number │ │ │ │ └─ Parameter length (bytes) │ │ │ └─ Full opcode (16\-bit) │ │ └─ OGF|OCF (Opcode Group / Command Field) │ └─ Command name (human\-readable) └─ Direction: < = Host to Controller (outgoing) .EE .UNINDENT .UNINDENT .sp \fBکالبدشکافی یک خط رویداد HCI\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: Command Complete (0x0e) plen 4 #6 [hci0] 12:35:01.864922 │ │ │ │ │ │ │ │ │ │ │ └─ Timestamp │ │ │ │ └─ Controller │ │ │ └─ Frame number │ │ └─ Parameter length │ └─ Event code │ └─ Direction: > = Controller to Host (incoming) .EE .UNINDENT .UNINDENT .sp جهت \fB<\fP به این معنی است که میزبان در حال \fBارسال\fP به کنترل‌کننده است (دستورات و داده‌ها). جهت \fB>\fP به این معنی است که کنترل‌کننده در حال \fBارسال\fP به میزبان است (رویدادها و داده‌ها). از دیدگاه کنترل‌کننده به این موضوع نگاه کنید: \fB<\fP ورودی به کنترل‌کننده است و \fB>\fP خروجی صادر شده از آن است. .sp \fBدستورات HCI با پارامتر\fP با خطوط جزئیات دارای تورفتگی همراه هستند: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Set Extende.. (0x08|0x0039) plen 2 #1 [hci0] 12:35:01.738352 Extended advertising: Disabled (0x00) Number of sets: Disable all sets (0x00) .EE .UNINDENT .UNINDENT .sp \fBپاسخ‌های رویداد HCI\fP به دستوری که تکمیل می‌کنند ارجاع می‌دهند: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: Command Complete (0x0e) plen 4 #6 [hci0] 12:35:01.864922 Reset (0x03|0x0003) ncmd 2 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp در اینجا \fBncmd 2\fP نشان می‌دهد که کنترل‌کننده می‌تواند ۲ دستور دیگر را بپذیرد (کنترل جریان HCI یا flow control). بدنه دارای تورفتگی دستوری را که این رویداد تکمیل می‌کند و وضعیت نتیجه را نشان می‌دهد. .sp \fBفرا رویدادهای LE (LE Meta Events)\fP شامل یک نوع زیررویداد (subevent) هستند: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 31 #487 [hci0] 12:36:18.974201 LE Enhanced Connection Complete (0x0a) Status: Success (0x00) Handle: 2048 Role: Peripheral (0x01) Peer address type: Public (0x00) Peer address: AA:BB:CC:DD:EE:FF (OUI Company) Connection interval: 60.00 msec (0x0030) Connection latency: 0 (0x0000) Supervision timeout: 9600 msec (0x03c0) .EE .UNINDENT .UNINDENT .sp \fBداده‌های ACL\fP ترافیک صفحه داده (data plane) را همراه با هندل (handle) و رمزگشایی پروتکل نشان می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX < LE\-ACL: Handle 2048 [66:B0:26:F1:D3:BC] [1/6] flags 0x00 dlen 16 #493 [hci0] 12:36:18.977915 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Timestamp │ │ │ │ │ │ │ │ └─ Controller │ │ │ │ │ │ │ └─ Frame number │ │ │ │ │ │ └─ Data length │ │ │ │ │ └─ flags │ │ │ │ └─ Buffer tracking (optional) │ │ │ └─ Peer address (optional) │ │ └─ Handle number │ └─ Connection\-type\-aware label (e.g. BR\-ACL, LE\-ACL, BR\-SCO, LE\-ISO) └─ Direction marker: \(aq<\(aq = host\->controller (TX), \(aq>\(aq = controller\->host (RX) .EE .UNINDENT .UNINDENT .sp داده‌های ACL به طور خودکار به پروتکل‌های لایه‌های بالاتر رمزگشایی می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX < LE\-ACL: Handle 2048 [2/6] flags 0x00 dlen 7 #494 [hci0] 12:36:18.978488 ATT: Exchange MTU Request (0x02) len 2 Client RX MTU: 517 > LE\-ACL: Handle 2048 flags 0x02 dlen 11 #497 [hci0] 12:36:19.000048 SMP: Pairing Request (0x01) len 6 IO capability: NoInputNoOutput (0x03) OOB data: Authentication data not present (0x00) Authentication requirement: Bonding, MITM, SC, No Keypresses, CT2 (0x2d) Max encryption key size: 16 .EE .UNINDENT .UNINDENT .SS "ترافیک مدیریتی (Management Traffic) (\fB@\fP)" .sp خطوطی که با \fB@\fP شروع می‌شوند ترافیک رابط مدیریتی را نشان می‌دهند \-\- پروتکل ساختاریافته دستور/رویداد بین \fBbluetoothd\fP و لایه مدیریتی هسته (نگاه کنید به \fBdoc/mgmt\-protocol.rst\fP). .sp \fBکالبدشکافی یک خط مدیریتی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Set Powered (0x0005) plen 1 {0x0001} [hci0] 12:35:04.033564 │ │ │ │ │ │ │ │ │ │ │ └─ Timestamp │ │ │ │ └─ Controller │ │ │ └─ MGMT socket ID │ │ └─ Parameter length │ └─ MGMT opcode └─ @ = Management channel .EE .UNINDENT .UNINDENT .sp عبارت \fB{0x0001}\fP شناسه سوکت مدیریتی است \-\- که تمایز بین چندین کلاینت مدیریتی (به عنوان مثال اجرای هم‌زمان bluetoothd و btmgmt) را مشخص می‌کند. .sp \fBMGMT Open/Close\fP زمان اتصال فرایندها به کانال مدیریتی را رهگیری می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Open: bluetoothd (privileged) version 1.23 {0x0001} 12:34:49.881936 @ MGMT Close: bluetoothd {0x0001} 12:35:01.866256 .EE .UNINDENT .UNINDENT .sp این موارد نام فرایند، سطح دسترسی (امتیاز) و نسخه پروتکل را نمایش می‌دهند. .sp \fBدستورات MGMT به همراه پارامترها\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Set Powered (0x0005) plen 1 {0x0001} [hci0] 12:35:04.033564 Powered: Enabled (0x01) .EE .UNINDENT .UNINDENT .sp \fBرویدادهای MGMT\fP (پاسخ‌ها و اعلان‌ها): .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} [hci0] 12:35:04.114789 Set Powered (0x0005) plen 4 Status: Success (0x00) Current settings: 0x004e0ac1 Powered Secure Simple Pairing .EE .UNINDENT .UNINDENT .sp \fBMGMT بدون ایندکس کنترل‌کننده\fP (عملیات‌های سراسری): .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Read Management Ver.. (0x0001) plen 0 {0x0001} 12:35:04.027771 @ MGMT Event: Command Complete (0x0001) plen 6 {0x0001} 12:35:04.027776 .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که عبارتی نظیر \fB[hci0]\fP وجود ندارد \-\- این دستورات در سطح سیستم عمل می‌کنند، نه بر روی یک کنترل‌کننده خاص. .SS "یادداشت‌های سیستمی (System Notes) (\fB=\fP)" .sp خطوطی که با \fB=\fP شروع می‌شوند یادداشت‌ها و حاشیه‌نویسی‌های سطح سیستم هستند که توسط هسته یا توسط فرایندها از طریق کانال مانیتور تزریق می‌شوند. این خطوط ترافیک پروتکل HCI یا MGMT \fBنیستند\fP. .sp \fBاطلاعات هسته (Kernel information)\fP (در هنگام راه‌اندازی نمایش داده می‌شود): .INDENT 0.0 .INDENT 3.5 .sp .EX = Note: Linux version 6.16.0\-rc6\-0903 (x86_64) 12:34:49.881926 = Note: Bluetooth subsystem version 2.22 12:34:49.881930 .EE .UNINDENT .UNINDENT .sp \fBچرخه حیات ایندکس (Index lifecycle)\fP (افزودن/حذف/باز شدن/بسته شدن کنترل‌کننده): .INDENT 0.0 .INDENT 3.5 .sp .EX = New Index: 00:11:22:33:44:55 (Primary,USB,hci0) [hci0] 12:34:49.881932 = Open Index: 00:11:22:33:44:55 [hci0] 12:34:49.881933 = Index Info: 00:11:22:33:44:55 (OUI Company) [hci0] 12:34:49.881934 = Close Index: 00:11:22:33:44:55 [hci0] 12:35:01.865125 .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP \(bu 2 \fBNew Index\fP \-\- یک کنترل‌کننده در هسته ثبت شد .IP \(bu 2 \fBOpen Index\fP \-\- یک کنترل‌کننده فعال شد .IP \(bu 2 \fBIndex Info\fP \-\- اطلاعات شرکت سازنده کنترل‌کننده .IP \(bu 2 \fBClose Index\fP \-\- یک کنترل‌کننده غیرفعال شد .UNINDENT .sp \fBپیام‌های لاگ فرایندها (Process log messages)\fP (خروجی اشکال‌زدایی از bluetoothd و سایر دیمن‌ها): .INDENT 0.0 .INDENT 3.5 .sp .EX = bluetoothd: src/adapter.c:connected_callback() hci0 devic.. 12:36:18.975307 │ │ │ │ │ └─ Timestamp │ └─ Source file, function, and message (may be truncated) └─ Process name .EE .UNINDENT .UNINDENT .sp این خطوط هنگامی که \fBbluetoothd\fP با اشکال‌زدایی فعال (\fB\-d\fP) اجرا شود یا هنگامی که فرایندی در کانال لاگ‌گیری هسته بنویسد، ظاهر می‌شوند. آن‌ها مسیر فایل منبع، نام تابع و پیام لاگ را نشان می‌دهند \-\- که برای پیوند دادن تصمیمات داخلی دیمن با ترافیک HCI پیرامون آن بسیار ارزشمند است. .sp \fBفعالیت D\-Bus (D\-Bus activity)\fP (سیگنال‌ها و فراخوانی‌های متد): .INDENT 0.0 .INDENT 3.5 .sp .EX = bluetoothd: [:1.21220:method_call] > org.freedesktop.DBus.. 12:34:53.912508 = bluetoothd: [:1.21220:method_return] < [#5] 12:34:53.912546 = bluetoothd: [signal] org.freedesktop.DBus.ObjectManager.I.. 12:36:18.975691 .EE .UNINDENT .UNINDENT .sp قالب آن \fB[bus_name:message_type]\fP است که به دنبال آن \fB>\fP (خروجی) یا \fB<\fP (ورودی) می‌آید. توجه داشته باشید که علائم \fB>\fP و \fB<\fP در یادداشت‌های سیستمی D\-Bus نشان‌دهنده جهت پیام D\-Bus هستند، نه جهت HCI. .SS "متاداده‌های سمت راست (Right-Side Metadata)" .sp هر خط دارای متاداده‌هایی است که در انتهای آن راست‌چین شده‌اند. فیلدهای دقیق به نوع خط بستگی دارند: .INDENT 0.0 .INDENT 3.5 .sp .EX ┌─ Main content (left\-aligned, variable width) │ ┌─ Frame # ─┐ ┌Controller┐ ┌─ Timestamp ─┐ │ │ │ │ │ │ │ < HCI Command: Reset (0x03|0x0003) plen 0 #5 [hci0] 12:35:01.843185 > HCI Event: Command Complete (0x0e) plen 4 #6 [hci0] 12:35:01.864922 @ MGMT Command: Set Powered (0x0005) plen 1 {0x0001} [hci0] 12:35:04.033564 = Note: Linux version 6.16.0\-rc6\-0903 (x86_64) 12:34:49.881926 = Open Index: 00:11:22:33:44:55 [hci0] 12:34:49.881933 .EE .UNINDENT .UNINDENT .sp \fBشماره فریم (Frame number)\fP (\fB#N\fP): یک شمارنده ترتیبی فقط برای فریم‌های HCI. برای شناسایی بسته‌های خاص در یک رهگیری کاربرد دارد. فقط ترافیک HCI (\fB<\fP و \fB>\fP) شماره فریم دریافت می‌کند \-\- MGMT (\fB@\fP) و یادداشت‌های سیستمی (\fB=\fP) شماره فریم ندارند. .sp \fBکنترل‌کننده (Controller)\fP (\fB[hciN]\fP): مشخص می‌کند که فریم متعلق به کدام کنترل‌کننده بلوتوث است. برای عملیات‌های سراسری (یادداشت‌های هسته، دستورات MGMT بدون ایندکس کنترل‌کننده) وجود ندارد. .sp \fBشناسه سوکت MGMT (MGMT socket ID)\fP (\fB{0xNNNN}\fP): در خطوط \fB@\fP به جای شماره فریم نمایش داده می‌شود. مشخص می‌کند کدام سوکت مدیریتی (فرایند) دستور را ارسال کرده است. .sp \fBبرچسب زمانی (Timestamp)\fP: همیشه راست‌ترین فیلد است. قالب آن به گزینه استفاده‌شده در خط فرمان بستگی دارد: .TS box center; l|l|l. T{ گزینه (Option) T} T{ قالب (Format) T} T{ مثال (Example) T} _ T{ \fI(پیش‌فرض)\fP T} T{ ثانیه از زمان شروع رهگیری T} T{ \fB0.881932\fP T} _ T{ \fB\-t\fP T} T{ زمان روز (HH:MM:SS.usec) T} T{ \fB12:35:01.843185\fP T} _ T{ \fB\-T\fP T} T{ تاریخ و زمان کامل T} T{ \fB2026\-01\-13 12:34:49.881926\fP T} .TE .SS "خطوط جزئیات دارای تورفتگی (Indented Detail Lines)" .sp خطوطی که زیر سرایند فریم دارای تورفتگی هستند، حاوی بار داده (payload) رمزگشایی‌شده آن فریم می‌باشند. سطح تورفتگی لایه پروتکل را مشخص می‌کند: .INDENT 0.0 .IP \(bu 2 \fBسطح اول\fP (۶ فاصله): بار داده مستقیم فریم HCI/MGMT .IP \(bu 2 \fBسطح دوم\fP (۸ فاصله): فیلدهای رمزگشایی‌شده درون بار داده .IP \(bu 2 \fBسطح سوم\fP (۱۰+ فاصله): داده‌های پروتکل تودرتو (به عنوان مثال L2CAP درون ACL، یا ATT درون L2CAP) .UNINDENT .sp مثالی از لایه‌بندی پروتکل در داده‌های ACL: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL: Handle 2048 flags 0x02 dlen 11 #497 [hci0] 12:36:19.000048 SMP: Pairing Request (0x01) len 6 ← L2CAP/SMP layer IO capability: NoInputNoOutput (0x03) ← SMP fields OOB data: Authentication data not present (0x00) Authentication requirement: Bonding, MITM, SC (0x2d) Max encryption key size: 16 .EE .UNINDENT .UNINDENT .SS "نکات برچسب زمانی (Timestamp Notes)" .sp هنگام خواندن فایل‌های btsnoop با \fB\-t\fP یا \fB\-T\fP، برچسب‌های زمانی نشان‌دهنده زمان واقعی (wall\-clock time) ثبت‌شده در فایل btsnoop هستند. دقت به منبع بستگی دارد: .INDENT 0.0 .IP \(bu 2 \fBرهگیری زنده (Live capture)\fP (کانال مانیتور \fBbtmon\fP): دقت میکروثانیه از هسته. .IP \(bu 2 \fBفایل‌های btsnoop\fP: قالب btsnoop برچسب‌های زمانی را به صورت میکروثانیه از مبدا تاریخ (epoch) ذخیره می‌کند، بنابراین دقت کامل میکروثانیه حفظ می‌شود. صفرهای انتهایی در نمایش (مانند \fB14:38:46.589000\fP) نشان می‌دهند که منبع اصلی رهگیری دارای دقت میلی‌ثانیه بوده است. .UNINDENT .sp حالت پیش‌فرض برچسب زمانی، ثانیه‌های سپری‌شده از اولین بسته در ردگیری را نشان می‌دهد که برای اندازه‌گیری فواصل زمانی بین رویدادها بدون نیاز به دانستن زمان مطلق کاربرد دارد. .SS "شماره فریم در مقایسه با شماره خط (Frame Numbers vs Line Numbers)" .sp نرم‌افزار btmon \fBشماره‌های فریم\fP ترتیبی (\fB#N\fP) را به بسته‌های HCI اختصاص می‌دهد. این‌ها شناسه‌های پایداری برای بسته‌های خاص صرف‌نظر از قالب‌بندی خروجی هستند. با این حال، هنگام پردازش خروجی متنی btmon با ابزارهایی مانند \fBgrep\fP یا \fBsed\fP، واحد مورد نظر \fBشماره خطوط\fP در فایل خروجی است. این دو ارتباطی به هم ندارند: .INDENT 0.0 .IP \(bu 2 یک فریم منفرد ممکن است چندین خط خروجی تولید کند (سرایند + فیلدهای رمزگشایی‌شده). .IP \(bu 2 شماره‌های فریم فقط برای ترافیک HCI (\fB<\fP و \fB>\fP) اعمال می‌شوند. ترافیک MGMT (\fB@\fP) و یادداشت‌های سیستمی (\fB=\fP) شماره فریم ندارند. .IP \(bu 2 هنگام ارجاع به بسته‌های خاص، شماره فریم‌ها (\fB#487\fP) را به شماره خطوط ترجیح دهید، زیرا شماره‌های فریم در عرض‌های مختلف ترمینال و گزینه‌های قالب‌بندی گوناگون پایدار و بدون تغییر باقی می‌مانند. .UNINDENT .SS "راهنمای عملی خواندن خروجی (Practical Reading Guide)" .sp \fBجفت معمول دستور\-پاسخ\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Read BD ADDR (0x04|0x0009) plen 0 #13 [hci0] 12:35:04.057866 > HCI Event: Command Complete (0x0e) plen 10 #14 [hci0] 12:35:04.058750 Read BD ADDR (0x04|0x0009) ncmd 1 Status: Success (0x00) Address: 00:11:22:33:44:55 (OUI Company) .EE .UNINDENT .UNINDENT .sp این مورد را به این صورت بخوانید: در فریم #13، میزبان از کنترل‌کننده آدرس بلوتوث آن را درخواست کرد. در فریم #14، کنترل‌کننده با موفقیت و آدرس \fB00:11:22:33:44:55\fP پاسخ داد. این پاسخ حدود 0.9 میلی‌ثانیه بعد دریافت شد. .sp \fBجریان معمول MGMT که ارتباط با HCI را نشان می‌دهد\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Set Powered (0x0005) plen 1 {0x0001} [hci0] 12:35:04.033564 Powered: Enabled (0x01) < HCI Command: Reset (0x03|0x0003) plen 0 #7 [hci0] 12:35:04.033907 > HCI Event: Command Complete (0x0e) plen 4 #8 [hci0] 12:35:04.055753 Reset (0x03|0x0003) ncmd 2 Status: Success (0x00) ... (more HCI commands to configure the controller) ... @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} [hci0] 12:35:04.114789 Set Powered (0x0005) plen 4 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp این مورد را به این صورت بخوانید: سرویس bluetoothd دستور \fBSet Powered\fP را از طریق MGMT ارسال کرد. هسته این دستور را به دنباله‌ای از دستورات HCI (ابتدا Reset، سپس پیکربندی) ترجمه کرد. پس از تکمیل تمام دستورات HCI، هسته رویداد MGMT Command Complete را به bluetoothd برگرداند. .sp \fBجریان برقراری اتصال\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 31 #487 [hci0] 12:36:18.974201 LE Enhanced Connection Complete (0x0a) Status: Success (0x00) Handle: 2048 Role: Peripheral (0x01) Peer address: AA:BB:CC:DD:EE:FF (OUI Company) @ MGMT Event: Device Connec.. (0x000b) plen 13 {0x0001} [hci0] 12:36:18.974319 = bluetoothd: src/adapter.c:connected_callback() hci0 devic.. 12:36:18.975307 < ACL: Handle 2048 [1.. flags 0x00 dlen 16 #493 [hci0] 12:36:18.977915 LE L2CAP: Connection Parameter Update Request (0x12) ident 1 len 8 < ACL: Handle 2048 [2/6] flags 0x00 dlen 7 #494 [hci0] 12:36:18.978488 ATT: Exchange MTU Request (0x02) len 2 Client RX MTU: 517 .EE .UNINDENT .UNINDENT .sp این مورد را به این صورت بخوانید: کنترل‌کننده یک اتصال جدید LE را گزارش کرد (رویداد HCI). هسته این رویداد را به عنوان رویداد MGMT Device Connected به لایه‌های بالاتر هدایت کرد. سپس bluetoothd تابع \fBconnected_callback()\fP خود را لاگ کرد. پس از آن تبادل داده آغاز شد \-\- یک به‌روزرسانی پارامتر L2CAP و مذاکره ATT MTU از طریق اتصال جدید ACL. .SH "حالت تحلیل (ANALYZE MODE)" .sp گزینه \fB\-a\fP (\fB\-\-analyze\fP) یک فایل btsnoop را خوانده و به جای ردگیری کامل رمزگشایی‌شده، یک خلاصه آماری تولید می‌کند. .SS "نحوه استفاده (Usage)" .INDENT 0.0 .INDENT 3.5 .sp .EX $ btmon \-a hcidump.log .EE .UNINDENT .UNINDENT .SS "محتویات خروجی (Output Contents)" .sp حالت تحلیل، برای هر کنترل‌کننده یافت‌شده در رهگیری، موارد زیر را گزارش می‌کند: .INDENT 0.0 .IP \(bu 2 \fBتعداد بسته‌ها (Packet counts)\fP: کل بسته‌های HCI تفکیک‌شده بر اساس نوع (دستورات، رویدادها، ACL، SCO، ISO، تشخیص عیب شرکت سازنده، یادداشت‌های سیستمی، لاگ‌های کاربر، پیام‌های کنترلی). .IP \(bu 2 \fBآمار به ازای هر اتصال (Per\-connection statistics)\fP: برای هر هندل اتصال یافت‌شده: .INDENT 2.0 .IP \(bu 2 نوع اتصال (BR\-ACL, LE\-ACL, BR\-SCO, BR\-ESCO, LE\-ISO) .IP \(bu 2 آدرس دستگاه .IP \(bu 2 تعداد بسته‌های TX و RX و تعداد تکمیل‌ها .IP \(bu 2 آمار تاخیر زمانی (حداقل، حداکثر، میانه) به میلی‌ثانیه .IP \(bu 2 آمار اندازه بسته (حداقل، حداکثر، میانگین) به بایت (اکتت) .IP \(bu 2 تخمین پهنای باند (Throughput) بر حسب کیلوبیت بر ثانیه (Kb/s) .UNINDENT .IP \(bu 2 \fBآمار به ازای هر کانال (Per\-channel statistics)\fP: برای هر کانال L2CAP در یک اتصال، همان آمارهای بسته/تاخیر زمانی/اندازه. .IP \(bu 2 .INDENT 2.0 .TP .B \fBنمودارهای تاخیر زمانی (Latency plots)\fP: اگر \fBgnuplot\fP نصب باشد، نمودارهای توزیع تاخیر زمانی با هنر اسکی (ASCII\-art) در ترمینال رسم می‌شوند. .UNINDENT .UNINDENT .SH "کدهای خطای پروتکل (PROTOCOL ERROR CODES)" .sp برنامه btmon کدهای خطا را از چندین لایه پروتکل به‌طور خودکار رمزگشایی می‌کند\&. این بخش یک مرجع راهنما برای تفسیر خطاهای دیده‌شده در لایه‌های ATT ،SMP و L2CAP ارائه می‌دهد\&. .SS "کدهای خطای ATT (ATT Error Codes)" .sp خطاهای ATT در PDUهای \fBError Response (0x01)\fP ظاهر می‌شوند\&. فراتر از زمینه کشف GATT (جایی که \fBAttribute Not Found\fP امری عادی است)، این خطاها نشان‌دهنده مشکلات واقعی هستند: .TS box center; l|l|l. T{ کد T} T{ خطا T} T{ مفهوم تشخیصی T} _ T{ 0x01 T} T{ Invalid Handle T} T{ کلاینت از یک دستگیره (handle) استفاده کرده که وجود ندارد T} _ T{ 0x02 T} T{ Read Not Permitted T} T{ مشخصه (Characteristic) اجازه خواندن را نمی‌دهد T} _ T{ 0x03 T} T{ Write Not Permitted T} T{ مشخصه اجازه نوشتن را نمی‌دهد T} _ T{ 0x05 T} T{ Authentication Insufficient T} T{ عملیات نیازمند یک پیوند (bond) احراز هویت‌شده (محافظت‌شده در برابر MITM) است\&. در صورت عدم پیوند قبلی، جفت‌سازی SMP را فعال می‌کند\&. T} _ T{ 0x06 T} T{ Request Not Supported T} T{ سرور از این عملیات ATT پشتیبانی نمی‌کند T} _ T{ 0x07 T} T{ Invalid Offset T} T{ آفست خواندن/نوشتن داده‌های حجیم (blob) از طول صفت (attribute) فراتر می‌رود T} _ T{ 0x08 T} T{ Authorization Insufficient T} T{ سرور نیازمند مجوز دسترسی (authorization) اضافی است T} _ T{ 0x09 T} T{ Prepare Queue Full T} T{ تعداد بیش از حدی از نوشتن‌های آماده‌شده در صف قرار گرفته است T} _ T{ 0x0a T} T{ Attribute Not Found T} T{ هیچ صفتی در محدوده درخواستی یافت نشد\&. پایان عادی برای روندهای کشف GATT\&. T} _ T{ 0x0b T} T{ Attribute Not Long T} T{ صفت نمی‌تواند با Read Blob خوانده شود T} _ T{ 0x0c T} T{ Insufficient Encryption Key Size T} T{ کلید رمزنگاری بیش از حد کوتاه است T} _ T{ 0x0d T} T{ Invalid Attribute Value Length T} T{ طول مقدار نوشته‌شده برای این صفت نادرست است T} _ T{ 0x0e T} T{ Unlikely Error T} T{ خطای بعید عمومی (Generic unlikely error) T} _ T{ 0x0f T} T{ Insufficient Encryption T} T{ پیوند رمزنگاری نشده است\&. راه‌اندازی رمزنگاری را فعال می‌کند\&. T} _ T{ 0x10 T} T{ Unsupported Group Type T} T{ نوع صفت، یک نوع گروه‌بندی معتبر نیست T} _ T{ 0x11 T} T{ Insufficient Resources T} T{ سرور دچار کمبود منابع شده است T} _ T{ 0x12 T} T{ Value Not Allowed T} T{ مقدار در محدوده مجاز قرار ندارد T} _ T{ 0x80\-0x9f T} T{ Application Error T} T{ خطای مختص برنامه کاربردی؛ معنای آن به پروفایل/سرویس بستگی دارد\&. پروتکل ASCS از این خطاها برای خطاهای خاص ASE استفاده می‌کند\&. T} _ T{ 0xfc T} T{ Write Request Rejected T} T{ درخواست نوشتن رد شد (CSIP, ASCS) T} _ T{ 0xfd T} T{ CCC Descriptor Improperly Configured T} T{ توصیف‌گر CCC باید پیش از برخی عملیات خاص فعال شود T} _ T{ 0xfe T} T{ Procedure Already in Progress T} T{ روند دیگری در حال حاضر در حال اجرا است T} _ T{ 0xff T} T{ Out of Range T} T{ مقدار خارج از محدوده معتبر است T} .TE .SS "نتایج پاسخ اتصال L2CAP (L2CAP Connection Response Results)" .sp پاسخ اتصال L2CAP و پاسخ اتصال LE شامل یک کد نتیجه هستند: .TS box center; l|l|l. T{ کد T} T{ نتیجه T} T{ مفهوم تشخیصی T} _ T{ 0x0000 T} T{ Connection successful T} T{ کانال به‌طور عادی برقرار شد T} _ T{ 0x0001 T} T{ Connection pending T} T{ اتصال در حال انجام است (فقط BR/EDR) T} _ T{ 0x0002 T} T{ Connection refused \- PSM not supported T} T{ دستگاه راه دور سروری برای این پروتکل ندارد T} _ T{ 0x0003 T} T{ Connection refused \- security block T} T{ الزامات امنیتی برآورده نشده‌اند T} _ T{ 0x0004 T} T{ Connection refused \- no resources T} T{ منابع کانال دستگاه راه دور به پایان رسیده است T} _ T{ 0x0005 T} T{ Connection refused \- invalid Source CID T} T{ شناسه CID مبدأ نامعتبر است یا در حال حاضر استفاده می‌شود T} _ T{ 0x0006 T} T{ Connection refused \- Source CID already allocated T} T{ تداخل CID (برخورد شناسه کانال) T} _ T{ 0x0007 T} T{ Connection refused \- unacceptable parameters T} T{ مبتنی بر اعتبار LE: پارامترهای MTU ،MPS یا اعتبارات غیرقابل قبول هستند T} _ T{ 0x0008 T} T{ Connection refused \- invalid parameters T} T{ مقادیر پارامترها نامعتبر هستند T} _ T{ 0x0009 T} T{ Connection refused \- insufficient authentication T} T{ احراز هویت انجام نشده است T} _ T{ 0x000a T} T{ Connection refused \- insufficient authorization T} T{ مجوز دسترسی صادر نشده است T} _ T{ 0x000b T} T{ Connection refused \- insufficient encryption key size T} T{ کلید رمزنگاری بیش از حد کوتاه است T} _ T{ 0x000c T} T{ Connection refused \- insufficient encryption T} T{ پیوند رمزنگاری نشده است T} .TE .SS "خودکارسازی تشخیص خطا (Automating Error Detection)" .sp \fBیافتن تمام خطاهای ATT\fP (به استثنای خاتمه عادی فرایند کشف): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqError Response\(dq output.txt .EE .UNINDENT .UNINDENT .sp سپس بررسی کنید که آیا هر خطا مربوط به \fBAttribute Not Found (0x0a)\fP درون یک دنباله کشف است (عادی) یا یک کد خطای متفاوت (مشکل). .sp \fBیافتن تمام خطاهای مرتبط با احراز هویت/رمزنگاری\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAuthentication Insufficient\e|Insufficient Encryption\e|Insufficient Security\e|security block\(dq output.txt .EE .UNINDENT .UNINDENT .sp این خطاها نشان می‌دهند که پیوند نیازمند جفت‌سازی یا رمزنگاری است\&. بررسی کنید که آیا جفت‌سازی SMP در ادامه رخ می‌دهد یا خیر\&. .sp \fBیافتن تمام موارد رد کانال L2CAP\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqConnection refused\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBهمبستگی خطاهای میان‌لایه‌ای (Cross\-layer error correlation):\fP .sp خطاها اغلب به صورت آبشاری در میان لایه‌ها منتقل می‌شوند\&. الگوهای متداول: .INDENT 0.0 .IP 1. 3 خطای ATT \fBInsufficient Encryption\fP (0x0f) → راه‌اندازی HCI \fBLE Start Encryption\fP → موفقیت \fBEncryption Change\fP → تلاش مجدد برای عملیات ATT .IP 2. 3 خطای ATT \fBAuthentication Insufficient\fP (0x05) → راه‌اندازی SMP \fBPairing Request\fP → تکمیل جفت‌سازی → تلاش مجدد برای عملیات ATT .IP 3. 3 رویداد SMP \fBPairing Failed\fP → رویداد \fBDisconnect Complete\fP با دلیل \fBAuthentication Failure (0x05)\fP .IP 4. 3 پیام L2CAP \fBConnection refused \- security block\fP → راه‌اندازی جفت‌سازی SMP .UNINDENT .SH "جریان‌های پروتکل (PROTOCOL FLOWS)" .\" This file is included by btmon.rst. . .SH "دنباله راه‌اندازی اولیه HCI (HCI INITIALIZATION SEQUENCE)" .sp هر رهگیری btsnoop که راه‌اندازی کنترل‌کننده را ثبت می‌کند، با یک بلوک فشرده از دستورات و رویدادهای HCI آغاز می‌شود\&. این زیرسیستم بلوتوث هسته است که کنترل‌کننده را از طریق یک دنباله چندمرحله‌ای تعریف‌شده در \fBnet/bluetooth/hci_sync.c\fP راه‌اندازی اولیه می‌کند\&. درک این دنباله کمک می‌کند تا ترافیک عادی راه‌اندازی اولیه را از مشکلات سطح برنامه تفکیک کنید\&. .SS "نمای کلی (Overview)" .sp هسته، یک کنترل‌کننده بلوتوث را پس از باز کردن دستگاه HCI در چهار مرحله راه‌اندازی اولیه می‌کند\&. هر مرحله دسته‌ای از دستورات HCI را ارسال کرده و پیش از رفتن به مرحله بعد، منتظر تکمیل آن‌ها می‌ماند\&. زنجیره فراخوانی کامل به صورت زیر است: .INDENT 0.0 .INDENT 3.5 .sp .EX hci_power_on_sync └─ hci_dev_open_sync └─ hci_dev_init_sync ├─ hci_dev_setup_sync (driver setup + quirks) └─ hci_init_sync ├─ Stage 1: Reset + identity ├─ Stage 2: Capabilities + buffer sizes ├─ Stage 3: Event masks + policy └─ Stage 4: Final configuration .EE .UNINDENT .UNINDENT .sp پس از تکمیل هر چهار مرحله، یک فاز پس از راه‌اندازی اولیه (\fBhci_powered_update_sync\fP) پارامترهای زمان اجرا مانند SSP، تبلیغات (advertising) و تنظیمات پویش (scan) را پیکربندی می‌کند\&. .sp برای دستگاه‌های پیکربندی‌نشده (مانند کنترل‌کننده‌هایی که نیاز به بارگذاری سفت‌افزار یا برنامه‌ریزی آدرس BD دارند)، تنها یک \fBمرحله ۰\fP حداقلی برای شناسایی سخت‌افزار اجرا می‌شود\&. .SS "مرحله ۰: بازنشانی و شناسایی پایه (فقط دستگاه‌های پیکربندی‌نشده) (Stage 0: Reset and Basic Identity (Unconfigured Only))" .sp این مرحله تنها برای کنترل‌کننده‌های پیکربندی‌نشده‌ای اجرا می‌شود که پیش از راه‌اندازی اولیه کامل نیاز به برپایی (setup) دارند\&. .sp \fBدستورات ارسالی:\fP .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Reset\fP T} T{ بازنشانی کنترل‌کننده (در صورت وجود رفتارهای خاص سخت‌افزاری \fBRESET_ON_CLOSE\fP نادیده گرفته می‌شود) T} _ T{ \fBHCI_Read_Local_Version_Information\fP T} T{ خواندن نسخه سخت‌افزار/سفت‌افزار T} _ T{ \fBHCI_Read_BD_ADDR\fP T} T{ خواندن آدرس بلوتوث کنترل‌کننده T} .TE .SS "مرحله ۱: بازنشانی و خواندن ویژگی‌های محلی (Stage 1: Reset and Read Local Features)" .sp کنترل‌کننده را بازنشانی کرده و اطلاعات هویتی و قابلیت‌های اصلی را می‌خواند\&. .sp \fBدستورات ارسالی:\fP .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Reset\fP T} T{ بازنشانی کنترل‌کننده T} _ T{ \fBHCI_Read_Local_Supported_Features\fP T} T{ خواندن بیت‌ماسک ویژگی‌های LMP (شامل BR/EDR ،LE ،SSP و غیره) T} _ T{ \fBHCI_Read_Local_Version_Information\fP T} T{ خواندن نسخه HCI، نسخه LMP و سازنده T} _ T{ \fBHCI_Read_BD_ADDR\fP T} T{ خواندن آدرس عمومی بلوتوث T} .TE .SS "مرحله ۲: خواندن قابلیت‌ها و پیکربندی اولیه (Stage 2: Read Capabilities and Setup)" .sp قابلیت‌های تفصیلی را می‌خواند، ویژگی‌های اصلی را فعال می‌کند و اندازه‌های بافر را می‌خواند\&. این مرحله شامل سه فاز است: دستورات مشترک، دستورات ویژه BR/EDR و دستورات ویژه LE\&. .SS "دستورات مشترک (Common Commands)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Read_Local_Supported_Commands\fP T} T{ خواندن بیت‌ماسک دستورات پشتیبانی‌شده (HCI 1.2 به بالا) T} _ T{ \fBHCI_Write_Simple_Pairing_Mode\fP (enable) T} T{ فعال‌سازی SSP در صورت پشتیبانی و پیکربندی T} _ T{ \fBHCI_Write_Extended_Inquiry_Response\fP (clear) T} T{ پاکسازی داده‌های EIR در صورت غیرفعال بودن SSP T} _ T{ \fBHCI_Write_Inquiry_Mode\fP T} T{ تنظیم حالت پرس‌وجو (RSSI یا Extended، بر اساس ویژگی‌ها) T} _ T{ \fBHCI_Read_Inquiry_Response_Transmit_Power_Level\fP T} T{ خواندن توان ارسال پرس‌وجو (TX) در صورت پشتیبانی T} _ T{ \fBHCI_Read_Local_Extended_Features\fP (page 1) T} T{ خواندن صفحه ۱ از ویژگی‌های گسترش‌یافته (میزبان SSP، میزبان LE و غیره) T} _ T{ \fBHCI_Write_Authentication_Enable\fP T} T{ همگام‌سازی وضعیت احراز هویت با پرچم \fBLINK_SECURITY\fP T} .TE .SS "دستورات BR/EDR (در صورت پشتیبانی از BR/EDR) (BR/EDR Commands)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Read_Buffer_Size\fP T} T{ خواندن اندازه و تعداد بافرهای ACL/SCO T} _ T{ \fBHCI_Read_Class_of_Device\fP T} T{ خواندن رده فعلی دستگاه T} _ T{ \fBHCI_Read_Local_Name\fP T} T{ خواندن نام محلی ذخیره‌شده T} _ T{ \fBHCI_Read_Voice_Setting\fP T} T{ خواندن تنظیمات صوتی SCO (در صورت پشتیبانی) T} _ T{ \fBHCI_Read_Number_of_Supported_IAC\fP T} T{ خواندن تعداد کدهای دسترسی پرس‌وجو (IAC) پشتیبانی‌شده T} _ T{ \fBHCI_Read_Current_IAC_LAP\fP T} T{ خواندن مقادیر فعلی IAC LAP T} _ T{ \fBHCI_Set_Event_Filter\fP (clear all) T} T{ پاکسازی تمام فیلترهای رویداد ذخیره‌شده T} _ T{ \fBHCI_Write_Connection_Accept_Timeout\fP T} T{ تنظیم مهلت زمانی پذیرش اتصال (حدود ۲۰ ثانیه) T} _ T{ \fBHCI_Write_Synchronous_Flow_Control_Enable\fP T} T{ فعال‌سازی کنترل جریان SCO در صورت پشتیبانی T} .TE .SS "دستورات LE (در صورت پشتیبانی از LE) (LE Commands)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBLE_Read_Local_Supported_Features\fP T} T{ خواندن بیت‌ماسک ویژگی‌های LE T} _ T{ \fBLE_Read_All_Local_Supported_Features\fP T} T{ خواندن ویژگی‌های گسترش‌یافته LE (در صورت پشتیبانی) T} _ T{ \fBLE_Read_Buffer_Size\fP [v2] or [v1] T} T{ خواندن اندازه‌های بافر LE ACL (و ISO)؛ نسخه v2 در صورت پشتیبانی از ISO استفاده می‌شود T} _ T{ \fBLE_Read_Supported_States\fP T} T{ خواندن جدول ترکیبات حالت‌های LE T} .TE .SS "مرحله ۳: ماسک‌های رویداد، سیاست پیوند و ویژگی‌ها (Stage 3: Event Masks, Link Policy, and Features)" .sp تعیین می‌کند که کنترل‌کننده کدام رویدادها را باید گزارش دهد، سیاست پیوند را تنظیم می‌کند و صفحات ویژگی‌های گسترش‌یافته را می‌خواند\&. این طولانی‌ترین مرحله است\&. .SS "ماسک‌های رویداد و سیاست پیوند (Event Masks and Link Policy)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Set_Event_Mask\fP T} T{ پیکربندی ماسک رویداد اصلی بر اساس قابلیت‌های کنترل‌کننده T} _ T{ \fBHCI_Read_Stored_Link_Key\fP T} T{ خواندن تمام کلیدهای پیوند ذخیره‌شده T} _ T{ \fBHCI_Write_Default_Link_Policy_Settings\fP T} T{ فعال‌سازی تعویض نقش، حالت‌های hold ،sniff و park بر اساس ویژگی‌های LMP T} _ T{ \fBHCI_Read_Page_Scan_Activity\fP T} T{ خواندن بازه و پنجره زمانی پویش صفحه T} _ T{ \fBHCI_Read_Default_Erroneous_Data_Reporting\fP T} T{ خواندن وضعیت گزارش داده‌های خطا (برای گفتار باند پهن) T} _ T{ \fBHCI_Read_Page_Scan_Type\fP T} T{ خواندن نوع پویش صفحه (استاندارد یا درهم‌بافته) T} _ T{ \fBHCI_Read_Local_Extended_Features\fP (pages 2..N) T} T{ خواندن تمام صفحات باقی‌مانده از ویژگی‌های گسترش‌یافته T} .TE .sp \fBجزئیات ماسک رویداد:\fP برای کنترل‌کننده‌های دومنظوره، هسته رویدادهای مربوط به نتایج پرس‌وجو (RSSI و گسترش‌یافته)، SSP (قابلیت IO، تأیید کاربر، کلید عبور)، اتصالات همگام، sniff subrating، تازه‌سازی رمزنگاری، نظارت پیوند و فرا\-رویدادهای LE را فعال می‌کند\&. برای کنترل‌کننده‌های صرفاً LE، یک ماسک حداقلی تنها شامل تکمیل دستور، خطاهای سخت‌افزاری، قطع اتصال و تغییرات رمزنگاری می‌شود\&. .SS "ماسک رویداد و قابلیت‌های LE (LE Event Mask and Capabilities)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBLE_Set_Event_Mask\fP T} T{ پیکربندی زیر\-رویدادهای LE که باید گزارش شوند T} _ T{ \fBLE_Read_Advertising_Channel_Tx_Power\fP T} T{ خواندن توان ارسال تبلیغات (فقط تبلیغات سنتی) T} _ T{ \fBLE_Read_Transmit_Power\fP T} T{ خواندن محدوده حداقل/حداکثر توان ارسال T} _ T{ \fBLE_Read_Accept_List_Size\fP T} T{ خواندن ظرفیت فهرست پذیرش پالایه T} _ T{ \fBLE_Clear_Accept_List\fP T} T{ پاکسازی فهرست پذیرش پالایه T} _ T{ \fBLE_Read_Resolving_List_Size\fP T} T{ خواندن ظرفیت فهرست حل آدرس (LL Privacy) T} _ T{ \fBLE_Clear_Resolving_List\fP T} T{ پاکسازی فهرست حل آدرس T} _ T{ \fBLE_Set_Resolvable_Private_Address_Timeout\fP T} T{ تنظیم مهلت زمانی چرخش RPA T} _ T{ \fBLE_Read_Maximum_Data_Length\fP T} T{ خواندن حداکثر بایت‌های TX/RX و زمان (گسترش طول داده) T} _ T{ \fBLE_Read_Suggested_Default_Data_Length\fP T} T{ خواندن طول داده پیش‌فرض فعلی T} _ T{ \fBLE_Read_Number_of_Supported_Advertising_Sets\fP T} T{ خواندن ظرفیت مجموعه‌های تبلیغات گسترش‌یافته T} _ T{ \fBHCI_Write_LE_Host_Supported\fP T} T{ اطلاع‌رسانی پشتیبانی میزبان از LE به کنترل‌کننده (فقط حالت دومنظوره) T} _ T{ \fBLE_Set_Host_Feature\fP T} T{ فعال‌سازی CIS Central (بیت ۳۲) و/یا Channel Sounding (بیت ۴۷) T} .TE .sp \fBجزئیات ماسک رویداد LE:\fP هسته زیر\-رویدادهای LE را بر اساس قابلیت‌ها فعال می‌کند: تکمیل اتصال (در صورت وجود، پیشرفته)، گزارش‌های تبلیغات (در صورت وجود، گسترش‌یافته)، درخواست کلید بلندمدت، درخواست پارامترهای اتصال، تغییر طول داده، به‌روزرسانی PHY، الگوریتم انتخاب کانال، رویدادهای تبلیغات دوره‌ای، برقراری/درخواست CIS (در صورت پشتیبانی از CIS)، ایجاد/همگام‌سازی/اطلاعات BIG (در صورت پشتیبانی از BIS) و رویدادهای کاوش کانال (در صورت پشتیبانی از CS)\&. .SS "مرحله ۴: پیکربندی نهایی (Stage 4: Final Configuration)" .sp پیکربندی نهایی را انجام می‌دهد: کلیدهای بی‌استفاده را حذف می‌کند، صفحه ۲ ماسک رویداد را تنظیم می‌کند، اطلاعات کدک را می‌خواند، اتصالات امن (Secure Connections) را فعال می‌کند و پیش‌فرض‌های طول داده و PHY در LE را پیکربندی می‌نماید\&. .SS "کلیدها، کدک‌ها و اتصالات امن (Keys, Codecs, and Secure Connections)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBHCI_Delete_Stored_Link_Key\fP (all) T} T{ حذف تمام کلیدهای پیوند ذخیره‌شده از کنترل‌کننده T} _ T{ \fBHCI_Set_Event_Mask_Page_2\fP T} T{ فعال‌سازی رویدادهای صفحه ۲ (مهلت زمانی بار داده احراز هویت‌شده و غیره) T} _ T{ \fBHCI_Read_Local_Supported_Codecs\fP [v2] or [v1] T} T{ خواندن شناسه‌های کدک پشتیبانی‌شده؛ نسخه v2 شامل اطلاعات نوع انتقال است T} _ T{ \fBHCI_Read_Local_Pairing_Options\fP T} T{ خواندن گزینه‌های پیش‌فرض جفت‌سازی (حداکثر اندازه کلید رمزنگاری) T} _ T{ \fBHCI_Get_MWS_Transport_Layer_Configuration\fP T} T{ خواندن پیکربندی همزیستی MWS در صورت پشتیبانی T} _ T{ \fBHCI_Read_Synchronization_Train_Parameters\fP T} T{ خواندن پارامترهای قطار همگام‌سازی (Connectionless Peripheral Broadcast) T} _ T{ \fBHCI_Write_Secure_Connections_Support\fP (enable) T} T{ فعال‌سازی اتصالات امن (Secure Connections) در صورت فعال بودن SSP T} _ T{ \fBHCI_Write_Default_Erroneous_Data_Reporting\fP T} T{ فعال‌سازی/غیرفعال‌سازی بر اساس تنظیم گفتار باند پهن T} .TE .SS "طول داده LE و پیش‌فرض‌های PHY (LE Data Length and PHY Defaults)" .TS box center; l|l. T{ دستور HCI T} T{ هدف T} _ T{ \fBLE_Write_Suggested_Default_Data_Length\fP T} T{ تنظیم بایت‌ها/زمان پیش‌فرض TX برای اتصالات جدید T} _ T{ \fBLE_Set_Default_PHY\fP T} T{ تنظیم لایه فیزیکی (PHY) ترجیحی (همواره 1M؛ و 2M و Coded در صورت پشتیبانی) T} .TE .SS "پس از راه‌اندازی اولیه (Post-Initialization)" .sp پس از تکمیل هر چهار مرحله، \fBhci_powered_update_sync\fP برای اعمال پیکربندی زمان اجرا اجرا می‌شود: .TS box center; l|l. T{ اقدام T} T{ هدف T} _ T{ \fBHCI_Write_Simple_Pairing_Mode\fP T} T{ فعال‌سازی مجدد SSP + Secure Connections در صورت پیکربندی T} _ T{ \fBHCI_Write_LE_Host_Supported\fP T} T{ همگام‌سازی وضعیت پشتیبانی میزبان از LE T} _ T{ برپایی تبلیغات LE T} T{ پیکربندی پارامترها و داده‌های تبلیغات T} _ T{ \fBHCI_Write_Authentication_Enable\fP T} T{ همگام‌سازی وضعیت فعال بودن احراز هویت T} _ T{ به‌روزرسانی‌های پویش/رده/نام/EIR T} T{ پیکربندی پویش صفحه، رده دستگاه، نام محلی و داده‌های EIR T} _ T{ \fBLE_Set_Random_Address\fP T} T{ تنظیم آدرس تصادفی ایستا در صورت عدم وجود آدرس عمومی T} .TE .SS "خواندن دنباله راه‌اندازی اولیه در رهگیری بسته‌ها (Reading the Init Sequence in a Trace)" .sp هنگام بررسی یک رهگیری btsnoop، بلوک راه‌اندازی اولیه نخستین موردی است که پس از باز شدن کنترل‌کننده دیده می‌شود\&. رهگیری یک کنترل‌کننده معمول دومنظوره با موارد زیر آغاز می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Reset > HCI Event: Command Complete (Reset) < HCI Command: Read Local Supported Features > HCI Event: Command Complete (Read Local Supported Features) < HCI Command: Read Local Version Information > HCI Event: Command Complete (Read Local Version Information) < HCI Command: Read BD ADDR > HCI Event: Command Complete (Read BD ADDR) \&... [Stage 2\-4 commands follow] .EE .UNINDENT .UNINDENT .sp \fBنکات کلیدی که باید به دنبال آن‌ها بود:\fP .INDENT 0.0 .IP \(bu 2 \fBدستورات مفقود (Missing commands)\fP: اگر دستورات مورد انتظار وجود نداشته باشند، ممکن است کنترل‌کننده از قابلیت مربوطه پشتیبانی نکند\&. برای نمونه، نبود \fBLE_Read_Buffer_Size\fP بدین معناست که کنترل‌کننده صرفاً از BR/EDR پشتیبانی می‌کند\&. .IP \(bu 2 \fBشکست دستورات (Command failures)\fP: مقدار \fBStatus\fP غیر از \fB0x00\fP در یک رویداد Command Complete در طول راه‌اندازی اولیه معمولاً نشان‌دهنده نقص در کنترل‌کننده یا یک قابلیت پشتیبانی‌نشده است\&. هسته اغلب این موارد را با ملایمت مدیریت می‌کند، اما خطاهای مداوم ممکن است مانع از کارکرد آداپتور شوند\&. .IP \(bu 2 \fBاندازه‌های بافر (Buffer sizes)\fP: مقادیر بازگردانده‌شده توسط \fBRead_Buffer_Size\fP و \fBLE_Read_Buffer_Size\fP تعیین می‌کنند که کنترل‌کننده چه تعداد بسته در حال انتقال (in\-flight) را می‌تواند نگه دارد\&. تعداد کم بافرها می‌تواند باعث بروز مشکلات در نرخ تبادل داده (throughput) شود\&. .IP \(bu 2 \fBبیت‌های ویژگی (Feature bits)\fP: پاسخ \fBRead_Local_Supported_Features\fP مشخص می‌کند که کنترل‌کننده از چه مواردی پشتیبانی می‌کند (مانند LE ،SSP، eSCO و غیره)\&. این موارد را با دستورات بعدی مطابقت دهید — هسته تنها برای قابلیت‌هایی دستور ارسال می‌کند که کنترل‌کننده پشتیبانی از آن‌ها را گزارش داده باشد\&. .IP \(bu 2 \fBماسک رویداد (Event mask)\fP: دستور \fBSet_Event_Mask\fP دقیقاً نشان می‌دهد که میزبان مایل به دریافت کدام رویدادها است\&. اگر رویداد مورد انتظاری هرگز در رهگیری ظاهر نشود، بررسی کنید که آیا در ماسک فعال شده بوده است یا خیر\&. .IP \(bu 2 \fBکنترل‌کننده‌های صرفاً LE (LE\-only controllers)\fP: این کنترل‌کننده‌ها تمام دستورات BR/EDR (مانند \fBRead_Buffer_Size\fP، \fBRead_Local_Name\fP، سیاست پیوند و غیره) را نادیده می‌گیرند و از یک ماسک رویداد حداقلی استفاده می‌کنند\&. رهگیری آن‌ها به وضوح کوتاه‌تر خواهد بود\&. .IP \(bu 2 \fBدستورات سازنده (Vendor commands)\fP: برخی کنترل‌کننده‌ها (Intel، Broadcom ،Qualcomm ،Realtek ،MediaTek) دستورات HCI ویژه سازنده را میان مراحل جهت دانلود سفت‌افزار، پیکربندی یا اعمال وصله درج می‌کنند\&. این دستورات با گروه‌های آپ‌کد \fB0x3F\fP (سازنده) نمایش داده می‌شوند و مختص درایور هستند\&. .UNINDENT .\" This file is included by btmon.rst. . .SH "ردیابی اتصال (CONNECTION TRACKING)" .sp پروتکل HCI از \fBهندل‌های اتصال (connection handles)\fP (اعداد صحیح ۱۶ بیتی) برای شناسایی اتصالات مجزا استفاده می‌کند. درک نحوه نگاشت هندل‌ها به دستگاه‌ها برای خواندن رهگیری‌ها ضروری است. .SS "انواع هندل (Handle Types)" .sp انواع مختلف اتصال از محدوده‌های هندل متفاوتی استفاده می‌کنند، اما این محدوده‌ها مختص کنترل‌کننده (controller\-specific) هستند و استانداردسازی نشده‌اند. نوع اتصال را می‌توان با بررسی رویدادی که هندل را ایجاد کرده است، مشخص کرد: .TS box center; l|l|l. T{ نوع (Type) T} T{ رویداد ایجاد (Creation Event) T} T{ توضیحات (Description) T} _ T{ BR/EDR ACL T} T{ Connection Complete T} T{ اتصال داده بلوتوث کلاسیک T} _ T{ LE ACL T} T{ LE (Enhanced) Connection Complete T} T{ اتصال داده بلوتوث کم‌مصرف (LE) T} _ T{ CIS T} T{ LE CIS Established T} T{ جریان همگام متصل (LE Audio) T} _ T{ BIS T} T{ LE BIG Complete T} T{ جریان همگام همگانی (LE Audio) T} _ T{ SCO/eSCO T} T{ Synchronous Connection Complete T} T{ اتصال همگام صدا/صوتی (کلاسیک) T} .TE .sp یک دستگاه واحد ممکن است به طور هم‌زمان چندین هندل داشته باشد. به عنوان مثال، یک دستگاه LE Audio دارای یک هندل LE ACL برای ترافیک کنترلی و یک یا چند هندل CIS برای جریان‌های صوتی خواهد بود. رویداد \fBLE CIS Established\fP شامل هندل اتصال ACL است که CIS به آن مرتبط شده است. .SS "ردیابی بافر کنترل‌کننده (Controller Buffer Tracking)" .sp ردیابی بافر ممکن است یک نشانگر را در کروشه نشان دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL: Handle 2048 [1/6] flags 0x00 dlen 16 .EE .UNINDENT .UNINDENT .sp عبارت \fB[1/6]\fP به این معنی است که این اسلات بافر ۱ از ۶ بافر ACL در دسترس کنترل‌کننده است. این نشان‌دهنده کنترل جریان HCI در سمت میزبان است: میزبان ردیابی می‌کند که کنترل‌کننده چه تعداد بافر در دسترس دارد و مصرف فعلی را نشان می‌دهد. هنگامی که کنترل‌کننده رویدادهای \fBNumber of Completed Packets\fP را ارسال می‌کند، بافرها آزاد شده و این شمارش کاهش می‌یابد. .SH "کدهای خطا و دلایل قطع اتصال HCI (HCI ERROR AND DISCONNECT REASON CODES)" .sp کدهای وضعیت و دلایل قطع اتصال در HCI از یک فضای کد یکسان استفاده می‌کنند. این کدها در فیلدهای \fBStatus:\fP و \fBReason:\fP در سراسر رهگیری ظاهر می‌شوند. ابزار btmon آن‌ها را به صورت خودکار رمزگشایی می‌کند، اما مقادیر هگزادسیمال برای جستجو و فیلتر کردن مفید هستند. .SS "دلایل متداول قطع اتصال (Common Disconnect Reasons)" .TS box center; l|l|l. T{ کد (Code) T} T{ نام (Name) T} T{ مفهوم تشخیصی (Diagnostic Meaning) T} _ T{ 0x05 T} T{ Authentication Failure T} T{ راه‌اندازی احراز هویت یا رمزگذاری ناموفق بود. کلید ممکن است منسوخ شده باشد یا پایگاه‌های داده امنیتی دستگاه‌ها با یکدیگر همخوانی نداشته باشند. T} _ T{ 0x08 T} T{ Connection Timeout T} T{ تایمر نظارت (supervision timer) منقضی شد. دستگاه راه دور از محدوده خارج شده یا پاسخ نداده است. این یک قطع ارتباط پیوند رادیویی (RF) است. T} _ T{ 0x13 T} T{ Remote User Terminated Connection T} T{ دستگاه راه دور عمداً اتصال را قطع کرد. این حالت قطع اتصال عادی و منظم (graceful) است. T} _ T{ 0x14 T} T{ Remote Device Terminated due to Low Resources T} T{ منابع دستگاه راه دور (حافظه، اسلات‌های اتصال) به پایان رسید. T} _ T{ 0x15 T} T{ Remote Device Terminated due to Power Off T} T{ دستگاه راه دور در حال خاموش شدن است. T} _ T{ 0x16 T} T{ Connection Terminated By Local Host T} T{ پشته محلی BlueZ عمداً اتصال را قطع کرد. این حالت هنگامی که bluetoothd قطع اتصال را آغاز می‌کند عادی است. T} _ T{ 0x1f T} T{ Unspecified Error T} T{ خطای عمومی و نامشخص. اغلب نشان‌دهنده مشکل میان‌افزار/سفت‌افزار (firmware) است. T} _ T{ 0x22 T} T{ LMP/LL Response Timeout T} T{ مهلت زمانی رویه لایه پیوند (Link Layer) به پایان رسید. دستگاه راه دور ارسال پاسخ به PDUهای کنترلی LL را متوقف کرد. T} _ T{ 0x28 T} T{ Instant Passed T} T{ یک عملیات حساس به زمان از مهلت مقرر گذشت. اغلب در به‌روزرسانی‌های پارامتر اتصال دیده می‌شود. T} _ T{ 0x2f T} T{ Insufficient Security T} T{ سطح امنیتی مورد نیاز (رمزگذاری، حفاظت MITM) برآورده نشد. T} _ T{ 0x3b T} T{ Unacceptable Connection Parameters T} T{ دستگاه راه دور به‌روزرسانی پارامترهای اتصال را رد کرد. T} _ T{ 0x3d T} T{ Connection Terminated due to MIC Failure T} T{ بررسی یکپارچگی رمزگذاری (MIC) ناموفق بود. عدم تطابق یا خرابی احتمالی کلید. T} _ T{ 0x3e T} T{ Connection Failed to be Established T} T{ تلاش برای برقراری اتصال کاملاً ناموفق بود (به عنوان مثال، دستگاه راه دور به درخواست‌های اتصال پاسخ نداد). T} _ T{ 0x3f T} T{ MAC Connection Failed T} T{ شکست اتصال در سطح MAC. T} _ T{ 0x44 T} T{ Operation Cancelled by Host T} T{ میزبان عملیات را پیش از تکمیل لغو کرد. T} .TE .SS "جدول کامل کدهای خطا (Full Error Code Table)" .sp مجموعه کامل کدهای خطای HCI (از 0x00 تا 0x45) در مشخصات هسته بلوتوث (Bluetooth Core Specification)، جلد ۱، بخش F تعریف شده است. ابزار btmon تمام آن‌ها را به طور خودکار در فیلدهای \fBStatus:\fP و \fBReason:\fP رمزگشایی می‌کند. نگاشت کدهای منبع در \fBmonitor/packet.c\fP (\fBerror2str_table\fP) قرار دارد. .\" This file is included by btmon.rst. . .SH "بازسازی پایگاه‌داده GATT از رهگیری‌های SNOOP (RECONSTRUCTING A GATT DATABASE FROM SNOOP TRACES)" .sp یک رهگیری btsnoop شامل تبادل کامل پروتکل ATT است که توسط کلاینت‌ها و سرورهای GATT برای کشف سرویس‌های یکدیگر استفاده می‌شود. با خواندن درخواست‌ها و پاسخ‌های کشف، بازسازی پایگاه‌داده کامل GATT یک دستگاه راه دور \-\- حتی بدون دسترسی به خود دستگاه \-\- امکان‌پذیر است. .sp این بخش، رویه کشف GATT و نحوه نمایش هر عملیات ATT را در خروجی \fBbtmon\fP توضیح می‌دهد. .SS "نمای کلی کشف GATT (Overview of GATT Discovery)" .sp کشف GATT یک فرایند چندمرحله‌ای است که در آن کلاینت با استفاده از عملیات پروتکل ATT، از پایگاه‌داده صفت‌ها/ویژگی‌های (attribute) سرور پرس‌وجو می‌کند. این فازها عبارتند از: .INDENT 0.0 .IP 1. 3 \fBکشف سرویس‌های اصلی (Primary Service Discovery)\fP \-\- یافتن تمام سرویس‌های اصلی و محدوده‌های هندل آن‌ها. .IP 2. 3 \fBکشف سرویس‌های ثانویه (Secondary Service Discovery)\fP \-\- یافتن هرگونه سرویس ثانویه (که صرفاً گنجانده شده‌اند). .IP 3. 3 \fBکشف سرویس‌های گنجانده‌شده (Included Service Discovery)\fP \-\- یافتن سرویس‌هایی که سرویس‌های دیگر را در بر دارند. .IP 4. 3 \fBکشف مشخصه‌ها (Characteristic Discovery)\fP \-\- یافتن تمام مشخصه‌ها در هر سرویس. .IP 5. 3 \fBکشف توصیف‌کننده‌ها (Descriptor Discovery)\fP \-\- یافتن تمام توصیف‌کننده‌ها برای هر مشخصه. .IP 6. 3 \fBخواندن مقدار مشخصه (Characteristic Value Reading)\fP \-\- خواندن مقادیر مشخصه‌های قابل خواندن. .UNINDENT .sp هر فاز از یک عملیات ATT خاص استفاده کرده و یک الگوی درخواست/پاسخ را در رهگیری ایجاد می‌کند. کلاینت هر درخواست را با پیش بردن محدوده‌های هندل تکرار می‌کند تا زمانی که سرور با \fBAttribute Not Found\fP پاسخ دهد که نشان‌دهنده پایان آن فاز است. .SS "فاز ۱: کشف سرویس‌های اصلی (خواندن بر اساس نوع گروه) (Phase 1: Primary Service Discovery (Read By Group Type))" .sp کلاینت، سرویس‌های اصلی را با استفاده از \fBRead By Group Type Request\fP با شناسه یکتای UUID مربوط به \fBPrimary Service\fP (مقدار 0x2800) به عنوان نوع گروه کشف می‌کند. .sp \fBدرخواست (Request)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 11 #516 [hci0] 0.124726 ATT: Read By Group Type Request (0x10) len 6 Handle range: 0x0001\-0xffff Attribute group type: Primary Service (0x2800) .EE .UNINDENT .UNINDENT .sp اولین درخواست همیشه از هندل 0x0001 آغاز می‌شود و تا 0xffff (کل فضای هندل) را جستجو می‌کند. .sp \fBپاسخ (Response)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 42 #523 [hci0] 0.240151 ATT: Read By Group Type Response (0x11) len 37 Attribute data length: 6 Attribute group list: 6 entries Handle range: 0x0001\-0x0009 UUID: Generic Access Profile (0x1800) Handle range: 0x000a\-0x0011 UUID: Generic Attribute Profile (0x1801) Handle range: 0x0012\-0x0014 UUID: Device Information (0x180a) Handle range: 0x0015\-0x0039 UUID: Generic Telephony Bearer (0x184c) Handle range: 0x003a\-0x0059 UUID: Generic Media Control (0x1849) Handle range: 0x005a\-0x005c UUID: Telephony and Media Audio (0x1855) .EE .UNINDENT .UNINDENT .sp هر مدخل موارد زیر را ارائه می‌دهد: .INDENT 0.0 .IP \(bu 2 \fBمحدوده هندل (Handle range)\fP \-\- هندل شروع و پایان سرویس. تمام صفت‌ها/ویژگی‌های متعلق به این سرویس (مشخصه‌ها، توصیف‌کننده‌ها) دارای هندل‌هایی در این محدوده هستند. .IP \(bu 2 \fBUUID\fP \-\- شناسه یکتای سرویس. شناسه‌های استاندارد ۱۶ بیتی UUID همراه با نام آن‌ها نشان داده می‌شوند (مانند \fBGeneric Access Profile\fP). شناسه‌های ۱۲۸ بیتی اختصاصی سازنده (vendor\-specific) به صورت رشته‌های کامل UUID ظاهر می‌شوند. .UNINDENT .sp کلاینت با ارسال درخواستی دیگر که از بعد از آخرین هندل موجود در پاسخ آغاز می‌شود، ادامه می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 11 #525 [hci0] 0.240641 ATT: Read By Group Type Request (0x10) len 6 Handle range: 0x005d\-0xffff Attribute group type: Primary Service (0x2800) .EE .UNINDENT .UNINDENT .sp این روند تا زمانی که سرور با \fBAttribute Not Found\fP پاسخ دهد ادامه می‌یابد: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #532 [hci0] 0.360069 ATT: Error Response (0x01) len 4 Read By Group Type Request (0x10) Handle: 0x005d Error: Attribute Not Found (0x0a) .EE .UNINDENT .UNINDENT .sp این خطا نشان می‌دهد که فراتر از هندل 0x005d هیچ سرویس اصلی دیگری وجود ندارد. کلاینت اکنون فهرست کاملی از سرویس‌های اصلی را در اختیار دارد. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 فیلد \fBAttribute data length\fP اندازه هر مدخل را در پاسخ مشخص می‌کند. مقدار ۶ به معنی شناسه‌های ۱۶ بیتی UUID است (۲ بایت هندل شروع + ۲ بایت هندل پایان + ۲ بایت UUID). مقدار ۲۰ به معنی شناسه‌های ۱۲۸ بیتی UUID است (۲ + ۲ + ۱۶). اگر سرور دارای هر دو نوع شناسه ۱۶ بیتی و ۱۲۸ بیتی برای سرویس‌ها باشد، آن‌ها در پاسخ‌های جداگانه‌ای بازگردانده می‌شوند زیرا تمام مدخل‌ها در یک پاسخ واحد باید طول یکسانی داشته باشند. .UNINDENT .UNINDENT .SS "فاز ۲: کشف سرویس‌های ثانویه (Phase 2: Secondary Service Discovery)" .sp پس از سرویس‌های اصلی، کلاینت ممکن است سرویس‌های ثانویه را با استفاده از همان \fBRead By Group Type Request\fP اما با شناسه یکتای UUID مربوط به \fBSecondary Service\fP (مقدار 0x2801) کشف کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 11 #534 [hci0] 0.360752 ATT: Read By Group Type Request (0x10) len 6 Handle range: 0x0001\-0xffff Attribute group type: Secondary Service (0x2801) .EE .UNINDENT .UNINDENT .sp اگر هیچ سرویس ثانویه‌ای وجود نداشته باشد، سرور با \fBAttribute Not Found\fP پاسخ می‌دهد. سرویس‌های ثانویه مستقیماً برای کلاینت‌ها قابل دسترسی نیستند \-\- آن‌ها فقط از طریق ارجاعات گنجاندن (include) از سرویس‌های اصلی قابل دستیابی هستند. .SS "فاز ۳: کشف سرویس‌های گنجانده‌شده (خواندن بر اساس نوع) (Phase 3: Included Service Discovery (Read By Type))" .sp برای کشف اینکه کدام سرویس‌ها شامل سرویس‌های دیگر می‌شوند، کلاینت از \fBRead By Type Request\fP با شناسه UUID مربوط به \fBInclude\fP (مقدار 0x2802) استفاده می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 11 #540 [hci0] 0.480731 ATT: Read By Type Request (0x08) len 6 Handle range: 0x0001\-0x005c Attribute type: Include (0x2802) .EE .UNINDENT .UNINDENT .sp محدوده هندل معمولاً کل پایگاه‌داده کشف‌شده را در بر می‌گیرد. هر اعلان گنجاندن (include declaration) در پاسخ، سرویسی را مشخص می‌کند که توسط سرویسِ در بر گیرنده آن هندل، گنجانده شده است. .SS "فاز ۴: کشف مشخصه‌ها (خواندن بر اساس نوع) (Phase 4: Characteristic Discovery (Read By Type))" .sp برای هر سرویس، کلاینت مشخصه‌های آن را با استفاده از \fBRead By Type Request\fP با شناسه UUID مربوط به \fBCharacteristic\fP (مقدار 0x2803) کشف می‌کند. محدوده هندل به محدوده هندل سرویس محدود می‌شود. .sp \fBدرخواست (Request)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 11 #531 [hci0] 0.360063 ATT: Read By Type Request (0x08) len 6 Handle range: 0x0008\-0x0011 Attribute type: Characteristic (0x2803) .EE .UNINDENT .UNINDENT .sp \fBپاسخ (Response)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 27 #533 [hci0] 0.360714 ATT: Read By Type Response (0x09) len 22 Attribute data length: 7 Attribute data list: 3 entries Handle: 0x0009 Value[5]: 200a00052a Properties: 0x20 Indicate (0x20) Value Handle: 0x000a Value UUID: Service Changed (0x2a05) Handle: 0x000c Value[5]: 0a0d00292b Properties: 0x0a Read (0x02) Write (0x08) Value Handle: 0x000d Value UUID: Client Supported Features (0x2b29) Handle: 0x000e Value[5]: 020f002a2b Properties: 0x02 Read (0x02) Value Handle: 0x000f Value UUID: Database Hash (0x2b2a) .EE .UNINDENT .UNINDENT .sp هر مدخل مشخصه موارد زیر را ارائه می‌دهد: .INDENT 0.0 .IP \(bu 2 \fBHandle\fP \-\- هندل صفتِ اعلان مشخصه (characteristic declaration attribute). .IP \(bu 2 \fBProperties\fP \-\- یک ماسک بیتی (bitmask) که عملیات پشتیبانی‌شده را مشخص می‌کند: .TS box center; l|l|l. T{ بیت (Bit) T} T{ ویژگی (Property) T} T{ توضیحات (Description) T} _ T{ 0x01 T} T{ Broadcast T} T{ می‌تواند در داده‌های تبلیغاتی (advertising) پخش همگانی شود T} _ T{ 0x02 T} T{ Read T} T{ قابل خواندن است T} _ T{ 0x04 T} T{ Write Without Response T} T{ بدون تأییدیه قابل نوشتن است T} _ T{ 0x08 T} T{ Write T} T{ همراه با تأییدیه قابل نوشتن است T} _ T{ 0x10 T} T{ Notify T} T{ سرور می‌تواند اعلان‌ها (notifications) را ارسال کند T} _ T{ 0x20 T} T{ Indicate T} T{ سرور می‌تواند نشانه‌ها (indications) را ارسال کند T} _ T{ 0x40 T} T{ Authenticated Signed Writes T} T{ از دستورات نوشتن امضاشده پشتیبانی می‌کند T} _ T{ 0x80 T} T{ Extended Properties T} T{ دارای توصیف‌کننده ویژگی‌های گسترش‌یافته است T} .TE .IP \(bu 2 \fBValue Handle\fP \-\- هندلی که مقدار مشخصه در آن ذخیره می‌شود (همیشه برابر با هندل اعلان + ۱). .IP \(bu 2 \fBValue UUID\fP \-\- شناسه یکتای UUID که نوع مشخصه را مشخص می‌کند. .UNINDENT .sp کلاینت با پیش بردن محدوده‌های هندل ادامه می‌دهد تا زمانی که \fBAttribute Not Found\fP را دریافت کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #572 [hci0] 1.200228 ATT: Error Response (0x01) len 4 Read By Type Request (0x08) Handle: 0x005c Error: Attribute Not Found (0x0a) .EE .UNINDENT .UNINDENT .SS "فاز ۵: کشف توصیف‌کننده‌ها (یافتن اطلاعات) (Phase 5: Descriptor Discovery (Find Information))" .sp توصیف‌کننده‌ها هندل‌های بین هندل مقدار یک مشخصه و اعلان مشخصه بعدی (یا پایان سرویس) را اشغال می‌کنند. کلاینت آن‌ها را با استفاده از \fBFind Information Request\fP کشف می‌کند. .sp \fBدرخواست (Request)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #556 [hci0] 0.959965 ATT: Find Information Request (0x04) len 4 Handle range: 0x000b\-0x000b .EE .UNINDENT .UNINDENT .sp محدوده هندل، فاصله بین هندل مقدار مشخصه و هندل اعلان مشخصه بعدی را پوشش می‌دهد. .sp \fBپاسخ (Response)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 10 #561 [hci0] 0.961049 ATT: Find Information Response (0x05) len 5 Format: UUID\-16 (0x01) Handle: 0x000b UUID: Client Characteristic Configuration (0x2902) .EE .UNINDENT .UNINDENT .sp شناسه‌های متداول توصیف‌کننده (Descriptor UUIDs): .TS box center; l|l|l. T{ UUID T} T{ نام (Name) T} T{ هدف / کاربرد (Purpose) T} _ T{ 0x2900 T} T{ Characteristic Extended Properties T} T{ بیت‌های ویژگی‌های اضافی T} _ T{ 0x2901 T} T{ Characteristic User Description T} T{ رشته توضیحات خوانا برای انسان T} _ T{ 0x2902 T} T{ Client Characteristic Configuration (CCC) T} T{ فعال/غیرفعال‌سازی اعلان‌ها یا نشانه‌ها T} _ T{ 0x2903 T} T{ Server Characteristic Configuration T} T{ پیکربندی پخش همگانی در سمت سرور T} _ T{ 0x2904 T} T{ Characteristic Presentation Format T} T{ قالب داده، نما و واحد T} .TE .SS "فاز ۶: خواندن مقادیر مشخصه (Phase 6: Reading Characteristic Values)" .sp پس از کشف، کلاینت می‌تواند مقادیر مشخصه‌ها را با استفاده از \fBRead Request\fP بخواند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 7 #577 [hci0] 1.380203 ATT: Read Request (0x0a) len 2 Handle: 0x000f < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #579 [hci0] 1.380774 ATT: Read Response (0x0b) len 16 Value[16]: a470d508da8751a2a50b79da0250bfda .EE .UNINDENT .UNINDENT .sp مقدار \fBHandle\fP در درخواست با هندل مقدار مشخصه از فاز کشف مطابقت دارد. ابزار btmon بایت‌های مقدار خام را نمایش می‌دهد؛ تفسیر آن به شناسه UUID مشخصه بستگی دارد. .SS "یافتن بر اساس نوع و مقدار (جستجوی هدفمند سرویس) (Find By Type Value (Targeted Service Search))" .sp علاوه بر کشف تمام سرویس‌ها، کلاینت می‌تواند با استفاده از \fBFind By Type Value Request\fP یک شناسه UUID خاص از سرویس را جستجو کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 13 #513 [hci0] 0.124195 ATT: Find By Type Value Request (0x06) len 8 Handle range: 0x0001\-0xffff Attribute type: Primary Service (0x2800) UUID: Generic Attribute Profile (0x1801) < ACL Data TX: Handle 2048 flags 0x00 dlen 9 #515 [hci0] 0.124684 ATT: Find By Type Value Response (0x07) len 4 Handle range: 0x0008\-0x0011 .EE .UNINDENT .UNINDENT .sp این دستور فقط محدوده هندل مربوط به سرویس منطبق را بازمی‌گرداند، بدون اینکه نیازی به پیمایش تمام سرویس‌ها باشد. اگر سرویس یافت نشود: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 9 #524 [hci0] 0.240607 ATT: Error Response (0x01) len 4 Find By Type Value Request (0x06) Handle: 0x0012 Error: Attribute Not Found (0x0a) .EE .UNINDENT .UNINDENT .SS "کشف دوطرفه (Bidirectional Discovery)" .sp هر دو دستگاه موجود در یک اتصال می‌توانند به طور هم‌زمان به عنوان کلاینت و سرور GATT عمل کنند. در یک رهگیری btsnoop، ممکن است کشف درهم‌تنیده در هر دو جهت را مشاهده کنید: .INDENT 0.0 .IP \(bu 2 \fBدرخواست‌های TX (\(ga\(ga<\(ga\(ga) + پاسخ‌های RX (\(ga\(ga>\(ga\(ga)\fP \-\- دستگاه محلی (که این رهگیری متعلق به آن است) به عنوان کلاینت GATT عمل می‌کند و در حال کشف سرویس‌های دستگاه راه دور است. .IP \(bu 2 \fBدرخواست‌های RX (\(ga\(ga>\(ga\(ga) + پاسخ‌های TX (\(ga\(ga<\(ga\(ga)\fP \-\- دستگاه راه دور به عنوان کلاینت GATT عمل می‌کند و در حال کشف سرویس‌های دستگاه محلی است. .UNINDENT .sp به عنوان مثال، سرور محلی که به عملیات کشف دستگاه راه دور پاسخ می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 11 #584 [hci0] 1.512006 ATT: Read By Group Type Request (0x10) len 6 Handle range: 0x0001\-0xffff Attribute group type: Primary Service (0x2800) < ACL Data TX: Handle 2048 flags 0x00 dlen 66 #586 [hci0] 1.518778 ATT: Read By Group Type Response (0x11) len 61 Attribute data length: 6 Attribute group list: 10 entries Handle range: 0x0001\-0x0007 UUID: Generic Access Profile (0x1800) Handle range: 0x0008\-0x0011 UUID: Generic Attribute Profile (0x1801) Handle range: 0x0012\-0x0014 UUID: Device Information (0x180a) Handle range: 0x0015\-0x001e UUID: Coordinated Set Identification (0x1846) Handle range: 0x001f\-0x0020 UUID: Common Audio (0x1853) Handle range: 0x0021\-0x0024 UUID: Microphone Control (0x184d) Handle range: 0x0041\-0x004b UUID: Volume Control (0x1844) Handle range: 0x006b\-0x0073 UUID: Broadcast Audio Scan (0x184f) Handle range: 0x0074\-0x0086 UUID: Published Audio Capabilities (0x1850) Handle range: 0x0087\-0x0096 UUID: Audio Stream Control (0x184e) .EE .UNINDENT .UNINDENT .sp این مورد، پایگاه‌داده GATT خود دستگاه محلی را از دید دستگاه راه دور نشان می‌دهد. برای بازسازی پایگاه‌داده دستگاه راه دور، بر درخواست‌های TX و پاسخ‌های RX تمرکز کنید (دستگاه محلی که به عنوان کلاینت عمل می‌کند). .SS "ساخت جدول ویژگی‌ها (Building the Attribute Table)" .sp برای بازسازی پایگاه‌داده GATT، پاسخ‌های کشف را استخراج کرده و آن‌ها را در یک جدول ساماندهی کنید. با استفاده از رهگیری بالا به عنوان نمونه، دستگاه راه دور در آدرس 00:11:22:33:44:55 شامل موارد زیر است: .sp \fBسرویس‌ها (Services)\fP (از Read By Group Type Response): .INDENT 0.0 .INDENT 3.5 .sp .EX Handle Range UUID Service Name ────────────── ────────────────────────────── ──────────────────────────── 0x0001\-0x0009 0x1800 Generic Access Profile 0x000a\-0x0011 0x1801 Generic Attribute Profile 0x0012\-0x0014 0x180a Device Information 0x0015\-0x0039 0x184c Generic Telephony Bearer 0x003a\-0x0059 0x1849 Generic Media Control 0x005a\-0x005c 0x1855 Telephony and Media Audio .EE .UNINDENT .UNINDENT .sp \fBمشخصه‌ها (Characteristics)\fP (از Read By Type Response، در محدوده GAP 0x0001\-0x0009): .INDENT 0.0 .INDENT 3.5 .sp .EX Handle Value Handle Properties UUID Name ────── ──────────── ────────── ────── ──────────────────────────────── 0x0002 0x0003 Read 0x2a00 Device Name 0x0004 0x0005 Read 0x2a01 Appearance 0x0006 0x0007 Read 0x2a04 Peripheral Preferred Conn Params 0x0008 0x0009 Read 0x2aa6 Central Address Resolution .EE .UNINDENT .UNINDENT .sp \fBمشخصه‌ها (Characteristics)\fP (در محدوده GATT 0x000a\-0x0011): .INDENT 0.0 .INDENT 3.5 .sp .EX Handle Value Handle Properties UUID Name ────── ──────────── ─────────────── ────── ──────────────────────────── 0x000b 0x000c Indicate 0x2a05 Service Changed 0x000e 0x000f Read, Write 0x2b29 Client Supported Features 0x0010 0x0011 Read 0x2b2a Database Hash .EE .UNINDENT .UNINDENT .sp \fBتوصیف‌کننده‌ها (Descriptors)\fP (از Find Information Response): .INDENT 0.0 .INDENT 3.5 .sp .EX Handle UUID Name ────── ────── ──────────────────────────────────── 0x000d 0x2902 Client Characteristic Configuration .EE .UNINDENT .UNINDENT .sp توصیف‌کننده CCC در هندل 0x000d به مشخصه Service Changed (با هندل مقدار 0x000c) تعلق دارد، زیرا بین آن هندل مقدار و اعلان مشخصه بعدی در 0x000e قرار گرفته است. .\" This file is included by btmon.rst. . .SH "جریان جفت‌سازی SMP (SMP PAIRING FLOW)" .sp پروتکل مدیریت امنیت (SMP یا Security Manager Protocol) فرآیند جفت‌سازی، تولید کلید و توزیع کلید را بین دستگاه‌های بلوتوث مدیریت می‌کند. ترافیک SMP درون L2CAP روی شناسه کانال ثابت (CID) مقدار 0x0006 (برای LE) یا CID 0x0007 (برای BR/EDR) ظاهر می‌شود. ابزار btmon تمام عملیات‌های SMP را به صورت خودکار رمزگشایی می‌کند. .SS "فازهای جفت‌سازی (Pairing Phases)" .sp جفت‌سازی SMP در سه فاز انجام می‌شود. هر فاز یک الگوی متمایز را در خروجی btmon ایجاد می‌کند. .sp \fBفاز ۱: تبادل ویژگی‌ها (Phase 1: Feature Exchange)\fP .sp جفت‌سازی زمانی آغاز می‌شود که یک دستگاه درخواست امنیت (Security Request) ارسال کند (دستگاه جانبی / peripheral) یا میزبان مستقیماً جفت‌سازی را آغاز نماید. آغازگر یک درخواست جفت‌سازی (Pairing Request) ارسال می‌کند و پاسخ‌دهنده با یک پاسخ جفت‌سازی (Pairing Response) پاسخ می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 11 #497 [hci0] 0.026107 SMP: Pairing Request (0x01) len 6 IO capability: NoInputNoOutput (0x03) OOB data: Authentication data not present (0x00) Authentication requirement: Bonding, MITM, SC, CT2 (0x2d) Max encryption key size: 16 Initiator key distribution: IdKey Sign (0x06) Responder key distribution: IdKey Sign (0x06) < ACL Data TX: Handle 2048 flags 0x00 dlen 11 #499 [hci0] 0.026894 SMP: Pairing Response (0x02) len 6 IO capability: KeyboardDisplay (0x04) OOB data: Authentication data not present (0x00) Authentication requirement: Bonding, SC, CT2 (0x29) Max encryption key size: 16 Initiator key distribution: IdKey (0x02) Responder key distribution: IdKey (0x02) .EE .UNINDENT .UNINDENT .sp فیلدهای کلیدی جهت بررسی: .INDENT 0.0 .IP \(bu 2 \fBAuthentication requirement\fP \-\- پرچم \fBSC\fP نشان‌دهنده اتصالات امن (Secure Connections) است. عدم وجود آن به معنی جفت‌سازی سنتی (Legacy Pairing) است. .IP \(bu 2 \fBIO capability\fP \-\- مدل ارتباط (Just Works، Passkey Entry، Numeric Comparison، OOB) را تعیین می‌کند. .IP \(bu 2 \fBKey distribution\fP \-\- کلیدهایی که هر طرف پس از برقراری رمزنگاری ارسال خواهد کرد. \fBIdKey\fP = کلید تفکیک هویت (IRK)، \fBEncKey\fP = کلید بلندمدت (LTK، فقط در جفت‌سازی سنتی)، \fBSign\fP = کلید CSRK. .UNINDENT .sp \fBفاز ۲: احراز هویت (اتصالات امن - Secure Connections)\fP .sp برای جفت‌سازی اتصالات امن (تنظیم بودن پرچم \fBSC\fP)، هر دو دستگاه کلیدهای عمومی را تبادل کرده و سپس تبادل مقادیر confirm/random را انجام می‌دهند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 69 #501 [hci0] 0.098224 SMP: Pairing Public Key (0x0c) len 64 X: 1a2b3c4d... Y: 5e6f7a8b... < ACL Data TX: Handle 2048 flags 0x00 dlen 69 #503 [hci0] 0.148556 SMP: Pairing Public Key (0x0c) len 64 X: 9c8d7e6f... Y: 0a1b2c3d... < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #505 [hci0] 0.149003 SMP: Pairing Confirm (0x03) len 16 Confirm value: a1b2c3d4e5f6... > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #507 [hci0] 0.212884 SMP: Pairing Random (0x04) len 16 Random value: 1122334455... < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #509 [hci0] 0.213100 SMP: Pairing Random (0x04) len 16 Random value: 6677889900... > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #511 [hci0] 0.278003 SMP: Pairing DHKey Check (0x0d) len 16 E: aabbccddee... < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #513 [hci0] 0.278450 SMP: Pairing DHKey Check (0x0d) len 16 E: ffeeddccbb... .EE .UNINDENT .UNINDENT .sp پس از بررسی DHKey، آغازگر رمزنگاری را در سطح HCI آغاز می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Start Encryption (0x08|0x0019) plen 28 #515 [hci0] 0.279002 > HCI Event: Encryption Change (0x08) plen 4 #517 [hci0] 0.342556 Status: Success (0x00) Handle: 2048 Encryption: Enabled with AES\-CCM (0x01) .EE .UNINDENT .UNINDENT .sp \fBفاز ۲: احراز هویت (جفت‌سازی سنتی - Legacy Pairing)\fP .sp جفت‌سازی سنتی (بدون پرچم \fBSC\fP) تبادل کلید عمومی و بررسی DHKey را نادیده می‌گیرد. فقط مقادیر Confirm و Random تبادل می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #501 [hci0] 0.098224 SMP: Pairing Confirm (0x03) len 16 Confirm value: ... > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #503 [hci0] 0.162556 SMP: Pairing Confirm (0x03) len 16 Confirm value: ... < ACL Data TX: Handle 2048 flags 0x00 dlen 21 #505 [hci0] 0.163003 SMP: Pairing Random (0x04) len 16 Random value: ... > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #507 [hci0] 0.228884 SMP: Pairing Random (0x04) len 16 Random value: ... .EE .UNINDENT .UNINDENT .sp \fBفاز ۳: توزیع کلید (Phase 3: Key Distribution)\fP .sp پس از برقراری رمزنگاری، هر دستگاه کلیدها را همان‌طور که در فاز ۱ مذاکره شده بود توزیع می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #519 [hci0] 0.343002 SMP: Identity Information (0x08) len 16 Identity resolving key: 00112233445566778899aabbccddeeff > ACL Data RX: Handle 2048 flags 0x02 dlen 12 #521 [hci0] 0.343556 SMP: Identity Address Information (0x09) len 7 Address type: Public (0x00) Address: 00:11:22:33:44:55 .EE .UNINDENT .UNINDENT .sp پیام Identity Address Information آدرس عمومی یا تصادفی ایستا واقعی دستگاه را آشکار می‌کند (در مقایسه با آدرس خصوصی قابل تفکیک که در طول اتصال استفاده می‌شود). .sp برای جفت‌سازی سنتی (Legacy Pairing)، توزیع کلید LTK نیز ظاهر می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 21 #519 [hci0] 0.343002 SMP: Encryption Information (0x06) len 16 Long term key: 00112233... > ACL Data RX: Handle 2048 flags 0x02 dlen 15 #521 [hci0] 0.343556 SMP: Central Identification (0x07) len 10 EDIV: 0x1234 Rand: 0x0123456789abcdef .EE .UNINDENT .UNINDENT .SS "شکست در جفت‌سازی (Pairing Failure)" .sp هنگامی که جفت‌سازی با شکست مواجه می‌شود، یکی از دستگاه‌ها یک PDU از نوع Pairing Failed ارسال می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 6 #505 [hci0] 0.213002 SMP: Pairing Failed (0x05) len 1 Reason: Authentication requirements (0x03) .EE .UNINDENT .UNINDENT .sp دلایل شکست SMP: .TS box center; l|l|l. T{ کد T} T{ دلیل (Reason) T} T{ مفهوم تشخیصی T} _ T{ 0x01 T} T{ Passkey Entry Failed T} T{ کاربر فرآیند را لغو کرد یا کلید عبور (passkey) اشتباه وارد شد T} _ T{ 0x02 T} T{ OOB Not Available T} T{ داده‌های OOB انتظار می‌رفت اما ارائه نشد T} _ T{ 0x03 T} T{ Authentication Requirements T} T{ دستگاه‌ها نمی‌توانند روی سطح امنیت به توافق برسند (برای مثال، یکی نیازمند MITM است اما قابلیت‌های IO فقط Just Works را مجاز می‌داند) T} _ T{ 0x04 T} T{ Confirm Value Failed T} T{ بررسی رمزنگاری ناموفق بود؛ احتمال حمله MITM T} _ T{ 0x05 T} T{ Pairing Not Supported T} T{ دستگاه راه دور از جفت‌سازی پشتیبانی نمی‌کند T} _ T{ 0x06 T} T{ Encryption Key Size T} T{ عدم امکان توافق بر سر اندازه کلید رمزنگاری T} _ T{ 0x07 T} T{ Command Not Supported T} T{ دستور ناشناخته SMP دریافت شد T} _ T{ 0x08 T} T{ Unspecified Reason T} T{ شکست عمومی و نامشخص T} _ T{ 0x09 T} T{ Repeated Attempts T} T{ تلاش‌های جفت‌سازی محدود شده است (Rate\-limited)؛ پیش از تلاش مجدد صبر کنید T} _ T{ 0x0a T} T{ Invalid Parameters T} T{ فیلدهای نامعتبر در دستور SMP T} _ T{ 0x0b T} T{ DHKey Check Failed T} T{ توافق کلید ECDH ناموفق بود (فقط در SC) T} _ T{ 0x0c T} T{ Numeric Comparison Failed T} T{ کاربر مقایسه عددی (Numeric Comparison) را رد کرد T} _ T{ 0x0d T} T{ BR/EDR Pairing In Progress T} T{ جفت‌سازی کلاسیک از قبل فعال و در حال انجام است T} _ T{ 0x0e T} T{ Cross\-Transport Key Derivation Not Allowed T} T{ اشتقاق کلید بین‌انتقالی (CTKD) توسط خط‌مشی رد شد T} .TE .SS "خودکارسازی تحلیل جفت‌سازی (Automating Pairing Analysis)" .sp \fBشناسایی تمام تلاش‌های جفت‌سازی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPairing Request\e|Pairing Response\e|Pairing Failed\e|Pairing Public Key\e|DHKey Check\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی روش جفت‌سازی (اتصالات امن در مقابل سنتی)\fP: .INDENT 0.0 .IP \(bu 2 اگر \fBPairing Public Key\fP بین Request/Response و Confirm ظاهر شود: اتصالات امن (Secure Connections). .IP \(bu 2 اگر پس از Request/Response تنها Confirm/Random بیاید: جفت‌سازی سنتی (Legacy Pairing). .IP \(bu 2 خط \fBAuthentication requirement\fP را برای پرچم \fBSC\fP بررسی کنید. .UNINDENT .sp \fBتشخیص شکست‌های جفت‌سازی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPairing Failed\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBتطبیق جفت‌سازی با رمزنگاری\fP: .sp پس از جفت‌سازی موفقیت‌آمیز، انتظار رخداد \fBEncryption Change\fP با \fBStatus: Success\fP می‌رود\&. جستجو برای: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqEncryption Change\e|Encryption:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBشناسایی جفت‌سازی مجدد هنگام اتصال مجدد\fP: .sp اتصال‌های مجدد به یک دستگاه پیوند‌خورده (bonded) باید \fBEncryption Change\fP را بدون ترافیک SMP (با استفاده از کلیدهای ذخیره‌شده) نشان دهند. اگر در هنگام اتصال مجدد، پیام SMP Pairing Request ظاهر شود، پیوند در یکی از طرفین از بین رفته است. .sp \fBالگوی کامل عیب‌یابی جفت‌سازی\fP: .INDENT 0.0 .IP 1. 3 یافتن \fBPairing Request\fP \-\- یادداشت کردن handle، قابلیت‌های IO و الزامات احراز هویت .IP 2. 3 یافتن \fBPairing Response\fP \-\- مقایسه قابلیت‌های IO برای تعیین مدل ارتباط (association model) .IP 3. 3 بررسی وجود \fBPairing Failed\fP \-\- در صورت وجود، کد دلیل علت شکست را مشخص می‌کند .IP 4. 3 بررسی \fBEncryption Change\fP با \fBStatus: Success\fP \-\- کامل شدن جفت‌سازی را تأیید می‌کند .IP 5. 3 بررسی وجود \fBIdentity Address Information\fP \-\- آدرس واقعی دستگاه را آشکار می‌سازد .UNINDENT .\" This file is included by btmon.rst. . .SH "ردیابی کانال L2CAP (L2CAP CHANNEL TRACKING)" .sp پروتکل L2CAP (Logical Link Control and Adaptation Protocol) چندین کانال منطقی را روی یک اتصال ACL منفرد چندگانه‌سازی (مالتی‌پلکس) می‌کند. ابزار btmon سیگنالینگ‌های L2CAP را به طور خودکار رمزگشایی کرده و داده‌ها را بر اساس کانال به رمزگشاهای پروتکل‌های لایه‌های بالاتر هدایت می‌کند. .SS "کانال‌های ثابت (Fixed Channels)" .sp کانال‌های ثابت دارای شناسه‌های کانال (CID) از پیش تعیین‌شده هستند و برای برقراری نیازی به سیگنالینگ ندارند: .TS box center; l|l|l. T{ CID T} T{ پروتکل T} T{ توضیحات T} _ T{ 0x0001 T} T{ L2CAP Signaling (BR/EDR) T} T{ مدیریت کانال برای اتصالات کلاسیک T} _ T{ 0x0002 T} T{ Connectionless Reception T} T{ داده‌های بدون اتصال L2CAP T} _ T{ 0x0003 T} T{ AMP Manager T} T{ کنترل AMP (Alternate MAC/PHY) T} _ T{ 0x0004 T} T{ ATT T} T{ پروتکل ویژگی (عملیات‌های GATT) T} _ T{ 0x0005 T} T{ L2CAP Signaling (LE) T} T{ مدیریت کانال برای اتصالات LE T} _ T{ 0x0006 T} T{ SMP (LE) T} T{ پروتکل مدیریت امنیت (Security Manager Protocol) T} _ T{ 0x0007 T} T{ SMP (BR/EDR) T} T{ مدیریت امنیت روی بستر انتقال کلاسیک T} .TE .sp در خروجی btmon، ترافیک کانال‌های ثابت مستقیماً بدون هیچ مقدمه سیگنالینگ L2CAP رمزگشایی می‌شود. برای نمونه، ATT روی CID 0x0004 به صورت زیر ظاهر می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 7 #494 [hci0] 0.004488 ATT: Exchange MTU Request (0x02) len 2 Client RX MTU: 517 .EE .UNINDENT .UNINDENT .SS "کانال‌های پویا (BR/EDR) (Dynamic Channels (BR/EDR))" .sp بلوتوث کلاسیک از سیگنالینگ L2CAP روی CID 0x0001 برای برقراری کانال‌های پویا استفاده می‌کند. هر کانال توسط یک PSM (Protocol/Service Multiplexer) مشخص می‌شود که تعیین می‌کند چه پروتکلی روی آن اجرا شود. .sp \fBبرقراری کانال\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 256 flags 0x02 dlen 16 #142 [hci0] 2.034556 L2CAP: Connection Request (0x02) ident 3 len 4 PSM: 25 (0x0019) Source CID: 0x0040 < ACL Data TX: Handle 256 flags 0x00 dlen 20 #144 [hci0] 2.035002 L2CAP: Connection Response (0x03) ident 3 len 8 Destination CID: 0x0041 Source CID: 0x0040 Result: Connection successful (0x0000) Status: No further information available (0x0000) .EE .UNINDENT .UNINDENT .sp پس از برقراری اتصال، پیکربندی‌ها تبادل می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 256 flags 0x02 dlen 20 #146 [hci0] 2.035556 L2CAP: Configure Request (0x04) ident 4 len 8 Destination CID: 0x0041 Flags: 0x0000 Option: MTU (0x01) [2] MTU: 1024 < ACL Data TX: Handle 256 flags 0x00 dlen 18 #148 [hci0] 2.036003 L2CAP: Configure Response (0x05) ident 4 len 6 Source CID: 0x0040 Flags: 0x0000 Result: Success (0x0000) .EE .UNINDENT .UNINDENT .sp نگاشت‌های متداول PSM به پروتکل: .TS box center; l|l|l. T{ PSM T} T{ پروتکل T} T{ توضیحات T} _ T{ 0x0001 T} T{ SDP T} T{ پروتکل کشف سرویس (Service Discovery Protocol) T} _ T{ 0x0003 T} T{ RFCOMM T} T{ شبیه‌سازی درگاه سریال (SPP، HFP و غیره) T} _ T{ 0x000f T} T{ BNEP T} T{ پروتکل کپسوله‌سازی شبکه بلوتوث (Bluetooth Network Encapsulation Protocol) T} _ T{ 0x0017 T} T{ AVCTP T} T{ انتقال کنترل صوتی/تصویری (AVRCP) T} _ T{ 0x0019 T} T{ AVDTP T} T{ انتقال توزیع صوتی/تصویری (A2DP) T} _ T{ 0x001b T} T{ AVCTP Browsing T} T{ کانال مرورگری AVRCP T} _ T{ 0x001f T} T{ ATT (BR/EDR) T} T{ پروتکل صفت روی بستر سنتی T} _ T{ 0x0027 T} T{ EATT T} T{ پروتکل صفت بهبودیافته (Enhanced Attribute Protocol) T} .TE .SS "کانال‌های مبتنی بر اعتبار LE (LE Credit-Based Channels)" .sp اتصالات LE از سیگنالینگ L2CAP روی CID 0x0005 برای کانال‌های پویا استفاده می‌کنند. مکانیزم اتصال مبتنی بر اعتبار LE کنترل جریان را فراهم می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 18 #600 [hci0] 1.824003 LE L2CAP: LE Connection Request (0x14) ident 1 len 10 PSM: 39 (0x0027) Source CID: 0x0040 MTU: 517 MPS: 251 Credits: 10 > ACL Data RX: Handle 2048 flags 0x02 dlen 18 #602 [hci0] 1.886556 LE L2CAP: LE Connection Response (0x15) ident 1 len 10 Destination CID: 0x0041 MTU: 517 MPS: 251 Credits: 10 Result: Connection successful (0x0000) .EE .UNINDENT .UNINDENT .sp پروتکل EATT (Enhanced ATT) از PSM 0x0027 روی کانال‌های مبتنی بر اعتبار LE استفاده می‌کند تا چندین حامل (bearer) موازی برای ATT فراهم آورد. .SS "به‌روزرسانی‌های پارامترهای اتصال (Connection Parameter Updates)" .sp دستگاه‌های جانبی LE (Peripherals) به طور مکرر تغییر پارامترهای اتصال را از طریق سیگنالینگ L2CAP درخواست می‌کنند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 16 #493 [hci0] 0.003915 LE L2CAP: Connection Parameter Update Request (0x12) ident 1 len 8 Min interval: 24 Max interval: 40 Peripheral latency: 0 Timeout multiplier: 256 > ACL Data RX: Handle 2048 flags 0x02 dlen 10 #495 [hci0] 0.066003 LE L2CAP: Connection Parameter Update Response (0x13) ident 1 len 2 Result: Connection Parameters accepted (0x0000) .EE .UNINDENT .UNINDENT .sp نتیجه \fBConnection Parameters rejected (0x0001)\fP به این معنی است که دستگاه مرکزی درخواست را رد کرده است. .SS "خودکارسازی تحلیل L2CAP (Automating L2CAP Analysis)" .sp \fBیافتن تمام موارد برقراری کانال L2CAP\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqConnection Request\e|Connection Response\e|LE Connection Request\e|LE Connection Response\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردیابی استفاده از PSM\fP (مشخص می‌کند کدام پروتکل‌ها فعال هستند): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPSM:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن مشکلات به‌روزرسانی پارامترهای اتصال\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqParameter Update Request\e|Parameter Update Response\e|Parameters rejected\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن راه‌اندازی کانال EATT\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPSM: 39\e|Enhanced Credit\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردیابی یک کانال L2CAP خاص\fP: برای دنبال کردن ترافیک روی یک کانال پویا، شناسه‌های Source CID و Destination CID را از جفت درخواست/پاسخ اتصال (Connection Request/Response) یادداشت کنید. سپس آن CIDها را در فریم‌های داده بعدی جستجو نمایید. .SS "تخمین توان عملیاتی (Throughput Estimation)" .sp حالت \fB\-\-analyze\fP (\fB\-a\fP) در btmon، آمار هر کانال شامل توان عملیاتی را محاسبه می‌کند. برای هر کانال L2CAP موارد زیر گزارش می‌شود: .INDENT 0.0 .IP \(bu 2 \fBSpeed\fP: به صورت \fBbytes * 8 / latency_sum_ms\fP محاسبه می‌شود که در آن \fBlatency_sum_ms\fP مجموع اختلاف زمان بین بسته‌ها (نه مدت‌زمان واقعی ساعت دیواری / wall\-clock) است. این بدان معنی است که فاصله‌های بی‌کاری لحاظ نمی‌شوند، بنابراین این رقم نشان‌دهنده \fIنرخ ارسال فعال\fP است تا توان عملیاتی در سطح برنامه کاربردی. .IP \(bu 2 \fBMin/Avg/Max latency\fP: محدوده زمان بین رسیدن بسته‌ها (inter\-arrival time). .UNINDENT .sp خروجی نمونه: .INDENT 0.0 .INDENT 3.5 .sp .EX Found TX L2CAP channel with CID 64 PSM 128 (0x0080) Mode: LE Credit MTU: 672 MPS: 490 TX packets: 29120/29114 TX Latency: 1\-79 msec (~29 msec) TX size: 494\-494 octets (~494 octets) TX speed: ~571 Kb/s .EE .UNINDENT .UNINDENT .sp \fBجزئیات کانال نشان‌داده‌شده در حالت analyze:\fP .INDENT 0.0 .IP \(bu 2 \fBکانال‌های ثابت\fP (CID <= 7) نام پروتکل خود را نشان می‌دهند (مانند \fBATT\fP، \fBL2CAP Signaling (LE)\fP). .IP \(bu 2 \fBPSM\fP در هر دو مبنای ده‌دهی و شانزده‌شانزدهی نشان داده می‌شود. .IP \(bu 2 \fBMode\fP از گزینه‌های Configure Request (در BR/EDR) یا سیگنالینگ LE (مانند \fBBasic\fP، \fBERTM\fP، \fBLE Credit\fP، \fBEnhanced Credit\fP و غیره) رمزگشایی می‌شود. .IP \(bu 2 \fBMTU\fP و \fBMPS\fP از تبادلات سیگنالینگ استخراج می‌شوند. .UNINDENT .sp \fBنکات و محدودیت‌های توان عملیاتی:\fP .INDENT 0.0 .IP 1. 3 مقدار سرعت از مجموع تأخیر بین بسته‌ها به عنوان مخرج کسر استفاده می‌کند، نه زمان سپری‌شده واقعی (wall\-clock). اگر فرستنده متوقف شود (مثلاً در انتظار اعتبارها (Credits))، دوره بی‌کاری محاسبه نمی‌شود که این امر سرعت گزارش‌شده را نسبت به توان عملیاتی کلی بیشتر نشان می‌دهد. .IP 2. 3 تأخیر TX از زمان ارسال دستور تا رویداد تکمیل اندازه‌گیری می‌شود. تأخیر RX زمان بین رسیدن بسته‌های متوالی است. این موارد چیزهای متفاوتی را اندازه‌گیری می‌کنند، بنابراین سرعت‌های TX و RX برای یک کانال مشخص به طور مستقیم با یکدیگر قابل مقایسه نیستند. .IP 3. 3 برای توان عملیاتی پنجره‌ای (min/avg/max)، ابزار btsnoop\-analyzer از پنجره‌های نمونه‌برداری ۱ ثانیه‌ای بر حسب زمان واقعی استفاده می‌کند که دیدگاه واقع‌بینانه‌تری از نوسانات پهنای باند در سطح برنامه کاربردی ارائه می‌دهد. .UNINDENT .sp \fBاستخراج خودکار توان عملیاتی\fP از خروجی analyze در btmon: .INDENT 0.0 .INDENT 3.5 .sp .EX btmon \-a trace.btsnoop 2>/dev/null | grep \-E \(dqspeed:|Mode:|MTU:|MPS:|PSM\(dq .EE .UNINDENT .UNINDENT .\" This file is included by btmon.rst. . .SH "جریان پروتکل LE AUDIO (LE AUDIO PROTOCOL FLOW)" .sp فناوری LE Audio از یک پشته پروتکل چندلایه استفاده می‌کند که در ردگیری‌های btmon قابل مشاهده است\&. توالی راه‌اندازی شامل عملیات ATT روی مشخصه‌های خاص GATT (از جمله PACS و ASCS) و به دنبال آن مدیریت CIS/BIG در سطح HCI است\&. ابزار btmon تمام لایه‌ها را به‌طور کامل رمزگشایی می‌کند\&. .SS "کشف PAC (قابلیت‌های صوتی منتشرشده) (PAC Discovery)" .sp پیش از آغاز پخش جریان صوتی (Audio Streaming)، دستگاه‌ها قابلیت‌های کدک خود را از طریق سرویس قابلیت‌های صوتی منتشرشده (Published Audio Capabilities Service یا PACS) مبادله می‌کنند\&. کلاینت مشخصه‌های PACS را می‌خواند تا متوجه شود دستگاه راه دور از چه مواردی پشتیبانی می‌کند\&. .sp \fBخواندن PAC مربوط به Sink\fP (قابلیت‌های دریافت دستگاه راه دور): .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 7 #550 [hci0] 0.824003 ATT: Read Request (0x0a) len 2 Handle: 0x0075 > ACL Data RX: Handle 2048 flags 0x02 dlen 30 #552 [hci0] 0.886556 ATT: Read Response (0x0b) len 25 Handle: 0x0075 Number of PAC(s): 1 Codec: LC3 (0x06) Codec Specific Capabilities: #0 Sampling Frequency: 8000 Hz 16000 Hz 24000 Hz 32000 Hz 48000 Hz Frame Duration: 7.5 ms 10 ms Audio Channel Counts: 1 Frame Length: 26 \- 240 .EE .UNINDENT .UNINDENT .sp رکورد PAC قابلیت‌های کدک را با استفاده از کدگذاری LTV (طول-نوع-مقدار / Length-Type-Value) نمایش می‌دهد\&. فیلدهای کلیدی: .INDENT 0.0 .IP \(bu 2 \fBCodec\fP \-\- کدک اجباری LE Audio یعنی \fBLC3 (0x06)\fP .IP \(bu 2 \fBSampling Frequency\fP \-\- نرخ‌های نمونه‌برداری پشتیبانی‌شده (بیت‌ماسک) .IP \(bu 2 \fBFrame Duration\fP \-\- مدت‌زمان فریم‌های پشتیبانی‌شده (۷\&.۵ میلی‌ثانیه و/یا ۱۰ میلی‌ثانیه) .IP \(bu 2 \fBAudio Channel Counts\fP \-\- تعداد کانال‌های صوتی پشتیبانی‌شده .IP \(bu 2 \fBFrame Length\fP \-\- حداقل و حداکثر بایت‌ها (اکتت‌ها) در هر فریم کدک .UNINDENT .sp \fBAudio Locations\fP (تخصیص کانال): .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #554 [hci0] 0.948003 ATT: Read Response (0x0b) len 4 Handle: 0x0077 Location: Front Left .EE .UNINDENT .UNINDENT .sp \fBAvailable Audio Contexts\fP (زمینه‌ها و کاربردهای صوتی موجود): .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #558 [hci0] 1.012556 ATT: Read Response (0x0b) len 4 Handle: 0x007b Sink Context: Media Conversational Source Context: Unspecified .EE .UNINDENT .UNINDENT .SS "کشف ASE و ماشین وضعیت (ASE Discovery and State Machine)" .sp سرویس کنترل جریان صوتی (Audio Stream Control Service یا ASCS) ماشین وضعیت ASE (نقطه پایانی جریان صوتی / Audio Stream Endpoint) را مدیریت می‌کند\&. هر ASE در حین راه‌اندازی و برچیدن جریان صوتی، از میان مجموعه‌ای مشخص از وضعیت‌ها عبور می‌کند\&. .sp \fBماشین وضعیت ASE\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX Idle ──► Codec Configured ──► QoS Configured ──► Enabling ──► Streaming │ Idle ◄── Releasing ◄──────── Disabling ◄─────────────────────────┘ .EE .UNINDENT .UNINDENT .sp \fBاعلان وضعیت ASE (ASE Status notification)\fP (تغییر وضعیت): .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 20 #580 [hci0] 1.456003 ATT: Handle Value Notification (0x1b) len 15 Handle: 0x0088 ASE ID: 0x01 State: Codec Configured (0x01) Framing: Unframed PDUs supported (0x00) PHY: 0x02 LE 2M PHY (0x02) RTN: 2 Max Transport Latency: 10 Presentation Delay Min: 20000 us Presentation Delay Max: 40000 us Preferred Presentation Delay Min: 20000 us Preferred Presentation Delay Max: 40000 us Codec: LC3 (0x06) Sampling Frequency: 48000 Hz Frame Duration: 10 ms Audio Channel Allocation: Front Left Frame Length: 120 .EE .UNINDENT .UNINDENT .sp \fBعملیات‌های نقطه کنترل ASE (ASE Control Point operations)\fP تغییرات وضعیت را هدایت می‌کنند\&. کلاینت برای صدور دستورها، در مشخصه نقطه کنترل ASE می‌نویسد: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 25 #582 [hci0] 1.518003 ATT: Write Request (0x12) len 20 Handle: 0x008b ASE Control Point: Config Codec (0x01) ASE ID: 0x01 Target Latency: Low Latency (0x01) PHY: LE 2M PHY Codec: LC3 (0x06) Sampling Frequency: 48000 Hz Frame Duration: 10 ms Audio Channel Allocation: Front Left Frame Length: 120 .EE .UNINDENT .UNINDENT .sp دستورهای نقطه کنترل ASE (ASE Control Point): .TS box center; l|l|l. T{ کد عملیاتی (Opcode) T} T{ دستور (Command) T} T{ هدف (Purpose) T} _ T{ 0x01 T} T{ Config Codec T} T{ انتخاب کدک و پارامترها (Idle → Codec Configured) T} _ T{ 0x02 T} T{ Config QoS T} T{ تنظیم شناسه‌های CIG/CIS و پارامترهای کیفیت خدمات QoS (Codec Configured → QoS Configured) T} _ T{ 0x03 T} T{ Enable T} T{ راه‌اندازی ASE به همراه متاداده (QoS Configured → Enabling) T} _ T{ 0x04 T} T{ Receiver Start Ready T} T{ اعلام آمادگی گیرنده (Enabling → Streaming در سمت سرور) T} _ T{ 0x05 T} T{ Disable T} T{ توقف جریان صوتی (Streaming → Disabling) T} _ T{ 0x06 T} T{ Receiver Stop Ready T} T{ اعلام توقف گیرنده T} _ T{ 0x07 T} T{ Update Metadata T} T{ تغییر متاداده در حین پخش جریان صوتی T} _ T{ 0x08 T} T{ Release T} T{ برچیدن ASE (هر وضعیتی → Releasing → Idle) T} .TE .SS "جریان صوتی تک‌پخشی BAP (BAP Unicast Audio Flow)" .sp یک دستگاه ممکن است چندین ASE با جهت‌های گوناگون ارائه دهد\&. در سناریوی مکالمه (تلفنی)، دستگاه راه دور معمولاً دست‌کم دارای یک ASE از نوع \fBSink\fP (دریافت‌کننده صدا، مانند بلندگو) و یک ASE از نوع \fBSource\fP (ارسال‌کننده صدا، مانند میکروفون) است\&. هر دو ASE از یک CIG مشترک و اغلب از همان CIS یکسان استفاده می‌کنند و از قابلیت دوطرفه جریان‌های هم‌گاه متصل (Connected Isochronous Streams یا CIS) بهره می‌برند\&. .sp \fBشاخص‌های جهت در ردگیری‌های btmon:\fP .INDENT 0.0 .IP \(bu 2 دستور \fBReceiver Start Ready\fP فقط برای ASEهای \fBSource\fP (ASEهایی که صدا را به سمت دستگاه محلی می‌فرستند) ارسال می‌شود\&. سرور این دستور را صادر می‌کند تا نشان دهد آماده ارسال داده است\&. .IP \(bu 2 دستور \fBReceiver Stop Ready\fP نیز به همین ترتیب برای ASEهای Source اعمال می‌گردد\&. .IP \(bu 2 نقاط پایانی \fBSink\fP به طور مستقیم و بدون نیاز به \fBReceiver Start Ready\fP از وضعیت Enabling به Streaming منتقل می‌شوند\&. .UNINDENT .sp \fBتوالی راه‌اندازی معمول دوطرفه\fP (دو ASE روی یک CIS): .INDENT 0.0 .INDENT 3.5 .sp .EX Config Codec ASE ID=1 (Sink) → Codec Configured Config Codec ASE ID=3 (Source) → Codec Configured Config QoS ASE ID=1 → QoS Configured (CIG=X, CIS=Y) Config QoS ASE ID=3 → QoS Configured (CIG=X, CIS=Y) Enable ASE ID=1 → Enabling → Streaming (immediate) Enable ASE ID=3 → Enabling CIS Established (Success) Setup ISO Data Path Input (Host→Controller, for Sink) Setup ISO Data Path Output (Controller→Host, for Source) Receiver Start Ready ASE ID=3 → Streaming .EE .UNINDENT .UNINDENT .sp هر دو ASE ممکن است در زمان‌های متفاوتی به وضعیت Streaming برسند\&. ASE مربوط به Sink می‌تواند به محض برقراری ارتباط CIS دریافت صدا را آغاز کند، در حالی که ASE مربوط به Source منتظر دست‌تکانی \fBReceiver Start Ready\fP می‌ماند\&. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 \fBاین یک رفتار عادی است\&.\fP مشاهده یک ASE از نوع Source و یک ASE از نوع Sink روی یک اتصال، پیکربندی استاندارد دوطرفه (مکالمه‌ای) است\&. این وضعیت یک خطا یا پیکربندی نادرست \fBنیست\fP\&. اشتراک‌گذاری یک CIS واحد میان هر دو جهت، بهینه و مورد انتظار است\&. .UNINDENT .UNINDENT .sp \fBچندین ASE در هر جهت\fP نیز معتبر و مجاز است\&. برای نمونه، یک هدست استریو ممکن است دو ASE از نوع Sink (کانال‌های چپ و راست) و یک ASE از نوع Source (میکروفون مونو) ارائه دهد که هر کدام دارای هندل GATT اختصاصی خود برای دریافت اعلان‌های وضعیت ASE هستند\&. .SS "برقراری ارتباط CIS (CIS Establishment)" .sp پس از پیکربندی کیفیت خدمات (QoS) مربوط به ASE، میزبان جریان‌های هم‌گاه متصل (Connected Isochronous Streams یا CIS) را در سطح HCI ایجاد می‌کند\&. .sp \fBپارامترهای CIG\fP (پیکربندی گروه CIS): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Set CIG Parameters (0x08|0x0062) plen 26 #590 [hci0] 1.624003 CIG ID: 0x00 Central to Peripheral SDU Interval: 10000 us Peripheral to Central SDU Interval: 10000 us SCA: 0x00 Packing: Sequential (0x00) Framing: Unframed (0x00) Central to Peripheral Max Latency: 10 ms Peripheral to Central Max Latency: 10 ms Number of CIS: 1 CIS ID: 0x00 Central to Peripheral Max SDU: 120 Peripheral to Central Max SDU: 0 Central to Peripheral PHY: LE 2M PHY Peripheral to Central PHY: LE 2M PHY Central to Peripheral RTN: 2 Peripheral to Central RTN: 2 > HCI Event: Command Complete (0x0e) plen 8 #592 [hci0] 1.624556 LE Set CIG Parameters (0x08|0x0062) ncmd 1 Status: Success (0x00) CIG ID: 0x00 Number of Handles: 1 Connection Handle: 2064 .EE .UNINDENT .UNINDENT .sp \fBایجاد CIS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Create CIS (0x08|0x0064) plen 9 #594 [hci0] 1.688003 Number of CIS: 1 CIS Handle: 2064 ACL Handle: 2048 > HCI Event: LE Meta Event (0x3e) plen 29 #596 [hci0] 1.756556 LE CIS Established (0x19) Status: Success (0x00) Connection Handle: 2064 CIG Sync Delay: 5000 us CIS Sync Delay: 5000 us Central to Peripheral Latency: 10000 us Peripheral to Central Latency: 10000 us Central to Peripheral PHY: LE 2M PHY Peripheral to Central PHY: LE 2M PHY NSE: 3 Central to Peripheral BN: 1 Peripheral to Central BN: 0 Central to Peripheral FT: 2 Peripheral to Central FT: 2 Max PDU C to P: 120 Max PDU P to C: 0 ISO Interval: 10.00 msec (0x0008) .EE .UNINDENT .UNINDENT .sp توجه داشته باشید که هندل CIS (مقدار 2064) با هندل ACL (مقدار 2048) متفاوت است\&. بسته‌های داده CIS از هندل CIS استفاده می‌کنند\&. .sp \fBراه‌اندازی مسیر داده ISO (ISO Data Path Setup)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Setup ISO Data Path (0x08|0x006e) plen 13 #598 [hci0] 1.820003 Handle: 2064 Data Path Direction: Input (Host to Controller) (0x00) Data Path ID: HCI (0x00) Coding Format: LC3 (0x06) Company ID: 0x0000 Vendor Codec ID: 0x0000 Controller Delay: 0 us .EE .UNINDENT .UNINDENT .sp پس از این مرحله، بسته‌های داده ISO روی هندل CIS جریان می‌یابند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ISO Data TS: Handle 2064 flags 0x02 dlen 124 #600 [hci0] 1.884003 .EE .UNINDENT .UNINDENT .SS "صدای همگانی (BIS / Auracast) (Broadcast Audio (BIS / AURACAST))" .sp جریان‌های هم‌گاه همگانی (Broadcast Isochronous Streams) به جای CIS از گروه هم‌گاه همگانی (Broadcast Isochronous Group یا BIG) استفاده می‌کنند\&. راه‌اندازی شامل تبلیغات دوره‌ای به همراه اعلان‌های BASE (نقطه پایانی منبع صوتی همگانی / Broadcast Audio Source Endpoint) است\&. .sp \fBاعلان BASE\fP (در داده‌های تبلیغات دوره‌ای): .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 80 #200 [hci0] 0.500003 LE Periodic Advertising Report (0x0f) ... Service Data: Basic Audio Announcement (0x1851) Presentation Delay: 40000 us Number of Subgroups: 1 Number of BIS: 2 Codec: LC3 (0x06) Sampling Frequency: 48000 Hz Frame Duration: 10 ms Frame Length: 120 BIS #1 Audio Channel Allocation: Front Left BIS #2 Audio Channel Allocation: Front Right .EE .UNINDENT .UNINDENT .sp \fBایجاد BIG\fP (سمت منبع): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Create BIG (0x08|0x0068) plen 31 #210 [hci0] 0.600003 BIG Handle: 0x00 Advertising Handle: 0x01 Number of BIS: 2 SDU Interval: 10000 us Max SDU: 120 Max Latency: 10 ms RTN: 2 PHY: LE 2M PHY Packing: Sequential (0x00) Framing: Unframed (0x00) Encryption: Unencrypted (0x00) .EE .UNINDENT .UNINDENT .sp \fBهمگام‌سازی BIG\fP (سمت گیرنده): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE BIG Create Sync (0x08|0x006b) plen 15 #220 [hci0] 0.700003 BIG Handle: 0x00 Sync Handle: 0x0001 Encryption: Unencrypted (0x00) Number of BIS: 2 BIS: 0x01 BIS: 0x02 .EE .UNINDENT .UNINDENT .SS "جریان گیرنده همگام‌سازی BIG (BIG Sync Receiver Flow)" .sp گیرنده پیش از آن‌که بتواند صدای همگانی (Broadcast Audio) را دریافت کند، باید توالی مشخصی از مراحل را تکمیل نماید\&. زنجیره پیش‌نیازهای حیاتی عبارت است از: .INDENT 0.0 .IP 1. 3 \fBهمگام‌سازی با تبلیغات دوره‌ای (PA)\fP \-\- گیرنده ابتدا باید رشته تبلیغات دوره‌ای فرستنده برودکست را کشف کرده و با آن همگام شود\&. .IP 2. 3 \fBدریافت گزارش‌های PA حاوی BASE\fP \-\- داده‌های تبلیغات دوره‌ای شامل ساختار BASE (نقطه پایانی منبع صوتی همگانی) است که پیکربندی کدک برودکست را توصیف می‌کند\&. .IP 3. 3 \fBدریافت گزارش تبلیغاتی BIG Info\fP \-\- این رویداد به گیرنده اطلاع می‌دهد که یک BIG در رشته تبلیغات دوره‌ای وجود دارد و پارامترهای آن (تعداد BIS، رمزنگاری، فاصله زمانی SDU و غیره) را ارائه می‌دهد\&. \fBاین گیت و شرط حیاتی است\fP: بدون دریافت BIG Info، گیرنده نمی‌تواند دستور \fBLE BIG Create Sync\fP را صادر کند\&. .IP 4. 3 \fBصدور دستور LE BIG Create Sync\fP \-\- با استفاده از هندل همگام‌سازی مرحله ۱ و پارامترهای مرحله ۳\&. .IP 5. 3 \fBدریافت رویداد BIG Sync Established\fP \-\- کنترل‌کننده همگام‌سازی را به همراه هندل‌های اتصال BIS تأیید می‌کند\&. .IP 6. 3 \fBراه‌اندازی مسیر داده ISO (Setup ISO Data Path)\fP \-\- پیکربندی مسیر داده برای هر یک از BISها\&. .IP 7. 3 \fBجریان یافتن داده‌های ISO\fP \-\- بسته‌های صوتی همگانی دریافت می‌شوند\&. .UNINDENT .sp اگر هر یک از این مراحل با شکست مواجه شود یا وجود نداشته باشد، مراحل بعدی نمی‌توانند ادامه یابند\&. رایج‌ترین الگوی شکست این است که \fBBIG Info هرگز دریافت نمی‌شود\fP (برای مثال، داده‌های تبلیغات دوره‌ای شامل BIG نیست، یا همگام‌سازی PA پیش از رسیدن BIG Info قطع شده است)، که به این معنی است که دستور \fBLE BIG Create Sync\fP هرگز ارسال نخواهد شد\&. .SS "بدون PAST (همگام‌سازی مستقیم PA) (Without PAST (Direct PA Sync))" .sp هنگامی که گیرنده به‌طور مستقیم (بدون کمک دستیار برودکست / Broadcast Assistant) برای تبلیغات دوره‌ای اسکن کرده و با آن همگام می‌شود: .sp \fBمرحله ۱ \-\- ایجاد همگام‌سازی PA (Create PA sync)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Periodic Advertising Create Sync (0x08|0x0044) plen 14 #100 [hci0] 0.100003 Options: 0x0000 SID: 0x01 Adv Address Type: Public (0x00) Adv Address: XX:XX:XX:XX:XX:XX Skip: 0x0000 Sync Timeout: 2000 msec (0x00c8) Sync CTE Type: 0x0000 .EE .UNINDENT .UNINDENT .sp \fBمرحله ۲ \-\- برقراری همگام‌سازی PA (تخصیص هندل همگام‌سازی)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 16 #105 [hci0] 0.150003 LE Periodic Advertising Sync Established (0x0e) Status: Success (0x00) Sync Handle: 0x0001 Advertising SID: 0x01 Advertiser Address Type: Public (0x00) Advertiser Address: XX:XX:XX:XX:XX:XX Advertiser PHY: LE 2M PHY (0x02) Periodic Advertising Interval: 10.000 msec (0x0008) Advertiser Clock Accuracy: 0x05 .EE .UNINDENT .UNINDENT .sp \fBمرحله ۳ \-\- گزارش‌های PA (شامل داده‌های BASE)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 80 #110 [hci0] 0.200003 LE Periodic Advertising Report (0x0f) Sync Handle: 0x0001 ... Service Data: Basic Audio Announcement (0x1851) .EE .UNINDENT .UNINDENT .sp \fBمرحله ۴ \-\- گزارش تبلیغاتی BIG Info (گیت حیاتی)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 24 #120 [hci0] 0.300003 LE BIG Info Advertising Report (0x22) Sync Handle: 0x0001 Number BIS: 2 NSE: 4 ISO Interval: 10.000 msec (0x0008) BN: 2 PTO: 1 IRC: 2 Maximum PDU: 120 SDU Interval: 10000 us Maximum SDU: 120 PHY: LE 2M PHY (0x02) Framing: Unframed (0x00) Encryption: 0x00 .EE .UNINDENT .UNINDENT .sp این رویداد هر بار که کنترل‌کننده یک بسته تبلیغات دوره‌ای حاوی BIG Info دریافت کند، تولید می‌شود\&. این رویداد تمامی پارامترهای مورد نیاز گیرنده را برای تصمیم‌گیری در مورد همگام‌سازی با BIG فراهم می‌کند\&. فیلدهای کلیدی: .INDENT 0.0 .IP \(bu 2 \fBNumber BIS\fP \-\- تعداد جریان‌های BIS موجود\&. .IP \(bu 2 \fBSDU Interval\fP و \fBMaximum SDU\fP \-\- زمان‌بندی و اندازه فریم صوتی\&. .IP \(bu 2 \fBEncryption\fP \-\- مشخص می‌کند که آیا کد برودکست (Broadcast Code) لازم است (0x01) یا خیر (0x00)\&. در صورت رمزنگاری، گیرنده باید کد برودکست صحیح را در \fBLE BIG Create Sync\fP ارائه دهد\&. .IP \(bu 2 \fBSync Handle\fP \-\- باید با یک همگام‌سازی PA فعال فعلی مطابقت داشته باشد\&. .UNINDENT .sp \fBمرحله ۵ \-\- دستور BIG Create Sync (با استفاده از هندل همگام‌سازی + BIG Info)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE BIG Create Sync (0x08|0x006b) plen 15 #130 [hci0] 0.400003 BIG Handle: 0x00 BIG Sync Handle: 0x0001 Encryption: Unencrypted (0x00) Broadcast Code: 00000000000000000000000000000000 Maximum Number Subevents: 0x00 Timeout: 2000 ms (0x00c8) Number of BIS: 2 BIS: 0x01 BIS: 0x02 .EE .UNINDENT .UNINDENT .sp \fBمرحله ۶ \-\- برقراری همگام‌سازی BIG (BIG Sync Established)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 20 #135 [hci0] 0.450003 LE BIG Sync Established (0x1d) Status: Success (0x00) BIG Handle: 0x00 Transport Latency: 10000 us NSE: 4 BN: 2 PTO: 1 IRC: 2 Maximum PDU: 120 ISO Interval: 10.000 msec (0x0008) Connection Handle: 0x0010 Connection Handle: 0x0011 .EE .UNINDENT .UNINDENT .sp در صورت موفقیت، کنترل‌کننده هندل‌های اتصال BIS را اختصاص می‌دهد (0x0010 و 0x0011 در بالا)\&. یک وضعیت (Status) غیرصفر نشان‌دهنده شکست است \-\- خطاهای رایج: .INDENT 0.0 .IP \(bu 2 \fB0x3e\fP (برقراری ارتباط با شکست مواجه شد / Connection Failed to be Established) \-\- پارامترهای BIG مطابقت ندارند یا BIG دیگر وجود ندارد\&. .IP \(bu 2 \fB0x3f\fP (رسیدن به حد مجاز / Limit Reached) \-\- منابع کنترل‌کننده به پایان رسیده است\&. .UNINDENT .sp \fBمرحله ۷ \-\- راه‌اندازی مسیر داده ISO (برای هر BIS)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Setup ISO Data Path (0x08|0x006e) plen 13 #140 [hci0] 0.500003 Connection Handle: 0x0010 Data Path Direction: Output (Controller to Host) (0x01) Data Path ID: HCI (0x00) < HCI Command: LE Setup ISO Data Path (0x08|0x006e) plen 13 #145 [hci0] 0.550003 Connection Handle: 0x0011 Data Path Direction: Output (Controller to Host) (0x01) Data Path ID: HCI (0x00) .EE .UNINDENT .UNINDENT .sp \fBمرحله ۸ \-\- جریان یافتن داده‌های ISO روی هندل‌های BIS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > ISO Data: Handle 0x0010 flags 0x02 dlen 124 #150 [hci0] 0.600003 > ISO Data: Handle 0x0011 flags 0x02 dlen 124 #151 [hci0] 0.600003 .EE .UNINDENT .UNINDENT .SS "همراه با PAST (انتقال همگام‌سازی تبلیغات دوره‌ای) (With PAST (Periodic Advertising Sync Transfer))" .sp هنگامی که یک دستیار برودکست (مانند یک گوشی هوشمند) به یک نماینده اسکن (مانند سمعک) کمک می‌کند تا با یک پخش همگانی همگام شود، می‌تواند همگام‌سازی PA را از طریق PAST بر روی یک اتصال ACL موجود منتقل کند\&. این کار از اسکن و همگام‌سازی مستقیم نماینده با رشته PA جلوگیری می‌کند\&. .sp پروتکل BASS (سرویس اسکن صوتی همگانی / Broadcast Audio Scan Service) این فرایند را هماهنگ می‌کند: .INDENT 0.0 .IP 1. 3 دستیار یک عملیات \fBAdd Source\fP را روی نقطه کنترل BASS نماینده می‌نویسد که در آن \fBPA Sync\fP روی \fB0x01\fP (همگام‌سازی از طریق PAST) تنظیم شده است\&. .IP 2. 3 نماینده با تنظیم پارامترهای PAST، خود را برای دریافت انتقال آماده می‌کند\&. .IP 3. 3 دستیار همگام‌سازی PA خود را به نماینده منتقل می‌کند\&. .IP 4. 3 نماینده رویداد PAST را به همراه یک هندل همگام‌سازی دریافت می‌کند\&. .IP 5. 3 از این نقطه به بعد، جریان مانند حالت بدون PAST ادامه می‌یابد (گزارش‌های PA → رویداد BIG Info → دستور BIG Create Sync → و غیره)\&. .UNINDENT .sp عملیات \fBBASS Add Source\fP (نوشتن دستیار در نماینده، مشاهده‌شده در ATT): .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 64 flags 0x00 dlen 27 #300 [hci0] 1.000003 ATT: Write Command (0x52) len 22 Handle: 0x0025 Data: 04... Opcode: Add Source (0x04) Advertiser Address Type: Public (0x00) Advertiser Address: XX:XX:XX:XX:XX:XX Advertising SID: 0x01 PA Sync: Synchronize to PA \- PAST (0x01) PA Interval: 0x0008 Number of Subgroups: 1 BIS Sync: 0x00000003 Metadata Length: 0 .EE .UNINDENT .UNINDENT .sp مقادیر PA Sync در عملیات Add Source: .INDENT 0.0 .IP \(bu 2 \fB0x00\fP \-\- عدم همگام‌سازی با PA .IP \(bu 2 \fB0x01\fP \-\- همگام‌سازی با PA، قابلیت PAST موجود است .IP \(bu 2 \fB0x02\fP \-\- همگام‌سازی با PA، قابلیت PAST موجود نیست (نماینده باید مستقیماً اسکن و همگام‌سازی کند) .UNINDENT .sp \fBپارامترهای PAST (PAST Parameters)\fP (نماینده برای دریافت انتقال آماده می‌شود): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Periodic Advertising Sync Transfer Parameters (0x08|0x005c) plen 8 #310 [hci0] 1.100003 Connection handle: 64 Mode: Enabled with report events enabled (0x02) Skip: 0x00 Sync timeout: 2000 msec (0x00c8) Sync CTE Type: 0x0000 .EE .UNINDENT .UNINDENT .sp \fBانتقال PAST (PAST Transfer)\fP (دستیار همگام‌سازی PA خود را ارسال می‌کند): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Periodic Advertising Sync Transfer (0x08|0x005a) plen 6 #320 [hci0] 1.200003 Connection handle: 64 Service data: 0x0001 Sync handle: 1 .EE .UNINDENT .UNINDENT .sp \fBدریافت PAST (PAST Received)\fP (نماینده هندل همگام‌سازی را دریافت می‌کند): .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 19 #325 [hci0] 1.250003 LE Periodic Advertising Sync Transfer Received (0x18) Status: Success (0x00) Handle: 64 Connection handle: 64 Service data: 0x0001 Sync handle: 1 SID: 0x01 Address type: Public (0x00) Address: XX:XX:XX:XX:XX:XX PHY: LE 2M PHY (0x02) Periodic advertising Interval: 10.000 Clock Accuracy: 0x05 .EE .UNINDENT .UNINDENT .sp در صورت موفقیت، نماینده اکنون دارای یک همگام‌سازی PA است (\fBSync handle: 1\fP) و دریافت گزارش‌های PA و رویدادهای BIG Info را آغاز خواهد کرد و جریان را از مرحله ۳ حالت بدون PAST در بالا ادامه می‌دهد\&. .sp \fBنکته:\fP .INDENT 0.0 .INDENT 3.5 \fBشرایط رقابتی (Race condition)\fP: دستور PAST Parameters باید \fBپیش از\fP ارسال PAST Transfer توسط دستیار فرستاده شود\&. در BlueZ، وضعیت همگام‌سازی PA در BASS پس از تکمیل کاوش تنظیم می‌شود تا از ارسال PAST توسط دستگاه راه دور پیش از آنکه هسته پارامترهای PAST را در سطح HCI فعال کند، جلوگیری شود\&. .UNINDENT .UNINDENT .SS "برچیدن همگام‌سازی BIG (BIG Sync Teardown)" .sp \fBبرچیدن به ابتکار گیرنده\fP \-\- گیرنده همگام‌سازی BIG خود را خاتمه می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE BIG Terminate Sync (0x08|0x006c) plen 1 #500 [hci0] 5.000003 BIG Handle: 0x00 > HCI Event: Command Complete (0x0e) plen 5 #501 [hci0] 5.001003 LE BIG Terminate Sync (0x08|0x006c) ncmd 1 Status: Success (0x00) BIG Handle: 0x00 .EE .UNINDENT .UNINDENT .sp \fBبرچیدن به ابتکار فرستنده برودکست\fP \-\- فرستنده BIG خود را خاتمه می‌دهد و گیرنده رویداد BIG Sync Lost را دریافت می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 2 #510 [hci0] 6.000003 LE BIG Sync Lost (0x1e) BIG Handle: 0x00 Reason: Connection Terminated By Local Host (0x16) .EE .UNINDENT .UNINDENT .sp فیلد \fBReason\fP دلیل قطع همگام‌سازی را نشان می‌دهد: .INDENT 0.0 .IP \(bu 2 \fB0x08\fP (اتمام مهلت اتصال / Connection Timeout) \-\- بسته‌های BIG در مدت مهلت همگام‌سازی دریافت نشدند\&. .IP \(bu 2 \fB0x13\fP (اتصال توسط کاربر راه دور خاتمه یافت / Remote User Terminated Connection) \-\- فرستنده برودکست عمداً BIG را متوقف کرد\&. .IP \(bu 2 \fB0x16\fP (اتصال توسط میزبان محلی خاتمه یافت / Connection Terminated By Local Host) \-\- کنترل‌کننده محلی اتصال را خاتمه داد\&. .IP \(bu 2 \fB0x3e\fP (برقراری ارتباط با شکست مواجه شد / Connection Failed to be Established) \-\- در ابتدا امکان برقراری همگام‌سازی وجود نداشت\&. .UNINDENT .sp \fBخاتمه BIG در سمت منبع (Source\-side BIG termination)\fP (فرستنده برودکست را برمی‌چیند): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Terminate BIG (0x08|0x006a) plen 2 #520 [hci0] 7.000003 BIG Handle: 0x00 Reason: Connection Terminated By Local Host (0x16) > HCI Event: LE Meta Event (0x3e) plen 2 #521 [hci0] 7.001003 LE BIG Terminate (0x1c) BIG Handle: 0x00 Reason: Connection Terminated By Local Host (0x16) .EE .UNINDENT .UNINDENT .SS "عیب‌یابی شکست همگام‌سازی BIG (BIG Sync Failure Diagnosis)" .sp هنگام تحلیل ردگیری در مواردی که همگام‌سازی BIG شکست می‌خورد، موارد زیر را به ترتیب بررسی کنید: .INDENT 0.0 .IP 1. 3 \fBآیا همگام‌سازی PA برقرار شده است؟\fP \-\- به دنبال رویداد \fBLE Periodic Advertising Sync Established\fP با وضعیت \fBStatus: Success\fP بگردید\&. اگر وجود ندارد، گیرنده هرگز با رشته PA همگام نشده است\&. .IP 2. 3 \fBآیا گزارش‌های PA دریافت می‌شوند؟\fP \-\- به دنبال رویدادهای \fBLE Periodic Advertising Report\fP بگردید\&. اگر پس از همگام‌سازی PA غایب باشند، ممکن است رشته PA قطع شده باشد\&. .IP 3. 3 \fBآیا BIG Info دریافت شده است؟\fP \-\- به دنبال \fBLE BIG Info Advertising Report\fP بگردید\&. \fBاگر این رویداد هرگز ظاهر نشود، BIG روی این رشته PA وجود ندارد\fP، یا فرستنده برودکست هنوز آن را راه‌اندازی نکرده است\&. بدون BIG Info، دستور \fBLE BIG Create Sync\fP ارسال نمی‌شود\&. .IP 4. 3 \fBآیا BIG Create Sync ارسال شده است؟\fP \-\- اگر BIG Info دریافت شده اما \fBLE BIG Create Sync\fP هرگز ارسال نشده است، منطق سمت میزبان در واکنش به BIG Info عمل نکرده است (مثلاً ناسازگاری کدک، عدم تطابق رمزنگاری یا اشکال در سطح برنامه)\&. .IP 5. 3 \fBآیا BIG Sync Established با موفقیت انجام شد؟\fP \-\- فیلد \fBStatus\fP را بررسی کنید\&. یک وضعیت غیرصفر به این معنی است که کنترل‌کننده نتوانسته با BIG همگام شود\&. .IP 6. 3 \fBآیا مسیر داده ISO راه‌اندازی شده است؟\fP \-\- به دنبال \fBLE Setup ISO Data Path\fP برای هر یک از هندل‌های BIS برگرفته از BIG Sync Established بگردید\&. .IP 7. 3 \fBآیا داده‌های ISO جریان دارند؟\fP \-\- به دنبال بسته‌های \fBISO Data\fP روی هندل‌های BIS بگردید\&. .UNINDENT .SS "خودکارسازی تحلیل LE Audio (Automating LE Audio Analysis)" .sp \fBشناسایی فعالیت LE Audio\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqASE Control Point\e|ASE ID\e|State:.*Codec Configured\e|State:.*QoS Configured\e|State:.*Enabling\e|State:.*Streaming\e|State:.*Releasing\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردگیری تغییرات وضعیت ASE\fP برای یک ASE مشخص: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqASE ID:\(dq output.txt .EE .UNINDENT .UNINDENT .sp سپس خط \fBState:\fP پس از هر تطابق ASE ID را بررسی کنید\&. .sp \fBبررسی پیکربندی کدک\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqCodec: LC3\e|Sampling Frequency:\e|Frame Duration:\e|Frame Length:\e|Audio Channel\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی و اعتبارسنجی برقراری CIS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSet CIG Parameters\e|Create CIS\e|CIS Established\e|Setup ISO Data Path\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBتشخیص شکست‌های CIS\fP \-\- بررسی فیلد Status پس از \fBCIS Established\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqCIS Established\(dq output.txt .EE .UNINDENT .UNINDENT .sp سپس خط بعدی را برای یافتن \fBStatus:\fP بررسی کنید\&. .sp \fBتشخیص صدای همگانی (برودکست)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqBasic Audio Announcement\e|Create BIG\e|BIG Complete\e|BIG Create Sync\e|BIG Sync\e|BIG Info\e|BIG Terminate\e|BIG Sync Lost\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردگیری جریان گیرنده همگام‌سازی BIG\fP \-\- اعتبارسنجی تک‌تک مراحل پیش‌نیاز: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPeriodic Advertising Create Sync\e|Periodic Advertising Sync Established\e|BIG Info Advertising Report\e|BIG Create Sync\e|BIG Sync Established\e|BIG Sync Lost\e|BIG Terminate\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBتشخیص همگام‌سازی مبتنی بر PAST\fP \-\- بررسی انتقال همگام‌سازی تبلیغات دوره‌ای: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSync Transfer Parameters\e|Sync Transfer (0x08\e|PAST Received\e|PA Sync:.*PAST\e|Add Source\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی دریافت BIG Info\fP \-\- گیت حیاتی برای همگام‌سازی BIG\&. در صورت عدم وجود این رویداد، گیرنده هیچ BIG برای همگام‌سازی با آن ندارد: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqBIG Info Advertising Report\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBالگوی کامل عیب‌یابی LE Audio\fP: .sp \fIجریان تک‌پخشی (CIS):\fP .INDENT 0.0 .IP 1. 3 یافتن خواندن‌های PACS \-\- تأیید سازگاری کدک میان دستگاه‌ها .IP 2. 3 یافتن نوشتن‌های نقطه کنترل ASE \-\- ردگیری توالی Config Codec → Config QoS → Enable .IP 3. 3 یافتن اعلان‌های وضعیت ASE \-\- تأیید موفقیت‌آمیز بودن هر انتقال وضعیت .IP 4. 3 یافتن پارامترهای CIG و ایجاد CIS \-\- تأیید راه‌اندازی در سطح HCI .IP 5. 3 یافتن \fBCIS Established\fP \-\- بررسی وضعیت Status برای موفقیت .IP 6. 3 یافتن \fBSetup ISO Data Path\fP \-\- تأیید پیکربندی مسیر داده .IP 7. 3 یافتن بسته‌های داده ISO \-\- تأیید جریان داشتن صدا .IP 8. 3 در صورت شکست، بررسی پاسخ‌های اعلان نقطه کنترل ASE برای یافتن کدهای خطا (فیلدهای Response Code و Response Reason) .UNINDENT .sp \fIجریان گیرنده صدای همگانی (BIG):\fP .INDENT 0.0 .IP 1. 3 یافتن \fBPeriodic Advertising Create Sync\fP یا \fBPAST Received\fP \-\- همگام‌سازی PA چگونه آغاز شد؟ .IP 2. 3 یافتن \fBPeriodic Advertising Sync Established\fP یا \fBPAST Received\fP با وضعیت \fBStatus: Success\fP \-\- آیا PA همگام شده است؟ .IP 3. 3 یافتن \fBPeriodic Advertising Report\fP با \fBBasic Audio Announcement\fP \-\- آیا داده‌های BASE دریافت می‌شوند؟ .IP 4. 3 یافتن \fBBIG Info Advertising Report\fP \-\- \fBبسیار حیاتی\fP: آیا BIG وجود دارد؟ در صورت عدم وجود، همگام‌سازی با BIG امکان‌پذیر نیست\&. .IP 5. 3 یافتن \fBBIG Create Sync\fP \-\- آیا میزبان درخواست همگام‌سازی با BIG را ارسال کرده است؟ .IP 6. 3 یافتن \fBBIG Sync Established\fP \-\- بررسی \fBStatus\fP برای موفقیت\&. .IP 7. 3 یافتن \fBSetup ISO Data Path\fP برای هر یک از هندل‌های BIS\&. .IP 8. 3 یافتن \fBISO Data\fP روی هندل‌های BIS \-\- تأیید جریان داشتن صدا\&. .IP 9. 3 در صورت شکست، بررسی \fBBIG Sync Lost\fP و بررسی فیلد \fBReason\fP\&. .UNINDENT .\" This file is included by btmon.rst. . .SH "جریان پروتکل سنجش کانال (CHANNEL SOUNDING PROTOCOL FLOW)" .sp سنجش کانال (Channel Sounding یا CS) اندازه‌گیری دقیق فاصله بین دو دستگاه بلوتوث کم‌مصرف (Bluetooth LE) را امکان‌پذیر می‌سازد. این سازوکار از دستورات و رویدادهای اختصاصی HCI برای پیکربندی و اجرای رویه‌های اندازه‌گیری بهره می‌برد که تن‌ها (tones) و بسته‌های زمان‌بندی را روی کانال‌های چندگانه مبادله می‌کنند. ابزار btmon تمام عملیات CS، از جمله داده‌های نتایج در سطح گام (step\-level) را به‌طور کامل رمزگشایی و تحلیل می‌کند. .sp سنجش کانال (CS) از دو نقش استفاده می‌کند: \fBآغازگر (Initiator)\fP بسته‌های CS را ابتدا در هر گام ارسال می‌کند، و \fBبازتاب‌دهنده (Reflector)\fP پاسخ می‌دهد. هر دو دستگاه باید از CS پشتیبانی کنند (بیت‌های ویژگی ۴۶ تا ۴۸ در مجموعه ویژگی‌های LE). .SS "کشف قابلیت‌ها (Capability Discovery)" .sp پیش از هرگونه فعالیت سنجش کانال (CS)، هر دو دستگاه باید از قابلیت‌های CS یکدیگر آگاه شوند. قابلیت‌های کنترل‌کننده (Controller) محلی یک بار خوانده می‌شود و قابلیت‌های دستگاه راه دور از طریق امواج رادیویی (over the air) دریافت می‌گردد. .sp \fBخواندن قابلیت‌های محلی CS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Read Local Supported Capabilities (0x08|0x0089) plen 0 #100 [hci0] > HCI Event: Command Complete (0x0e) plen 42 #101 [hci0] LE CS Read Local Supported Capabilities (0x08|0x0089) ncmd 1 Status: Success (0x00) Num Config Supported: 4 Max Consecutive Procedures Supported: 255 Num Antennas Supported: 2 Max Antenna Paths Supported: 4 Roles Supported: 0x03 Initiator Reflector Modes Supported: 0x03 RTT Capability: 0x03 RTT AA Only N: 10 RTT Sounding N: 10 RTT Random Payload N: 10 CS Sync PHYs Supported: 0x02 LE 2M T_IP1 Times Supported: 0x0005 10 us 30 us T_IP2 Times Supported: 0x0005 10 us 30 us T_FCS Times Supported: 0x0009 15 us 50 us T_PM Times Supported: 0x0003 10 us 20 us .EE .UNINDENT .UNINDENT .sp فیلدهای کلیدی قابلیت‌ها: .INDENT 0.0 .IP \(bu 2 \fBRoles Supported\fP \-\- ماسک بیت: بیت 0 = آغازگر (Initiator)، بیت 1 = بازتاب‌دهنده (Reflector). یک دستگاه باید حداقل از یک نقش پشتیبانی کند. .IP \(bu 2 \fBModes Supported\fP \-\- ماسک بیت حالت‌های اندازه‌گیری CS که کنترل‌کننده می‌تواند انجام دهد (حالت ۱ = RTT، حالت ۲ = تن PBR، حالت ۳ = هر دو). .IP \(bu 2 \fBCS Sync PHYs\fP \-\- لایه‌های فیزیکی موجود برای تبادل همگام‌سازی CS. گزینه \fBLE 2M\fP رایج‌ترین حالت است. .IP \(bu 2 \fBNum Antennas / Max Antenna Paths\fP \-\- قابلیت فاصله‌سنجی مبتنی بر فاز (PBR) چندآنتنی را تعیین می‌کند. .IP \(bu 2 \fBT_IP / T_FCS / T_PM times\fP \-\- پارامترهای زمان‌بندی پشتیبانی‌شده توسط کنترل‌کننده برای فواصل بین‌گامی و مدت‌زمان‌های تن. .UNINDENT .sp \fBخواندن قابلیت‌های CS راه دور\fP (از طریق امواج رادیویی به واسطه LL): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Read Remote Supported Capabilities (0x08|0x008a) plen 2 #110 [hci0] Handle: 2048 > HCI Event: Command Status (0x0f) plen 4 #111 [hci0] LE CS Read Remote Supported Capabilities (0x08|0x008a) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 42 #115 [hci0] LE CS Read Remote Supported Capabilities Complete (0x2c) Status: Success (0x00) Handle: 2048 Num Config Supported: 4 Max Consecutive Procedures Supported: 128 Num Antennas Supported: 1 Max Antenna Paths Supported: 1 Roles Supported: 0x03 Initiator Reflector Modes Supported: 0x03 ... .EE .UNINDENT .UNINDENT .sp این یک دستور ناهمگام (asynchronous) است \-\- کنترل‌کننده وضعیت دستور (Command Status) را بلافاصله ارسال می‌کند، سپس رویداد تکمیل پس از تبادل LL دریافت می‌شود. اگر این دستور با وضعیتی غیرصفر با شکست مواجه شود، ممکن است دستگاه راه دور از CS پشتیبانی نکند یا اتصال قطع شده باشد. .sp قابلیت‌های ذخیره‌شده در حافظه‌پنهان (cached) را می‌توان مستقیماً به‌جای خواندن از طریق امواج، با استفاده از \fBLE CS Write Cached Remote Supported Capabilities\fP نوشت. .SS "فعال‌سازی امنیت (Security Enablement)" .sp امنیت CS باید پیش از ایجاد پیکربندی‌ها روی اتصال فعال شود. این دستور رویه شروع امنیت CS را از طریق LL برای تبادل مقادیر یکبارمصرف (nonces) انجام می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Security Enable (0x08|0x008c) plen 2 #120 [hci0] Handle: 2048 > HCI Event: Command Status (0x0f) plen 4 #121 [hci0] LE CS Security Enable (0x08|0x008c) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 3 #125 [hci0] LE CS Security Enable Complete (0x2e) Status: Success (0x00) Handle: 2048 .EE .UNINDENT .UNINDENT .sp دستور فعال‌سازی امنیت (Security Enable) باید پیش از دستورات پیکربندی یا رویه با موفقیت تکمیل شود. اگر این دستور با شکست مواجه شود، ممکن است اتصال فاقد رمزنگاری باشد یا دستگاه راه دور از امنیت CS پشتیبانی نکند. .SS "تنظیمات پیش‌فرض (Default Settings)" .sp تنظیمات پیش‌فرض مشخص می‌کنند که دستگاه محلی مایل به پذیرش چه نقش‌هایی است و ترجیحات آنتن/توان را برای این اتصال پیکربندی می‌کنند: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Set Default Settings (0x08|0x008d) plen 5 #130 [hci0] Handle: 2048 Role Enable: 0x03 Initiator Reflector CS Sync Antenna Selection: 0x01 Max TX Power: 20 > HCI Event: Command Complete (0x0e) plen 5 #131 [hci0] LE CS Set Default Settings (0x08|0x008d) ncmd 1 Status: Success (0x00) Handle: 2048 .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP \(bu 2 \fBRole Enable\fP \-\- ماسک بیت نقش‌هایی که دستگاه مایل به انجام آن‌ها است. هر دو طرف معمولاً هر دو نقش را برای انعطاف‌پذیری فعال می‌کنند. .IP \(bu 2 \fBCS Sync Antenna Selection\fP \-\- آنتن ترجیحی برای تبادل همگام‌سازی CS. .IP \(bu 2 \fBMax TX Power\fP \-\- کران بالای توان ارسال برای رویه‌های CS (برحسب dBm، علامت‌دار). .UNINDENT .SS "تبادل جدول FAE (FAE Table Exchange)" .sp جدول خطای تحریک فرکانس (FAE مخفف Frequency Actuation Error) حاوی داده‌های کالیبراسیون به ازای هر کانال است که دقت اندازه‌گیری فاصله را بهبود می‌بخشد. همانند قابلیت‌ها، این جدول را می‌توان از دستگاه راه دور خواند یا از حافظه‌پنهان نوشت. .sp \fBخواندن جدول FAE راه دور\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Read Remote FAE Table (0x08|0x008e) plen 2 #135 [hci0] Handle: 2048 > HCI Event: Command Status (0x0f) plen 4 #136 [hci0] LE CS Read Remote FAE Table (0x08|0x008e) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 75 #140 [hci0] LE CS Read Remote FAE Table Complete (0x2d) Status: Success (0x00) Handle: 2048 .EE .UNINDENT .UNINDENT .sp جدول FAE برابر ۷۲ بایت است (یک بایت به ازای هر کانال). مقادیر، آفست‌های علامت‌دار در واحدهای 0.5 ppm هستند. مقدار \fB0x7f\fP به این معناست که کانال بدون استفاده بوده یا اندازه‌گیری نشده است. .SS "پیکربندی سنجش کانال (CS Configuration)" .sp پیکربندی CS پارامترهای اندازه‌گیری را تعیین می‌کند: حالت، نقش، نقشه کانال و تعداد گام‌ها. حداکثر ۴ پیکربندی می‌توانند به‌طور هم‌زمان در هر اتصال وجود داشته باشند (\fBconfig_id\fP بین 0 تا 3). .sp \fBایجاد یک پیکربندی CS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Create Config (0x08|0x0090) plen 20 #150 [hci0] Handle: 2048 Config ID: 0 Create Context: 0x00 Main Mode Type: 0x01 Sub Mode Type: 0xff Min Main Mode Steps: 2 Max Main Mode Steps: 5 Main Mode Repetition: 0 Mode 0 Steps: 3 Role: Initiator (0x00) RTT Type: 0x01 CS Sync PHY: LE 2M (0x01) Channel Map: ffffffffff7f0000000000000000 Channel Map Repetition: 1 Channel Selection Type: 0x00 Ch3c Shape: 0x00 Ch3c Jump: 0x00 > HCI Event: Command Status (0x0f) plen 4 #151 [hci0] LE CS Create Config (0x08|0x0090) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 30 #155 [hci0] LE CS Config Complete (0x2f) Status: Success (0x00) Handle: 2048 Config ID: 0 Action: 0x00 Main Mode Type: 0x01 Sub Mode Type: 0xff Min Main Mode Steps: 2 Max Main Mode Steps: 5 Main Mode Repetition: 0 Mode 0 Steps: 3 Role: Initiator (0x00) RTT Type: 0x01 CS Sync PHY: LE 2M (0x01) Channel Map: ffffffffff7f0000000000000000 Channel Map Repetition: 1 Channel Selection Type: 0x00 Ch3c Shape: 0x00 Ch3c Jump: 0x00 T_IP1 Time: 30 us T_IP2 Time: 30 us T_FCS Time: 50 us T_PM Time: 10 us .EE .UNINDENT .UNINDENT .sp فیلدهای کلیدی پیکربندی: .INDENT 0.0 .IP \(bu 2 \fBMain Mode Type\fP \-\- حالت اصلی اندازه‌گیری CS: \fB0x01\fP = حالت ۱ (فقط RTT)، \fB0x02\fP = حالت ۲ (فقط تن/PBR)، \fB0x03\fP = حالت ۳ (ترکیب RTT + PBR). .IP \(bu 2 \fBSub Mode Type\fP \-\- حالت ثانویه که به‌صورت درهم‌تنیده با حالت اصلی اجرا می‌شود. \fB0xff\fP = بدون حالت فرعی. .IP \(bu 2 \fBMode 0 Steps\fP \-\- تعداد گام‌های کالیبراسیون فرکانس (همگام‌سازی) در هر زیررویداد. حالت ۰ همیشه برای جبران آفست فرکانس حضور دارد. .IP \(bu 2 \fBMain/Min/Max Mode Steps\fP \-\- کنترل می‌کند که چه تعداد گام اندازه‌گیری در هر زیررویداد انجام شود. .IP \(bu 2 \fBRole\fP \-\- \fB0x00\fP = آغازگر (Initiator)، \fB0x01\fP = بازتاب‌دهنده (Reflector). این نقش دستگاه محلی در این پیکربندی است. .IP \(bu 2 \fBRTT Type\fP \-\- گونه اندازه‌گیری زمان رفت و برگشت (فقط AA، توالی سنجش، توالی تصادفی). .IP \(bu 2 \fBChannel Map\fP \-\- ماسک بیت ۱۰ بایتی کانال‌های مجاز برای CS. باید حداقل ۱۵ کانال فعال داشته باشد. .IP \(bu 2 \fBT_IP1/T_IP2/T_FCS/T_PM\fP \-\- پارامترهای زمان‌بندی انتخاب‌شده توسط کنترل‌کننده بر اساس اشتراک قابلیت‌های هر دو دستگاه. در رویداد Config Complete گزارش می‌شوند. .UNINDENT .sp رویداد Config Complete پارامترهای توافق‌شده را تایید می‌کند. کنترل‌کننده ممکن است مقادیر زمان‌بندی را بر اساس قابلیت‌های هر دو دستگاه تنظیم کند. .sp \fBحذف یک پیکربندی CS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Remove Config (0x08|0x0091) plen 3 #160 [hci0] Handle: 2048 Config ID: 0 > HCI Event: Command Status (0x0f) plen 4 #161 [hci0] LE CS Remove Config (0x08|0x0091) ncmd 1 Status: Success (0x00) .EE .UNINDENT .UNINDENT .SS "پارامترهای رویه (Procedure Parameters)" .sp پیش از فعال‌سازی یک رویه، پارامترهای زمان‌بندی و آنتن آن پیکربندی می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Set Procedure Parameters (0x08|0x0093) plen 16 #170 [hci0] Handle: 2048 Config ID: 0 Max Procedure Len: 200 Min Procedure Interval: 10 Max Procedure Interval: 20 Max Procedure Count: 0 Min Subevent Len: 5000 us Max Subevent Len: 10000 us Tone Antenna Config Selection: 0x01 PHY: LE 2M (0x02) TX Power Delta: 0 Preferred Peer Antenna: 0x01 SNR Control Initiator: 0x00 SNR Control Reflector: 0x00 > HCI Event: Command Complete (0x0e) plen 5 #171 [hci0] LE CS Set Procedure Parameters (0x08|0x0093) ncmd 1 Status: Success (0x00) Handle: 2048 .EE .UNINDENT .UNINDENT .INDENT 0.0 .IP \(bu 2 \fBMax Procedure Len\fP \-\- حداکثر مدت‌زمان یک رویه واحد CS در واحدهای 0.625 میلی‌ثانیه. .IP \(bu 2 \fBProcedure Interval\fP \-\- فاصله زمانی بین رویه‌های متوالی (برحسب رویدادهای اتصال). .IP \(bu 2 \fBMax Procedure Count\fP \-\- مقدار \fB0\fP به معنای تکرار نامحدود تا زمان غیرفعال‌سازی صریح است. .IP \(bu 2 \fBSubevent Len\fP \-\- حدود مدت‌زمان هر زیررویداد در یک رویه (برحسب میکروثانیه، ۲۴ بیتی). .IP \(bu 2 \fBTone Antenna Config Selection\fP \-\- انتخاب الگوی آنتن برای تبادل تن. .IP \(bu 2 \fBSNR Control\fP \-\- الزامات نسبت سیگنال به نویز (SNR) برای آغازگر و بازتاب‌دهنده. .UNINDENT .SS "اجرای رویه (Procedure Execution)" .sp هنگامی که پیکربندی و پارامترها تعیین شدند، رویه CS با دستورات فعال‌سازی/غیرفعال‌سازی شروع و متوقف می‌شود. .sp \fBفعال‌سازی یک رویه CS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Procedure Enable (0x08|0x0094) plen 4 #180 [hci0] Handle: 2048 Config ID: 0 Enable: 0x01 > HCI Event: Command Status (0x0f) plen 4 #181 [hci0] LE CS Procedure Enable (0x08|0x0094) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 20 #185 [hci0] LE CS Procedure Enable Complete (0x30) Status: Success (0x00) Handle: 2048 Config ID: 0 State: 0x01 Tone Antenna Config Selection: 0x01 Selected TX Power: 12 Subevent Len: 5000 us Subevents Per Event: 2 Subevent Interval: 3750 Event Interval: 10 Procedure Interval: 10 Procedure Count: 100 Max Procedure Len: 200 .EE .UNINDENT .UNINDENT .sp رویداد Procedure Enable Complete پارامترهای زمان‌بندی واقعی انتخاب‌شده توسط کنترل‌کننده را تایید می‌کند. فیلدهای مهم: .INDENT 0.0 .IP \(bu 2 \fBState\fP \-\- \fB0x01\fP = رویه فعال است، \fB0x00\fP = غیرفعال است. .IP \(bu 2 \fBSubevents Per Event\fP \-\- تعداد زیررویدادهایی که در هر رویداد اتصال جای می‌گیرند. .IP \(bu 2 \fBProcedure Count\fP \-\- تعداد واقعی رویه‌هایی که اجرا خواهند شد (ممکن است با حداکثر درخواستی تفاوت داشته باشد). .UNINDENT .sp \fBغیرفعال‌سازی یک رویه CS\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Procedure Enable (0x08|0x0094) plen 4 #300 [hci0] Handle: 2048 Config ID: 0 Enable: 0x00 > HCI Event: Command Status (0x0f) plen 4 #301 [hci0] LE CS Procedure Enable (0x08|0x0094) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 20 #305 [hci0] LE CS Procedure Enable Complete (0x30) Status: Success (0x00) Handle: 2048 Config ID: 0 State: 0x00 ... .EE .UNINDENT .UNINDENT .SS "دسته‌بندی کانال (Channel Classification)" .sp میزبان می‌تواند با علامت‌گذاری کانال‌های نویزی به‌عنوان غیرقابل استفاده، کانال‌های مورد استفاده CS را محدود سازد: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Set Channel Classification (0x08|0x0092) plen 10 #145 [hci0] Channel Map: ffffffffff7f0000000000 > HCI Event: Command Complete (0x0e) plen 1 #146 [hci0] LE CS Set Channel Classification (0x08|0x0092) ncmd 1 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp نقشه کانال یک ماسک بیت ۱۰ بایتی (۸۰ بیتی) است. مقدار بیت N = 1 به این معناست که کانال N برای CS در دسترس است. حداقل ۱۵ کانال باید فعال باقی بمانند در غیر این صورت رویه لغو خواهد شد. .SS "برنامه‌ریزی زمانی و زیررویدادها (Schedulability and Subevents)" .sp در حین اجرای یک رویه CS، کنترل‌کننده نتایج اندازه‌گیری را از طریق رویدادهای نتیجه زیررویداد (subevent result events) گزارش می‌دهد. هر زیررویداد شامل چندین گام است و هر گام حاوی داده‌های اندازه‌گیری ویژه آن حالت است. .sp \fBنتیجه زیررویداد (Subevent Result)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 50 #200 [hci0] LE CS Subevent Result (0x31) Handle: 2048 Config ID: 0 Start ACL Conn Event Counter: 1200 Procedure Counter: 0 Frequency Compensation: 0x0000 Reference Power Level: \-20 Procedure Done Status: Partial results (0x01) Subevent Done Status: All results complete (0x00) Abort Reason: 0x00 Num Antenna Paths: 1 Num Steps Reported: 8 Step Data: Mode: 0 Channel: 10 Length: 5 Packet Quality: 0x00 Packet RSSI: \-45 Packet Antenna: 0 Measured Freq Offset: 150 Mode: 1 Channel: 20 Length: 6 Packet Quality: 0x00 Packet NADM: Attack is extremely unlikely (0x00) Packet RSSI: \-42 ToA/ToD: 1234 Packet Antenna: 0 Mode: 2 Channel: 30 Length: 5 Antenna Permutation Index: 0 PCT[0]: I=1024, Q=\-512 Tone Quality: High (0x00) ... .EE .UNINDENT .UNINDENT .sp هنگامی که داده‌ها بزرگ باشند، رویدادهای نتیجه می‌توانند میان چندین رویداد تقسیم شوند: .sp \fBادامه نتیجه زیررویداد (Subevent Result Continue)\fP (قطعه ادامه): .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 40 #202 [hci0] LE CS Subevent Result Continue (0x32) Handle: 2048 Config ID: 0 Procedure Done Status: Partial results (0x01) Subevent Done Status: All results complete (0x00) Abort Reason: 0x00 Num Antenna Paths: 1 Num Steps Reported: 4 Step Data: ... .EE .UNINDENT .UNINDENT .SS "حالت‌های گام سنجش کانال (CS Step Modes)" .sp هر زیررویداد CS شامل گام‌هایی است که روی کانال‌های مختلف اجرا می‌شوند. هر گام در یکی از چهار حالت عمل می‌کند: .sp \fBحالت ۰ \-\- کالیبراسیون فرکانس (همگام‌سازی CS)\fP .sp گام‌های حالت ۰ همیشه در ابتدای هر زیررویداد حضور دارند. آن‌ها یک توالی همگام‌سازی CS مشخص را برای کالیبراسیون آفست‌های فرکانس میان دو دستگاه مبادله می‌کنند. .sp فیلدهای گزارش‌شده: .INDENT 0.0 .IP \(bu 2 \fBPacket Quality\fP \-\- مقدار \fB0x00\fP = نشانی دسترسی CS تطبیق یافت، \fB0x01\fP = خطاهای بیت شناسایی شد، \fB0x02\fP = یافت نشد. .IP \(bu 2 \fBPacket RSSI\fP \-\- قدرت سیگنال دریافتی (علامت‌دار، dBm). .IP \(bu 2 \fBPacket Antenna\fP \-\- اندیس آنتن استفاده‌شده. .IP \(bu 2 \fBMeasured Freq Offset\fP \-\- آفست فرکانس در واحدهای 0.01 ppm (مقدار ۱۵ بیتی). تنها در صورتی حضور دارد که طول داده ۵ باشد. .UNINDENT .sp \fBحالت ۱ \-\- زمان رفت و برگشت (RTT)\fP .sp حالت ۱ زمان رسیدن (ToA) و زمان ارسال (ToD) را برای محاسبه تاخیر رفت و برگشت جهت تخمین فاصله اندازه‌گیری می‌کند. .sp فیلدهای گزارش‌شده: .INDENT 0.0 .IP \(bu 2 \fBPacket Quality\fP \-\- مشابه حالت ۰. .IP \(bu 2 \fBPacket NADM\fP \-\- معیار نرمال‌شده آشکارساز حمله (Normalized Attack Detector Metric)، احتمال دستکاری در اندازه‌گیری RTT را نشان می‌دهد: .INDENT 2.0 .IP \(bu 2 \fB0x00\fP = حمله به‌شدت غیرمحتمل است .IP \(bu 2 \fB0x01\fP = حمله بسیار نامحتمل است .IP \(bu 2 \fB0x02\fP = حمله غیرمحتمل است .IP \(bu 2 \fB0x03\fP = احتمال وقوع حمله وجود دارد .IP \(bu 2 \fB0x04\fP = حمله محتمل است .IP \(bu 2 \fB0x05\fP = حمله بسیار محتمل است .IP \(bu 2 \fB0x06\fP = حمله به‌شدت محتمل است .IP \(bu 2 \fB0xff\fP = نامشخص .UNINDENT .IP \(bu 2 \fBToA/ToD\fP \-\- تفاضل زمان رسیدن منهای زمان خروج (علامت‌دار ۱۶ بیتی). مقدار \fB0x8000\fP = اندازه‌گیری در دسترس نیست. .IP \(bu 2 \fBPCT1/PCT2\fP \-\- عبارت‌های تصحیح فاز (I/Q، هر کدام ۱۲ بیت). تنها در انواع خاصی از RTT حضور دارند. .UNINDENT .sp \fBحالت ۲ \-\- فاصله‌سنجی مبتنی بر فاز (PBR / تبادل تن)\fP .sp حالت ۲ تن‌ها را برای اندازه‌گیری فاز با دقت بالا مبادله می‌کند. چندین مسیر آنتن می‌توانند به‌طور هم‌زمان اندازه‌گیری شوند. .sp فیلدهای گزارش‌شده: .INDENT 0.0 .IP \(bu 2 \fBAntenna Permutation Index\fP \-\- الگوی تعویض آنتن استفاده‌شده را مشخص می‌کند. .IP \(bu 2 \fBPCT\fP (به ازای هر مسیر آنتن) \-\- عبارت تصحیح فاز با مولفه I (بیت‌های 0 تا 11) و مولفه Q (بیت‌های 12 تا 23). .IP \(bu 2 \fBTone Quality Indicator\fP \-\- نیم‌بایت پایین: .INDENT 2.0 .IP \(bu 2 \fB0x00\fP = کیفیت بالا .IP \(bu 2 \fB0x01\fP = کیفیت متوسط .IP \(bu 2 \fB0x02\fP = کیفیت پایین .IP \(bu 2 \fB0x03\fP = در دسترس نیست .UNINDENT .sp نیم‌بایت بالا (شکاف افزونه تن): .INDENT 2.0 .IP \(bu 2 \fB0x00\fP = شکاف افزونه تن نیست .IP \(bu 2 \fB0x01\fP = شکاف افزونه تن است، تنی مورد انتظار نیست .IP \(bu 2 \fB0x02\fP = شکاف افزونه تن است، تن مورد انتظار است .UNINDENT .UNINDENT .sp \fBحالت ۳ \-\- ترکیب RTT + تن (PBR)\fP .sp حالت ۳ حالت‌های ۱ و ۲ را در یک گام ترکیب می‌کند. فیلدهای اولیه با حالت ۱ مطابقت دارند (کیفیت، NADM، RSSI، ToA/ToD، آنتن)، که به‌دنبال آن‌ها داده‌های تن حالت ۲ می‌آیند. .SS "فرمت داده‌های نتایج زیررویداد (Subevent Result Data Format)" .sp هر رویداد نتیجه زیررویداد حاوی فیلدهای وضعیتی است که نشان می‌دهند آیا رویه و زیررویداد به‌طور عادی کامل شده‌اند یا خیر. .sp \fBوضعیت اتمام رویه (Procedure Done Status)\fP: .INDENT 0.0 .IP \(bu 2 \fB0x00\fP \-\- تمام نتایج برای این رویه CS کامل است .IP \(bu 2 \fB0x01\fP \-\- نتایج جزئی، رویدادهای بیشتری در پی خواهد آمد .IP \(bu 2 \fB0x0f\fP \-\- تمام رویه‌های بعدی لغو شدند .UNINDENT .sp \fBوضعیت اتمام زیررویداد (Subevent Done Status)\fP: .INDENT 0.0 .IP \(bu 2 \fB0x00\fP \-\- تمام نتایج برای این زیررویداد کامل است .IP \(bu 2 \fB0x01\fP \-\- نتایج جزئی، رویداد ادامه در پی خواهد آمد .IP \(bu 2 \fB0x0f\fP \-\- زیررویداد جاری لغو شد .UNINDENT .sp \fBدلیل لغو (Abort Reason)\fP (بایت فشرده): .sp نیم‌بایت پایین (دلیل لغو رویه): .INDENT 0.0 .IP \(bu 2 \fB0x00\fP \-\- عدم لغو .IP \(bu 2 \fB0x01\fP \-\- لغوشده توسط میزبان محلی یا درخواست از راه دور .IP \(bu 2 \fB0x02\fP \-\- نقشه کانال کمتر از ۱۵ کانال دارد .IP \(bu 2 \fB0x03\fP \-\- لحظه به‌روزرسانی نقشه کانال منقضی شده است .IP \(bu 2 \fB0x0f\fP \-\- دلیل نامشخص .UNINDENT .sp نیم‌بایت بالا (دلیل لغو زیررویداد): .INDENT 0.0 .IP \(bu 2 \fB0x00\fP \-\- عدم لغو .IP \(bu 2 \fB0x01\fP \-\- لغوشده توسط میزبان محلی یا درخواست از راه دور .IP \(bu 2 \fB0x02\fP \-\- هیچ همگام‌سازی CS_SYNC (حالت ۰) دریافت نشد .IP \(bu 2 \fB0x03\fP \-\- تداخل زمان‌بندی یا کمبود منابع .IP \(bu 2 \fB0x0f\fP \-\- دلیل نامشخص .UNINDENT .SS "ماشین حالت سنجش کانال (CS State Machine)" .sp یک پیکربندی CS در هر دستگاه بین این حالت‌ها گذار می‌کند. حالت به‌طور صریح در یک فیلد منفرد گزارش نمی‌شود \-\- بلکه از توالی دستورات و رویدادهای HCI استنباط می‌گردد: .INDENT 0.0 .INDENT 3.5 .sp .EX ┌──────────┐ │ IDLE │ └────┬─────┘ │ LE CS Read Local/Remote Supported Capabilities │ LE CS Security Enable Complete │ LE CS Set Default Settings ▼ ┌──────────────────┐ │ CAPABILITIES │ Both devices\(aq CS parameters are known. │ EXCHANGED │ Security is established. └────┬─────────────┘ │ LE CS Create Config │ ──► LE CS Config Complete (status=0x00) ▼ ┌──────────────────┐ │ CONFIGURED │ Config ID N exists with negotiated params. │ (config_id=N) │ Can create up to 4 configs simultaneously. └────┬─────────────┘ │ LE CS Set Procedure Parameters ▼ ┌──────────────────┐ │ PARAMETERS SET │ Scheduling and antenna params are locked. │ (config_id=N) │ └────┬─────────────┘ │ LE CS Procedure Enable (enable=1) │ ──► LE CS Procedure Enable Complete (state=1) ▼ ┌──────────────────┐ │ PROCEDURE │ Controller is actively measuring. │ RUNNING │ Subevent Result events stream in. │ (config_id=N) │ └────┬─────────────┘ │ LE CS Procedure Enable (enable=0) │ ──► LE CS Procedure Enable Complete (state=0) ▼ ┌──────────────────┐ │ CONFIGURED │ Config still exists, can re\-enable. │ (config_id=N) │ └────┬─────────────┘ │ LE CS Remove Config ▼ ┌──────────┐ │ IDLE │ └──────────┘ .EE .UNINDENT .UNINDENT .sp چندین پیکربندی می‌توانند هم‌زمان وجود داشته باشند. حذف یک پیکربندی بر بقیه اثری نمی‌گذارد. .SS "توالی نمونه راه‌اندازی سنجش کانال (Typical CS Setup Sequence)" .sp یک نشست کامل اندازه‌گیری فاصله CS صرفاً از طریق HCI از این جریان پیروی می‌کند. ستون چپ دستورات Host ──► Controller را نشان می‌دهد، و ستون راست حالت حاصل را نمایش می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX Host ──► Controller State ═══════════════════════════════════════════════════════════════ LE CS Read Local Supported Capabilities IDLE ◄── Command Complete (capabilities) │ LE CS Read Remote Supported Capabilities │ ◄── Command Status │ ◄── LE CS Read Remote Supp. Cap. Complete │ │ LE CS Security Enable │ ◄── Command Status │ ◄── LE CS Security Enable Complete │ │ LE CS Set Default Settings │ ◄── Command Complete ▼ CAPABILITIES EXCHANGED LE CS Read Remote FAE Table (optional) │ ◄── LE CS Read Remote FAE Complete │ │ LE CS Set Channel Classification (optional) │ ◄── Command Complete │ │ LE CS Create Config (config_id=0) │ ◄── Command Status │ ◄── LE CS Config Complete ▼ CONFIGURED (id=0) LE CS Set Procedure Parameters (config_id=0) │ ◄── Command Complete ▼ PARAMETERS SET (id=0) LE CS Procedure Enable (id=0, enable=1) │ ◄── Command Status │ ◄── LE CS Procedure Enable Complete (state=1)▼ PROCEDURE RUNNING (id=0) ◄── LE CS Subevent Result ┐ │ ◄── LE CS Subevent Result Cont. │(repeated) │ ◄── LE CS Subevent Result ┘ │ │ LE CS Procedure Enable (id=0, enable=0) │ ◄── Command Status │ ◄── LE CS Procedure Enable Complete (state=0)▼ CONFIGURED (id=0) LE CS Remove Config (id=0) (optional) │ ◄── Command Status ▼ IDLE .EE .UNINDENT .UNINDENT .sp گام‌های بالاتر از اولین \fBLE CS Create Config\fP مراحل راه‌اندازی یک‌باره به ازای هر اتصال هستند. چرخه پیکربندی / پارامترها / فعال‌سازی / غیرفعال‌سازی می‌تواند تکرار شود. .SS "حالت آزمون سنجش کانال (CS Test Mode)" .sp حالت آزمون CS به کنترل‌کننده امکان می‌دهد تا رویه‌های CS را بدون نیاز به یک دستگاه راه دور، برای مقاصد ساخت و اعتبارسنجی اجرا کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Test (0x08|0x0095) plen 34 #400 [hci0] Main Mode Type: 0x01 Sub Mode Type: 0xff Main Mode Repetition: 0 Mode 0 Steps: 3 Role: Initiator (0x00) RTT Type: 0x01 CS Sync PHY: LE 2M (0x01) CS Sync Antenna Selection: 0x01 Subevent Len: 5000 us Subevent Interval: 0 Max Num Subevents: 1 Transmit Power Level: 10 T_IP1 Time: 30 us T_IP2 Time: 30 us T_FCS Time: 50 us T_PM Time: 10 us T_SW Time: 0 us Tone Antenna Config Selection: 0x01 SNR Control Initiator: 0x00 SNR Control Reflector: 0x00 DRBG Nonce: 0x0000 Channel Map Repetition: 1 Override Config: 0x0000 > HCI Event: Command Complete (0x0e) plen 5 #401 [hci0] LE CS Test (0x08|0x0095) ncmd 1 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp نتایج مانند رویدادهای عادی \fBLE CS Subevent Result\fP دریافت می‌شوند. آزمون با دستور زیر خاتمه می‌یابد: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE CS Test End (0x08|0x0096) plen 0 #450 [hci0] > HCI Event: LE Meta Event (0x3e) plen 1 #451 [hci0] LE CS Test End Complete (0x33) Status: Success (0x00) .EE .UNINDENT .UNINDENT .SS "مدیریت خطای سنجش کانال (Channel Sounding Error Handling)" .INDENT 0.0 .TP .B \fBشکست در فعال‌سازی امنیت (Security Enable fails)\fP اتصال باید پیش از CS Security Enable رمزنگاری شده باشد. بررسی کنید که جفت‌سازی SMP و LE Encrypt تکمیل شده باشند. همچنین بررسی کنید که هر دو دستگاه پشتیبانی از CS را در مجموعه ویژگی‌های LE خود اعلان کرده باشند. .TP .B \fBخطا در رویداد Config Complete (Config Complete with error)\fP کنترل‌کننده ممکن است پیکربندی را در صورتی که پارامترهای درخواستی با اشتراک قابلیت‌های هر دو دستگاه ناسازگار باشد، رد کند. بررسی کنید که حالت اصلی، PHY و پارامترهای زمان‌بندی درون محدوده پشتیبانی‌شده هر دو دستگاه قرار گیرند. .TP .B \fBبیش از حد کوچک بودن نقشه کانال (Channel map too small)\fP سنجش کانال (CS) به حداقل ۱۵ کانال نیاز دارد. اگر دسته‌بندی کانال یا تداخل فرکانسی کانال‌های زیادی را حذف کند، رویه با دلیل لغو \fB0x02\fP (نیم‌بایت پایین) لغو خواهد شد. .TP .B \fBعدم دریافت همگام‌سازی حالت ۰ (No Mode 0 sync received)\fP دلیل لغو زیررویداد \fB0x02\fP (نیم‌بایت بالا) به این معناست که بسته همگام‌سازی حالت ۰ آغازگر توسط بازتاب‌دهنده دریافت نشده است (یا بالعکس). این امر نشان‌دهنده یک مشکل RF، از دست رفتن زمان‌بندی، یا خارج از برد بودن دستگاه است. .TP .B \fBرویه توسط میزبان لغو شد (Procedure aborted by host)\fP دلیل لغو \fB0x01\fP در هر یک از نیم‌بایت‌ها به این معناست که میزبان محلی یا دستگاه راه دور درخواست خاتمه داده است، که معمولاً از طریق Procedure Enable با مقدار enable=0 صورت می‌گیرد. .TP .B \fBعدم در دسترس بودن ToA/ToD (مقدار 0x8000)\fP کنترل‌کننده نتوانست یک اندازه‌گیری زمانی معتبر برای این گام محاسبه کند. این وضعیت با سیگنال‌های ضعیف یا زمانی که نشانی دسترسی CS تشخیص داده نشود (کیفیت بسته = 0x02) رایج است. .UNINDENT .SH "سرویس فاصله‌سنجی (RAS) / نمایه فاصله‌سنجی (RAP) (RANGING SERVICE (RAS) / RANGING PROFILE (RAP))" .sp سرویس فاصله‌سنجی (RAS) یک سرویس GATT است که داده‌های اندازه‌گیری CS را در لایه کاربرد میان دستگاه‌ها منتقل می‌کند. این سرویس روند CS در سطح HCI را با ارائه روشی استاندارد جهت تبادل، تأیید دریافت و بازیابی نتایج فاصله‌سنجی روی ATT تکمیل می‌کند. نمایه فاصله‌سنجی (RAP) نحوه کشف و تعامل یک دستگاه با RAS روی دستگاه دوردست را تعریف می‌کند. .sp ابزار btmon با مشاهده عملیات‌های ATT روی شناسه‌های یکتای سراسری (UUIDهای) مربوط به RAS، تمام مشخصه‌های RAS را به صورت خودکار رمزگشایی می‌کند. .sp شناسه یکتای سراسری (UUID) سرویس RAS: \fB0x185B\fP .SS "مشخصه‌های RAS (RAS Characteristics)" .TS box center; l|l|l|l. T{ مشخصه (Characteristic) T} T{ شناسه یکتا (UUID) T} T{ ویژگی‌ها (Properties) T} T{ توضیحات (Description) T} _ T{ RAS Features T} T{ 0x2C14 T} T{ Read T} T{ بیت‌ماسک قابلیت‌های پشتیبانی‌شده RAS T} _ T{ RAS Real\-time Ranging Data T} T{ 0x2C15 T} T{ Notify, Indicate T} T{ پخش زنده نتایج فاصله‌سنجی هم‌زمان با تولید آن‌ها T} _ T{ RAS On\-demand Ranging Data T} T{ 0x2C16 T} T{ Notify, Indicate T} T{ نتایج فاصله‌سنجی بازیابی‌شده برحسب تقاضا T} _ T{ RAS Control Point T} T{ 0x2C17 T} T{ Write Without Response, Indicate T} T{ رابط دستوری جهت بازیابی داده‌ها و فیلتر کردن T} _ T{ RAS Ranging Data Ready T} T{ 0x2C18 T} T{ Read, Notify, Indicate T} T{ نشان‌دهنده در دسترس بودن یک مجموعه داده فاصله‌سنجی جدید T} _ T{ RAS Ranging Data Overwritten T} T{ 0x2C19 T} T{ Read, Notify, Indicate T} T{ نشان‌دهنده بازنویسی شدن یک مجموعه داده ذخیره‌شده T} .TE .sp تمام مشخصه‌ها به جز RAS Features از توصیف‌گرهای پیکربندی مشخصه کلاینت (CCC) برای فعال‌سازی اعلان‌ها (Notifications) و نشانه‌ها (Indications) استفاده می‌کنند. ساختار معمول صفات GATT در مجموع از ۱۸ هندل استفاده می‌کند. .SS "ویژگی‌ها و قابلیت‌های RAS (RAS Feature and Capabilities)" .sp مشخصه RAS Features یک بیت‌ماسک ۴ بایتی است که کلاینت جهت آگاهی از قابلیت‌های سرور آن را می‌خواند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 11 #200 [hci0] ATT: Read Response (0x0b) len 4 Handle: 0x0003 Features: 0x0000000f Real\-time Ranging Data (0x00000001) Retrieve Lost Ranging Data Segments (0x00000002) Abort Operation (0x00000004) Filter Ranging Data (0x00000008) .EE .UNINDENT .UNINDENT .sp بیت‌های ویژگی‌ها: .INDENT 0.0 .IP \(bu 2 \fBبیت ۰\fP \-\- داده‌های فاصله‌سنجی درلحظه (Real\-time Ranging Data): سرور می‌تواند هم‌زمان با اجرای روندهای CS، نتایج را از طریق مشخصه Real\-time Ranging Data پخش کند. .IP \(bu 2 \fBبیت ۱\fP \-\- بازیابی قطعات از دست رفته داده‌های فاصله‌سنجی (Retrieve Lost Ranging Data Segments): کلاینت می‌تواند ارسال مجدد قطعات داده مفقودشده را درخواست کند. .IP \(bu 2 \fBبیت ۲\fP \-\- لغو عملیات (Abort Operation): کلاینت می‌تواند انتقال داده در حال انجام را لغو کند. .IP \(bu 2 \fBبیت ۳\fP \-\- فیلتر کردن داده‌های فاصله‌سنجی (Filter Ranging Data): کلاینت می‌تواند مشخص کند کدام فیلدها در اعلان‌های داده‌های فاصله‌سنجی گنجانده شوند. .UNINDENT .SS "داده‌های فاصله‌سنجی RAS آماده است (RAS Ranging Data Ready)" .sp هنگامی که یک روند CS کامل شده و نتایج ذخیره می‌شوند، سرور به کلاینت اطلاع می‌دهد که داده‌ها برای بازیابی آماده هستند: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #250 [hci0] ATT: Handle Value Notification (0x1b) len 2 Handle: 0x000e Counter: 42 .EE .UNINDENT .UNINDENT .sp مقدار شمارنده (Counter)، مجموعه داده فاصله‌سنجی خاص را مشخص می‌کند. کلاینت از این شمارنده در دستورات بعدی نقطه کنترل (Control Point) برای درخواست یا تأیید دریافت (ACK) داده‌ها استفاده می‌کند. .SS "داده‌های فاصله‌سنجی RAS بازنویسی شدند (RAS Ranging Data Overwritten)" .sp اگر بافر سرور پر شود و نتایج قدیمی‌تر دور ریخته شوند، این مشخصه به کلاینت اطلاع می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 9 #260 [hci0] ATT: Handle Value Notification (0x1b) len 2 Handle: 0x0011 Overwritten Count: 38 .EE .UNINDENT .UNINDENT .sp این اعلان به کلاینت اعلام می‌کند که داده‌های فاصله‌سنجی با مقدار شمارنده ۳۸ (و احتمالاً پیش از آن) بازنویسی شده‌اند و دیگر امکان بازیابی آن‌ها وجود ندارد. .SS "نقطه کنترل RAS (RAS Control Point)" .sp نقطه کنترل RAS (RAS Control Point) رابط دستوری برای مدیریت انتقال داده‌های فاصله‌سنجی است. کلاینت دستورات را می‌نویسد و سرور از طریق نشانه‌ها (Indications) روی همان مشخصه پاسخ می‌دهد. .sp \fBکدهای دستوری (Opcodes):\fP .TS box center; l|l|l. T{ کد دستوری (Opcode) T} T{ دستور (Command) T} T{ توضیحات (Description) T} _ T{ 0x00 T} T{ Get Ranging Data T} T{ درخواست انتقال برحسب تقاضای یک مجموعه داده خاص T} _ T{ 0x01 T} T{ ACK Ranging Data T} T{ تأیید دریافت یک مجموعه داده T} _ T{ 0x02 T} T{ Retrieve Lost Ranging Data Segments T} T{ درخواست مجدد قطعات مفقودشده مشخص T} _ T{ 0x03 T} T{ Abort Operation T} T{ لغو انتقال داده در حال انجام T} _ T{ 0x04 T} T{ Set Filter T} T{ پیکربندی فیلدهای داده گنجانده‌شده T} .TE .sp \fBGet Ranging Data\fP \-\- درخواست انتقال یک مجموعه داده ذخیره‌شده را ارسال می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 10 #270 [hci0] ATT: Write Command (0x52) len 3 Handle: 0x000b Opcode: Get Ranging Data (0x00) Ranging Counter: 0x002a .EE .UNINDENT .UNINDENT .sp پس از این دستور، سرور داده‌ها را به صورت توالی‌ای از اعلان‌ها روی مشخصه داده‌های فاصله‌سنجی برحسب تقاضا (RAS On\-demand Ranging Data با شناسه 0x2C16) ارسال می‌کند. .sp \fBACK Ranging Data\fP \-\- دریافت کامل یک مجموعه داده توسط کلاینت را تأیید می‌کند و به سرور اجازه می‌دهد بافر مربوطه را آزاد کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 10 #290 [hci0] ATT: Write Command (0x52) len 3 Handle: 0x000b Opcode: ACK Ranging Data (0x01) Ranging Counter: 0x002a .EE .UNINDENT .UNINDENT .sp \fBRetrieve Lost Ranging Data Segments\fP \-\- درخواست ارسال مجدد قطعات مشخصی را که دریافت نشده یا مخدوش شده‌اند ارسال می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 12 #295 [hci0] ATT: Write Command (0x52) len 5 Handle: 0x000b Opcode: Retrieve Lost Ranging Data Segments (0x02) Ranging Counter: 0x002a First Segment Index: 3 Last Segment Index: 5 .EE .UNINDENT .UNINDENT .sp مقدار اندیس آخرین قطعه برابر با \fB0xFF\fP به معنای «تمام قطعات باقی‌مانده از اندیس نخست به بعد» است. .sp \fBAbort Operation\fP \-\- هرگونه انتقال داده در حال انجام را لغو می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 8 #298 [hci0] ATT: Write Command (0x52) len 1 Handle: 0x000b Opcode: Abort Operation (0x03) .EE .UNINDENT .UNINDENT .sp \fBSet Filter\fP \-\- مشخص می‌کند کدام فیلدها در اعلان‌های داده‌های فاصله‌سنجی گنجانده شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 2048 flags 0x00 dlen 10 #265 [hci0] ATT: Write Command (0x52) len 3 Handle: 0x000b Opcode: Set Filter (0x04) Filter Configuration: 0x0001 Mode: 1 Filter Bit Mask: 0x0000 .EE .UNINDENT .UNINDENT .sp پیکربندی فیلتر یک مقدار ۱۶ بیتی است: بیت‌های [1:0] حالت فیلتر را انتخاب می‌کنند و بیت‌های [15:2] یک بیت‌ماسک برای فیلدها فراهم می‌سازند. .SS "قالب داده‌های فاصله‌سنجی (Ranging Data Format)" .sp هر دو مشخصه داده‌های فاصله‌سنجی درلحظه (0x2C15) و برحسب تقاضا (0x2C16) از یک قالب داده قطعه‌بندی‌شده مشابه استفاده می‌کنند. مجموعه‌های داده حجیم در چندین اعلان ATT تقسیم می‌شوند. .sp \fBسرآیند قطعه‌بندی (Segmentation Header)\fP (۱ بایت، موجود در تمام اعلان‌ها): .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 2048 flags 0x02 dlen 30 #275 [hci0] ATT: Handle Value Notification (0x1b) len 25 Handle: 0x0005 Segmentation Header: 0x01 First Segment: True Last Segment: False Segment Index: 0 Ranging Data Body: Ranging Counter: 0x02a Configuration ID: 0 Selected TX Power: 12 dBm Antenna Paths Mask: 0x03 Antenna Path 1 (0x01) Antenna Path 2 (0x02) Subevent #0: Start ACL Connection Event: 1200 Frequency Compensation: 150 (0.01 ppm) Ranging Done Status: Partial results (0x1) Subevent Done Status: All results complete (0x0) Ranging Abort Reason: No abort (0x0) Subevent Abort Reason: No abort (0x0) Reference Power Level: \-20 dBm Number of Steps Reported: 8 Remaining Ranging Data Segment: ... .EE .UNINDENT .UNINDENT .sp فیلدهای سرآیند قطعه‌بندی: .INDENT 0.0 .IP \(bu 2 \fBFirst Segment\fP (بیت ۰) \-\- مقدار \fBTrue\fP برای اولین اعلان یک مجموعه داده. تنها نخستین قطعه حاوی Ranging Header است. .IP \(bu 2 \fBLast Segment\fP (بیت ۱) \-\- مقدار \fBTrue\fP برای اعلان پایانی. هنگامی که هر دو بیت تنظیم شده باشند، کل مجموعه داده در یک اعلان قرار می‌گیرد. .IP \(bu 2 \fBSegment Index\fP (بیت‌های [7:2]) \-\- اندیس ترتیبی برای بازترکیب قطعات. .UNINDENT .sp \fBRanging Header\fP (۴ بایت، تنها در نخستین قطعه): .INDENT 0.0 .IP \(bu 2 \fBRanging Counter\fP (بیت‌های [11:0]) \-\- با شمارنده اعلان Data Ready مطابقت دارد؛ نمونه اجرای روند CS را مشخص می‌کند. .IP \(bu 2 \fBConfiguration ID\fP (بیت‌های [15:12]) \-\- شناسه پیکربندی CS (۰ تا ۳) که برای این اندازه‌گیری استفاده شده است. .IP \(bu 2 \fBSelected TX Power\fP (۱ بایت، علامت‌دار) \-\- توان ارسال واقعی استفاده‌شده، بر حسب dBm. .IP \(bu 2 \fBAntenna Paths Mask\fP (۱ بایت) \-\- بیت‌ماسکی که نشان می‌دهد کدام مسیرهای آنتن دارای داده هستند: بیت ۰ = مسیر ۱، بیت ۱ = مسیر ۲ و غیره. .UNINDENT .sp \fBSubevent Header\fP (به ازای هر زیررویداد درون داده‌های فاصله‌سنجی): .INDENT 0.0 .IP \(bu 2 \fBStart ACL Connection Event\fP \-\- شمارنده رویداد اتصال ACL که این زیررویداد CS در آن آغاز شده است. .IP \(bu 2 \fBFrequency Compensation\fP \-\- انحراف فرکانسی اندازه‌گیری‌شده برحسب واحدهای 0.01 ppm (علامت‌دار ۱۶ بیتی). .IP \(bu 2 \fBRanging Done Status\fP \-\- کدهایی مشابه با نتایج زیررویداد HCI: مقدار \fB0x0\fP = کامل، \fB0x1\fP = جزئی، \fB0xF\fP = لغوشده. .IP \(bu 2 \fBSubevent Done Status\fP \-\- مقدار \fB0x0\fP = کامل، \fB0xF\fP = لغوشده. .IP \(bu 2 \fBRanging/Subevent Abort Reason\fP \-\- کدهای دلیل لغو مشابه با HCI: مقدار \fB0x0\fP = بدون لغو، \fB0x1\fP = درخواست میزبان/دستگاه دوردست، \fB0x2\fP = نقشه کانال / عدم همگام‌سازی، \fB0x3\fP = زمان‌بندی، \fB0xF\fP = نامشخص. .IP \(bu 2 \fBReference Power Level\fP \-\- مرجع RSSI بر حسب dBm (علامت‌دار). .IP \(bu 2 \fBNumber of Steps Reported\fP \-\- تعداد نتایج گام CS که در ادامه می‌آیند. .UNINDENT .sp داده‌های گام که پس از سرآیند زیررویداد می‌آیند، از همان قالب مختص هر حالت در رویدادهای نتایج زیررویداد HCI CS (حالت‌های ۰ تا ۳) استفاده می‌کنند که در بخش مربوط به حالت‌های گام CS در بالا توضیح داده شد. .sp قطعات ادامه‌دهنده (Continuation segments) تنها شامل سرآیند قطعه‌بندی هستند که به دنبال آن‌ها بایت‌های خام داده‌های فاصله‌سنجی قرار می‌گیرند و با قطعات پیشین بازترکیب می‌شوند. .SS "ماشین حالت انتقال داده‌های RAS (RAS Data Transfer State Machine)" .sp انتقال داده‌های RAS برای یک مجموعه داده فاصله‌سنجی واحد میان این حالت‌ها جابه‌جا می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX ┌───────────────┐ │ IDLE │ No active data transfer. └─────┬─────────┘ │ Server: CS procedure completes (HCI level) │ Server: notifies Ranging Data Ready (counter=N) ▼ ┌───────────────┐ │ DATA READY │ Dataset N is buffered on server. │ (counter=N) │ Client has been notified. └─────┬─────────┘ │ Client writes: Get Ranging Data (counter=N) │ ── OR ── (real\-time mode: automatic push) ▼ ┌───────────────┐ │ TRANSFERRING │ Server sends segmented notifications. │ (counter=N) │ Segment Index increments: 0, 1, 2, ... └─────┬──────┬──┘ │ │ Segment lost? Client writes: │ │ Retrieve Lost Segments (counter=N, first, last) │ │ Server re\-sends missing segments. │ │ (loops back to TRANSFERRING) │ │ │ │ Client writes: Abort Operation │ └──────────────────────┐ │ Last Segment received │ ▼ ▼ ┌───────────────┐ ┌───────────────┐ │ COMPLETE │ │ ABORTED │ │ (counter=N) │ └───────┬───────┘ └─────┬─────────┘ │ │ Client writes: │ │ ACK Ranging Data │ │ (counter=N) │ ▼ ▼ ┌───────────────┐ │ IDLE │ Server may free buffer for counter=N. └───────────────┘ .EE .UNINDENT .UNINDENT .sp اگر بافر سرور پیش از بازیابی داده‌ها توسط کلاینت پر شود، یک اعلان Ranging Data Overwritten ارسال می‌شود و مجموعه داده مستقیماً از حالت DATA READY به وضعیت بازنویسی‌شده (از دست رفته) منتقل می‌گردد. .SS "جریان معمول داده‌های RAS (Typical RAS Data Flow)" .sp یک نشست کامل RAS برای بازیابی داده‌ها برحسب تقاضا: .INDENT 0.0 .INDENT 3.5 .sp .EX 1. Client discovers RAS (UUID 0x185B) via GATT primary service discovery 2. Client reads RAS Features (0x2C14) to learn capabilities 3. Client enables CCC notifications on: \- RAS Ranging Data Ready (0x2C18) \- RAS Ranging Data Overwritten (0x2C19) \- RAS On\-demand Ranging Data (0x2C16) or RAS Real\-time Ranging Data (0x2C15) 4. CS procedure runs (HCI level) 5. Server notifies Ranging Data Ready with counter=N 6. Client writes Control Point: Get Ranging Data (counter=N) 7. Server sends On\-demand Ranging Data notifications (segmented) 8. Client writes Control Point: ACK Ranging Data (counter=N) .EE .UNINDENT .UNINDENT .sp برای پخش زنده درلحظه، مرحله ۶ نادیده گرفته می‌شود \-\- سرور به محض تکمیل هر زیررویداد CS، با استفاده از همان قالب قطعه‌بندی‌شده داده‌ها را روی مشخصه داده‌های فاصله‌سنجی درلحظه (Real\-time Ranging Data با شناسه 0x2C15) ارسال (Push) می‌کند. .sp در صورتی که قطعاتی از دست بروند (برای مثال به دلیل محدودیت‌های ATT MTU یا از دست رفتن اعلان‌ها)، کلاینت از دستور Retrieve Lost Ranging Data Segments برای درخواست ارسال مجدد اندیس‌های قطعات مشخص استفاده می‌کند. .SS "جریان ترکیبی HCI + GATT (Combined HCI + GATT Flow)" .sp نمودار زیر جدول زمانی تداخل کامل عملیات‌های HCI CS و عملیات‌های GATT RAS را همان‌طور که در ردگیری btmon ظاهر می‌شوند نشان می‌دهد. ستون سمت چپ ترافیک HCI (\fB< HCI\fP / \fB> HCI\fP)، ستون میانی ترافیک GATT ATT (\fB< ACL\fP / \fB> ACL\fP) و ستون سمت راست وضعیت ترکیبی را نشان می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX HCI (CS) GATT (RAS) State ══════════════════════════════════════════════════════════════════════════ \-\-\- One\-time connection setup \-\-\- < LE CS Read Local Supp. Cap. IDLE > Command Complete │ < LE CS Read Remote Supp. Cap. │ > Command Status │ > LE CS Read Remote Supp. │ Cap. Complete │ < LE CS Security Enable │ > Command Status │ > LE CS Security Enable │ Complete │ < LE CS Set Default Settings │ > Command Complete ▼ CAPS EXCHANGED < ATT: Find By Type Value │ (RAS UUID 0x185B) │ > ATT: Find By Type Value │ Response │ < ATT: Read Request │ (RAS Features 0x2C14) │ > ATT: Read Response │ Features: 0x0000000f │ < ATT: Write Request │ (CCC: Ready 0x2C18) │ > ATT: Write Response │ < ATT: Write Request │ (CCC: On\-demand 0x2C16) │ > ATT: Write Response ▼ RAS READY \-\-\- Per\-measurement cycle (repeatable) \-\-\- < LE CS Create Config (id=0) │ > Command Status │ > LE CS Config Complete ▼ CONFIGURED (id=0) < LE CS Set Proc. Params (id=0) │ > Command Complete ▼ PARAMS SET (id=0) < LE CS Proc. Enable │ (id=0, enable=1) │ > Command Status │ > LE CS Proc. Enable │ Complete (state=1) ▼ PROCEDURE RUNNING > LE CS Subevent Result ─┐ │ > LE CS Subevent Result │ (measurement data │ Continue │ streams from │ > LE CS Subevent Result │ controller) │ > LE CS Subevent Result ─┘ │ │ > LE CS Subevent Result │ (Procedure Done=0x00) ▼ PROCEDURE COMPLETE > ATT: Notification │ (Data Ready 0x2C18) │ Counter: N ▼ DATA READY (N) < ATT: Write Command │ (Control Point 0x2C17) │ Get Ranging Data │ Counter: N ▼ TRANSFERRING (N) > ATT: Notification │ (On\-demand 0x2C16) │ Seg[0]: First=T Last=F │ Ranging Header + data │ > ATT: Notification │ (On\-demand 0x2C16) │ Seg[1]: First=F Last=F │ > ATT: Notification │ (On\-demand 0x2C16) │ Seg[2]: First=F Last=T ▼ TRANSFER COMPLETE (N) < ATT: Write Command │ (Control Point 0x2C17) │ ACK Ranging Data │ Counter: N ▼ IDLE (buffer freed) \-\-\- Cleanup (optional) \-\-\- < LE CS Remove Config (id=0) > Command Status IDLE .EE .UNINDENT .UNINDENT .SS "جریان پخش درلحظه (Real\-time Streaming Flow)" .sp هنگامی که سرور از داده‌های فاصله‌سنجی درلحظه پشتیبانی می‌کند (بیت ۰ در ویژگی‌ها)، نتایج به محض تکمیل زیررویدادهای CS و بدون انتظار برای درخواست Get Ranging Data فوراً ارسال می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX HCI (CS) GATT (RAS) State ══════════════════════════════════════════════════════════════════════════ < LE CS Proc. Enable PARAMS SET (id=0, enable=1) > LE CS Proc. Enable Complete ▼ PROCEDURE RUNNING > LE CS Subevent Result ──┐ │ > ATT: Notification │ (Real\-time 0x2C15) │ Seg[0]: First=T Last=T │ Ranging Header + │ subevent data > LE CS Subevent Result ──┤ │ > ATT: Notification │ (Real\-time 0x2C15) │ Seg[0]: First=T Last=F │ > ATT: Notification │ (Real\-time 0x2C15) │ Seg[1]: First=F Last=T > LE CS Subevent Result ──┘ > ATT: Notification (Real\-time 0x2C15) ... > LE CS Subevent Result │ (Procedure Done=0x00) ▼ PROCEDURE COMPLETE < ATT: Write Command ACK Ranging Data Counter: N ▼ IDLE .EE .UNINDENT .UNINDENT .sp در حالت درلحظه، هر رویداد نتیجه زیررویداد HCI بلافاصله یک یا چند اعلان GATT را راه‌اندازی می‌کند. شمارنده فاصله‌سنجی (Ranging Counter) در سرآیند داده‌ها با هر روند افزایش می‌یابد. اگر یک قطعه اعلان از دست برود، کلاینت می‌تواند پس از پایان روند از دستور Retrieve Lost Segments استفاده کند (در صورتی که بیت ۱ در ویژگی‌ها تنظیم شده باشد). .SS "جریان بازیابی قطعات از دست رفته (Lost Segment Recovery Flow)" .sp هنگامی که در حین انتقال قطعاتی از دست می‌روند، کلاینت درخواست ارسال مجدد می‌دهد: .INDENT 0.0 .INDENT 3.5 .sp .EX GATT (RAS) State ══════════════════════════════════════════════════════════════ > ATT: Notification (On\-demand 0x2C16) TRANSFERRING Seg[0]: First=T Last=F ── received > ATT: Notification (On\-demand 0x2C16) Seg[1]: First=F Last=F ── received │ Seg[2] ── LOST (not received) │ │ > ATT: Notification (On\-demand 0x2C16) │ Seg[3]: First=F Last=T ── received │ │ (Client detects gap: Seg[2] missing) ▼ INCOMPLETE < ATT: Write Command (Control Point 0x2C17) Retrieve Lost Ranging Data Segments Counter: N First Segment Index: 2 Last Segment Index: 2 ▼ RECOVERING > ATT: Notification (On\-demand 0x2C16) Seg[2]: First=F Last=F ── re\-sent ▼ TRANSFER COMPLETE < ATT: Write Command (Control Point 0x2C17) ACK Ranging Data Counter: N ▼ IDLE .EE .UNINDENT .UNINDENT .SS "مشکلات متداول RAS (RAS Common Issues)" .INDENT 0.0 .TP .B \fBخواندن ویژگی‌ها مقدار 0x00000000 را برمی‌گرداند (Features read returns 0x00000000)\fP سرور از هیچ ویژگی اختیاری RAS پشتیبانی نمی‌کند. تنها بازیابی پایه داده‌ها برحسب تقاضا از طریق نقطه کنترل (Control Point) در دسترس است. .TP .B \fBاعلان آماده بودن داده‌های فاصله‌سنجی دریافت نشد (Ranging Data Ready not received)\fP بررسی کنید که اعلان‌های CCC روی هندل 0x2C18 فعال باشند. همچنین مطمئن شوید که روند CS واقعاً به پایان رسیده است \-\- اگر روند لغو شده باشد، هیچ اعلان Data Ready ارسال نمی‌شود. .TP .B \fBخطاهای بازترکیب قطعه‌بندی (Segmentation reassembly errors)\fP بررسی کنید که مقادیر اندیس قطعه (Segment Index) متوالی باشند و پرچم First Segment در نخستین اعلان تنظیم شده باشد. در صورت پشتیبانی سرور (بیت ۱ در ویژگی‌ها)، مفقود شدن یک قطعه سازوکار Retrieve Lost Segments را فعال می‌کند. .TP .B \fBداده‌ها پیش از بازیابی بازنویسی شدند (Data Overwritten before retrieval)\fP سرور فضای بافر محدودی دارد. اگر کلاینت به سرعت داده‌ها را بازیابی و تأیید (ACK) نکند، مجموعه‌های داده قدیمی‌تر بازنویسی می‌شوند. اعلان Data Overwritten مقدار شمارنده داده‌های از دست رفته را نشان می‌دهد. .TP .B \fBرد شدن نوشتن در نقطه کنترل (Control Point write rejected)\fP اتصال باید رمزگذاری شده باشد. نقطه کنترل RAS به مجوز نوشتن با رمزگذاری (\fBWRITE_ENCRYPT\fP) نیاز دارد. بررسی کنید که جفت‌سازی SMP کامل شده باشد. .UNINDENT .\" This file is included by btmon.rst. . .SH "جریان پروتکل صوتی کلاسیک (CLASSIC AUDIO PROTOCOL FLOW)" .sp صوت بلوتوث کلاسیک از دو نمایه اصلی استفاده می‌کند: A2DP برای استریم استریو با کیفیت بالا و HFP برای تماس‌های صوتی. هر دو بر روی اتصالات ACL از نوع BR/EDR اجرا می‌شوند و از سازوکارهای انتقال متفاوتی برای داده‌های صوتی استفاده می‌کنند \-\- نمایه A2DP از کانال‌های رسانه‌ای AVDTP مبتنی بر L2CAP استفاده می‌کند در حالی که HFP از اتصالات همگام SCO/eSCO بهره می‌برد. .\" This file is included by btmon-classic-audio.rst. . .SS "A2DP: توزیع پیشرفته صدا (A2DP: Advanced Audio Distribution)" .sp نمایه A2DP از پروتکل AVDTP (پروتکل انتقال توزیع صوتی/تصویری) بر روی L2CAP برای مذاکره بر سر پارامترهای کدک (Codec) و استریم صدای با کیفیت بالا استفاده می‌کند. ابزار btmon سیگنال‌دهی AVDTP، قابلیت‌های کدک و پیام‌های کنترل از راه دور AVRCP را به طور کامل رمزگشایی می‌کند. .SS "کانال سیگنال‌دهی AVDTP (AVDTP Signaling Channel)" .sp نمایه A2DP با یک اتصال L2CAP روی PSM 25 (0x0019) آغاز می‌شود. نخستین اتصال L2CAP روی این PSM، سیگنال‌دهی AVDTP را منتقل می‌کند؛ دومین اتصال روی همین PSM داده‌های انتقال چندرسانه‌ای را منتقل می‌سازد: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 12 L2CAP: Connection Request (0x02) ident 1 len 4 PSM: 25 (0x0019) Source CID: 64 > ACL Data RX: Handle 1 flags 0x02 dlen 16 L2CAP: Connection Response (0x03) ident 1 len 8 Destination CID: 64 Source CID: 64 Result: Connection successful (0x0000) Status: No further information available (0x0000) .EE .UNINDENT .UNINDENT .sp پس از تکمیل پیکربندی L2CAP، سیگنال‌دهی AVDTP روی این کانال آغاز می‌شود. .SS "کشف نقطه پایانی جریان (Stream Endpoint Discovery)" .sp شروع‌کننده (initiator)، نقاط پایانی جریان (SEPها) موجود روی دستگاه دوردست را کشف می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 6 Channel: 64 len 2 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Discover (0x01) Command (0x00) type 0x00 label 0 nosp 0 > ACL Data RX: Handle 1 flags 0x02 dlen 10 Channel: 64 len 6 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Discover (0x01) Response Accept (0x02) type 0x00 label 0 nosp 0 ACP SEID: 1 Media Type: Audio (0x00) SEP Type: SNK (0x01) In use: No .EE .UNINDENT .UNINDENT .sp هر نقطه پایانی جریان (SEP) دارای یک شناسه SEID (شناسه نقطه پایانی جریان)، نوع رسانه و نقش (Source یا Sink) است. مقدار \fBIn use: Yes\fP به این معناست که نقطه پایانی در حال حاضر مشغول پخش استریم است. .SS "کشف قابلیت‌های کدک (Codec Capability Discovery)" .sp پس از کشف SEIDها، شروع‌کننده قابلیت‌های هر نقطه پایانی را جویا می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 7 Channel: 64 len 3 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Get All Capabilities (0x0c) Command (0x00) type 0x00 label 1 nosp 0 ACP SEID: 1 > ACL Data RX: Handle 1 flags 0x02 dlen 30 Channel: 64 len 26 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Get All Capabilities (0x0c) Response Accept (0x02) type 0x00 label 1 nosp 0 Service Category: Media Transport (0x01) Service Category: Media Codec (0x07) Media Type: Audio (0x00) Media Codec: SBC (0x00) Frequency: 0xf0 16000 32000 44100 48000 Channel Mode: 0x0f Mono Dual Channel Stereo Joint Stereo Block Length: 0xf0 4 8 12 16 Subbands: 0x0c 4 8 Allocation Method: 0x03 SNR Loudness Minimum Bitpool: 2 Maximum Bitpool: 53 Service Category: Content Protection (0x04) Content Protection Type: SCMS\-T (0x0002) Service Category: Delay Reporting (0x08) .EE .UNINDENT .UNINDENT .sp پاسخ‌های قابلیت، تمام مقادیر پشتیبانی‌شده را به عنوان ماسک بیتی (bitmask) فهرست می‌کنند. دسته‌بندی‌های کلیدی سرویس: .INDENT 0.0 .IP \(bu 2 \fBMedia Transport\fP (0x01) \-\- همیشه وجود دارد، نشان می‌دهد که نقطه پایانی از یک کانال انتقال چندرسانه‌ای پشتیبانی می‌کند .IP \(bu 2 \fBMedia Codec\fP (0x07) \-\- نوع کدک (Codec) و پارامترهای پشتیبانی‌شده .IP \(bu 2 \fBContent Protection\fP (0x04) \-\- محافظت از کپی (SCMS\-T یا DTCP) .IP \(bu 2 \fBDelay Reporting\fP (0x08) \-\- نقطه پایانی از گزارش تاخیر زمانی پشتیبانی می‌کند .UNINDENT .SS "کدک‌های پشتیبانی‌شده (Supported Codecs)" .sp ابزار btmon چندین کدک (Codec) A2DP را رمزگشایی می‌کند. هر کدام قالب پارامتر متفاوتی دارند. .sp \fBSBC\fP (کدک الزامی A2DP): .INDENT 0.0 .INDENT 3.5 .sp .EX Media Codec: SBC (0x00) Frequency: 44100 (0x20) Channel Mode: Joint Stereo (0x01) Block Length: 16 (0x10) Subbands: 8 (0x04) Allocation Method: Loudness (0x01) Minimum Bitpool: 2 Maximum Bitpool: 53 .EE .UNINDENT .UNINDENT .sp \fBAAC\fP (MPEG\-2,4): .INDENT 0.0 .INDENT 3.5 .sp .EX Media Codec: MPEG\-2,4 AAC (0x02) Object Type: MPEG\-4 AAC LC (0x40) Frequency: 44100 (0x0100) Channels: 2 (0x04) Bitrate: 256000bps VBR: No .EE .UNINDENT .UNINDENT .sp \fBaptX\fP (شرکت Qualcomm، مختص سازنده): .INDENT 0.0 .INDENT 3.5 .sp .EX Media Codec: Non\-A2DP (0xff) Vendor ID: Qualcomm Technologies International, Ltd. (APT) (0x0000004f) Vendor Specific Codec ID: aptX (0x0001) Frequency: 44100 (0x20) Channel Mode: Stereo (0x02) .EE .UNINDENT .UNINDENT .sp \fBaptX HD\fP (شرکت Qualcomm، مختص سازنده): .INDENT 0.0 .INDENT 3.5 .sp .EX Media Codec: Non\-A2DP (0xff) Vendor ID: Qualcomm Technologies, Inc. (0x000000d7) Vendor Specific Codec ID: aptX HD (0x0024) Frequency: 44100 (0x20) Channel Mode: Stereo (0x02) .EE .UNINDENT .UNINDENT .sp \fBLDAC\fP (شرکت Sony، مختص سازنده): .INDENT 0.0 .INDENT 3.5 .sp .EX Media Codec: Non\-A2DP (0xff) Vendor ID: Sony Corporation (0x0000012d) Vendor Specific Codec ID: LDAC (0x00aa) .EE .UNINDENT .UNINDENT .sp کدک‌های اختصاصی سازنده به صورت \fBNon\-A2DP (0xff)\fP همراه با Vendor ID و Codec ID رمزگشایی‌شده نشان داده می‌شوند. پاسخ‌های قابلیت، تمام مقادیر پشتیبانی‌شده را به عنوان ماسک بیتی فهرست می‌کنند؛ پاسخ‌های پیکربندی تنها مقدار انتخاب‌شده را نشان می‌دهند. .SS "پیکربندی جریان (Stream Configuration)" .sp پس از انتخاب کدک و پارامترها، شروع‌کننده دستور Set Configuration را ارسال می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 20 Channel: 64 len 16 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Set Configuration (0x03) Command (0x00) type 0x00 label 2 nosp 0 ACP SEID: 1 INT SEID: 1 Service Category: Media Transport (0x01) Service Category: Media Codec (0x07) Media Type: Audio (0x00) Media Codec: SBC (0x00) Frequency: 44100 (0x20) Channel Mode: Joint Stereo (0x01) Block Length: 16 (0x10) Subbands: 8 (0x04) Allocation Method: Loudness (0x01) Minimum Bitpool: 2 Maximum Bitpool: 53 > ACL Data RX: Handle 1 flags 0x02 dlen 6 Channel: 64 len 2 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Set Configuration (0x03) Response Accept (0x02) type 0x00 label 2 nosp 0 .EE .UNINDENT .UNINDENT .sp پاسخ‌های پیکربندی به جای فهرست‌های ماسک بیتی، مقادیر تکی انتخاب‌شده را نشان می‌دهند. \fBACP SEID\fP نقطه پایانی راه دور و \fBINT SEID\fP نقطه پایانی محلی است. .sp اگر پیکربندی رد شود: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 1 flags 0x02 dlen 8 Channel: 64 len 4 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Set Configuration (0x03) Response Reject (0x03) type 0x00 label 2 nosp 0 Service Category: Media Codec (0x07) Error code: Unsupported Configuration (0x29) .EE .UNINDENT .UNINDENT .sp کدهای خطای متداول AVDTP: .TS box center; l|l|l. T{ کد T} T{ نام T} T{ مفهوم T} _ T{ 0x01 T} T{ Bad Header Format T} T{ سرآیند AVDTP معیوب است T} _ T{ 0x11 T} T{ Bad ACP SEID T} T{ شناسه نقطه پایانی ناشناخته است T} _ T{ 0x12 T} T{ SEP In Use T} T{ نقطه پایانی در حال حاضر مشغول استریم است T} _ T{ 0x13 T} T{ SEP Not In Use T} T{ نقطه پایانی پیکربندی نشده است T} _ T{ 0x29 T} T{ Unsupported Configuration T} T{ پارامترهای درخواستی پشتیبانی نمی‌شوند T} _ T{ 0x31 T} T{ Bad State T} T{ دستور در وضعیت فعلی معتبر نیست T} .TE .SS "باز کردن و شروع (Open and Start)" .sp پس از پیکربندی، جریان باز شده و سپس شروع می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 7 Channel: 64 len 3 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Open (0x06) Command (0x00) type 0x00 label 3 nosp 0 ACP SEID: 1 > ACL Data RX: Handle 1 flags 0x02 dlen 6 Channel: 64 len 2 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Open (0x06) Response Accept (0x02) type 0x00 label 3 nosp 0 .EE .UNINDENT .UNINDENT .sp پس از موفقیت‌آمیز بودن Open، یک \fBاتصال L2CAP دوم\fP روی PSM 25 برای کانال انتقال رسانه برقرار می‌شود. سپس Start استریم را آغاز می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 7 Channel: 64 len 3 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Start (0x07) Command (0x00) type 0x00 label 4 nosp 0 ACP SEID: 1 > ACL Data RX: Handle 1 flags 0x02 dlen 6 Channel: 64 len 2 [PSM 25 mode Basic (0x00)] {chan 0} AVDTP: Start (0x07) Response Accept (0x02) type 0x00 label 4 nosp 0 .EE .UNINDENT .UNINDENT .SS "داده‌های چندرسانه‌ای (Media Data)" .sp پس از Start، داده‌های صوتی کدگذاری‌شده روی کانال انتقال چندرسانه‌ای (دومین اتصال L2CAP روی PSM 25) جریان می‌یابند. btmon به طور پیش‌فرض محتوای بسته‌های داده‌های چندرسانه‌ای را رمزگشایی \fBنمی‌کند\fP \-\- داده‌های رسانه نادیده گرفته می‌شوند. تنها هنگام فعال بودن فیلتر \fB\-\-show\-a2dp\-stream\fP سرآیند کانال L2CAP قابل مشاهده است و بار مفید (payload) به عنوان دامپ هگزادسیمال خام نشان داده می‌شود. .sp ماشین وضعیت AVDTP قابل مشاهده در ردگیری‌ها: .TS box center; l|l|l. T{ وضعیت T} T{ برانگیخته توسط T} T{ شرح T} _ T{ Idle T} T{ اولیه / پاسخ Abort T} T{ هیچ جریانی پیکربندی نشده است T} _ T{ Configured T} T{ پذیرش Set Configuration T} T{ کدک و پارامترها انتخاب شده‌اند T} _ T{ Open T} T{ پذیرش Open / پذیرش Suspend T} T{ کانال انتقال آماده است، در حال استریم نیست T} _ T{ Streaming T} T{ پذیرش Start T} T{ داده‌های صوتی در حال جریان هستند T} _ T{ Closing T} T{ ارسال دستور Close T} T{ در حال برچیدن جریان T} _ T{ Aborting T} T{ ارسال دستور Abort T} T{ برچیدن اجباری T} .TE .SS "تعلیق، بستن و لغو (Suspend, Close, and Abort)" .sp دستور \fBSuspend\fP پخش استریم را بدون برچیدن لایه انتقال موقتاً متوقف (مکث) می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX AVDTP: Suspend (0x09) Command (0x00) type 0x00 label 5 nosp 0 ACP SEID: 1 AVDTP: Suspend (0x09) Response Accept (0x02) type 0x00 label 5 nosp 0 .EE .UNINDENT .UNINDENT .sp دستور \fBClose\fP جریان را برمی‌چیند (بازگشت به وضعیت Idle): .INDENT 0.0 .INDENT 3.5 .sp .EX AVDTP: Close (0x08) Command (0x00) type 0x00 label 6 nosp 0 ACP SEID: 1 AVDTP: Close (0x08) Response Accept (0x02) type 0x00 label 6 nosp 0 .EE .UNINDENT .UNINDENT .sp دستور \fBAbort\fP برچیدن فوری را اجبار می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX AVDTP: Abort (0x0a) Command (0x00) type 0x00 label 7 nosp 0 ACP SEID: 1 AVDTP: Abort (0x0a) Response Accept (0x02) type 0x00 label 7 nosp 0 .EE .UNINDENT .UNINDENT .SS "گزارش تاخیر زمانی (Delay Reporting)" .sp هنگامی که گیرنده (sink) از گزارش تاخیر زمانی پشتیبانی کند، یک گزارش تاخیر (Delay Report) ارسال می‌کند تا فرستنده (source) را از تاخیر بازتولید و رندرینگ خود مطلع سازد: .INDENT 0.0 .INDENT 3.5 .sp .EX AVDTP: Delay Report (0x0d) Command (0x00) type 0x00 label 8 nosp 0 ACP SEID: 1 Delay: 15.0ms AVDTP: Delay Report (0x0d) Response Accept (0x02) type 0x00 label 8 nosp 0 .EE .UNINDENT .UNINDENT .SS "کنترل از راه دور AVRCP (AVRCP Remote Control)" .sp نمایه AVRCP (نمایه کنترل از راه دور صوتی/تصویری) از L2CAP PSM 23 (کنترل) و PSM 27 (مرور) استفاده می‌کند. ابزار btmon فریم‌بندی AVCTP و PDUهای AVRCP را رمزگشایی می‌کند. .sp \fBکنترل بلندی صدا\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 17 Channel: 66 len 13 [PSM 23 mode Basic (0x00)] {chan 2} AVCTP Control: Response: type 0x00 label 0 PID 0x110e AV/C: Accepted: address 0x48 opcode 0x00 Subunit: Panel Opcode: Vendor Dependent Company ID: 0x001958 AVRCP: SetAbsoluteVolume pt Single len 0x0001 Volume: 50.39% (64/127) .EE .UNINDENT .UNINDENT .sp \fBوضعیت پخش\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX AVRCP: GetPlayStatus pt Single len 0x0009 SongLength: 0x00038270 (230000 milliseconds) SongPosition: 0x00000000 (0 milliseconds) PlayStatus: 0x01 (PLAYING) .EE .UNINDENT .UNINDENT .sp \fBمتاداده قطعه موسیقی\fP (پاسخ GetElementAttributes): .INDENT 0.0 .INDENT 3.5 .sp .EX AVRCP: GetElementAttributes pt Single len 0x0050 AttributeCount: 0x02 Attribute: 0x00000001 (Title) CharsetID: 0x006a (UTF\-8) AttributeValueLength: 0x000c AttributeValue: My Song Name Attribute: 0x00000002 (Artist) CharsetID: 0x006a (UTF\-8) AttributeValueLength: 0x000b AttributeValue: The Artist .EE .UNINDENT .UNINDENT .sp \fBدستورات عبوری Passthrough\fP (پخش، مکث، رد کردن قطعه): .INDENT 0.0 .INDENT 3.5 .sp .EX AVCTP Control: Command: type 0x00 label 1 PID 0x110e AV/C: Control: address 0x48 opcode 0x7c Subunit: Panel Opcode: Passthrough Operation: 0x44 (PLAY Pressed) Length: 0x00 .EE .UNINDENT .UNINDENT .sp \fBاعلان‌های رویداد\fP (تغییر میزان صدا، تغییر قطعه موسیقی): .INDENT 0.0 .INDENT 3.5 .sp .EX AVRCP: RegisterNotification pt Single len 0x0005 EventID: 0x0d (EVENT_VOLUME_CHANGED) Volume: 50.39% (64/127) .EE .UNINDENT .UNINDENT .SS "خودکارسازی تحلیل A2DP (Automating A2DP Analysis)" .sp \fBشناسایی فعالیت‌های A2DP\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAVDTP:\e|Media Codec:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردگیری تغییرات وضعیت AVDTP\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAVDTP:.*Command\e|AVDTP:.*Response\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی مذاکره کدک\fP (آنچه انتخاب شده است): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSet Configuration\e|Media Codec:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی برقراری جریان صوتی\fP \-\- جستجو برای پذیرش Start که با داده‌های رسانه دنبال می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAVDTP: Start\e|PSM 25.*chan 1\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBتشخیص عدم تطابق کدک\fP \-\- جستجو برای رد درخواست Set Configuration: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqResponse Reject\e|Error code:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردگیری میزان صدا و پخش AVRCP\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSetAbsoluteVolume\e|Volume:\e|GetPlayStatus\e|PlayStatus:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBالگوی عیب‌یابی کامل A2DP\fP: .INDENT 0.0 .IP 1. 3 یافتن Connection Request از نوع L2CAP برای PSM 25 \-\- تایید راه‌اندازی کانال AVDTP .IP 2. 3 یافتن پاسخ Discover \-\- نمایش نقاط پایانی موجود و اینکه آیا هر کدام در حال حاضر استفاده می‌شوند یا خیر .IP 3. 3 یافتن پاسخ Get All Capabilities \-\- بررسی هم‌پوشانی پشتیبانی از کدک‌ها .IP 4. 3 یافتن Set Configuration \-\- بررسی کدک و پارامترهای توافق‌شده .IP 5. 3 یافتن Open و Start \-\- تایید موفقیت‌آمیز بودن راه‌اندازی جریان .IP 6. 3 یافتن اتصال دوم L2CAP روی PSM 25 \-\- کانال انتقال چندرسانه‌ای .IP 7. 3 در صورت بروز خطا، بررسی Response Reject به همراه کد خطا .IP 8. 3 در صورت قطع شدن صدا، جستجو برای Suspend یا Close یا بررسی قطع اتصال ACL .UNINDENT .\" This file is included by btmon-classic-audio.rst. . .SS "HFP: نمایه هندزفری (HFP: Hands-Free Profile)" .sp پروفایل HFP داده‌های صوتی مکالمه را از طریق اتصالات SCO/eSCO و کنترل تماس را از طریق RFCOMM منتقل می‌کند. ابزار btmon ساختار فریم‌های RFCOMM و راه‌اندازی اتصال SCO/eSCO را رمزگشایی (Decode) می‌کند. دستورات AT (پروتکل کنترل HFP) به‌صورت دامپ هگزادسیمال خام در فریم‌های داده RFCOMM نمایش داده می‌شوند \-\- ابزار btmon ساختار نحوی (Syntax) دستورات AT را تجزیه نمی‌کند. .SS "کشف SDP (SDP Discovery)" .sp پروفایل HFP از SDP برای کشف رکورد سرویس هندزفری (Hands\-Free) یا درگاه صوتی (Audio Gateway) در دستگاه راه دور و همچنین شماره کانال RFCOMM آن استفاده می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 25 Channel: 64 len 21 [PSM 1 mode Basic (0x00)] {chan 0} SDP: Service Search Attribute Request (0x06) tid 1 len 16 Search pattern: [len 5] Sequence (6) with 3 byte(s) [8 extra bits] len 5 UUID (3) with 2 byte(s) [0 extra bits] len 3 Handsfree Audio Gateway (0x111f) Max record count: 65535 Attribute list: [len 5] Sequence (6) with 3 byte(s) [8 extra bits] len 5 Unsigned Integer (1) with 4 byte(s) [0 extra bits] len 5 0x0000ffff Continuation state: 0 .EE .UNINDENT .UNINDENT .sp پاسخ دریافتی شامل رکورد سرویس به همراه کانال RFCOMM است: .INDENT 0.0 .INDENT 3.5 .sp .EX > ACL Data RX: Handle 1 flags 0x02 dlen 89 Channel: 64 len 85 [PSM 1 mode Basic (0x00)] {chan 0} SDP: Service Search Attribute Response (0x07) tid 1 len 80 Attribute bytes: 77 Attribute list: [len 75] {position 0} Attribute: Service Class ID List (0x0001) [len 2] Handsfree Audio Gateway (0x111f) Attribute: Protocol Descriptor List (0x0004) [len 2] L2CAP (0x0100) RFCOMM (0x0003) Channel: 1 Attribute: Bluetooth Profile Descriptor List (0x0009) [len 2] Handsfree (0x111e) Version: 0x0108 Continuation state: 0 .EE .UNINDENT .UNINDENT .sp فیلدهای کلیدی برای استخراج: .INDENT 0.0 .IP \(bu 2 \fBکلاس سرویس (Service Class)\fP \-\- مقدار \fBHandsfree (0x111e)\fP برای نقش HF، و \fBHandsfree Audio Gateway (0x111f)\fP برای نقش AG .IP \(bu 2 \fBکانال RFCOMM\fP \-\- شماره کانال ذیل \fBRFCOMM (0x0003)\fP در فهرست توصیف‌کننده پروتکل (مانند کانال ۱) .IP \(bu 2 \fBنسخه نمایه (Profile Version)\fP \-\- ذیل فهرست توصیف‌کننده نمایه بلوتوث (مانند \fB0x0108\fP = HFP 1.8، \fB0x0109\fP = HFP 1.9) .UNINDENT .SS "برقراری اتصال RFCOMM (RFCOMM Connection Setup)" .sp پروتکل RFCOMM روی L2CAP PSM 3 اجرا می‌شود. برقراری اتصال در چندین مرحله انجام می‌شود: نشست چندگانه‌ساز (Multiplexer) روی DLCI 0، مذاکره پارامترها، و سپس کانال داده روی DLCI مقصد. .sp \fBاتصال L2CAP برای RFCOMM\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 12 L2CAP: Connection Request (0x02) ident 2 len 4 PSM: 3 (0x0003) Source CID: 65 > ACL Data RX: Handle 1 flags 0x02 dlen 16 L2CAP: Connection Response (0x03) ident 2 len 8 Destination CID: 65 Source CID: 65 Result: Connection successful (0x0000) Status: No further information available (0x0000) .EE .UNINDENT .UNINDENT .sp \fBSABM/UA روی DLCI 0\fP (نشست چندگانه‌ساز): .INDENT 0.0 .INDENT 3.5 .sp .EX < ACL Data TX: Handle 1 flags 0x00 dlen 12 Channel: 65 len 4 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Set Async Balance Mode (SABM) (0x2f) Address: 0x03 cr 1 dlci 0x00 Control: 0x3f poll/final 1 Length: 0 FCS: 0x1c > ACL Data RX: Handle 1 flags 0x02 dlen 12 Channel: 65 len 4 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Unnumbered Ack (UA) (0x63) Address: 0x03 cr 1 dlci 0x00 Control: 0x73 poll/final 1 Length: 0 FCS: 0xd7 .EE .UNINDENT .UNINDENT .sp \fBمذاکره پارامترها (Parameter Negotiation)\fP (دستور MCC روی DLCI 0): .INDENT 0.0 .INDENT 3.5 .sp .EX Channel: 65 len 14 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Unnumbered Info with Header Check (UIH) (0xef) Address: 0x03 cr 1 dlci 0x00 Control: 0xef poll/final 0 Length: 10 FCS: 0x70 MCC Message type: DLC Parameter Negotiation CMD (0x20) Length: 8 dlci 2 frame_type 0 credit_flow 15 pri 7 ack_timer 0 frame_size 127 max_retrans 0 credits 7 .EE .UNINDENT .UNINDENT .sp مقدار DLCI در دستور PN کانال هدف را مشخص می‌کند. برای کانال RFCOMM شماره N، مقدار DLCI برابر است با N * 2 (یا بسته به نقش آغازگر، N * 2 + 1). .sp \fBSABM/UA روی DLCI هدف\fP (کانال داده): .INDENT 0.0 .INDENT 3.5 .sp .EX Channel: 65 len 4 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Set Async Balance Mode (SABM) (0x2f) Address: 0x0b cr 1 dlci 0x02 Control: 0x3f poll/final 1 Length: 0 FCS: 0x59 Channel: 65 len 4 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Unnumbered Ack (UA) (0x63) Address: 0x0b cr 1 dlci 0x02 Control: 0x73 poll/final 1 Length: 0 FCS: 0x92 .EE .UNINDENT .UNINDENT .sp \fBدستور وضعیت مودم (Modem Status Command)\fP (اعلام آمادگی): .INDENT 0.0 .INDENT 3.5 .sp .EX Channel: 65 len 8 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Unnumbered Info with Header Check (UIH) (0xef) Address: 0x03 cr 1 dlci 0x00 Control: 0xef poll/final 0 Length: 4 FCS: 0x70 MCC Message type: Modem Status Command CMD (0x38) Length: 2 dlci 2 fc 0 rtc 1 rtr 1 ic 0 dv 1 .EE .UNINDENT .UNINDENT .SS "تبادل دستورات AT (راه‌اندازی SLC) (AT Command Exchange (SLC Setup))" .sp پروفایل HFP از دستورات AT بر بستر RFCOMM برای کنترل تماس و مذاکره ویژگی‌ها استفاده می‌کند. ابزار btmon این موارد را به‌صورت فریم‌های RFCOMM UIH نشان می‌دهد که متن دستور AT در دامپ هگزادسیمال آن قابل مشاهده است. .sp \fBدستور AT در فریم RFCOMM UIH\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX Channel: 65 len 21 [PSM 3 mode Basic (0x00)] {chan 1} RFCOMM: Unnumbered Info with Header Check (UIH) (0xef) Address: 0x09 cr 0 dlci 0x02 Control: 0xff poll/final 1 Length: 14 FCS: 0x86 Credits: 1 41 54 2b 42 52 53 46 3d 32 30 35 35 0d AT+BRSF=2055. .EE .UNINDENT .UNINDENT .sp متن دستور AT در ستون ASCII دامپ هگزادسیمال (سمت راست) خوانا است. توالی راه‌اندازی اتصال سطح سرویس (SLC) ویژگی‌ها و قابلیت‌های دستگاه را تبادل می‌کند: .INDENT 0.0 .IP 1. 3 \fBAT+BRSF=\fP / \fB+BRSF:\fP \-\- تبادل بیت‌ماسک ویژگی‌های پشتیبانی‌شده .IP 2. 3 \fBAT+BAC=1,2\fP \-\- کدک‌های موجود (در صورت پشتیبانی از مذاکره کدک). شناسه‌های کدک: 1 = CVSD، 2 = mSBC، 3 = LC3\-SWB .IP 3. 3 \fBAT+CIND=?\fP / \fB+CIND:(...)\fP \-\- پرس‌وجوی نگاشت نشانگرها .IP 4. 3 \fBAT+CIND?\fP / \fB+CIND:values\fP \-\- مقادیر کنونی نشانگرها .IP 5. 3 \fBAT+CMER=3,0,0,1\fP \-\- فعال‌سازی گزارش‌دهی وضعیت نشانگرها .IP 6. 3 \fBAT+CHLD=?\fP / \fB+CHLD:(0,1,2,3,4)\fP \-\- پشتیبانی از تماس سه‌طرفه .UNINDENT .sp بیت‌های کلیدی ویژگی‌های HFP (از \fBAT+BRSF\fP): .TS box center; l|l|l. T{ بیت T} T{ ویژگی HF T} T{ ویژگی AG T} _ T{ 0 T} T{ EC/NR T} T{ تماس سه‌طرفه T} _ T{ 1 T} T{ تماس سه‌طرفه T} T{ EC/NR T} _ T{ 2 T} T{ نمایش شماره تماس‌گیرنده (CLI) T} T{ تشخیص صدا T} _ T{ 3 T} T{ تشخیص صدا T} T{ صدای زنگ درون‌باندی T} _ T{ 4 T} T{ کنترل صدای راه دور T} T{ برچسب صوتی T} _ T{ 5 T} T{ وضعیت تماس پیشرفته T} T{ رد تماس T} _ T{ 6 T} T{ کنترل تماس پیشرفته T} T{ وضعیت تماس پیشرفته T} _ T{ 7 T} T{ مذاکره کدک T} T{ کنترل تماس پیشرفته T} _ T{ 8 T} T{ نشانگرهای HF T} T{ کدهای خطای گسترش‌یافته T} _ T{ 9 T} T{ eSCO S4 (T2) T} T{ مذاکره کدک T} _ T{ 11 T} T{ T} T{ eSCO S4 (T2) T} .TE .SS "راه‌اندازی اتصال کدک (Codec Connection Setup)" .sp هنگامی که هر دو طرف از مذاکره کدک پشتیبانی می‌کنند (بیت ویژگی ۷ در HF و بیت ۹ در AG)، دستگاه AG قبل از برقراری پیوند صوتی یک کدک را انتخاب می‌کند. این فرآیند به‌صورت دستورات AT در فریم‌های RFCOMM UIH ظاهر می‌شود: .INDENT 0.0 .INDENT 3.5 .sp .EX AG \-> HF: +BCS:2 (select mSBC) HF \-> AG: AT+BCS=2 (confirm mSBC) AG \-> HF: OK .EE .UNINDENT .UNINDENT .sp شناسه‌های کدک HFP (مورداستفاده در \fBAT+BAC\fP و \fBAT+BCS\fP): .TS box center; l|l|l. T{ شناسه T} T{ کدک T} T{ توضیحات T} _ T{ 1 T} T{ CVSD T} T{ باند باریک (۸ کیلوهرتز)، اجباری T} _ T{ 2 T} T{ mSBC T} T{ گفتار با پهنای باند گسترده (۱۶ کیلوهرتز) T} _ T{ 3 T} T{ LC3\-SWB T} T{ باند فوق گسترده (۳۲ کیلوهرتز)، HFP 1.9+ T} .TE .sp این شناسه‌های کدک در سطح HFP با شناسه‌های کدک HCI متفاوت هستند. .SS "تنظیمات صدا (Voice Setting)" .sp پیش از راه‌اندازی SCO/eSCO، میزبان تنظیمات صوتی را پیکربندی می‌کند. برای CVSD، فرمت کدگذاری روی هوا برابر با CVSD است؛ برای mSBC یا LC3\-SWB، این مقدار باید روی داده‌های شفاف (Transparent Data) تنظیم شود: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Write Voice Setting (0x0c|0x0026) plen 2 Setting: 0x0063 Input Coding: Linear Input Data Format: 2\(aqs complement Input Sample Size: 16\-bit # of bits padding at MSB: 0 Air Coding Format: Transparent Data .EE .UNINDENT .UNINDENT .sp برای CVSD: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Write Voice Setting (0x0c|0x0026) plen 2 Setting: 0x0060 Input Coding: Linear Input Data Format: 2\(aqs complement Input Sample Size: 16\-bit # of bits padding at MSB: 0 Air Coding Format: CVSD .EE .UNINDENT .UNINDENT .SS "راه‌اندازی اتصال SCO/eSCO (SCO/eSCO Connection Setup)" .sp پس از مذاکره کدک، میزبان یک اتصال همگام را برای داده‌های صوتی مکالمه برقرار می‌کند. .sp \fBبرقراری اتصال همگام (Setup Synchronous Connection)\fP (پایه): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Setup Synchronous Connection (0x01|0x0028) plen 17 Handle: 1 Transmit bandwidth: 8000 Receive bandwidth: 8000 Max latency: 13 Setting: 0x0063 Input Coding: Linear Input Data Format: 2\(aqs complement Input Sample Size: 16\-bit # of bits padding at MSB: 0 Air Coding Format: Transparent Data Retransmission effort: Optimize for link quality (0x02) Packet type: 0x0008 EV3 may be used .EE .UNINDENT .UNINDENT .sp \fBبرقراری اتصال همگام بهبودیافته (Enhanced Setup Synchronous Connection)\fP (آگاه از کدک): .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: Enhanced Setup Synchronous Connection (0x01|0x003d) plen 59 Handle: 1 Transmit bandwidth: 8000 Receive bandwidth: 8000 Transmit Coding Format: Codec: mSBC (0x05) Receive Coding Format: Codec: mSBC (0x05) Transmit Codec Frame Size: 60 Receive Codec Frame Size: 60 Input Coding Format: Codec: mSBC (0x05) Output Coding Format: Codec: mSBC (0x05) Input Coded Data Size: 16 Output Coded Data Size: 16 Input PCM Data Format: 2\(aqs complement Output PCM Data Format: 2\(aqs complement Input PCM Sample Payload MSB Position: 0 Output PCM Sample Payload MSB Position: 0 Input Data Path: HCI Output Data Path: HCI Input Transport Unit Size: 60 Output Transport Unit Size: 60 Max latency: 13 Packet type: 0x0008 EV3 may be used Retransmission effort: Optimize for link quality (0x02) .EE .UNINDENT .UNINDENT .sp شناسه‌های کدک HCI که توسط btmon نمایش داده می‌شوند: .TS box center; l|l|l. T{ شناسه T} T{ نام در btmon T} T{ کاربرد T} _ T{ 0x02 T} T{ CVSD T} T{ صدای باند باریک T} _ T{ 0x03 T} T{ Transparent T} T{ حالت داده‌های شفاف (Transparent) T} _ T{ 0x04 T} T{ Linear PCM T} T{ ورودی/خروجی فشرده‌نشده PCM T} _ T{ 0x05 T} T{ mSBC T} T{ گفتار با پهنای باند گسترده (WBS) T} _ T{ 0x06 T} T{ LC3 T} T{ باند فوق گسترده (LC3\-SWB) T} .TE .sp \fBتکمیل اتصال همگام (Synchronous Connection Complete)\fP (نتیجه): .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: Synchronous Connection Complete (0x2c) plen 17 Status: Success (0x00) Handle: 257 Address: 11:22:33:44:55:66 (OUI 11\-22\-33) Link type: eSCO (0x02) Transmission interval: 0x0c Retransmission window: 0x06 RX packet length: 60 TX packet length: 60 Air mode: Transparent (0x03) .EE .UNINDENT .UNINDENT .sp فیلدهای کلیدی: .INDENT 0.0 .IP \(bu 2 \fBنوع پیوند (Link type)\fP \-\- مقدار \fBSCO (0x00)\fP برای حالت سنتی، و \fBeSCO (0x02)\fP برای حالت بهبودیافته (مورداستفاده در mSBC و LC3\-SWB) .IP \(bu 2 \fBحالت روی هوا (Air mode)\fP \-\- مقدار \fBCVSD (0x02)\fP برای باند باریک، و \fBTransparent (0x03)\fP برای mSBC یا LC3\-SWB .IP \(bu 2 \fBطول بسته RX/TX\fP \-\- مقدار معمول ۶۰ بایت برای تنظیمات mSBC T2 .UNINDENT .SS "بسته‌های داده SCO (SCO Data Packets)" .sp پس از برقراری اتصال همگام، داده‌های صوتی به‌صورت بسته‌های داده SCO/eSCO جریان می‌یابند: .INDENT 0.0 .INDENT 3.5 .sp .EX > BR\-ESCO: Handle 257 flags 0x00 dlen 60 < BR\-ESCO: Handle 257 flags 0x00 dlen 60 .EE .UNINDENT .UNINDENT .sp ابزار btmon بسته‌ها را بر اساس نوع اتصال برقرارشده در Synchronous Connection Complete برچسب‌گذاری می‌کند: .INDENT 0.0 .IP \(bu 2 \fBBR\-SCO\fP \-\- اتصال سنتی SCO .IP \(bu 2 \fBBR\-ESCO\fP \-\- اتصال بهبودیافته SCO (شامل mSBC، LC3\-SWB، یا eSCO CVSD) .UNINDENT .sp بار داده (Payload) بسته‌های SCO \fBبه‌طور پیش‌فرض نمایش داده نمی‌شود\fP\&. برای مشاهده دامپ هگزادسیمال داده‌های صوتی، فیلتر \fB\-\-show\-sco\-data\fP مورد نیاز است. .SS "خلاصه اتصالات بر اساس نوع کدک (Codec-Specific Connection Summary)" .sp \fBCVSD (باند باریک)\fP: .INDENT 0.0 .IP \(bu 2 شناسه کدک HFP: ۱ .IP \(bu 2 کدک HCI: برابر با CVSD (0x02) .IP \(bu 2 تنظیمات صوتی: 0x0060 (قالب کدگذاری روی هوا: CVSD) .IP \(bu 2 حالت روی هوا: CVSD (0x02) .IP \(bu 2 نوع پیوند: SCO یا eSCO .IP \(bu 2 اندازه معمول بسته: ۴۸ بایت (HV3) یا ۶۰ بایت (EV3) .UNINDENT .sp \fBmSBC (گفتار با پهنای باند گسترده)\fP: .INDENT 0.0 .IP \(bu 2 شناسه کدک HFP: ۲ .IP \(bu 2 کدک HCI: برابر با mSBC (0x05) .IP \(bu 2 تنظیمات صوتی: 0x0063 (قالب کدگذاری روی هوا: داده‌های شفاف / Transparent Data) .IP \(bu 2 حالت روی هوا: Transparent (0x03) .IP \(bu 2 نوع پیوند: eSCO .IP \(bu 2 اندازه معمول بسته: ۶۰ بایت (EV3، تنظیمات T2) .UNINDENT .sp \fBLC3\-SWB (باند فوق گسترده)\fP: .INDENT 0.0 .IP \(bu 2 شناسه کدک HFP: ۳ .IP \(bu 2 کدک HCI: برابر با LC3 (0x06) .IP \(bu 2 تنظیمات صوتی: 0x0063 (قالب کدگذاری روی هوا: داده‌های شفاف / Transparent Data) .IP \(bu 2 حالت روی هوا: Transparent (0x03) .IP \(bu 2 نوع پیوند: eSCO .IP \(bu 2 نکته: ابزار btmon عبارت \fBLC3\fP را نمایش می‌دهد، نه \fBLC3\-SWB\fP .UNINDENT .SS "خودکارسازی تحلیل HFP (Automating HFP Analysis)" .sp \fBشناسایی فعالیت HFP\fP \-\- جستجو برای RFCOMM روی PSM 3: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPSM: 3\e|RFCOMM:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBخواندن دستورات AT\fP \-\- جستجوی الگوهای دستورات AT در بخش ASCII دامپ هگز: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAT+B\e|AT+C\e|+BRSF\e|+CIND\e|+CHLD\e|+BCS\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی مذاکره کدک\fP \-\- جستجو برای BCS (انتخاب کدک بلوتوث): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dq+BCS\e|AT+BAC\e|AT+BCS\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی و تأیید راه‌اندازی SCO/eSCO\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSetup Synchronous\e|Enhanced Setup Synchronous\e|Synchronous Connection Complete\e|Write Voice Setting\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBبررسی کدک صوتی\fP \-\- تأیید حالت روی هوا و قالب کدگذاری: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAir mode:\e|Air Coding Format:\e|Codec:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBتشخیص خطاهای SCO\fP \-\- بررسی وضعیت Synchronous Connection Complete: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSynchronous Connection Complete\(dq output.txt .EE .UNINDENT .UNINDENT .sp سپس خط بعدی را برای \fBStatus:\fP بررسی کنید. خطاهای متداول: .INDENT 0.0 .IP \(bu 2 \fBConnection Rejected due to Limited Resources (0x0d)\fP \-\- کنترلر نمی‌تواند پهنای باند اختصاص دهد .IP \(bu 2 \fBSCO Offset Rejected (0x2b)\fP \-\- پارامترهای زمان‌بندی رد شده‌اند .IP \(bu 2 \fBSCO Interval Rejected (0x2c)\fP \-\- پارامترهای بازه زمانی رد شده‌اند .UNINDENT .sp \fBردیابی وضعیت تماس\fP \-\- جستجو برای به‌روزرسانی‌های نشانگر CIEV: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dq+CIEV\e|AT+CHUP\e|ATD\e|ATA\e|AT+CLCC\e|RING\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBالگوی کامل عیب‌یابی HFP\fP: .INDENT 0.0 .IP 1. 4 یافتن پرس‌وجوی SDP برای UUID 0x111e/0x111f \-\- تأیید کشف HFP .IP 2. 4 یافتن L2CAP Connection Request برای PSM 3 \-\- راه‌اندازی کانال RFCOMM .IP 3. 4 یافتن RFCOMM SABM/UA روی DLCI 0 و سپس DLCI مقصد \-\- چندگانه‌ساز و کانال داده .IP 4. 4 یافتن AT+BRSF در دامپ‌های هگزادسیمال \-\- تبادل ویژگی‌ها، بررسی بیت مذاکره کدک .IP 5. 4 یافتن AT+BAC در دامپ‌های هگزادسیمال \-\- کدک‌های موجود گزارش‌شده .IP 6. 4 یافتن +BCS/AT+BCS در دامپ‌های هگزادسیمال \-\- کدک انتخاب‌شده برای صوت .IP 7. 4 یافتن Write Voice Setting \-\- تأیید تطابق قالب کدگذاری روی هوا با کدک .IP 8. 4 یافتن Setup Synchronous Connection یا نگارش Enhanced آن \-\- راه‌اندازی SCO .IP 9. 4 یافتن Synchronous Connection Complete \-\- بررسی Status، Link type و Air mode .IP 10. 4 یافتن بسته‌های BR\-SCO یا BR\-ESCO \-\- جریان یافتن داده‌های صوتی .UNINDENT .\" This file is included by btmon.rst. . .SH "تبلیغ و پویش (ADVERTISING AND SCANNING)" .sp ابزار btmon ساختارهای داده‌های تبلیغ (advertising data) را به‌طور خودکار رمزگشایی می‌کند. داده‌های تبلیغ و پاسخ پویش (scan response) در رویدادهای گزارش تبلیغ HCI LE و در پارامترهای دستورات تبلیغ ظاهر می‌شوند. .SS "گزارش‌های تبلیغ (Advertising Reports)" .sp هنگامی که کنترلر تبلیغات دریافتی را گزارش می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 43 #120 [hci0] 0.500003 LE Extended Advertising Report (0x0d) Event type: 0x0013 Props: 0x0013 Connectable Scannable Complete Address type: Random (0x01) Address: 00:11:22:33:44:55 Primary PHY: LE 1M Secondary PHY: LE 2M SID: 0x01 TX power: 0 dBm RSSI: \-55 dBm (0xc9) Data length: 18 .EE .UNINDENT .UNINDENT .sp ساختارهای داده‌های تبلیغ (AD) درون گزارش به صورت فیلدهای نوع‌دار رمزگشایی می‌شوند: .sp \fBانواع متداول AD که btmon رمزگشایی می‌کند\fP: .TS box center; l|l|l. T{ نوع AD T} T{ نام T} T{ نمونه در خروجی btmon T} _ T{ 0x01 T} T{ Flags T} T{ \fBFlags: 0x06\fP همراه با بیت‌های رمزگشایی‌شده (LE General Discoverable، BR/EDR Not Supported) T} _ T{ 0x02/0x03 T} T{ Incomplete/Complete 16\-bit UUIDs T} T{ \fB16\-bit Service UUIDs (complete): 2 entries\fP به دنبال آن فهرست UUIDها T} _ T{ 0x06/0x07 T} T{ Incomplete/Complete 128\-bit UUIDs T} T{ \fB128\-bit Service UUIDs (complete): 1 entry\fP T} _ T{ 0x08/0x09 T} T{ Shortened/Complete Local Name T} T{ \fBName (complete): MyDevice\fP T} _ T{ 0x0a T} T{ TX Power Level T} T{ \fBTX power: 4 dBm\fP T} _ T{ 0x16 T} T{ Service Data (16\-bit UUID) T} T{ \fBService Data (UUID 0x184e): ...\fP با رمزگشایی مختص پروتکل T} _ T{ 0xff T} T{ Manufacturer Specific Data T} T{ \fBCompany: Apple, Inc. (76)\fP به دنبال داده‌های هگزادسیمال T} .TE .sp \fBنمونه گزارش تبلیغ معمولی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 38 #120 [hci0] 0.500003 LE Extended Advertising Report (0x0d) Address: 00:11:22:33:44:55 RSSI: \-62 dBm (0xc2) Flags: 0x06 LE General Discoverable Mode BR/EDR Not Supported Name (complete): LE\-Audio\-Left 16\-bit Service UUIDs (complete): 3 entries Published Audio Capabilities (0x1850) Audio Stream Control (0x184e) Common Audio (0x1853) Service Data (UUID 0x1852): 01a2b3 Appearance: Earbud (0x0941) .EE .UNINDENT .UNINDENT .SS "تبلیغ گسترش‌یافته (Extended Advertising)" .sp کنترلرهای مدرن از دستورات و رویدادهای تبلیغ گسترش‌یافته استفاده می‌کنند. توالی راه‌اندازی در btmon: .INDENT 0.0 .INDENT 3.5 .sp .EX < HCI Command: LE Set Extended Adv Parameters (0x08|0x0036) plen 25 #50 [hci0] 0.100003 Handle: 0x01 Properties: 0x0000 Min advertising interval: 160.000 msec (0x0100) Max advertising interval: 160.000 msec (0x0100) Channel map: 37, 38, 39 (0x07) Own address type: Random (0x01) Peer address type: Public (0x00) PHY: LE 1M, LE 2M SID: 0x01 TX power: 7 dBm < HCI Command: LE Set Extended Adv Data (0x08|0x0037) plen 35 #52 [hci0] 0.101003 Handle: 0x01 Operation: Complete extended advertising data (0x01) Fragment preference: No fragmentation (0x01) .EE .UNINDENT .UNINDENT .SS "تبلیغ دوره‌ای (صوت LE) (Periodic Advertising (LE Audio))" .sp منابع پخش صوت LE از تبلیغ دوره‌ای برای ارسال اعلان‌های BASE حاوی پیکربندی کُدک (codec) استفاده می‌کنند: .INDENT 0.0 .INDENT 3.5 .sp .EX > HCI Event: LE Meta Event (0x3e) plen 80 #200 [hci0] 0.500003 LE Periodic Advertising Report (0x0f) Sync handle: 0x0001 TX power: 0 dBm RSSI: \-45 dBm CTE Type: No CTE (0xff) Data status: Complete (0x00) Data length: 60 Service Data: Basic Audio Announcement (0x1851) Presentation Delay: 40000 us Number of Subgroups: 1 Codec: LC3 (0x06) Sampling Frequency: 48000 Hz Frame Duration: 10 ms Frame Length: 120 .EE .UNINDENT .UNINDENT .SS "خودکارسازی تحلیل تبلیغات (Automating Advertising Analysis)" .sp \fBیافتن همه گزارش‌های تبلیغ\fP (دستگاه‌های دیده‌شده): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAdvertising Report\e|Address:.*RSSI:\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBاستخراج نام دستگاه‌ها\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqName (complete):\e|Name (short):\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن دستگاه‌های LE Audio\fP (از روی UUID سرویس‌ها در تبلیغ): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAudio Stream Control\e|Published Audio Capabilities\e|Common Audio\e|Basic Audio Announcement\e|Broadcast Audio\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBردیابی راه‌اندازی تبلیغ\fP (پیکربندی تبلیغ توسط دستگاه محلی): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSet Extended Adv\e|Set Advertising\e|Set Scan Response\e|Adv Enable\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن تبلیغ دوره‌ای\fP (پخش صوت): .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPeriodic Advertising\e|PA Sync\e|PA Report\e|Basic Audio Announcement\e|Broadcast.*Announcement\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBشناسایی دستگاه‌ها بر اساس ظاهر (Appearance)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqAppearance:\(dq output.txt .EE .UNINDENT .UNINDENT .\" This file is included by btmon.rst. . .SH "جریان‌های پروتکل مدیریت (MGMT PROTOCOL FLOWS)" .sp رابط مدیریت (MGMT) پروتکل ساختاریافته دستور/رویداد بین فضای کاربری (معمولاً \fBbluetoothd\fP) و زیرسیستم بلوتوث هسته (kernel) است. در خروجی btmon، ترافیک MGMT با پیشوند \fB@\fP مشخص می‌شود و دیدگاهی در سطح بالاتر از HCI خام نسبت به پیکربندی آداپتور، کشف دستگاه‌ها، جفت‌سازی و مدیریت اتصال فراهم می‌کند. این بخش جریان‌های متداول پروتکل MGMT را همان‌گونه که از طریق btmon دیده می‌شوند، پوشش می‌دهد. .sp برای اصول پایه قالب خروجی MGMT (ساختار خطوط، Open/Close، پارامترها و رویدادها)، به زیربخش «ترافیک مدیریت (Management Traffic)» در بخش خواندن خروجی (READING THE OUTPUT) در بالا مراجعه کنید. .SS "راه‌اندازی اولیه و تبادل نسخه (Initialization and Version Handshake)" .sp هنگامی که \fBbluetoothd\fP شروع به کار می‌کند، یک سوکت مدیریت باز می‌کند و نسخه پروتکل و ویژگی‌های پشتیبانی‌شده را از هسته استعلام می‌نماید. این دست‌تکانی (handshake) باید قبل از هرگونه عملیات کنترلر با موفقیت انجام شود: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Open: bluetoothd (privileged) version 1.23 {0x0001} 12:34:49.881936 @ MGMT Command: Read Management Ver.. (0x0001) plen 0 {0x0001} 12:34:49.882003 @ MGMT Event: Command Complete (0x0001) plen 6 {0x0001} 12:34:49.882010 Read Management Version Information (0x0001) plen 3 Status: Success (0x00) Version: 1.23 @ MGMT Command: Read Management Sup.. (0x0002) plen 0 {0x0001} 12:34:49.882050 @ MGMT Event: Command Complete (0x0001) plen 58 {0x0001} 12:34:49.882055 Read Supported Commands (0x0002) plen 55 Status: Success (0x00) Num of commands: 120 Num of events: 38 .EE .UNINDENT .UNINDENT .sp پس از بررسی نسخه، \fBbluetoothd\fP فهرست کنترلرها را می‌خواند و اطلاعات هر کنترلر را استعلام می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Read Controller Index List (0x0003) plen 0 {0x0001} 12:34:49.882100 @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} 12:34:49.882105 Read Controller Index List (0x0003) plen 4 Status: Success (0x00) Num controllers: 1 Controller: hci0 @ MGMT Command: Read Controller Inf.. (0x0004) plen 0 {0x0001} [hci0] 12:34:49.882200 @ MGMT Event: Command Complete (0x0001) plen 283 {0x0001} [hci0] 12:34:49.882210 Read Controller Information (0x0004) plen 280 Status: Success (0x00) Address: 00:11:22:33:44:55 Bluetooth version: 5.4 Manufacturer: Intel (2) Supported settings: 0x003effff Current settings: 0x00000080 .EE .UNINDENT .UNINDENT .sp نکات کلیدی برای بررسی در جریان راه‌اندازی اولیه: .INDENT 0.0 .IP \(bu 2 \fBMGMT Open\fP \-\- اتصال \fBbluetoothd\fP را تأیید می‌کند. در صورت عدم وجود، دیمن شروع به کار نکرده یا قبل از رسیدن به راه‌اندازی MGMT کرش کرده است. .IP \(bu 2 \fBعدم تطابق نسخه (Version mismatch)\fP \-\- اگر \fBbluetoothd\fP انتظار نسخه جدیدتری از MGMT را نسبت به آنچه هسته ارائه می‌دهد داشته باشد، ممکن است برخی ویژگی‌ها در دسترس نباشند. .IP \(bu 2 \fBNum controllers: 0\fP \-\- هیچ سخت‌افزار بلوتوثی شناسایی نشده است. لاگ‌های \fBdmesg\fP را برای مشکلات درایور بررسی کنید. .IP \(bu 2 \fBCurrent settings\fP \-\- ماسک بیتی نشان می‌دهد چه مواردی در حال حاضر روی کنترلر فعال هستند (Powered، LE، BR/EDR، SSP و غیره). .UNINDENT .SS "پیکربندی آداپتور (Adapter Configuration)" .sp پس از خواندن اطلاعات کنترلر، \fBbluetoothd\fP آداپتور را با مجموعه‌ای از دستورات MGMT قبل از روشن کردن آن پیکربندی می‌کند. توالی دقیق به تنظیمات \fBmain.conf\fP و قابلیت‌های آداپتور بستگی دارد. .sp \fBبارگذاری کلیدهای ذخیره‌شده\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Load Link Keys (0x0012) plen 3 {0x0001} [hci0] 12:34:50.001200 Debug keys: Disabled (0x00) Key count: 0 @ MGMT Event: Command Complete (0x0001) plen 4 {0x0001} [hci0] 12:34:50.001220 Load Link Keys (0x0012) plen 1 Status: Success (0x00) @ MGMT Command: Load Long Term Keys (0x0013) plen 2 {0x0001} [hci0] 12:34:50.001300 Key count: 0 @ MGMT Event: Command Complete (0x0001) plen 4 {0x0001} [hci0] 12:34:50.001315 Load Long Term Keys (0x0013) plen 1 Status: Success (0x00) @ MGMT Command: Load Identity Resolving Keys (0x0030) plen 2 {0x0001} [hci0] 12:34:50.001400 Key count: 0 @ MGMT Event: Command Complete (0x0001) plen 4 {0x0001} [hci0] 12:34:50.001415 Load Identity Resolving Keys (0x0030) plen 1 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp هنگامی که دستگاه‌های پیوند‌خورده (bonded) وجود داشته باشند، مقدار Key count غیر صفر خواهد بود و btmon تک‌تک ورودی‌های کلید را فهرست می‌کند. تعداد زیاد کلیدها می‌تواند نشان‌دهنده دستگاه‌های جفت‌شده متعدد باشد؛ این امر کاملاً طبیعی است. .sp \fBتنظیم ویژگی‌های آداپتور\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Set Secure Connections (0x002d) plen 1 {0x0001} [hci0] 12:34:50.002100 Secure connections: Enabled (0x01) @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} [hci0] 12:34:50.002120 Set Secure Connections (0x002d) plen 4 Status: Success (0x00) Current settings: 0x004e0a81 @ MGMT Command: Set Bondable (0x0009) plen 1 {0x0001} [hci0] 12:34:50.002200 Bondable: Enabled (0x01) @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} [hci0] 12:34:50.002220 Set Bondable (0x0009) plen 4 Status: Success (0x00) Current settings: 0x004e0a91 .EE .UNINDENT .UNINDENT .sp \fBروشن کردن (Powering on)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Set Powered (0x0005) plen 1 {0x0001} [hci0] 12:35:04.033564 Powered: Enabled (0x01) @ MGMT Event: Command Complete (0x0001) plen 7 {0x0001} [hci0] 12:35:04.114789 Set Powered (0x0005) plen 4 Status: Success (0x00) Current settings: 0x004e0ac1 .EE .UNINDENT .UNINDENT .sp بین دستور \fBSet Powered\fP و پاسخ آن، btmon دستورات HCI ارسالی توسط هسته را برای مقداردهی اولیه رادیو نمایش می‌دهد (به «توالی راه‌اندازی اولیه HCI» مراجعه کنید). .SS "کشف دستگاه‌ها (Discovery)" .sp کشف دستگاه‌ها به‌جای دستورات خام HCI از طریق MGMT آغاز می‌شود. \fBbluetoothd\fP (یا \fBbtmgmt\fP) یک دستور Start Discovery ارسال می‌کند که انواع انتقال (transport) مورد نظر برای پویش را مشخص می‌سازد. .sp \fBشروع کشف\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Start Discovery (0x0023) plen 1 {0x0001} [hci0] 12:36:00.100200 Address type: 0x07 BR/EDR LE Public LE Random @ MGMT Event: Command Complete (0x0001) plen 5 {0x0001} [hci0] 12:36:00.100500 Start Discovery (0x0023) plen 2 Status: Success (0x00) Address type: 0x07 .EE .UNINDENT .UNINDENT .sp پس از این، btmon دستورات پویش سطح HCI صادرشده توسط هسته را نشان می‌دهد (\fBLE Set Scan Parameters\fP، \fBLE Set Scan Enable\fP و/یا \fBInquiry\fP برای BR/EDR). دستگاه‌های کشف‌شده به‌صورت رویدادهای MGMT ظاهر می‌شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Device Found (0x0012) plen 38 {0x0001} [hci0] 12:36:00.250003 LE Address: AA:BB:CC:DD:EE:FF (Random) RSSI: \-62 Flags: 0x0000 EIR Data: Name (complete): My Device TX power: 0 .EE .UNINDENT .UNINDENT .sp \fBکشف سرویس\fP از یک نسخه فیلترشده استفاده می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Start Service Discovery (0x003a) plen 19 {0x0001} [hci0] 12:36:10.100200 Address type: 0x06 LE Public LE Random RSSI threshold: \-127 UUIDs: 1 UUID: Heart Rate (0x180d) @ MGMT Event: Command Complete (0x0001) plen 5 {0x0001} [hci0] 12:36:10.100500 Start Service Discovery (0x003a) plen 2 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp \fBتوقف کشف\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Stop Discovery (0x0024) plen 1 {0x0001} [hci0] 12:36:15.200100 Address type: 0x07 @ MGMT Event: Command Complete (0x0001) plen 5 {0x0001} [hci0] 12:36:15.200400 Stop Discovery (0x0024) plen 2 Status: Success (0x00) @ MGMT Event: Discovering (0x0013) plen 2 {0x0001} [hci0] 12:36:15.200500 Address type: 0x07 Discovery: Disabled (0x00) .EE .UNINDENT .UNINDENT .sp مشکلات مربوط به کشف دستگاه‌ها که باید بررسی شوند: .INDENT 0.0 .IP \(bu 2 \fBStatus: Busy (0x0a)\fP در Start Discovery \-\- نشست کشف دیگری از قبل فعال است. .IP \(bu 2 \fBStatus: Not Powered (0x0f)\fP \-\- آداپتور روشن نیست. .IP \(bu 2 \fBStatus: RFKilled (0x12)\fP \-\- رادیو توسط rfkill مسدود شده است. .IP \(bu 2 \fBعدم وجود رویدادهای Device Found\fP \-\- ممکن است دستگاه دوردست در حال تبلیغ نباشد، یا فیلتر نوع آدرس اشتباه تنظیم شده باشد. .UNINDENT .SS "جفت‌سازی و پیوند از طریق MGMT (Pairing and Bonding via MGMT)" .sp پروتکل MGMT یک رابط جفت‌سازی سطح بالا فراهم می‌کند. میزبان یک دستور \fBPair Device\fP ارسال می‌کند؛ سپس هسته تبادلات SMP یا SSP را بر حسب مورد هماهنگ کرده و نتیجه را گزارش می‌دهد. .sp \fBآغاز جفت‌سازی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Pair Device (0x0019) plen 8 {0x0001} [hci0] 12:37:00.500200 LE Address: AA:BB:CC:DD:EE:FF (Random) Capability: KeyboardDisplay (0x04) .EE .UNINDENT .UNINDENT .sp پس از این دستور، btmon تبادل زیربنایی SMP یا SSP را نمایش می‌دهد (برای جزئیات به «جریان جفت‌سازی SMP» و «توالی راه‌اندازی اولیه HCI» مراجعه کنید). ممکن است رویدادهای تعامل با کاربر ظاهر شوند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: User Confirmation Request (0x000f) plen 12 {0x0001} [hci0] 12:37:01.200100 LE Address: AA:BB:CC:DD:EE:FF (Random) Value: 123456 @ MGMT Command: User Confirmation Reply (0x001e) plen 6 {0x0001} [hci0] 12:37:03.800200 LE Address: AA:BB:CC:DD:EE:FF (Random) @ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 12:37:03.800350 User Confirmation Reply (0x001e) plen 7 Status: Success (0x00) .EE .UNINDENT .UNINDENT .sp یا برای ورود کلید عبور (passkey): .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: User Passkey Request (0x0010) plen 6 {0x0001} [hci0] 12:37:01.200100 LE Address: AA:BB:CC:DD:EE:FF (Random) @ MGMT Command: User Passkey Reply (0x0020) plen 10 {0x0001} [hci0] 12:37:05.100200 LE Address: AA:BB:CC:DD:EE:FF (Random) Passkey: 123456 .EE .UNINDENT .UNINDENT .sp \fBموفقیت در جفت‌سازی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: New Long Term Key (0x000a) plen 37 {0x0001} [hci0] 12:37:06.100200 Store hint: Yes (0x01) LE Address: AA:BB:CC:DD:EE:FF (Random) Key type: Authenticated P\-256 (0x03) Central: 0x00 Encryption size: 16 @ MGMT Event: New Identity Resolving Key (0x0018) plen 30 {0x0001} [hci0] 12:37:06.100300 Store hint: Yes (0x01) Random address: AA:BB:CC:DD:EE:FF LE Address: 11:22:33:44:55:66 (Public) Key: 00112233445566778899aabbccddeeff @ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 12:37:06.100500 Pair Device (0x0019) plen 7 Status: Success (0x00) LE Address: AA:BB:CC:DD:EE:FF (Random) .EE .UNINDENT .UNINDENT .sp رویدادهای کلیدی برای بررسی پس از جفت‌سازی: .INDENT 0.0 .IP \(bu 2 \fBNew Long Term Key\fP با \fBStore hint: Yes\fP \-\- هسته به فضای کاربری اعلام می‌کند که این کلید را برای اتصالات مجدد در آینده ذخیره کند. .IP \(bu 2 \fBNew Identity Resolving Key\fP \-\- آدرس واقعی دستگاه را در پشت یک آدرس خصوصی قابل تفکیک (RPA) آشکار می‌سازد. این مورد برای تفکیک آدرس در اتصال مجدد ضروری است. .IP \(bu 2 \fBKey type\fP \-\- مقدار \fBAuthenticated P\-256\fP نشان‌دهنده اتصالات امن (Secure Connections) همراه با حفاظت MITM است. \fBUnauthenticated P\-256\fP به معنی Just Works SC است. \fBAuthenticated\fP (بدون P\-256) به معنی حالت سنتی (Legacy) با حفاظت MITM است. .UNINDENT .sp \fBشکست در جفت‌سازی\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 12:37:06.100500 Pair Device (0x0019) plen 7 Status: Authentication Failed (0x05) LE Address: AA:BB:CC:DD:EE:FF (Random) .EE .UNINDENT .UNINDENT .sp کدهای خطای جفت‌سازی MGMT: .TS box center; l|l|l. T{ کد T} T{ وضعیت T} T{ مفهوم تشخیصی T} _ T{ 0x03 T} T{ Failed T} T{ شکست عمومی؛ خطاهای SMP یا HCI ماقبل این را بررسی کنید T} _ T{ 0x04 T} T{ Connect Failed T} T{ عدم امکان برقراری اتصال پیش از جفت‌سازی T} _ T{ 0x05 T} T{ Authentication Failed T} T{ احراز هویت SMP یا SSP ناموفق بود؛ دلیل SMP Pairing Failed یا رویداد HCI Authentication Failure را بررسی کنید T} _ T{ 0x08 T} T{ Timeout T} T{ پایان مهلت زمانی جفت‌سازی؛ ممکن است دستگاه دوردست از برد خارج شده باشد T} _ T{ 0x0b T} T{ Rejected T} T{ دستگاه دوردست درخواست جفت‌سازی را رد کرد T} _ T{ 0x0d T} T{ Invalid Parameters T} T{ نوع آدرس یا مقدار قابلیت (capability) نامعتبر در دستور Pair Device T} .TE .SS "اتصال و قطع اتصال دستگاه (Device Connection and Disconnection)" .sp پروتکل MGMT رویدادهای چرخه حیات اتصال را گزارش می‌کند که مکمل رویدادهای سطح HCI نشان‌داده‌شده در سایر بخش‌های لاگ هستند. .sp \fBاتصال دستگاه\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Device Connected (0x000b) plen 13 {0x0001} [hci0] 12:36:18.974319 LE Address: AA:BB:CC:DD:EE:FF (Random) Flags: 0x0000 EIR Data Length: 0 .EE .UNINDENT .UNINDENT .sp این رویداد پس از رویداد HCI به نام \fBLE (Enhanced) Connection Complete\fP رخ می‌دهد. این رویداد به فضای کاربری اعلام می‌کند که یک اتصال جدید آماده است. .sp \fBقطع اتصال دستگاه\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Device Disconnected (0x000c) plen 8 {0x0001} [hci0] 12:38:20.500200 LE Address: AA:BB:CC:DD:EE:FF (Random) Reason: Connection timeout (0x01) .EE .UNINDENT .UNINDENT .sp دلایل قطع اتصال گزارش‌شده توسط MGMT: .TS box center; l|l|l. T{ کد T} T{ دلیل T} T{ مفهوم تشخیصی T} _ T{ 0x00 T} T{ Unspecified T} T{ دلیلی ارائه نشده است؛ معمولاً قطع اتصال محلی است T} _ T{ 0x01 T} T{ Connection timeout T} T{ مهلت نظارت بر پیوند (link supervision timeout) به پایان رسیده است؛ ممکن است دستگاه از برد خارج شده باشد T} _ T{ 0x02 T} T{ Connection terminated by local host T} T{ سمت محلی قطع اتصال را آغاز کرده است T} _ T{ 0x03 T} T{ Connection terminated by remote host T} T{ دستگاه دوردست قطع اتصال را آغاز کرده است T} .TE .sp دستور \fBUnpair Device\fP کلیدهای ذخیره‌شده را حذف کرده و در صورت تمایل اتصال را قطع می‌کند: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Unpair Device (0x001a) plen 7 {0x0001} [hci0] 12:39:00.100200 LE Address: AA:BB:CC:DD:EE:FF (Random) Disconnect: Enabled (0x01) @ MGMT Event: Command Complete (0x0001) plen 10 {0x0001} [hci0] 12:39:00.100500 Unpair Device (0x001a) plen 7 Status: Success (0x00) .EE .UNINDENT .UNINDENT .SS "تبلیغ از طریق MGMT (Advertising via MGMT)" .sp سامانه BlueZ مدرن، تبلیغ را به‌جای ارسال مستقیم دستورات تبلیغ HCI LE، از طریق دستورات MGMT پیکربندی می‌کند. این رویکرد زیرساختی چندکاربره (multi-client) برای تبلیغ فراهم می‌سازد. .sp \fBافزودن تبلیغ\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Add Advertising (0x003e) plen 22 {0x0001} [hci0] 12:40:00.100200 Instance: 1 Flags: 0x0006 The connectable flag will be managed The limited discoverable flag will be managed Duration: 0 Timeout: 0 Advertising data length: 6 Scan response length: 0 @ MGMT Event: Command Complete (0x0001) plen 5 {0x0001} [hci0] 12:40:00.100500 Add Advertising (0x003e) plen 2 Status: Success (0x00) Instance: 1 .EE .UNINDENT .UNINDENT .sp \fBحذف تبلیغ\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Command: Remove Advertising (0x003f) plen 1 {0x0001} [hci0] 12:41:00.100200 Instance: 1 @ MGMT Event: Command Complete (0x0001) plen 5 {0x0001} [hci0] 12:41:00.100500 Remove Advertising (0x003f) plen 2 Status: Success (0x00) Instance: 1 .EE .UNINDENT .UNINDENT .sp برای دستورات تبلیغ سطح HCI که ناشی از این عملیات‌های MGMT هستند، به «تبلیغ و پویش (ADVERTISING AND SCANNING)» مراجعه کنید. .SS "تشخیص خطا (Error Diagnosis)" .sp رویدادهای MGMT Command Status و Command Complete حامل کدهای خطایی هستند که با کدهای خطای HCI تفاوت دارند. هنگام تشخیص خرابی‌ها و خطاها، هر دو لایه را بررسی کنید. .sp \fBMGMT error in Command Complete\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Command Complete (0x0001) plen 4 {0x0001} [hci0] 12:42:00.100200 Set Powered (0x0005) plen 1 Status: RFKilled (0x12) .EE .UNINDENT .UNINDENT .sp \fBMGMT Command Status\fP (پذیرش یا رد دستور ناهمگام / asynchronous): .INDENT 0.0 .INDENT 3.5 .sp .EX @ MGMT Event: Command Status (0x0002) plen 3 {0x0001} [hci0] 12:42:01.100200 Start Discovery (0x0023) plen 0 Status: Busy (0x0a) .EE .UNINDENT .UNINDENT .sp کدهای خطای MGMT: .TS box center; l|l|l. T{ کد T} T{ وضعیت T} T{ مفهوم تشخیصی T} _ T{ 0x00 T} T{ Success T} T{ دستور با موفقیت انجام شد T} _ T{ 0x01 T} T{ Unknown Command T} T{ هسته دستور را شناسایی نمی‌کند؛ ممکن است نسخه MGMT خیلی قدیمی باشد T} _ T{ 0x02 T} T{ Not Connected T} T{ عملیات نیازمند یک اتصال فعال است که وجود ندارد T} _ T{ 0x03 T} T{ Failed T} T{ شکست عمومی؛ رویدادهای HCI را برای علت اصلی بررسی کنید T} _ T{ 0x04 T} T{ Connect Failed T} T{ تلاش برای اتصال در سطح HCI ناموفق بود T} _ T{ 0x05 T} T{ Authentication Failed T} T{ فرآیند جفت‌سازی یا احراز هویت با شکست مواجه شد T} _ T{ 0x06 T} T{ Not Paired T} T{ عملیات نیازمند یک پیوند (bond) موجود است؛ دستگاه جفت نشده است T} _ T{ 0x07 T} T{ No Resources T} T{ منابع هسته به پایان رسیده است (حافظه، هندل‌ها و غیره) T} _ T{ 0x08 T} T{ Timeout T} T{ مهلت زمانی عملیات به پایان رسید T} _ T{ 0x09 T} T{ Already Connected T} T{ اتصال با دستگاه مقصد از قبل برقرار است T} _ T{ 0x0a T} T{ Busy T} T{ عملیات دیگری در حال انجام است (مثلاً کشف در حال اجرا است) T} _ T{ 0x0b T} T{ Rejected T} T{ عملیات توسط دستگاه دوردست یا خط‌مشی‌ها (policy) رد شد T} _ T{ 0x0c T} T{ Not Supported T} T{ ویژگی توسط این کنترلر یا نسخه هسته پشتیبانی نمی‌شود T} _ T{ 0x0d T} T{ Invalid Parameters T} T{ پارامترهای نامعتبر در دستور T} _ T{ 0x0e T} T{ Disconnected T} T{ اتصال در حین انجام عملیات قطع شد T} _ T{ 0x0f T} T{ Not Powered T} T{ کنترلر روشن نیست؛ ابتدا Set Powered را فراخوانی کنید T} _ T{ 0x10 T} T{ Cancelled T} T{ عملیات توسط کاربر یا دستور دیگری لغو شد T} _ T{ 0x11 T} T{ Invalid Index T} T{ شاخص کنترلر وجود ندارد T} _ T{ 0x12 T} T{ RFKilled T} T{ رادیو توسط rfkill غیرفعال شده است؛ با \fBrfkill unblock bluetooth\fP رفع انسداد کنید T} _ T{ 0x13 T} T{ Already Paired T} T{ دستگاه از قبل جفت شده است؛ در صورت نیاز به جفت‌سازی مجدد، ابتدا unpair کنید T} _ T{ 0x14 T} T{ Permission Denied T} T{ فرایند فاقد امتیازات لازم است (CAP_NET_ADMIN) T} .TE .sp \fBارتباط دادن خطاهای MGMT و HCI\fP: هنگامی که MGMT خطای \fBFailed\fP (0x03) یا \fBAuthentication Failed\fP (0x05) را گزارش می‌کند، رویدادهای HCI بلافاصله قبل از پاسخ MGMT را بررسی کنید. خطای سطح HCI (مانند \fBAuthentication Failure (0x05)\fP، \fBConnection Timeout (0x08)\fP) علت دقیق سخت‌افزاری را مشخص می‌کند. .SS "خودکارسازی تحلیل MGMT (Automating MGMT Analysis)" .sp \fBفهرست کردن تمام دستورات و رویدادهای MGMT\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dq@ MGMT\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن خطاهای MGMT (وضعیت‌های غیر صفر)\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dq@ MGMT\(dq output.txt | grep \-v \(dqStatus: Success\(dq .EE .UNINDENT .UNINDENT .sp \fBردیابی تغییرات وضعیت برق آداپتور\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqSet Powered\e|RFKilled\e|Not Powered\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن تمام فعالیت‌های کشف دستگاه‌ها\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqStart Discovery\e|Stop Discovery\e|Device Found\e|Discovering\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن فعالیت‌های جفت‌سازی از طریق MGMT\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqPair Device\e|User Confirmation\e|User Passkey\e|New Long Term Key\e|New Identity Resolving Key\e|Authentication Failed\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBیافتن رویدادهای چرخه حیات اتصال\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dqDevice Connected\e|Device Disconnected\e|Unpair Device\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBشناسایی کلاینت‌های فعال MGMT\fP: .INDENT 0.0 .INDENT 3.5 .sp .EX grep \-n \(dq@ MGMT Open\e|@ MGMT Close\(dq output.txt .EE .UNINDENT .UNINDENT .sp \fBالگوی کامل تشخیص MGMT\fP: .INDENT 0.0 .IP 1. 3 یافتن \fBMGMT Open\fP \-\- اتصال \fBbluetoothd\fP را تأیید کنید و شناسه سوکت را یادداشت نمایید .IP 2. 3 بررسی \fBRead Controller Information\fP \-\- آدرس، نسخه و تنظیمات فعلی را بررسی کنید .IP 3. 3 یافتن \fBSet Powered\fP \-\- تأیید کنید که آداپتور با موفقیت روشن شده است .IP 4. 3 جستجو برای کدهای وضعیت غیر Success \-\- این کدها نشان‌دهنده خرابی و خطا هستند .IP 5. 3 برای مشکلات جفت‌سازی، \fBPair Device\fP را پیدا کرده و تا پاسخ \fBCommand Complete\fP مربوط به آن را ردیابی کنید .IP 6. 3 برای مشکلات اتصال، \fBDevice Connected\fP/\fBDevice Disconnected\fP را پیدا کرده و دلیل قطع اتصال را بررسی نمایید .UNINDENT .SH "مثال‌ها (EXAMPLES)" .SS "ضبط ردپاها از hci0 در پرونده hcidump.log (Capture the traces from hci0 to hcidump.log file)" .INDENT 0.0 .INDENT 3.5 .sp .EX $ btmon \-i hci0 \-w hcidump.log .EE .UNINDENT .UNINDENT .SS "باز کردن پرونده ردپا (Open the trace file)" .INDENT 0.0 .INDENT 3.5 .sp .EX $ btmon \-r hcidump.log .EE .UNINDENT .UNINDENT .SS "باز کردن پرونده ردپا با برچسب‌های زمانی ساعت دیواری (Open the trace file with wall\-clock timestamps)" .INDENT 0.0 .INDENT 3.5 .sp .EX $ btmon \-t \-r hcidump.log .EE .UNINDENT .UNINDENT .SS "باز کردن پرونده ردپا با تاریخ و زمان کامل (Open the trace file with full date and time)" .INDENT 0.0 .INDENT 3.5 .sp .EX $ btmon \-T \-r hcidump.log .EE .UNINDENT .UNINDENT .SH "تحلیل خودکار ردپای بسته‌ها (AUTOMATED TRACE ANALYSIS)" .sp این بخش راهنمایی‌هایی را برای تحلیل برنامه‌نویسی‌شده یا با کمک هوش مصنوعی از ردپای بسته‌های btmon ارائه می‌دهد. هر موضوع به بخش تفصیلی مربوط به پروتکل در بخش‌های پیشین این سند ارجاع دارد. .SS "گردش کار توصیه‌شده (Recommended Workflow)" .INDENT 0.0 .IP 1. 4 \fBدریافت یک نمای کلی\fP: با \fBbtmon \-a \fP شروع کنید تا تعداد بسته‌ها، هندل‌های اتصال، نشانی‌های دستگاه‌ها و حجم ترافیک را مشاهده نمایید. .IP 2. 4 \fBرمزگشایی همراه با برچسب‌های زمانی\fP: از \fBbtmon \-t \-r > output.txt\fP برای ایجاد یک پرونده متنی حاوی برچسب‌های زمانی ساعت دیواری جهت تحلیل استفاده کنید. .IP 3. 4 \fBشناسایی اتصال‌ها\fP: رویدادهای برقراری اتصال را برای ایجاد نگاشت هندل به نشانی جستجو کنید: .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqConnection Complete\e|Enhanced Connection Complete\e|CIS Established\(dq output.txt .EE .UNINDENT .UNINDENT .IP 4. 4 \fBردیابی قطع اتصال‌ها\fP: رویدادهای قطع اتصال و دلایل آن‌ها را جستجو کنید: .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqDisconnect Complete\(dq output.txt .EE .UNINDENT .UNINDENT .sp سپس خطوط پس از هر تطابق را برای فیلد \fBReason:\fP بررسی کنید. برای تفسیر به بخش «کدهای خطا و دلایل قطع اتصال HCI» (HCI ERROR AND DISCONNECT REASON CODES) مراجعه نمایید. .IP 5. 4 \fBبررسی جفت‌سازی/امنیت\fP: به دنبال فعالیت‌های پروتکل SMP بگردید (به بخش «گردش کار جفت‌سازی SMP» (SMP PAIRING FLOW) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqPairing Request\e|Pairing Response\e|Pairing Failed\e|Encryption Change\(dq output.txt .EE .UNINDENT .UNINDENT .IP 6. 4 \fBشناسایی LE Audio\fP: فعالیت‌های مربوط به ASCS و CIS را جستجو کنید (به بخش «گردش پروتکل LE AUDIO» (LE AUDIO PROTOCOL FLOW) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqASE Control Point\e|CIG Parameters\e|Create Connected Isochronous\e|CIS Established\e|Setup ISO Data Path\(dq output.txt .EE .UNINDENT .UNINDENT .IP 7. 4 \fBبررسی وجود خطاها\fP: در تمام لایه‌های پروتکل به دنبال خطا بگردید (به بخش «کدهای خطای پروتکل» (PROTOCOL ERROR CODES) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX # HCI\-level errors grep \-n \(dqStatus:\(dq output.txt | grep \-v \(dqSuccess\(dq # ATT\-level errors grep \-n \(dqError Response\(dq output.txt # SMP failures grep \-n \(dqPairing Failed\(dq output.txt # L2CAP rejections grep \-n \(dqConnection refused\(dq output.txt .EE .UNINDENT .UNINDENT .IP 8. 4 \fBاستخراج اکتشاف GATT\fP: ترافیک مربوط به اکتشاف سرویس/مشخصه در GATT را فیلتر کنید (به بخش «بازسازی پایگاه‌داده GATT از ردپاهای SNOOP» (RECONSTRUCTING A GATT DATABASE FROM SNOOP TRACES) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX # Find all service discovery responses grep \-n \(dqRead By Group Type Response\e|Attribute group list\e|Handle range.*UUID\(dq output.txt # Find all characteristic discovery responses grep \-n \(dqRead By Type Response\e|Properties:\e|Value Handle:\e|Value UUID:\(dq output.txt # Find all descriptor discovery responses grep \-n \(dqFind Information Response\e|Format:\e|Handle:.*UUID:\(dq output.txt # Find targeted service searches grep \-n \(dqFind By Type Value\(dq output.txt .EE .UNINDENT .UNINDENT .IP 9. 4 \fBبررسی کانال‌های L2CAP\fP: نحوه استفاده از پروتکل و مشکلات کانال را شناسایی کنید (به بخش «ردیابی کانال L2CAP» (L2CAP CHANNEL TRACKING) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqPSM:\e|Connection Request\e|Connection Response\e|Parameter Update\(dq output.txt .EE .UNINDENT .UNINDENT .IP 10. 4 \fBبررسی تبلیغ (Advertising)\fP: ببینید چه دستگاه‌هایی قابل مشاهده هستند و چه مواردی را تبلیغ می‌کنند (به بخش «تبلیغ و اسکن» (ADVERTISING AND SCANNING) مراجعه کنید): .INDENT 4.0 .INDENT 3.5 .sp .EX grep \-n \(dqAdvertising Report\e|Name (complete):\e|Appearance:\(dq output.txt .EE .UNINDENT .UNINDENT .UNINDENT .SS "الگوهای کلیدی برای چرخه حیات اتصال (Key Patterns for Connection Lifecycle)" .sp چرخه حیات کامل یک اتصال LE ACL در ردپای بسته‌ها از الگوی زیر پیروی می‌کند: .INDENT 0.0 .IP 1. 3 \fBLE Enhanced Connection Complete\fP \-\- اتصال برقرار شد، مقدار Handle و نشانی Peer را یادداشت کنید. .IP 2. 3 \fBLE Connection Update Complete\fP \-\- پارامترهای اتصال تغییر کرد (ممکن است صفر یا چند بار رخ دهد). .IP 3. 3 \fBEncryption Change\fP \-\- پیوند رمزگذاری شد (ممکن است الگوریتم رمزگذاری را نمایش دهد). برای تبادل اطلاعات SMP که پیش از این رخ می‌دهد، به بخش «گردش کار جفت‌سازی SMP» (SMP PAIRING FLOW) مراجعه کنید. .IP 4. 3 داده‌های ACL با ATT/SMP/L2CAP \-\- اکتشاف سرویس و تبادل داده. برای GATT به بخش «بازسازی پایگاه‌داده GATT از ردپاهای SNOOP» (RECONSTRUCTING A GATT DATABASE FROM SNOOP TRACES)، برای راه‌اندازی کانال به «ردیابی کانال L2CAP» (L2CAP CHANNEL TRACKING) و برای تفسیر خطا به «کدهای خطای پروتکل» (PROTOCOL ERROR CODES) مراجعه نمایید. .IP 5. 3 \fBDisconnect Complete\fP \-\- اتصال پایان یافت، فیلد Reason را بررسی کنید. برای کدهای دلیل، به بخش «کدهای خطا و دلایل قطع اتصال HCI» (HCI ERROR AND DISCONNECT REASON CODES) مراجعه نمایید. .UNINDENT .sp برای اتصال‌های LE Audio، مراحل اضافی بین گام ۳ و ۵ ظاهر می‌شوند (برای جزئیات کامل به بخش «گردش پروتکل LE AUDIO» (LE AUDIO PROTOCOL FLOW) مراجعه کنید): .INDENT 0.0 .IP \(bu 2 عملیات ATT روی مشخصه‌های PACS/ASCS (مذاکره کدک صوتی) .IP \(bu 2 دستور و پاسخ \fBLE Set CIG Parameters\fP .IP \(bu 2 دستور \fBLE Create CIS\fP .IP \(bu 2 رویداد \fBLE CIS Established\fP (هندل CIS را یادداشت کنید) .IP \(bu 2 دستور \fBLE Setup ISO Data Path\fP .IP \(bu 2 داده‌های ISO Data TX/RX (جریان‌سازی صوتی) .IP \(bu 2 \fBDisconnect Complete\fP روی هندل CIS (پایان یافتن جریان) .IP \(bu 2 دستور \fBLE Remove CIG\fP (گروه حذف شد) .UNINDENT .SS "سناریوهای رایج اشکال‌زدایی (Common Debugging Scenarios)" .sp \fBتشخیص شکست جفت‌سازی\fP: .INDENT 0.0 .IP 1. 3 دستور \fBPairing Request\fP را پیدا کنید \-\- قابلیت‌های IO و الزامات احراز اصالت را یادداشت کنید. .IP 2. 3 پاسخ \fBPairing Response\fP را پیدا کنید \-\- برای تعیین مدل پیوستگی، آن‌ها را با یکدیگر مقایسه کنید. .IP 3. 3 اگر \fBPairing Failed\fP نمایش داده شد، کد دلیل، نوع شکست را مشخص می‌کند (به بخش «گردش کار جفت‌سازی SMP» (SMP PAIRING FLOW) مراجعه کنید). .IP 4. 3 اگر \fBEncryption Change\fP وضعیت \fBStatus: Success\fP را نشان داد، جفت‌سازی با موفقیت انجام شده است. .IP 5. 3 اگر هنگام اتصال مجدد هیچ ترافیک SMP وجود نداشت اما \fBEncryption Change\fP شکست خورد، پیوند پیوندیافته (bond) در یکی از طرفین از بین رفته است. .UNINDENT .sp \fBتشخیص خرابی در جریان‌سازی صدا\fP (به بخش «گردش پروتکل LE AUDIO» (LE AUDIO PROTOCOL FLOW) مراجعه کنید): .INDENT 0.0 .IP 1. 3 خواندن‌های PACS را بررسی کنید \-\- آیا هر دو دستگاه از کدک‌های سازگار پشتیبانی می‌کنند؟ .IP 2. 3 گزینه ASE Control Point Config Codec را بررسی کنید \-\- آیا پذیرفته شد؟ .IP 3. 3 اعلان‌های وضعیت ASE را بررسی کنید \-\- آیا ASE به وضعیت Streaming رسید؟ .IP 4. 3 رویداد \fBCIS Established\fP را بررسی کنید \-\- آیا مقدار Status برابر با Success بود؟ .IP 5. 3 دستور \fBSetup ISO Data Path\fP را بررسی کنید \-\- آیا پیکربندی شده بود؟ .IP 6. 3 بسته‌های داده ISO Data را بررسی کنید \-\- آیا صدا در عمل در حال جریان است؟ .UNINDENT .sp \fBرد شدن عملیات GATT\fP (به بخش «کدهای خطای پروتکل» (PROTOCOL ERROR CODES) مراجعه کنید): .INDENT 0.0 .IP 1. 3 پاسخ \fBError Response\fP را پیدا کنید \-\- کد خطا را یادداشت نمایید. .IP 2. 3 خطای \fBInsufficient Encryption\fP (0x0f) → انتظار می‌رود به دنبال آن \fBLE Start Encryption\fP اجرا شود. .IP 3. 3 خطای \fBAuthentication Insufficient\fP (0x05) → انتظار می‌رود به دنبال آن جفت‌سازی SMP انجام شود. .IP 4. 3 پس از برقراری امنیت، عملیات ATT باید مجدداً تلاش شود. .UNINDENT .sp \fBشکست در مذاکره پارامترهای اتصال\fP: .INDENT 0.0 .IP 1. 3 درخواست \fBConnection Parameter Update Request\fP را پیدا کنید (در سطح L2CAP). .IP 2. 3 پاسخ (Response) را بررسی کنید \-\- مقدار \fBrejected\fP به این معنی است که دستگاه مرکزی آن را رد کرده است. .IP 3. 3 همچنین می‌توانید رویداد \fBLE Connection Update Complete\fP را پیدا کنید (در سطح HCI). .IP 4. 3 وضعیت (Status) را بررسی کنید \-\- مقدار غیرصفر به معنای رد به‌روزرسانی توسط کنترل‌کننده است. .UNINDENT .SS "رویدادهای مختص سازنده (Vendor-Specific Events)" .sp رویدادهای HCI مختص سازنده (کد رویداد 0xFF) حاوی داده‌های تشخیصی شرکت سازنده کنترل‌کننده هستند. برنامه btmon برخی از رویدادهای مربوط به سازندگان شناخته‌شده (Intel، Broadcom و غیره) را رمزگشایی می‌کند، اما بسیاری از زیررویدادها به‌صورت \fBUnknown\fP همراه با داده‌های خام هگزادسیمال نمایش داده می‌شوند. این وضعیت طبیعی و مورد انتظار است و عموماً بدون مستندات سازنده قابل اقدام نیست. .sp کنترل‌کننده‌های Intel رویدادهای تله‌متری پیشرفته‌ای (زیررویداد 0x8780) صادر می‌کنند که معیارهای کیفیت اتصال، شمارنده‌های خطا و وضعیت سیستم‌عامل (firmware) را در بر می‌گیرد. رمزگشایی جزئی در \fBmonitor/intel.c\fP در دسترس است. .SH "منابع (RESOURCES)" .sp \% .SH "گزارش اشکال (REPORTING BUGS)" .sp \% .SH "همچنین ببینید (SEE ALSO)" .sp btsnoop(7) .SH "نویسندگان (AUTHORS)" Marcel Holtmann , Tedd Ho-Jeong An .SH "حق نشر (COPYRIGHT)" استفاده آزاد از این نرم‌افزار تحت شرایط مجوز عمومی همگانی کمتر گنو (LGPL) مجاز است. .\" End of generated man page.