שינוי מקור אודיו
ככל שמשתמשים משתמשים יותר ויותר במכשירים שונים עם מקורות אודיו כדי לבצע את המשימות היומיות שלהם, כך עולה הביקוש לפתרון פשוט יותר לניהול השימוש באוזניות במכשירים שונים. מתג האודיו מעביר את חיבורי האוזניות בין מכשירים בצורה חלקה על סמך פעילות המשתמש (למשל, הפעלת סרט) ואירועים בעדיפות גבוהה (למשל, שיחה נכנסת).
עקרונות UX
- המעבר בין החיבורים צריך להיות מהיר ולהתבסס על פעולה של המשתמש.
- המעבר בין החיבורים צריך להיות שקוף למשתמשים, כדי לאפשר להם לשלוט במעבר או לחזור למצב הקודם אם המעבר לא רצוי.
- המעבר צריך לכבד את פרטיות המשתמשים.
תפקידים
חיפוש של מקור אודיו: המכשיר שמחפש אוזניות הוא מקור האודיו (למשל טלפון או טאבלט), שמחפש אוזניות בקרבת מקום כדי להתחבר אליהן במקרים הרלוונטיים.
ספק של מעבר אודיו: בדרך כלל הספק הוא אוזניות שמפרסמות את נוכחותן וסטטוס החיבור שלהן, כדי שאנשים שמחפשים מעבר יוכלו לקבל החלטות.
סקירה כללית של הדרישות
כדי להפעיל את התכונה 'מעבר חכם', הספקים צריכים לעמוד בדרישות הבאות:
שם | תיאור | דרישות | חובה? |
---|---|---|---|
סריקת דפים | כדי לאשר בקשת חיבור חדשה מגורם אחר שמחפש שותף כשיש חיבור קיים. לספקים עם נקודת חיבור אחת:
|
כדי לשפר את הביצועים, נדרש מצב סריקת דפים עם זמן אחזור קצר (מרווח הסריקה צריך להיות לא יותר מ-640 אלפיות השנייה). כדי למצוא איזון בין חיי הסוללה לבין ביצועי המעבר, הספק יכול להגדיר מצב ברירת מחדל לסריקת דפים ברוב המקרים (מצב צריכת אנרגיה נמוכה, מרווח הסריקה צריך להיות לא יותר מ-1,280 אלפיות השנייה). עם זאת, צריך להשתמש במצב זמן אחזור קצר במצבים הבאים:
|
חובה |
היסטוריית החיבורים | כדי לחזור לחיבור הקודם ולהמשיך את ההפעלה, אם רלוונטי. החזרה לחיבור הקודם תופעל על ידי תקשורת דרך Message Stream APIs. אירוע ההשהיה של האודיו צריך להיכלל ברשומה כדי להמשיך את ההפעלה, אם רלוונטי. |
שמירה על היסטוריית החיבורים והטמעה של ממשקי Message Stream API. | חובה |
סטטוס החיבור | כדי שחיפושים יוכלו להחליט אם לעבור לחיבור אחר.סטטוס החיבור כולל:
|
הוספת סטטוס החיבור למודעות ולזרם ההודעות ב-BLE. | חובה |
שינויים ביכולות של סביבת זמן הריצה | כדי להפעיל את המתג של האודיו, צריך לשדרג את הקושחה של הספק, ולכן צריך לסנכרן את היכולות בין ה-Seeker לבין הספק במהלך זמן הריצה. | הטמעת ממשקי Message Stream API כדי לגשת ליכולות בסביבת זמן הריצה. | חובה |
כללי מעבר שניתן להגדיר | לאפשר ל-Seeker להגדיר את העדיפות בין סטרימינג פעיל קיים של אודיו לבין בקשות חדשות לסטרימינג של אודיו באמצעות הגדרות העדפות המשתמש. לדוגמה, מתג האודיו Seeker עשוי לספק הגדרות ממשק משתמש כדי לאפשר למשתמשים להפעיל או להשבית את המעבר האוטומטי בין סטרימינג של מדיה לבין שיחות. Audio switch Seeker: השירות מגדיר את כלל המעבר ומקבל אותו דרך Message Stream. |
ספקים עם תמיכה במספר נקודות קישור בלבד. הטמעת ממשקי Message Stream API כדי לאפשר הגדרה של כללי מעבר בין מכשירים מחוברים. |
אופציונלי |
החלפת מכשירים פעילים | לאפשר ל-Audio switch Seeker לדמות את החלפת האודיו בין מכשירים מחוברים. בצד של Audio switch Seeker, יכול להיות ממשק משתמש שמאפשר למשתמשים לעבור בקלות בין מכשירים מחוברים. |
ספקי Multipoint בלבד. הטמעת ממשקי Message Stream API כדי ש-Audio switch Seeker יוכל לקבוע את מקור האודיו הפעיל בין המכשירים המחוברים. |
חובה |
התראה על מעבר לכמה מכשירים | מאפשרים ל-Audio switch Seeker להציג את ההתראה על השינוי. | ספקי נתונים בכמה מכשירים בלבד. הטמעת ממשקי Message Stream API כדי להודיע למכשירים מחוברים שמחפשים מקור אודיו חדש כשמתבצע מעבר לכמה מכשירים. |
חובה |
המטען הייעודי של הפרסום
הספק צריך לכלול במודעה את סטטוס החיבור הנוכחי שלו, על סמך נתוני החשבון ב-Fast Pair שמתוארים בקטע פרסום: כשהמכשיר לא גלוי.
שימו לב שהגרסה של table 4.2 היא 0x1.
השדה 'סטטוס החיבור'
אוקטט | סוג הנתונים | תיאור | ערך | חובה? |
---|---|---|---|---|
0 | uint8 |
אורך השדה והסוג שלו 0bLLLLTTTT
|
0bLLLL0101
|
חובה |
1 | uint8 |
מצב החיבור 0bHAFRSSSS
|
0bHAFRSSSS
|
חובה |
2 | uint8 |
נתונים מותאמים אישית נכון לעכשיו, הוא מכיל רק את סוג התוכן שמשמש לתיאור השימוש בסטרימינג של האודיו הנוכחי. המבקש ישלח אותו לספק. |
הערך נשלח מהמחפש של הסטרימינג הפעיל הנוכחי לספק באמצעות מקור הודעות. 0 אם הסטרימינג הפעיל הנוכחי לא מגיע מ-Seeker. | חובה |
3 – var | קובץ bitmap של מכשירים מחוברים קובץ bitmap שמציג אילו מכשירים מחוברים כרגע לספק. כל המכשירים המקושרים מסודרים לפי סדר, ביט אחד לכל מכשיר מקושר. האורך תלוי במספר המכשירים המקושרים של הספק. |
הביט הממופה מוגדר ל-1 אם המכשיר מחובר כרגע לספק, ו-0 במקרים אחרים. פרטים נוספים זמינים במאמר Connected Device Bitmap |
אופציונלי |
טבלה 4.1: נתונים גולמיים בשדה סטטוס החיבור
דגלים של חיבורים
0bH = זיהוי חבישה
- 1, on head now
- 0, אחרת, לא על הראש או שאין חיישן OHD
0bA = זמינות החיבור
- 1, יש חיבור זמין
- 0, אחרת
0bF = מצב ריכוז
- 1, במצב התמקדות, אי אפשר לעבור בין חיבורים לצורך שימוש במדיה, כלומר אי אפשר לעבור מ-A2DP ל-A2DP
- 0, אחרת
0bR = החיבור התחדש באופן אוטומטי
- 1, אם החיבור הנוכחי מתחבר מחדש באופן אוטומטי על ידי הספק, כלומר הוא לא מחובר על ידי משתמשים (בשימוש במספר נקודות, אם אחד מהחיבורים הקיימים מתחבר מחדש באופן אוטומטי, צריך להגדיר אותו כ-1)
- 0, אחרת
מצב החיבור
- 0x0: אין חיבור
- 0x1: דפדוף
- 0x2: יש חיבור אבל אין העברת נתונים
- 0x3: העברת נתונים שאינם אודיו (רק אם אפשר לעבור למצב הזה, אחרת משתמשים ב-0xF)
- 0x4: סטרימינג של A2DP, AVRCP לא רלוונטי
- 0x5: סטרימינג של A2DP והפעלה של AVRCP
- 0x6: שידור HFP (שיחה בטלפון/שיחת VoIP), כולל רינגטון בתחום התדרים הרגילים ובתחום התדרים הלא רגילים
- 0x7: LE audio – סטרימינג של מדיה ללא שליטה
- 0x8: LE audio – סטרימינג של מדיה עם שליטה
- 0x9: LE audio – סטרימינג של שיחות
- 0xA: LE audio – שידור
- 0xF: השבתה זמנית של מתג החיבור (למשל, עדכון קושחה)
סוג ההקשר של LE Audio וסטטוס החיבור
מומלץ לספק ה-LE Audio לטפל בכל סוגי ההקשרים שצוינו ב- Assigned Numbers 6.12.3 (אלא אם הספק לא תומך באופן מפורש בסוג הקשר נתון), ולמפות את סוג ההקשר למצב החיבור כפי שמתואר בהמשך.
- שיחה: 0x9
- מדיה: 0x8
- משחק: 0x7
- הדרכה: 0x7
- עוזרים קוליים אישיים: 0x9
- בזמן אמת: 0x9
- אפקטים קוליים: 0x2
- התראות: 0x2
- רינגטון: 0x9
- התראות: 0x7
- התראה על מקרה חירום: 0x9
בתרחיש מעורב של סוג ההקשר של LE Audio, כמו הפעלת מדיה במהלך השיחה, הספק צריך להשתמש במצב החיבור עם העדיפות הגבוהה ביותר, כלומר להשתמש ב-0x9 (שיחה) בתרחיש שלמעלה במקום ב-0x8 (מדיה).
Connected Device Bitmap
כדי למנוע מעבר לא רצוי בין חיבורים, יכול להיות שהמכשיר המחפש יצטרך לדעת לאילו מכשירים האוזניות מחוברות כרגע. לדוגמה, כשאוזניות מחוברות לטלפון, המשתמש לא רוצה שהשיחה שלו תופרע בגלל החלפת החיבור כשאחד מבני המשפחה מתחיל לצפות ב-YouTube בטאבלט.
שימו לב שה-bitmap הזה הוא אנונימי, והחיפוש לא יכול לדעת אילו מכשירים אחרים מקושרים לספק. לדוגמה, ניקח 5 מכשירים מקושרים:
- 0: מחשב נייד (0bx0000000)
- 1: phoneA (0b0x000000)
- 2: phoneB (0b00x00000)
- 3: טאבלט (0b000x0000)
- 4: טלוויזיה (0b0000x000)
אם המכשירים המחוברים הנוכחיים הם מחשב נייד וטאבלט, הערך של קובץ ה-bitmap יהיה 0b10010000. שינוי הסדר מותר אם אין מנוס מכך, למשל כשמשתמשים מאפסים את האוזניות להגדרות המקוריות או כשמספר המכשירים המקושרים מגיע למגבלה העליונה.
מודעה אקראית שניתן לפתור
כדי למנוע מעקב ולכבד את פרטיות המשתמשים, הספק צריך לבצע רוטציה של השדה ולהצפין אותו באמצעות מפתח החשבון באמצעות AES-CTR:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
איפה
המפתח נגזר ממפתח החשבון הנמצא בשימוש, שמוגדר בקטע הבא.
המפתח נוצר על ידי פונקציית HKDF, IETF RFC 5869, באמצעות פונקציית הגיבוב SHA-256.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
הספק צריך להשתמש כאן במפתח החשבון המקורי, כלומר הבייט הראשון של המפתח הוא 0x04, ולא נכלל בדפוס השימוש.
IV (וקטור ראשוני) הוא ה-salt באורך 2 בייטים של נתוני מפתח החשבון עם מילוי באפסים, כלומר IV הוא concat(salt, 14-byte ZEROs).
הנתונים הגולמיים של סטטוס החיבור מוגדרים בטבלה 4.1. אם סטטוס החיבור משתנה, צריך ליצור מחדש את המלח ואת ה-RPA באותו מסגרת זמן פרסום.
כך השדה של סטטוס החיבור המוצפן יתחלף באותו זמן שבו יתחלפו נתוני מפתח החשבון.
המבנה של המודעה ב-BLE יהיה כזה:
אוקטט | סוג הנתונים | תיאור | ערך | חובה? |
---|---|---|---|---|
0 | uint8 |
גרסה ודגלים | 0x10 | חובה |
1 - t | נתוני מפתח החשבון | משתנה | חובה | |
t+1 - s | נתוני הסוללה | משתנה | אופציונלי | |
s+1 - var | נתונים אקראיים שניתן לפתור | משתנה | חובה אם רשימת מפתחות החשבון לא ריקה, אחרת 'החרגה'. |
טבלה 4.2: מודעה ב-BLE עם נתונים אקראיים שניתן לפתור
נתונים אקראיים שניתן לפתור מכילים:
אוקטט | סוג הנתונים | תיאור | ערך | חובה? |
---|---|---|---|---|
0 | uint8 |
אורך השדה וסוג השדה 0bLLLLTTTT
|
0bLLLL0110
|
חובה |
1 - var | נתונים מוצפנים | משתנה | חובה |
טבלה 4.2.1: נתונים אקראיים שניתן לפתור
לדוגמה, אם הנתונים הניתנים לפתרון אקראיים מכילים שדה סטטוס חיבור מוצפן, התוצאה לאחר פענוח תהיה שדה סטטוס החיבור.
כדי למנוע פגיעה בנתונים, צריך לשנות מעט את נתוני מפתח החשבון שלמעלה כשהנתונים הניתנים לפתרון אקראיים כלולים במודעה. בדרך כלל, כשיוצרים את המסנן של מפתח החשבון, הערך V נוצר על ידי שילוב של המסנן של מפתח החשבון עם נתוני salt. במקום זאת, כשמפרסמים גם נתונים ניתנים לפתרון אקראיים, צריך ליצור את הערך V באופן הבא:
V = concat(account_key, salt, random_resolvable_data)
אם מתבצעת פרסום של נתוני סוללה וגם של נתונים ניתנים לפתרון אקראיים, צריך ליצור את V באופן הבא:
V = concat(account_key, salt, battery_data, random_resolvable_data)
מפתח חשבון פעיל
החלפת החיבור מבוססת על חשבון, ולכן הספק צריך לכלול את פרטי החשבון של החיבור הנוכחי במודעת ה-BLE. אם המכשיר המחובר הנוכחי הוא Seeker של מתג אודיו, הספק אמור להיות מסוגל לקבל את מפתח החשבון שמשויך ל-Seeker הזה, ולהשתמש במפתח החשבון הזה כדי להצפין את השדה של סטטוס החיבור. אם מקור האודיו המחובר הוא לא Audio switch Seeker, הספק צריך להשתמש במפתח החשבון שנעשה בו שימוש לאחרונה.
לפני חישוב מסנן מפתח החשבון, הספק צריך לשנות את הבית הראשון של מפתחות החשבון כך שיכלול את אחד מהדפוסים הבאים של שימוש:
- 0b00000100
מפתח החשבון הזה לא בשימוש.
זהו מפתח ברירת המחדל (ראו מפתח חשבון). - 0b00000101
מפתח החשבון הזה הוא מפתח החשבון האחרון שבו נעשה שימוש.
שדה סטטוס החיבור מוצפן באמצעות מפתח החשבון הזה. אין מידע על מפתח החשבון של מצב החיבור הנוכחי. יכול להיות שאין מכשירים מחוברים או שהמכשיר המחובר הוא לא מכשיר חיפוש של מתג אודיו. - 0b00000110
מפתח החשבון הזה הוא מפתח החשבון שבשימוש.
שדה סטטוס החיבור מוצפן באמצעות מפתח החשבון הזה, והמכשיר המחובר הנוכחי משויך למפתח החשבון הזה.
תרשים של מטען נתונים של מעבר אודיו
באיור הבא מוצגת הסכימה של מטען הנתונים של מתג האודיו.

