سوئیچ صوتی
از آنجایی که کاربران به طور فزاینده ای از چندین دستگاه منبع صوتی برای انجام وظایف روزانه خود استفاده می کنند، تقاضا برای یک راه حل ساده تر برای مدیریت استفاده از هدست در سراسر دستگاه ها افزایش می یابد. سوئیچ صوتی به طور یکپارچه اتصالات هدست را بین دستگاه ها بر اساس فعالیت کاربر (مانند شروع یک فیلم) و رویدادهای اولویت بندی شده (مانند تماس ورودی) انتقال می دهد.
اصول UX
- سوئیچینگ اتصال باید سریع و بر اساس عملکرد کاربر باشد.
- سوئیچینگ اتصال باید برای کاربران شفاف باشد و به کاربران اجازه می دهد در صورت نامطلوب بودن سوئیچینگ، کنترل/برگردند.
- تعویض باید به حریم خصوصی کاربر احترام بگذارد.
نقش ها
جستجوگر سوئیچ صوتی : جستجوگر یک دستگاه منبع صوتی (به عنوان مثال، تلفن یا رایانه لوحی) است که به دنبال یک هدست نزدیک برای اتصال در صورت لزوم است.
ارائهدهنده سوئیچ صوتی : ارائهدهنده معمولاً هدستی است که حضور و وضعیت اتصال خود را برای جستجوگرها تبلیغ میکند تا تصمیمات تعویض را بگیرند.
بررسی اجمالی نیازمندیها
برای دستیابی به سوئیچینگ هوشمند، ارائه دهندگان باید الزامات زیر را رعایت کنند:
نام | توضیحات | الزامات | اجباری؟ |
---|---|---|---|
اسکن صفحه | برای پذیرش یک درخواست اتصال جدید از جستجوگر دیگر در صورت وجود یک اتصال موجود. برای ارائه دهندگان تک نقطه ای:
| حالت اسکن صفحه با تأخیر کم (فاصله اسکن نباید بیشتر از 640 میلی ثانیه باشد) برای بهبود عملکرد مورد نیاز است. برای ایجاد معاوضه بین عمر باتری و عملکرد سوئیچینگ، ارائه دهنده می تواند حالت اسکن صفحه پیش فرض را برای اکثر موارد داشته باشد (حالت کم مصرف، فاصله اسکن نباید بیشتر از 1280 میلی ثانیه باشد). اما حالت تاخیر کم باید در شرایط زیر استفاده شود:
| اجباری |
تاریخچه اتصال | برای بازگشت به اتصال قبلی و از سرگیری بازی در صورت وجود. بازگشت مجدد توسط ارتباطات از طریق APIهای جریان پیام آغاز می شود. رویداد صوتی مکث باید در ضبط گنجانده شود تا در صورت وجود، پخش از سر گرفته شود. | تاریخچه اتصال را حفظ کنید و API های جریان پیام را پیاده سازی کنید. | اجباری |
وضعیت اتصال | برای جویندگان برای انجام قضاوت تعویض اتصال. وضعیت اتصال شامل موارد زیر است:
| وضعیت اتصال را در BLE Advertisement و Message Stream لحاظ کنید. | اجباری |
قابلیت های زمان اجرا تغییر می کند | سوئیچ صوتی را می توان با ارتقاء سیستم عامل در Provider فعال کرد، بنابراین قابلیت ها باید بین Seeker و Provider در زمان اجرا همگام شوند. | برای دسترسی به قابلیتهای زمان اجرا، APIهای جریان پیام را پیادهسازی کنید. | اجباری |
قوانین سوئیچینگ قابل تنظیم | به Seeker اجازه دهید اولویت بین جریان صوتی فعال موجود و درخواستهای جریان صوتی جدید را از طریق تنظیمات برگزیده کاربر پیکربندی کند. برای مثال، جستجوگر سوئیچ صوتی ممکن است تنظیمات رابط کاربری را ارائه دهد تا به کاربران اجازه دهد سوئیچ خودکار بین جریان رسانه و تماس را فعال/غیرفعال کنند. جستجوگر سوئیچ صوتی قانون تعویض را از طریق جریان پیام تنظیم می کند و دریافت می کند. | فقط ارائه دهندگان چند نقطه. API های جریان پیام را پیاده سازی کنید تا قوانین جابجایی بین دستگاه های متصل را قابل تنظیم کنید. | اختیاری |
سوئیچینگ فعال دستگاه | اجازه دهید Audio switch Seeker جابجایی صدا را بین دستگاه های متصل شبیه سازی کند. در سمت جستجوگر سوئیچ صوتی، ممکن است یک رابط کاربری برای کاربران وجود داشته باشد که به راحتی بین دستگاه های متصل جابجا شوند. | فقط ارائه دهندگان چند نقطه. برای تعیین منبع صوتی فعال بین دستگاههای متصل، APIهای جریان پیام را برای جستجوگر سوئیچ صوتی پیادهسازی کنید. | اجباری |
اعلان سوئیچینگ چند نقطه | اجازه دهید Audio switch Seker اعلان تعویض را نشان دهد. | فقط ارائه دهندگان چند نقطه. APIهای جریان پیام را اجرا کنید تا به جویندگان سوئیچ صوتی متصل در هنگام تغییر چند نقطه اطلاع دهید. | اجباری |
بار تبلیغاتی
ارائهدهنده باید وضعیت اتصال فعلی خود را در آگهی درج کند، که بر روی دادههای حساب جفت سریع توضیح داده شده در تبلیغات: وقتی قابل کشف نیست ساخته شده است.
توجه داشته باشید که نسخه جدول 4.2 0x1 است.
فیلد وضعیت اتصال
اکتت | نوع داده | توضیحات | ارزش | اجباری؟ |
---|---|---|---|---|
0 | uint8 | طول و نوع میدان 0bLLLLTTTT
| 0bLLLL0101
| اجباری |
1 | uint8 | وضعیت اتصال 0bHAFRSSSSS
| 0bHAFRSSSSS
| اجباری |
2 | uint8 | داده های سفارشی در حال حاضر، فقط حاوی نوع محتوایی است که برای توصیف استفاده از جریان صوتی فعلی استفاده میشود. سالک آن را برای ارائه دهنده ارسال می کند. | مقدار از طریق جریان پیام از جستجوگر جریان فعال فعلی به ارائه دهنده ارسال می شود. 0 اگر پخش جریانی فعال فعلی از Seeker نباشد. | اجباری |
3 - var | بیت مپ دستگاه های متصل یک بیت مپ برای نشان دادن دستگاههایی که در حال حاضر به ارائهدهنده متصل هستند. همه دستگاه های باند شده به ترتیب چیده شده اند، یک بیت برای یک دستگاه چسبانده شده. طول به تعداد دستگاه های متصل ارائه دهنده بستگی دارد. | اگر دستگاه در حال حاضر به ارائهدهنده متصل باشد، بیت نگاشت شده را روی 1 تنظیم میکند، در غیر این صورت، 0 را تنظیم میکند. برای جزئیات بیشتر به Bitmap دستگاه متصل مراجعه کنید | اختیاری |
جدول 4.1: داده های خام فیلد وضعیت اتصال
پرچم های اتصال
0bH = در تشخیص سر
- 1، در حال حاضر
- 0، در غیر این صورت، روی سر نیست یا سنسور OHD وجود ندارد
0bA = در دسترس بودن اتصال
- 1، یک اتصال در دسترس وجود دارد
- 0، در غیر این صورت
0bF = حالت فوکوس
- 1، اکنون در حالت متمرکز، سوئیچینگ اتصال برای استفاده از رسانه مجاز نیست، یعنی تغییر A2DP به A2DP وجود ندارد
- 0، در غیر این صورت
0bR = اتصال مجدد خودکار
- 1، اگر اتصال فعلی به طور خودکار توسط Provider وصل شود، به این معنی که توسط کاربران وصل نشده است (برای چند نقطه، اگر یکی از اتصالات موجود دوباره به طور خودکار وصل شود، باید روی 1 تنظیم شود)
- 0، در غیر این صورت
وضعیت اتصال
- 0x0: بدون اتصال
- 0x1: صفحه بندی
- 0x2: متصل است اما انتقال داده وجود ندارد
- 0x3: انتقال داده غیرصوتی (فقط زمانی که قابل تعویض است، اگر نه، با استفاده از 0xF)
- 0x4: جریان A2DP، AVRCP قابل اجرا نیست
- 0x5: پخش جریانی A2DP و پخش AVRCP
- 0x6: پخش جریانی HFP (تماس تلفنی/وایپ)، شامل آهنگ زنگ داخلی و بدون باند
- 0x7: صوتی LE - پخش رسانه بدون کنترل
- 0x8: صوتی LE - پخش رسانه با کنترل
- 0x9: صوتی LE - جریان تماس
- 0xA: LE صوتی - پخش
- 0xF: سوئیچ اتصال را به طور موقت غیرفعال کنید (مثلاً به روز رسانی سیستم عامل)
نوع زمینه صوتی و وضعیت اتصال LE
توصیه میکنیم که ارائهدهنده صوتی LE باید تمام انواع زمینههای مشخصشده در شمارههای اختصاصیافته 6.12.3 را مدیریت کند (مگر اینکه ارائهدهنده صراحتاً از یک نوع زمینه مشخص پشتیبانی نمیکند) و نوع زمینه را به حالت اتصال مانند زیر ترسیم کند.
- مکالمه: 0x9
- رسانه: 0x8
- بازی: 0x7
- آموزشی: 0x7
- دستیارهای صوتی: 0x9
- زنده: 0x9
- جلوه های صوتی: 0x2
- اعلان ها: 0x2
- آهنگ زنگ: 0x9
- هشدارها: 0x7
- زنگ هشدار اضطراری: 0x9
برای سناریوی نوع متن ترکیبی LE Audio مانند پخش رسانه در حین تماس، ارائه دهنده باید از حالت اتصال با بالاترین اولویت استفاده کند، یعنی از 0x9 (تماس) برای سناریوی بالا به جای 0x8 (رسانه) استفاده کند.
Bitmap دستگاه متصل
برای جلوگیری از تغییر اتصال ناخواسته، جستجوگر ممکن است نیاز داشته باشد که بداند هدست در حال حاضر به کدام دستگاه (ها) متصل است. به عنوان مثال، وقتی هدست به تلفن متصل است، کاربر نمیخواهد وقتی یکی از اعضای خانوادهاش یوتیوب را روی رایانه لوحی راهاندازی میکند، با تعویض اتصال قطع شود.
توجه داشته باشید که این بیت مپ ناشناس است، جستجوگر نمی تواند بداند چه دستگاه های دیگری با ارائه دهنده متصل هستند. به عنوان مثال، 5 دستگاه متصل را در نظر بگیرید:
- 0: لپ تاپ (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: تبلت (0b000x0000)
- 4: تلویزیون (0b0000x000)
اگر دستگاه های متصل فعلی یک لپ تاپ و یک تبلت باشند، مقدار بیت مپ 0b10010000 خواهد بود. تغییر سفارش در صورتی قابل قبول است که اجتناب ناپذیر باشد، به عنوان مثال زمانی که کاربران هدست را به تنظیمات کارخانه بازنشانی می کنند یا زمانی که تعداد دستگاه های متصل به حد بالا می رسد.
تبلیغات تصادفی قابل حل
برای جلوگیری از ردیابی و احترام به حریم خصوصی کاربر، ارائهدهنده باید فیلد را با کلید حساب با استفاده از AES-CTR بچرخاند و رمزگذاری کند:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
کجا
Key از کلید حساب کاربری در حال استفاده مشتق شده است که در قسمت بعدی تعریف می شود.
کلید توسط تابع HKDF، IETF RFC 5869، با استفاده از تابع هش SHA-256 تولید می شود.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
ارائهدهنده باید از کلید حساب اصلی در اینجا استفاده کند، یعنی اولین بایت کلید 0x04 است که در الگوی استفاده گنجانده نشده است.
IV (بردار اولیه) نمک 2 بایتی داده های کلید حساب با لایه صفر است، یعنی IV concat است (نمک، 14 بایت صفر).
داده های خام وضعیت اتصال در جدول 4.1 تعریف شده است، اگر وضعیت اتصال تغییر کند، نمک و RPA باید در یک بازه زمانی تبلیغاتی بازسازی شوند.
این باعث می شود که فیلد وضعیت اتصال رمزگذاری شده همزمان با چرخش داده های کلید حساب بچرخد.
تبلیغات BLE به شرح زیر است:
اکتت | نوع داده | توضیحات | ارزش | اجباری؟ |
---|---|---|---|---|
0 | uint8 | نسخه و پرچم ها | 0x10 | اجباری |
1 - ت | داده های کلیدی حساب | متفاوت است | اجباری | |
t+1 - s | داده های باتری | متفاوت است | اختیاری | |
s+1 - var | داده های قابل حل تصادفی | متفاوت است | اگر فهرست کلید حساب خالی نباشد، اجباری است، در غیر این صورت مستثنی شده است. |
جدول 4.2: تبلیغات BLE با داده های قابل حل تصادفی
داده های قابل حل تصادفی شامل:
اکتت | نوع داده | توضیحات | ارزش | اجباری؟ |
---|---|---|---|---|
0 | uint8 | طول و نوع میدان 0bLLLLTTTT
| 0bLLLL0110
| اجباری |
1 - var | داده های رمزگذاری شده | متفاوت است | اجباری |
جدول 4.2.1: داده های قابل حل تصادفی
به عنوان مثال، اگر داده های قابل حل تصادفی حاوی یک فیلد وضعیت اتصال رمزگذاری شده باشد، نتیجه رمزگشایی شده ، فیلد وضعیت اتصال خواهد بود.
برای جلوگیری از دستکاری، زمانی که دادههای قابل حل تصادفی در آگهی گنجانده شده است، دادههای کلید حساب در بالا باید کمی تغییر یابد. به طور معمول، هنگام ساخت فیلتر کلید حساب، مقدار V با ترکیب فیلتر کلید حساب با یک نمک تولید می شود. در عوض، زمانی که دادههای قابل حل تصادفی نیز تبلیغ میشوند، مقدار V باید به صورت زیر ساخته شود:
V = concat(account_key, salt, random_resolvable_data)
اگر دادههای باتری و دادههای قابل حل تصادفی در حال تبلیغ هستند، V باید به صورت زیر ساخته شود:
V = concat(account_key, salt, battery_data, random_resolvable_data)
در استفاده از کلید حساب
سوئیچینگ اتصال مبتنی بر حساب است، بنابراین ارائه دهنده باید اطلاعات حساب اتصال فعلی را در تبلیغات BLE درج کند. اگر دستگاه متصل فعلی یک جستجوگر سوئیچ صوتی است، ارائهدهنده باید بتواند کلید حساب مرتبط با این جستجوگر را دریافت کند و از این کلید حساب برای رمزگذاری فیلد وضعیت اتصال استفاده کند. اگر منبع صوتی متصل شده جستجوگر سوئیچ صوتی نیست، ارائهدهنده باید از آخرین کلید حساب استفاده شده استفاده کند.
قبل از محاسبه فیلتر کلید حساب ، ارائهدهنده باید اولین بایت کلیدهای حساب را تغییر دهد تا یکی از الگوهای در حال استفاده زیر را شامل شود:
- 0b00000100
این کلید حساب کاربری استفاده نمی شود.
این پیش فرض است ( کلید حساب را ببینید). - 0b00000101
این کلید حساب جدیدترین کلید حساب کاربری است.
فیلد وضعیت اتصال توسط این کلید حساب رمزگذاری شده است. هیچ اطلاعات کلیدی حسابی از وضعیت اتصال فعلی وجود ندارد، میتواند به این معنی باشد که دستگاهی متصل نیست یا دستگاه متصل جستجوگر سوئیچ صوتی نیست. - 0b00000110
این کلید حساب، کلید حساب کاربری در حال استفاده است.
فیلد وضعیت اتصال توسط این کلید حساب رمزگذاری شده است و دستگاه متصل فعلی با این کلید حساب مرتبط است.
شماتیک برای محموله سوئیچ صوتی
شکل زیر شماتیک مربوط به بار سوئیچ صوتی را نشان می دهد.
پیام ها
هنگام اتصال، جستجوگر و ارائهدهنده میتوانند از جریان پیام برای همگامسازی قابلیت سوئیچ صوتی، راهاندازی سوئیچ اتصال، تنظیم و دریافت اولویت سوئیچینگ، اطلاعرسانی وضعیت اتصال و غیره استفاده کنند. ما یک گروه پیام و کدهای پیام مخصوص سوئیچ صوتی را به صورت زیر ایجاد می کنیم.
نام گروه پیام | ارزش |
---|---|
سوئیچ صوتی | 0x07 |
جزئیات بیشتر برای هر کد پیام در بخش های زیر گنجانده شده است.
نام کد پیام | ارزش | فقط چند نقطه ای | فرستنده | پاسخگو | رمزگذاری کنید | MAC | ACK |
---|---|---|---|---|---|---|---|
دریافت قابلیت سوئیچ صوتی | 0x10 | ن | هر دو | هر دو، از طریق کد 0x11 | ن | ن | ن |
اطلاع از قابلیت سوئیچ صوتی | 0x11 | ن | هر دو | هر دو | ن | Y | Y |
حالت چند نقطه ای را تنظیم کنید | 0x12 | Y | جوینده | ارائه دهنده | ن | Y | Y |
تنظیم اولویت سوئیچینگ | 0x20 | Y | جوینده | ارائه دهنده | ن | Y | Y |
اولویت تعویض را دریافت کنید | 0x21 | Y | جوینده | ارائه دهنده، از طریق کد 0x22 | ن | ن | ن |
اولویت تعویض را اطلاع دهید | 0x22 | Y | ارائه دهنده | جوینده | ن | ن | ن |
سوئیچ منبع صوتی فعال (به دستگاه متصل) | 0x30 | Y | جوینده | ارائه دهنده | ن | Y | Y |
به عقب برگرد | 0x31 | ن | جوینده | ارائه دهنده | ن | Y | Y |
رویداد سوئیچ چند نقطه را اطلاع دهید | 0x32 | Y | ارائه دهنده | جوینده | ن | ن | ن |
وضعیت اتصال را دریافت کنید | 0x33 | Y | جوینده | ارائه دهنده، از طریق کد 0x34 | ن | ن | ن |
اطلاع از وضعیت اتصال | 0x34 | Y | ارائه دهنده | جوینده | Y | ن | ن |
به اتصال سوئیچ صوتی اطلاع دهید | 0x40 | ن | جوینده | ارائه دهنده | ن | Y | Y |
کلید حساب کاربری در حال استفاده را نشان دهید | 0x41 | ن | جوینده | ارائه دهنده | ن | Y | Y |
ارسال داده های سفارشی | 0x42 | ن | جوینده | ارائه دهنده | ن | Y | Y |
هدف اتصال drop را تنظیم کنید | 0x43 | Y | جوینده | ارائه دهنده | ن | Y | Y |
جدول 4.3: پیام های سوئیچ صوتی
MAC پیام های سوئیچ صوتی
برای ارائه احراز هویت پیام، همه پیامهای سوئیچ صوتی با دادههای اضافی که از جستجوگر به ارائهدهنده ارسال میشوند به کد احراز هویت پیام نیاز دارند. هنگامی که پیامی با MAC دریافت می شود، باید تایید شود تا جستجوگر بداند که آیا ارائه دهنده به پیام واکنش نشان داده است یا خیر.
در صورت موفقیت آمیز بودن تأیید اعتبار پیام، ارائه دهنده باید ACK را برای پیام ارسال کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | تصدیق | 0xFF |
1 | uint8 | ACK | 0x01 |
2 - 3 | uint16 | طول داده های اضافی | متفاوت است |
4 | uint8 | سوئیچ صوتی | 0x07 |
5 | uint8 | کد پیام سوئیچ صوتی | متفاوت است |
6 - س | داده های اضافی | متفاوت است |
در صورت عدم موفقیت، ارائه دهنده باید NAK را برای پیام ارسال کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | تصدیق | 0xFF |
1 | uint8 | NAK | 0x02 |
2 - 3 | uint16 | طول داده های اضافی | 0x0003 |
4 | uint8 | دلیل خطا | متفاوت است |
5 | uint8 | سوئیچ صوتی | 0x07 |
6 | uint8 | کد پیام سوئیچ صوتی | متفاوت است |
توجه داشته باشید که اگر ارائه دهنده فرستنده باشد، MAC مورد نیاز نیست.
دریافت قابلیت سوئیچ صوتی
ارائهدهنده سوئیچ صوتی و جستجوگر میتوانند با استفاده از پیام زیر بررسی کنند که آیا جفت جستجوگر/ارائهدهنده جفت سریع متصل از سوئیچ صوتی پشتیبانی میکند یا خیر:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | دریافت قابلیت سوئیچ صوتی | 0x10 |
2 - 3 | uint16 | طول داده های اضافی | 0 |
جدول 4.3.1.0: دریافت قابلیت سوئیچ صوتی
اطلاع از قابلیت سوئیچ صوتی
به محض دریافت کد پیام سوئیچ صوتی ، جستجوگر/ارائهدهنده سوئیچ صوتی با یکی از پرچمهای زیر پاسخ میدهد:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | اطلاع از قابلیت سوئیچ صوتی | 0x11 |
2 - 3 | uint16 | طول داده های اضافی | 20 اگر این توسط جستجوگر ارسال شده باشد 4 اگر این توسط ارائه دهنده ارسال شده باشد |
4 - 5 | uint16 | کد نسخه سوئیچ صوتی | مقدار غیر صفر به این معنی است که از سوئیچ صوتی پشتیبانی می کند. کد نسخه فعلی (با بهبود امنیت) 0x0102 است. 0x0000 یا عدم پاسخ در 1 ثانیه به این معنی است که سوئیچ صوتی در این دستگاه پشتیبانی نمیشود |
6 - 7 | پرچم ها | پرچم های قابلیت سوئیچ صوتی ارائه دهنده اگر این توسط Seeker ارسال شده باشد، این دو بایت باید نادیده گرفته شوند. | متفاوت است پرچمهای قابلیت سوئیچ صوتی را ببینید |
8 - 15 | هیچ پیامی بده فقط زمانی مورد نیاز است که توسط جستجوگر ارسال شود | متفاوت است | |
16 - 23 | کد احراز هویت پیام فقط زمانی مورد نیاز است که توسط جستجوگر ارسال شود | متفاوت است |
جدول 4.3.1.1: اطلاع از قابلیت سوئیچ صوتی
پرچم های قابلیت سوئیچ صوتی
بیت 0 (اکتت 6، MSB): وضعیت سوئیچ صوتی
- 1، اگر وضعیت سوئیچ صوتی روشن باشد
- 0، در غیر این صورت
بیت 1: قابلیت تنظیم چند نقطه
- 1، اگر دستگاه از چند نقطه پشتیبانی می کند و می توان آن را بین روشن و خاموش کرد
- 0، در غیر این صورت (چند نقطه ای را پشتیبانی نمی کند یا چند نقطه ای همیشه روشن است)
بیت 2: وضعیت فعلی چند نقطه ای
- 1، اگر چند نقطه روشن است
- 0، در غیر این صورت
بیت 3: تشخیص روی سر
- 1، اگر این دستگاه از تشخیص روی سر پشتیبانی می کند (حتی اگر اکنون تشخیص روی سر خاموش باشد)
- 0، در غیر این صورت
بیت 4: وضعیت فعلی تشخیص روی سر
- 1، اگر تشخیص روی سر روشن باشد
- 0، در غیر این صورت (از تشخیص روی سر پشتیبانی نمی کند یا تشخیص روی سر غیرفعال است)
همه بیت های دیگر رزرو شده اند، پیش فرض 0.
حالت چند نقطه ای را تنظیم کنید
در جستجوگرهای سوئیچ صوتی، ممکن است تنظیماتی را برای کاربران فراهم کنیم تا عملکرد چند نقطهای را روشن/خاموش کنند. جستجوگر با استفاده از پیام زیر وضعیت چند نقطه ای را به ارائه دهنده تنظیم می کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | حالت چند نقطه ای را تنظیم کنید | 0x12 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | uint8 | حالت چند نقطه ای | 0: چند نقطه را خاموش کنید 1: چند نقطه را روشن کنید |
5 - 12 | هیچ پیامی بده | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.1.2: تنظیم حالت چند نقطه
تنظیم اولویت سوئیچینگ
جستجوگرهای سوئیچ صوتی ممکن است ترجیح سوئیچینگ چند نقطه را تغییر دهند و با استفاده از پیام زیر آن را به ارائه دهنده تنظیم کنند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | تنظیم اولویت سوئیچینگ | 0x20 |
2 - 3 | uint16 | طول داده های اضافی | 18 |
4 | پرچم ها | اولویت سوئیچینگ | متفاوت است پرچم ترجیح تعویض چند نقطه را ببینید |
5 | تنظیمات سوئیچینگ پیشرفته این بایت رزرو شده است، مقدار پیش فرض 0 است | متفاوت است | |
6 - 13 | پیام هیچ | متفاوت است | |
14 - 21 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.2.0: تنظیم اولویت سوئیچینگ
پرچم ترجیح سوئیچینگ چند نقطه
- بیت 0 (MSB): A2DP در مقابل A2DP (0 پیش فرض)
- بیت 1: HFP در مقابل HFP (پیشفرض 0)
- بیت 2: A2DP در مقابل HFP (پیشفرض 0)
- بیت 3: HFP در مقابل A2DP (پیشفرض 1)
- بیت 4 - 7: رزرو شده است
- در بالا به عنوان "درخواست نمایه جدید" در مقابل "نمایه فعال فعلی" نمایش داده می شود.
- 0 برای تعویض نکردن
- 1 برای تعویض
اولویت تعویض را دریافت کنید
جویندگان سوئیچ صوتی می توانند ترجیحات سوئیچینگ چند نقطه را از ارائه دهنده با استفاده از پیام زیر استعلام کنند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | پیکربندی سوئیچینگ را دریافت کنید | 0x21 |
2 - 3 | uint16 | طول داده های اضافی | 0 |
جدول 4.3.2.1: اولویت تعویض را دریافت کنید
اولویت تعویض را اطلاع دهید
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | اولویت تعویض را اطلاع دهید | 0x22 |
2 - 3 | uint16 | طول داده های اضافی | 2 |
4 | پرچم ها | تغییر پرچم های ترجیحی | متفاوت است پرچم ترجیح تعویض چند نقطه را ببینید |
5 | تنظیمات سوئیچینگ پیشرفته این بایت رزرو شده است، مقدار پیش فرض باید 0 باشد | متفاوت است |
جدول 4.3.2.2: اولویت تعویض را اطلاع دهید
تغییر منبع صوتی فعال (به دستگاه متصل)
جستجوگرهای سوئیچ صوتی می توانند از ارائه دهنده چند نقطه ای درخواست کنند تا منبع صوتی فعال را بین دستگاه های متصل با استفاده از پیام زیر تغییر دهد:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | تغییر منبع صوتی فعال (به دستگاه متصل) | 0x30 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | پرچم ها | تعویض پرچمهای رویداد منبع صوتی فعال | متفاوت است تغییر رویداد منبع صوتی فعال را ببینید |
5 - 12 | هیچ پیامی بده | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.3.0: تغییر منبع صوتی فعال (به دستگاه متصل)
تغییر رویداد منبع صوتی فعال
- بیت 0 (MSB): 1 سوئیچ به این دستگاه، 0 سوئیچ به دستگاه متصل دوم
- بیت 1: 1 پس از جابجایی، پخش را روی سوئیچ به دستگاه از سر بگیرید، در غیر این صورت 0. از سرگیری پخش به این معنی است که ارائه دهنده یک اعلان PLAY از طریق نمایه AVRCP به جستجوگر ارسال می کند. اگر حالت قبلی (قبل از خاموش شدن) PLAY نبود، ارائه دهنده باید این پرچم را نادیده بگیرد.
- بیت 2: 1 رد SCO در دستگاه خاموش، 0 در غیر این صورت
- بیت 3: 1 بلوتوث را در دستگاه سوئیچ خاموش قطع کنید، در غیر این صورت 0.
- بیت 4 - 7: رزرو شده است.
جستجوگران سوئیچ صوتی ممکن است همیشه وضعیت خود را به درستی ندانند، بنابراین ممکن است ارائهدهنده پیام "تغییر به این دستگاه" را دریافت کند زمانی که جستجوگر از قبل دستگاه فعال است. در این حالت، برای نشان دادن رابط کاربری صحیح در Seeker، ارائهدهنده میتواند یک NAK با دلیل خطا، 0x4 - عملکرد دستگاه اضافی ارسال کند.
برای یک ارائهدهنده صوتی LE که بیش از یک عضو مجموعه دارد، ارائهدهنده باید همه اعضا را از جستجوگر جدا کند، در غیر این صورت پشته بلوتوث جستجوگر دوباره به ارائهدهنده متصل میشود.
بازگشت به عقب (به دستگاه قطع شده)
اگر سوئیچینگ اتصال ناخواسته باشد، کاربران می توانند سوئیچینگ را برگردانند، و در سناریوهای خاص، بازیابی اتصال صوتی برای به حداقل رساندن اختلال منطقی است. جستجوگر از پیام زیر برای راه اندازی بازگشت استفاده می کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | بازگشت به عقب (به دستگاه قطع شده) | 0x31 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | uint8 | رویداد را به عقب برگردانید | متفاوت است 0x01: برگشت به عقب 0x02: به عقب برگردید و بازی را از سر بگیرید |
5 - 12 | هیچ پیامی بده | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.3.1: بازگشت به عقب (به دستگاه قطع شده)
برای ارائهدهندگان چند نقطهای، برای انجام سوئیچ اتصال، یک ارائهدهنده ممکن است اتصال را با یک دستگاه منبع صوتی قطع کند و جلسه صوتی را در منبع صوتی دیگر متوقف کند. برای مثال، فرض کنید هدست چند نقطه ای به تبلت و سومین دستگاه سوئیچ صوتی پشتیبانی شده متصل است. کاربر در حال تماشای ویدیو در رایانه لوحی هنگامی که یک تماس ورودی در تلفن او وجود دارد. تلفن یک سوئیچ اتصال را روی هدست راهاندازی میکند که باید اتصال دستگاه سوم را قطع کند تا به تلفن متصل شود، در حالی که جلسه رسانه روی رایانه لوحی را متوقف میکند تا آهنگ زنگ تلفن را دریافت کند. اگر کاربر تماس را رد کند، تلفن ممکن است از هدست بخواهد "برگشت و پخش را از سر بگیرد". پس از دریافت این درخواست، هدست باید دوباره به دستگاه سوم متصل شود و پخش ویدیوی متوقف شده را در رایانه لوحی از سر بگیرد.
رویداد سوئیچ چند نقطه را اطلاع دهید
برای آگاه کردن کاربران از وقوع یک رویداد سوئیچ چند نقطهای، جستجوگر سوئیچ صوتی ممکن است اعلانی را به کاربران نشان دهد. ارائهدهنده باید به جستجوگران سوئیچ صوتی متصل در مورد رویداد تعویض اطلاع دهد.
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | رویداد سوئیچ چند نقطه را اطلاع دهید ارائهدهنده باید آن را روی هر سوئیچ ارسال کند، از جمله جستجوگر سوئیچ صوتی به جستجوگر سوئیچ غیر صوتی، جستجوگر سوئیچ غیر صوتی به جستجوگر سوئیچ صوتی و جستجوگر سوئیچ صوتی به جستجوگر سوئیچ صوتی | 0x32 |
2 - 3 | uint16 | طول داده های اضافی | متفاوت است |
4 | uint8 | دلیل تغییر این مقدار باید بر اساس وضعیت اتصال تعیین شود. برای موارد استفاده LE Audio، بررسی نگاشت بین نوع زمینه صوتی LE و حالت اتصال ممکن است مفید باشد. به عنوان مثال، وضعیت اتصال مربوط به دستیاران صوتی 0x9 (LE audio - جریان تماس) است. بنابراین، دلیل تغییر سوئیچ که توسط دستیاران صوتی راه اندازی شده است باید 0x02 باشد. | متفاوت است 0x00: نامشخص 0x01: رسانه (به عنوان مثال جریان A2DP، جریان رسانه LEA) 0x02: تماس (به عنوان مثال جریان HFP، جریان تماس LEA) |
5 | uint8 | دستگاه هدف | متفاوت است 0x01: این دستگاه 0x02: دستگاه متصل دیگری |
6 - n | utf8 | نام دستگاه مورد نظر اگر دستگاه مورد نظر Audio switch Seeker باشد، با استفاده از نامی که جستجوگر به آن ارسال شده است، در غیر این صورت با استفاده از نام BT، اگر قابل اجرا نیست، با استفاده از 2 بایت آخر آدرس آن | متفاوت است |
جدول 4.3.3.2: رویداد سوئیچ چند نقطه را اطلاع دهید
وضعیت اتصال را دریافت کنید
جستجوگر می تواند وضعیت اتصال فعلی را از ارائه دهنده دریافت کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | وضعیت اتصال را دریافت کنید | 0x33 |
2 - 3 | uint16 | طول داده های اضافی | 0 |
جدول 4.3.3.3: وضعیت اتصال را دریافت کنید
پس از دریافت این پیام، ارائه دهنده باید با کد پیام 0x34 پاسخ دهد، وضعیت اتصال را مطلع کند .
اطلاع از وضعیت اتصال
همانطور که در بار تبلیغاتی BLE تعریف شده است، برای ارائه دهندگان چند نقطه ای، اگر وضعیت اتصال تغییر کند، به جز تغییر بسته تبلیغاتی، ارائه دهنده باید جستجوگران متصل را که از کلید حساب یکسان استفاده می کنند را در مورد تغییر مطلع کند. اگر ارائه دهنده با جستجوگر سوئیچ صوتی و جستجوگر سوئیچ غیر صوتی متصل باشد، اگر جستجوگر سوئیچ غیر صوتی فعال باشد، ارائه دهنده باید وضعیت اتصال را نیز به جستجوگر سوئیچ صوتی متصل اطلاع دهد (با استفاده از کلید حساب جستجوگر).
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | اطلاع از وضعیت اتصال | 0x34 |
2 - 3 | uint16 | طول داده های اضافی | متفاوت است |
4 | uint8 | پرچم دستگاه فعال | متفاوت است 0x00: این جستجوگر غیرفعال است و دستگاه فعال از همان کلید حساب استفاده می کند 0x01: این جستجوگر دستگاه فعال است 0x02: این جستجوگر غیرفعال است و دستگاه فعال جستجوگر سوئیچ غیر صوتی است. |
5 - n | وضعیت اتصال رمزگذاری شده | متفاوت است | |
n+1 - n+8 | هیچ پیامی بده | متفاوت است |
جدول 4.3.3.4: اطلاع از وضعیت اتصال
پیام وضعیت اتصال رمزگذاری شده
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
کجا:
کلید از کلید حساب کاربری در حال استفاده مشتق شده است، به تبلیغات قابل حل تصادفی مراجعه کنید.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV concat است (Session_nonce، Message_nonce)
connection_status_raw_data = concat(connection_state، custom_data،connected_devices) که در بار تبلیغاتی BLE تعریف شده است توجه داشته باشید که بایت برای طول و نوع فیلد نباید درج شود زیرا ما کد پیام و طول داده را در اینجا داریم.
به اتصال سوئیچ صوتی اطلاع دهید
ارائهدهندگان سوئیچ صوتی ممکن است نیاز داشته باشند بدانند که آیا سوئیچ اتصال توسط سوئیچ صوتی فعال میشود تا واکنشهای متفاوتی داشته باشد، به عنوان مثال، گوشوارهها را برای رویدادهای سوئیچ صوتی غیرفعال کنید. جستجوگر پیامی می فرستد تا به ارائه دهنده اطلاع دهد که این اتصال یک اتصال آغاز شده از سوییچ صوتی است.
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | به اتصال سوئیچ صوتی اطلاع دهید | 0x40 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | uint8 | نشانگر اتصال کلید صوتی | متفاوت است 0: این اتصال توسط سوئیچ صوتی راه اندازی نشده است 1: این یک اتصال سوئیچ صوتی بود |
5 - 12 | هیچ پیامی بده | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.4.0: به اتصال سوئیچ صوتی اطلاع دهید
کلید حساب کاربری در حال استفاده را نشان دهید
اگر چندین کلید حساب در جستجوگر (به عنوان مثال چند کاربر) با ارائه دهنده مرتبط باشد، جستجوگر از پیام زیر برای نشان دادن اینکه کدام کلید حساب در حال استفاده است استفاده می کند.
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | کلید حساب کاربری در حال استفاده را نشان دهید | 0x41 |
2 - 3 | uint16 | طول داده های اضافی | 22 |
4 - 9 | utf8 | در حال استفاده از رشته | UTF8 ("در حال استفاده") |
10 - 17 | پیام هیچ | متفاوت است | |
18 - 25 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.4.1: کلید حساب کاربری را نشان دهید
با دریافت این پیام، ارائهدهنده میتواند با تأیید کد احراز هویت پیام، بفهمد کدام کلید حساب در حال استفاده است.
ارسال داده های سفارشی
جستجوگر سوئیچ صوتی فعال می تواند اطلاعات (به عنوان مثال استفاده از صدا) جریان صوتی را در بایت داده سفارشی کپسوله کند و با استفاده از پیام زیر آن را به ارائه دهنده ارسال کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | ارسال داده های سفارشی | 0x42 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | uint8 | داده های سفارشی | متفاوت است |
5 - 12 | پیام هیچ | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.4.2: ارسال داده های سفارشی
پس از دریافت دادههای سفارشی، ارائهدهنده بسته تبلیغاتی را بهروزرسانی میکند تا دادههای سفارشی را شامل شود. برای ارائهدهنده چند نقطهای، باید تغییر وضعیت اتصال را به جستجوگر متصل دیگری با استفاده از همان کلید حساب اطلاع دهد.
هدف اتصال drop را تنظیم کنید
در هدستهای چند نقطهای، اگر اتصال ترجیحی برای قطع شدن، کمترین اتصال اخیری نباشد که اخیراً استفاده شده است، جستجوگر سوئیچ صوتی میتواند با استفاده از پیام زیر به ارائهدهنده بگوید کدام دستگاه را رها کند:
اکتت | نوع داده | توضیحات | ارزش |
---|---|---|---|
0 | uint8 | سوئیچ صوتی | 0x07 |
1 | uint8 | هدف اتصال drop را تنظیم کنید | 0x43 |
2 - 3 | uint16 | طول داده های اضافی | 17 |
4 | uint8 | دستگاه متصل را هدف قرار دهید تا رها شود | متفاوت است 1: این دستگاه |
5 - 12 | پیام هیچ | متفاوت است | |
13 - 20 | کد احراز هویت پیام | متفاوت است |
جدول 4.3.4.3: تعیین هدف اتصال drop
پیاده سازی مرجع
برای اجرای مرجع به کتابخانه SDK جاسازی شده Nearby مراجعه کنید