הודעות
כשהמכשיר מחובר, ה-Seeker וה-Provider יכולים להשתמש בMessage stream כדי לסנכרן את היכולת לעבור בין מקורות אודיו, להפעיל מעבר בין חיבורים, להגדיר ולקבל את העדפת המעבר, לעדכן את סטטוס החיבור וכו'. אנחנו יוצרים קבוצת הודעות וקודים להודעות שספציפיים למתג האודיו, כפי שמתואר בהמשך.
שם קבוצת ההודעות | ערך |
---|---|
שינוי מקור האודיו | 0x07 |
פרטים נוספים על כל קוד הודעה מופיעים בקטעים הבאים.
שם קוד ההודעה | ערך | התאמה לכמה מכשירים בלבד | השולח | Responder | הצפנה | MAC | ACK |
---|---|---|---|---|---|---|---|
קבלת היכולת של שינוי מקור האודיו | 0x10 | לא | שניהם | את שניהם, באמצעות הקוד 0x11 | לא | לא | לא |
היכולת לשלוח התראות על שינוי מקור האודיו | 0x11 | לא | שניהם | שניהם | לא | כן | Y |
הגדרת מצב Multipoint | 0x12 | Y | מחפש | ספק | לא | כן | Y |
הגדרת העדפה למעבר | 0x20 | Y | מחפש | ספק | לא | כן | Y |
קבלת העדפת המעבר | 0x21 | Y | מחפש | הספק, באמצעות הקוד 0x22 | לא | לא | לא |
העדפה לקבלת התראות על מעבר | 0x22 | Y | ספק | מחפש | לא | לא | לא |
מעבר למקור אודיו פעיל(למכשיר מחובר) | 0x30 | Y | מחפש | ספק | לא | כן | Y |
חזרה לחשבון הקודם | 0x31 | לא | מחפש | ספק | לא | כן | Y |
Notify multipoint-switch event | 0x32 | Y | ספק | מחפש | לא | לא | לא |
קבלת סטטוס החיבור | 0x33 | Y | מחפש | הספק, באמצעות הקוד 0x34 | לא | לא | לא |
קבלת התראות על סטטוס החיבור | 0x34 | Y | ספק | מחפש | Y | לא | לא |
התרעה על חיבור שהתחיל שינוי מקור אודיו | 0x40 | לא | מחפש | ספק | לא | כן | Y |
ציון מפתח של חשבון פעיל | 0x41 | לא | מחפש | ספק | לא | כן | Y |
שליחת נתונים בהתאמה אישית | 0x42 | לא | מחפש | ספק | לא | כן | Y |
הגדרת יעד לניתוק חיבורים | 0x43 | Y | מחפש | ספק | לא | כן | Y |
טבלה 4.3: הודעות של שינוי מקור אודיו
MAC של הודעות של שינוי מקור אודיו
כדי לספק אימות הודעות, כל הודעות המעבר לשימוש באודיו עם נתונים נוספים שנשלחות מהחיפוש לספק דורשות קוד אימות הודעות. כשמקבלים הודעה עם MAC, צריך להודיע על קבלת ההודעה כדי שהמחפש יידע אם הספק הגיב להודעה או לא.
אם האימות של ההודעה יצליח, הספק ישלח את ה-ACK להודעה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | אישור | 0xFF |
1 | uint8 | ACK | 0x01 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | משתנה |
4 | uint8 | שינוי מקור האודיו | 0x07 |
5 | uint8 | קוד ההודעה של שינוי מקור האודיו | משתנה |
6 - s | נתונים נוספים | משתנה |
אם הניסיון נכשל, הספק ישלח NAK עבור ההודעה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | אישור | 0xFF |
1 | uint8 | NAK | 0x02 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 0x0003 |
4 | uint8 | סיבת השגיאה | משתנה |
5 | uint8 | שינוי מקור האודיו | 0x07 |
6 | uint8 | קוד ההודעה של שינוי מקור האודיו | משתנה |
שימו לב: אם הספק הוא השולח, אין צורך ב-MAC.
אחזור היכולות של מעבר האודיו
גם הספק וגם המכשיר המחפש של Audio Switch יכולים לבדוק אם המכשיר המחפש/הספק המחובר של Fast Pair תומך ב-Audio Switch או לא באמצעות ההודעה הבאה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | אחזור היכולות של מעבר האודיו | 0x10 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 0 |
טבלה 4.3.1.0: אחזור היכולות של מתג האודיו
יכולת ההתראות של מעבר האודיו
כשמקבלים את קוד ההודעה get capability of Audio switch, ה-Seeker/Provider של שינוי מקור האודיו משיב עם אחד מהדגלים הבאים:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | יכולת ההתראות של מעבר האודיו | 0x11 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 20 אם השדה הזה נשלח על ידי מבקש 4 אם השדה הזה נשלח על ידי ספק |
4 עד 5 | uint16 | קוד גרסת מעבר האודיו | ערך שאינו אפס מציין שהמכשיר תומך במתג האודיו. קוד הגרסה הנוכחית (עם שיפור האבטחה) הוא 0x0102. 0x0000 או ללא תגובה תוך שנייה אחת: אין תמיכה במתג האודיו במכשיר הזה |
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.
הגדרת מצב של שיחה בכמה מכשירים
ב-Audio switch Seekers, יכול להיות שנציע למשתמשים להפעיל או להשבית את הפונקציונליות של שיתוף המסך בכמה מכשירים. ה-Seeker יגדיר את המצב של כמה נקודות לשותף באמצעות ההודעה הבאה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | הגדרת מצב של שיחה בכמה מכשירים | 0x12 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 17 |
4 | uint8 | מצב התאמה לכמה מכשירים | 0: השבתת התאמה לכמה מכשירים 1: הפעלת התאמה לכמה מכשירים |
5 עד 12 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.1.2: הגדרת מצב Multipoint
הגדרת העדפה למעבר
מחפשי מעבר אודיו יכולים לשנות את העדפת המעבר של 'שיחה בכמה מכשירים' ולהגדיר אותה לספק באמצעות ההודעה הבאה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | הגדרת העדפה למעבר | 0x20 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 18 |
4 | דגלים | שינוי העדפה | משתנה ראו דגל העדפת המעבר בין נקודות |
5 | הגדרות מתקדמות של החלפה הביייט הזה שמור, ערך ברירת המחדל הוא 0 |
משתנה | |
6 עד 13 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
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 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.3.0: מעבר למקור אודיו פעיל (למכשיר מחובר)
אירוע של מעבר למקור אודיו פעיל
- ביט 0 (MSB): 1 מעבר למכשיר הזה, 0 מעבר למכשיר השני המחובר
- ביט 1: 1 – המערכת תמשיך את ההפעלה כשעוברים למכשיר אחר אחרי המעבר, 0 במקרים אחרים. כדי להמשיך את ההפעלה, הספק שולח התראה על הפעלה למכשיר החיפוש דרך פרופיל AVRCP. אם המצב הקודם (לפני המעבר) לא היה PLAY, הספק צריך להתעלם מהדגל הזה.
- ביט 2: 1 לדחיית SCO במכשיר שבו הועברה השיחה, 0 במקרים אחרים
- ביט 3: 1 – ניתוק Bluetooth במכשיר המנותק, 0 במקרה אחר.
- ביט 4 עד 7: שמורים.
יכול להיות שאנשים שמחפשים מכשירים להעברת אודיו לא תמיד יודעים מה המצב שלהם, ולכן יכול להיות שהספק יקבל את ההודעה 'יש לעבור למכשיר הזה' כשהמכשיר שלהם כבר פעיל. במקרה כזה, כדי להציג את ממשק המשתמש הנכון ב-Seeker, הספק יכול לשלוח NAK עם הסיבה לשגיאה, 0x4 – Redundant device action.
אם לספק אודיו בתקן LE יש יותר מחבר אחד בקבוצה, הוא צריך לנתק את כל החברים מהמכשיר המחפש, אחרת סטאק ה-Bluetooth של המכשיר המחפש יתחבר מחדש לספק.
חזרה למכשיר המנותק
אם המעבר בין החיבורים לא רצוי, המשתמשים יכולים לבטל אותו. בתרחישים מסוימים, מומלץ לשחזר את חיבור האודיו כדי למזער את ההפרעה. המערכת של המשתמש המחפש תשתמש בהודעה הבאה כדי להפעיל את המעבר חזרה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | חזרה למכשיר המנותק | 0x31 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 17 |
4 | uint8 | אירוע של מעבר חזרה | משתנה 0x01: חזרה לגרסה הקודמת 0x02: חזרה לגרסה הקודמת והמשך ההפעלה |
5 עד 12 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.3.1: חזרה למכשיר המנותק
אצל ספקים עם תמיכה ב-Multipoint, כדי לבצע החלפת חיבור, הספק עשוי לנתק את החיבור למכשיר אחד של מקור האודיו ולהשהות את סשן האודיו במקור האודיו השני. לדוגמה, נניח שאוזניות Multipoint מחוברות לטאבלט ולמכשיר שלישי שתומך בשינוי מקור האודיו. המשתמש צופה בסרטון בטאבלט כשמתקבלת שיחה נכנסת בטלפון. הטלפון יפעיל מתג חיבור באוזניות, שיגרום לניתוק החיבור של המכשיר השלישי כדי להתחבר לטלפון, וגם להשהיית סשן המדיה בטאבלט כדי לקבל את הצלצול מהטלפון. אם המשתמש ידחה את השיחה, יכול להיות שהטלפון יבקש מהאוזניות "לעבור חזרה ולהמשיך את ההפעלה". לאחר קבלת הבקשה הזו, האוזניות צריכות להתחבר מחדש למכשיר השלישי ולהמשיך את ההפעלה של הסרטון שהושהה בטאבלט.
שליחת התראה על אירוע של מעבר לכמה מכשירים
כדי להודיע למשתמשים על אירוע של מעבר בין כמה נקודות, יכול להיות שהכלי למציאת מתגים של אודיו יציג להם התראה. הספק צריך להודיע למשתמשים שמחפשים מעבר בין מקורות אודיו מחוברים על אירוע המעבר.
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | דיווח על אירוע של מעבר בכמה נקודות הספק צריך לשלוח אותו בכל מעבר, כולל מעבר מ-Audio switch Seeker ל-non-Audio switch Seeker, מ-non-Audio switch Seeker ל-Audio switch Seeker ומ-Audio switch Seeker ל-Audio switch Seeker |
0x32 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | משתנה |
4 | uint8 | הסיבה למעבר הערך הזה צריך להיקבע על סמך מצב החיבור. בתרחישי לדוגמה של LE Audio, כדאי לבדוק את המיפוי בין סוג ההקשר של LE Audio לבין מצב החיבור. לדוגמה, מצב החיבור שתואם ל-Voice Assistants הוא 0x9(LE audio - call streaming). לכן, הסיבה להחלפה במקרה של החלפה ביוזמת Voice Assistants צריכה להיות 0x02. |
משתנה 0x00: לא צוין 0x01: מדיה (למשל, סטרימינג של A2DP, סטרימינג של מדיה ב-LEA) 0x02: שיחה (למשל, סטרימינג של HFP, סטרימינג של שיחה ב-LEA) |
5 | uint8 | מכשיר היעד | משתנה 0x01: המכשיר הזה 0x02: מכשיר מחובר אחר |
6 - n | utf8 | שם המכשיר היעד אם המכשיר היעד הוא מכשיר חיפוש של מתג אודיו, השם שאליו מכשיר החיפוש של המתג שלח, אחרת השם של ה-BT, אם לא רלוונטי, 2 הבייטים האחרונים של הכתובת שלו |
משתנה |
טבלה 4.3.3.2: Notify multipoint-switch event
אחזור סטטוס החיבור
המשתמש המחפש יכול לקבל מהספק את סטטוס החיבור הנוכחי:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | אחזור סטטוס החיבור | 0x33 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 0 |
טבלה 4.3.3.3: אחזור סטטוס החיבור
כשהספק יקבל את ההודעה הזו, הוא יגיב באמצעות קוד ההודעה 0x34, notify connection status.
שליחת התראות על סטטוס החיבור
כפי שמוגדר במטען הייעודי לפרסום ב-BLE, אם סטטוס החיבור משתנה, ספק עם מספר נקודות קצה צריך להודיע על השינוי גם לחפשים המחוברים שמשתמשים באותו מפתח חשבון. אם הספק מחובר למכשיר חיפוש עם מתג אודיו ולמכשיר חיפוש עם מתג שאינו אודיו, אם מכשיר החיפוש עם המתג שאינו אודיו פעיל, הספק צריך להודיע גם למכשיר החיפוש עם המתג האודיו המחובר על סטטוס החיבור (באמצעות מפתח החשבון של מכשיר החיפוש).
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | שליחת התראות על סטטוס החיבור | 0x34 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | משתנה |
4 | uint8 | דגל של מכשיר פעיל | משתנה 0x00: ה-Seeker הזה פסיבי, והמכשיר הפעיל משתמש באותו מפתח חשבון 0x01: ה-Seeker הזה הוא המכשיר הפעיל 0x02: ה-Seeker הזה פסיבי, והמכשיר הפעיל הוא Seeker ללא מתג אודיו. |
5 - n | סטטוס החיבור המוצפן | משתנה | |
n+1 - n+8 | צופן חד-פעמי (nonce) של הודעה | משתנה |
טבלה 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 advertising payload שימו לב שאין לכלול את הביתט של אורך השדה והסוג, כי כאן יש לנו את קוד ההודעה ואת אורך הנתונים.
שליחת התראה על חיבור שהתחיל באמצעות שינוי מקור האודיו
ספקי Audio switch עשויים להזדקק לידע אם החלפת החיבור מופעלת על ידי Audio switch כדי להגיב בצורה שונה, למשל להשבית את הצלצולים באוזן לאירועים של Audio switch. המכשיר המחפש שולח הודעה כדי להודיע לספק שהחיבור הזה היה חיבור שהתחיל ב-Audio switch.
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | Notify Audio switch initiated connection | 0x40 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 17 |
4 | uint8 | אינדיקציה להתחברות שהתרחשה ביוזמת מעבר האודיו | משתנה 0: החיבור הזה לא הופעל על ידי שינוי מקור האודיו 1: החיבור הזה הופעל על ידי שינוי מקור האודיו |
5 עד 12 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.4.0: Notify Audio switch initiated connection
סימון מפתח חשבון בשימוש
אם כמה מפתחות חשבון בצד המבקש (למשל, חשבונות של כמה משתמשים) משויכים לספק, המבקש ישתמש בהודעה הבאה כדי לציין איזה מפתח חשבון נמצא בשימוש.
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | סימון מפתח חשבון בשימוש | 0x41 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 22 |
4 עד 9 | utf8 | מחרוזת בשימוש | UTF8 ('בשימוש') |
10 עד 17 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
18 - 25 | קוד אימות הודעות | משתנה |
טבלה 4.3.4.1: ציון מפתח חשבון בשימוש
לאחר קבלת ההודעה הזו, הספק יכול לדעת איזה מפתח חשבון נמצא בשימוש על ידי אימות קוד אימות ההודעה.
שליחת נתונים בהתאמה אישית
ה-Seeker של מתג האודיו הפעיל יכול להכיל את המידע (למשל, שימוש באודיו) של מקור האודיו בייט של נתונים מותאמים אישית, ולשלוח אותו לספק באמצעות ההודעה הבאה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | שליחת נתונים בהתאמה אישית | 0x42 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 17 |
4 | uint8 | נתונים בהתאמה אישית | משתנה |
5 עד 12 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.4.2: שליחת נתונים בהתאמה אישית
לאחר קבלת הנתונים בהתאמה אישית, הספק יעדכן את חבילת הפרסום כך שתכלול את הנתונים בהתאמה אישית. לספקים עם כמה נקודות, צריך גם לעדכן את סטטוס החיבור לשולח אחר שמחובר באמצעות אותו מפתח חשבון.
הגדרת יעד לניתוק החיבור
באוזניות עם חיבור למספר מכשירים, אם החיבור המועדף לניתוק הוא לא החיבור שהיה בשימוש הכי פחות לאחרונה, משתמשים שמחפשים שינוי מקור האודיו יכולים להודיע לספק איזה מכשיר לנתק באמצעות ההודעה הבאה:
אוקטט | סוג הנתונים | תיאור | ערך |
---|---|---|---|
0 | uint8 | שינוי מקור האודיו | 0x07 |
1 | uint8 | הגדרת יעד לניתוק החיבור | 0x43 |
2 עד 3 | uint16 | אורך הנתונים הנוספים | 17 |
4 | uint8 | יעד של מכשיר מחובר שרוצים להפסיק לשלוח אליו נתונים | משתנה 1: המכשיר הזה |
5 עד 12 | צופן חד-פעמי (nonce) של הודעה | משתנה | |
13 עד 20 | קוד אימות הודעות | משתנה |
טבלה 4.3.4.3: הגדרת יעד לניתוק החיבור