תמיכה באודיו למכשירי שמיעה באמצעות Bluetooth LE

ניתן לשפר את הנגישות במכשירי שמיעה (HA) מכשירים ניידים מבוססי Android באמצעות L2CAP מוכוון-חיבור ערוצים (CoC) באמצעות Bluetooth Low Energy (BLE). CoC משתמש באלסטי מאגר נתונים זמני של כמה חבילות אודיו כדי לשמור על זרימה יציבה של אודיו, במקרה של אובדן מנות. מאגר הנתונים הזמני מספק איכות אודיו מכשירי שמיעה על חשבון זמן האחזור.

העיצוב של CoC מתייחס Bluetooth גרסה 5 של מפרט הליבה (BT). כדי להישאר תואמים למפרט הליבה, כל הערכים בדף הזה ייקראו קטנים.

טרמינולוגיה

  • מרכז - מכשיר ה-Android שסורק פרסומות באמצעות Bluetooth.
  • ציוד היקפי - מכשיר השמיעה ששולח חבילות מודעות בחיבור Bluetooth.

הטופולוגיה של הרשת וארכיטקטורת המערכת

כשמשתמשים ב-CoC למכשירי שמיעה, הטופולוגיה של הרשת מניחה ציוד היקפי מרכזי ושני ציוד היקפי, אחד שמאלה ושני מימין, כפי שניתן לראות איור 1. מערכת האודיו בחיבור Bluetooth מציגה צד שמאל וציוד היקפי ימני בתור sink אודיו יחיד. אם ציוד היקפי מוגדר עקב התאמה מונומית או אובדן החיבור, משלבת את ערוץ האודיו השמאלי והימני ומשדר את האודיו לציוד ההיקפי שנותר. אם המרכז מנתק את החיבור לשניהם לציוד היקפי, והמרכז מתייחס לקישור אל כיור האודיו. אבד. במקרים כאלה, הנתב המרכזי מנתב את האודיו לפלט אחר.


איור 1. טופולוגיה להתאמת מכשירי שמיעה עם מכשירים ניידים עם Android שמשתמשים ב-CoC דרך BLE

אם המכשיר המרכזי לא משדר נתוני אודיו לציוד ההיקפי ויכול יש חיבור BLE, המרכז לא צריך להתנתק ציוד היקפי. שמירה על החיבור מאפשרת תקשורת נתונים לשרת ה-GATT ששוכן בציוד ההיקפי.

במהלך התאמה וחיבור של מכשירי שמיעה, המכשיר המרכזי צריך:

  • מעקב אחרי ההתאמה של הציוד ההיקפי השמאלי והימני האחרון.
  • נניח שהציוד ההיקפי נמצא בשימוש אם קיימת התאמה תקינה. ינסה להתחבר או להתחבר מחדש במכשיר כשהחיבור מתנתק.
  • נניח שהציוד ההיקפי כבר לא בשימוש אם ההתאמה נמחקת.

במקרים שלמעלה, המונח התאמה מתייחס לפעולה של רישום קבוצה של מכשירי שמיעה עם מזהה ייחודי אוניברסלי (UUID) נתון אדמינים משמאל/ימין במערכת ההפעלה, לא בתהליך התאמת Bluetooth.

דרישות מערכת

כדי להטמיע באופן תקין את CoC וליצור חוויית משתמש טובה, חיבור ה-Bluetooth במערכות של המכשיר המרכזי ובציוד ההיקפי:

  • להטמיע בקר BT 4.2 תואם ואילך. חיבורי LE Secure הם מומלץ מאוד.
  • לקבל תמיכה מרכזית לפחות בשני קישורי LE בו-זמנית עם פרמטרים כמו שמתואר במאמר חבילת אודיו פורמט ותזמון.
  • צריכה להיות תמיכה בציוד ההיקפי עם קישור LE אחד לפחות עם הפרמטרים שמתואר במאמר חבילת אודיו פורמט ותזמון.
  • יש בקרת זרימה מבוססת-קרדיט LE [BT Vol 3, Part A, Sec 10.1]. המכשירים יתמכו בגודל MTU ו-MPS של 167 בייטים לפחות CoC ותהיה אפשרות לבצע אגירת נתונים של עד 8 חבילות.
  • כוללים סיומת של אורך נתוני LE [BT Vol 6, Part B, Sec 5.1.9] עם מטען ייעודי (payload) של 167 בייטים לפחות.
  • שהמכשיר המרכזי תומך בפקודת HCI LE Connection Update ופועלים בהתאם למודלים של maximum_CE_Length שאינם אפס. minimum_CE_Length פרמטרים.
  • הוא צריך לשמור על תפוקת הנתונים עבור שני חיבורי LE CoC ציוד היקפי שונה עם מרווחי חיבור ומטען ייעודי (payload) גדלים בחבילת אודיו פורמט ותזמון.
  • שהציוד ההיקפי צריך להגדיר את MaxRxOctets MaxRxTime פרמטרים בLL_LENGTH_REQ או LL_LENGTH_RSP פריימים כדי להיות ערכי החובה הקטן ביותר שדרושים למפרטים האלה. כך היא מאפשרת לבצע אופטימיזציה של מתזמן הזמן שלו כאשר מחשבים את כמות הזמן שנדרש כדי לקבל מסגרת.

מומלץ מאוד שהמרכז והציוד ההיקפי יתמכו ב-2MB PHY שמצוין במפרט של BT 5.0. המרכז יתמוך בקישורי אודיו של לפחות 64 קילו-ביט לשנייה ב-PHY אחד וגם ב-2 מיליון. אין להשתמש בטווח הארוך BLE PHY.

מערכת CoC משתמשת במנגנוני ה-Bluetooth הרגילים להצפנה של שכבות קישורים. וקפיצה בתדירות גבוהה.

שירותי ASHA GATT

ציוד היקפי יטמיע את הסטרימינג של האודיו למכשיר שמיעה (ASHA) שירות שרת GATT שמתואר בהמשך. הציוד ההיקפי צריך לפרסם את השירות הזה במצב שגלוי לכולם, כדי לאפשר מזהה sink אודיו מרכזי. כל פעולה של סטרימינג של אודיו ב-LE ידרוש הצפנה. סטרימינג של אודיו ב-BLE כולל את המאפיינים הבאים:

מאפיין מאפיינים תיאור
ReadOnlyProperties נקראו ראו ReadOnlyProperties.
AudioControlPoint כתיבה וכתיבה ללא תגובה נקודת בקרה לשידור אודיו. צפייה AudioControlPoint.
AudioStatusPoint קריאה/התראה השדה בדוח הסטטוס של נקודת הבקרה של האודיו. צפייה AudioStatusPoint.
עוצמת הקול כתיבה ללא תגובה בייט בין -128 ל-0 שמציין את כמות ההפחתה שיש להחיל על את אות האודיו שמועבר בסטרימינג, בטווח של -48 dB עד 0 dB. ההגדרה -128 ייחשבו כעוצמת קול מושתקת לחלוטין, כלומר עוצמת הקול הנמוכה ביותר שאינה מושתקת הערך הוא -127, והוא שווה ערך להפחתה של -47.625 dB. בהגדרה 0, טון סינוס מסילת רכבת שמוחלץ צריך לייצג קלט של 100 dBSPL המקבילה בכלי השמיעה. המרכז צריך להיות זרם מנומאלי בקנה מידה מלא ומשתמשים במשתנה הזה כדי להגדיר את רמת ההצגה הרצויה הציוד ההיקפי.
LE_PSM_OUT נקראו PSM לשימוש לחיבור ערוץ האודיו. להיבחר מתוך טווח דינמי [BT Vol 3, Part A, Sec 4.22]

מזהי UUID שהוקצו לשירות ולמאפיינים:

UUID של שירות: {0xFDF0}

מאפיין מזהה ייחודי אוניברסלי (UUID)
ReadOnlyProperties {6333651e-c481-4a3e-9169-7c902aad37bb}
AudioControlPoint {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
סטטוס אודיו {38663f1a-e711-4cac-b641-326b56404837}
עוצמת הקול {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

בנוסף לשירות ASHA GATT, הציוד ההיקפי צריך גם להפעיל את שירות המידע על המכשיר כדי לאפשר למרכז לזהות שמות היצרן ושמות המכשירים של הציוד ההיקפי.

ReadOnlyProperties

ReadOnlyProperties כוללים את הערכים הבאים:

בייט תיאור
0 גרסה – חייב להיות 0x01
1 למידע נוסף, ראו יכולות מכשירים.
2-9 פרטים נוספים זמינים בקטע HiSyncId.
10 ראו FeatureMap.
11-12 RenderDelay. זהו הזמן, באלפיות שנייה, מהתאריך שבו הציוד ההיקפי מקבל פריים אודיו עד שהציוד ההיקפי עובר רינדור הפלט. ניתן להשתמש בבייטים האלה כדי לעכב סרטון לסנכרן עם האודיו.
13-14 שמור לשימוש בעתיד. מאתחלים לאפסים.
15-16 מזהי קודק נתמכים. זו קצת מסיכה של מזהי קודק נתמכים. 1 במיקום מסוים תואם באמצעות קודק נתמך. לדוגמה, הערך 0x0002 מציין שתדר G.722 הוא 16 kHz נתמך. בכל שאר הביטים יש להגדיר את הערך 0.

יכולות מכשיר

מקדח תיאור
0 צד המכשיר (0: שמאל, 1: ימין)
1 מציין אם המכשיר עצמאי ומקבל נתוני מונו, או אם המכשיר הוא חלק מקבוצה (0: מונו, 1: דו-כיווני)
2 המכשיר תומך ב-CSIS (0: לא נתמך, 1: נתמך)
3-7 שמור (מוגדר ל-0)

מזהה HiSyncID

השדה הזה חייב להיות ייחודי לכל המכשירים הדו-כיווניים, אבל הוא חייב להיות זהים עבור הקבוצה השמאלית והימנית.

בייט תיאור
0-1 מזהה של היצרן. זו חברה מזהים שהוקצו על ידי BTSIG.
2-7 מזהה ייחודי שמשמש לזיהוי קבוצת מכשיר השמיעה. חובה להגדיר את המזהה הזה להיות זהה גם בציוד ההיקפי השמאלי וגם בציוד ההיקפי.

מפת פיצ'רים

מקדח תיאור
0 סטרימינג של פלט אודיו של LE CoC נתמך (כן/לא).
1-7 שמור (מוגדר ל-0).

מזהי קודק

אם הביט מוגדר, הקודק הספציפי תומך בכך.

מזהה / מספר ביט קודק וקצב דגימה קצב העברת נתונים נדרש זמן רינדור פריים חובה במרכז (C) או בציוד היקפי (P)
0 שמורה שמורה שמורה שמורה
1 G.722 ב- 16 kHz 64 קילו-ביט לשנייה משתנה C ו-P
2 עד 15 מקומות שמורים.
גם הערך 0 שמור.

AudioControlPoint

אי אפשר להשתמש בנקודת הבקרה הזו כש-LE CoC סגור. צפייה הפעלה ו- הפסקת שידור אודיו לתיאור התהליך.

קוד הפעלה ארגומנטים הליך משנה של GATT תיאור
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
לכתוב עם התשובה והודעת סטטוס נוספת דרך מאפיין AudioStatusPoint. מורה לציוד ההיקפי לאפס את הקודק ולהפעיל הפעלה של פריים 0. שדה הקודק מציין את מזהה הקודק שבו צריך להשתמש להפעלה הזו. לדוגמה, שדה הקודק הוא '1' ל-G.722 ב- 16k Hz.

שדה הביט של סוג האודיו מציין את סוגי האודיו הקיימים בזרם:
  • 0 – לא ידוע
  • 1 – רינגטונים
  • 2 – שיחת טלפון
  • 3 – מדיה
השדה otherstate מציין אם הצד השני של המכשירים מחוברים. הערך בשדה הוא 1 כשהציוד ההיקפי השני מחובר, אחרת הערך הוא 0.

הציוד ההיקפי לא יבקש עדכוני חיבור לפני התקבל קוד פעולה «Stop».
2 «Stop» ללא לכתוב עם התשובה והודעת סטטוס נוספת דרך מאפיין AudioStatusPoint. מורה לציוד ההיקפי להפסיק לעבד את האודיו. אודיו חדש צריך להתחיל את רצף ההגדרה אחרי העצירה הזו לפי הסדר כדי לעבד את האודיו שוב.
3 «Status»
  • uint8_t connected
כתיבה ללא תגובה מיידעת לציוד ההיקפי המחובר שיש עדכון סטטוס ציוד היקפי מסוג אחר. השדה המחובר מציין את סוג העדכון:
  • 0 – ציוד היקפי אחר מנותק
  • 1 – ציוד היקפי אחר מחובר
  • 2 – בוצע עדכון פרמטר של חיבור LE בכל אחד מהחיבורים

AudioStatusPoint

השדה בדוח הסטטוס של נקודת הבקרה של האודיו

קודי תפעול תיאור
0 סטטוס תקין
-1 פקודה לא ידועה
-2 פרמטרים לא חוקיים

מודעות של שירות ASHA GATT

מזהה השירות הייחודי (UUID) של השירות חייב להיות בקטע חבילת מודעות. בפרסומת או בסריקה מסגרת התגובה, לציוד ההיקפי חייב להיות נתוני שירות:

היסט בייטים שם תיאור
0 אורך מודעה >= 0x09
1 סוג מודעה 0x16 (נתוני שירות – UUID של 16 ביט)
2-3 מזהה ייחודי אוניברסלי (UUID) של שירות 0xFDF0 (קטן-אנדיאני)

הערה: זהו מזהה זמני.
4 גרסת פרוטוקול 0x01
5 פונקציה
  • 0 - שמאל (0) או ימין (1) צד
  • 1 – מכשירים בודדים (0) או כפולים (1).
  • 2 – המכשיר תומך ב-CSIS (<0: לא נתמך, 1: נתמך)
  • 3-7 – מקום שמור. הביטים האלה חייבים להיות אפס.
6-9 חיתוך של HiSyncID ארבעה בייטים המשמעותיים ביותר של HiSyncId. הבייטים האלה צריכים להיות החלק האקראי ביותר במזהה.

לציוד ההיקפי צריך להיות שם מקומי מלא סוג נתונים שמציין את השם של מכשיר השמיעה. השם הזה בממשק המשתמש של המכשיר הנייד, כדי שהמשתמש יוכל לבחור למכשיר הנכון. השם לא מציין את החלק השמאלי או הימני מאחר שהמידע הזה סופק יכולות מכשירים.

אם הציוד ההיקפי שם את סוג הנתונים של השם ושל שירות ASHA באותו אופן סוג המסגרת (ADV או SCAN RESP), ולאחר מכן שני סוגי הנתונים ("שם מקומי מלא" ו'נתוני השירות של שירות ASHA') באותה מסגרת. הפעולה הזו מאפשרת לסורק של המכשיר הנייד לקבל את שני הנתונים באותה תוצאת סריקה.

במהלך ההתאמה הראשונית, חשוב שהציוד ההיקפי יהיה לפרסם בקצב מהיר מספיק כדי לאפשר למכשיר הנייד במהירות את הציוד ההיקפי שקשור אליו.

סנכרון ציוד היקפי שמאלי וימין

כדי לעבוד עם Bluetooth במכשירים ניידים עם Android, ציוד היקפי אחראים להבטיח שהם מסונכרנים. ההפעלה יש לסנכרן את הציוד ההיקפי השמאלי והימני בזמן האימון. שני המכשירים ההיקפיים חייבים להפעיל דגימות אודיו מ- בו-זמנית.

ציוד היקפי יכול לסנכרן את הזמן שלו באמצעות רצף המספר מצורף מראש לכל חבילה של המטען הייעודי של האודיו. המרכז מבטיח שחבילות אודיו שנועדו להתנגן באותו זמן בכל ציוד היקפי יש אותו מספר סידורי. הרצף המספר גדל בהדרגה אחרי כל חבילת אודיו. כל רצף המספר הוא 8 ביט, ולכן מספרי הרצף יחזרו על עצמם אחרי 256 חבילות אודיו. מאחר שכל גודל וקצב דגימה של חבילת אודיו קבועים לכל חיבור, שני הציוד ההיקפי יכולים להסיק בזמן המשחק. למידע נוסף על חבילת האודיו, ראו הפורמט של חבילת אודיו תזמון.

המרכז עוזר על ידי מתן טריגרים למכשירים הבינאריים בזמן הסנכרון יכול להיות שזה יקרה. הטריגרים האלה מעדכנים את הסטטוס של כל ציוד היקפי ציוד היקפי שהותאם בכל פעם שיש פעולה ש עלול להשפיע על הסנכרון. הגורמים המפעילים הם:

  • כחלק מהפקודה «Start» ב-AudioControlPoint, למצב החיבור הנוכחי של הצד השני של מקבלי מכשיר.
  • בכל פעם שיש חיבור, ניתוק או פעולת עדכון של פרמטר חיבור בציוד היקפי אחד, הפקודה «Status» של AudioControlPoint נשלחת אל הצד השני של המכשירים הדו-כיווניים.

הפורמט והתזמון של חבילת האודיו

אריזת פריימים של אודיו (בלוקים של דגימות) לחבילות מאפשרת לשמיעה הכלי נגזר מעוגנים לתזמון של שכבת הקישור. שפת תרגום מפשטים את ההטמעה:

  • פריים של אודיו תמיד צריך להתאים למרווח הזמן של החיבור. לדוגמה, אם מרווח החיבור הוא 20 אלפיות שנייה וקצב הדגימה הוא 16 kHz, אז פריים האודיו יכלול 320 דגימות.
  • קצבי הדגימה במערכת מוגבלים לכפולות של 8kHz עד לכלול תמיד מספר שלם של דגימות במסגרת את זמן הפריים או את מרווח החיבור.
  • בייט של רצף צריך להוסיף את פריימים של אודיו בהתחלה. הבייט של הרצף את הספירה לאחור ומאפשרת לציוד ההיקפי לזהות אי התאמה של מאגר הנתונים הזמני או חוסר התאמה במערכת.
  • פריים של אודיו תמיד צריך להתאים לחבילת LE אחת. האודיו תישלח כחבילת L2CAP נפרדת. גודל ה-LE LL PDU יהיה:
    גודל מטען ייעודי של אודיו + 1 (מונה רצף) + 6 (4 לכותרת L2CAP, 2 ל-SDU)
  • אירוע חיבור תמיד צריך להיות גדול מספיק ויכול להכיל שני קטעי אודיו. מנות ו-2 חבילות ריקות עבור ACK לשריין רוחב פס ואת השידורים החיים שלו. חשוב לשים לב שחבילת האודיו עשויה להתפצל לפי בבקר Bluetooth המרכזי. הציוד ההיקפי צריך לקלוט יותר מ-2 חבילות אודיו מקוטעות לכל אירוע חיבור.

כדי לתת למרכז, גמישות מסוימת, אורך המנה של G.722 לא שצוין. אורך המנות ב-G.722 עשוי להשתנות בהתאם לחיבור המרווח שהמרכז מגדיר.

הפורמט של פלט אוקטט בפלט G.722 מפנה אל תקן ITU-T G.722 (09/2012) סעיף 1.4.4 "Multiplexer"

עבור כל רכיבי הקודק שנתמכים בציוד היקפי, הציוד ההיקפי צריך תומכים בפרמטרים של החיבור הבאים. זוהי רשימה חלקית בלבד של מערך הגדרות אישיות שהמרכז יכול ליישם.

קודק קצב העברת נתונים מרווח חיבור אורך CE (1 מ'/2 מ' PHY) גודל המטען הייעודי של האודיו
G.722 ב- 16 kHz 64 קילו-ביט לשנייה 20 אלפיות השנייה 5,000/3750 לנו 160 בייטים

איך מתחילים ומפסיקים שידור אודיו

לפני הפעלת שידור אודיו, המרכז שולח שאילתה לציוד ההיקפי ויוצרים קודק עם מכנה משותף. עדכוני התוכן בתהליך ההגדרה הבא:

  1. PSM, ואופציונלי, גם RenderDelay נקרא. הערכים האלה יכול להישמר במטמון.
  2. ערוץ CoC L2CAP פתוח – הציוד ההיקפי יקבל 8 קרדיטים בהתחלה.
  3. בוצע עדכון חיבור כדי להחליף את הקישור לפרמטרים שנדרשים לקודק שנבחר. המרכז עשוי לבצע את עדכון הקישור הזה לפני חיבור ה-CoC בשלב הקודם.
  4. גם המארח המרכזי וגם המארח של הציוד ההיקפי ממתינים לעדכון השלמת האירוע.
  5. מפעילים מחדש את מקודד האודיו ומאפסים את ספירת רצף המנות ל-0. פקודת «Start» עם הפרמטרים הרלוונטיים שהונפק ב-AudioControlPoint. המכשיר המרכזי ממתין להודעה על סטטוס בהצלחה של פקודת «Start» הקודמת מהציוד ההיקפי לפני הסטרימינג. זמן ההמתנה הזה מספק לציוד ההיקפי זמן להכין את צינור עיבוד הנתונים שלו להפעלת אודיו. במהלך סטרימינג של אודיו, הרפליקציה צריכים להיות זמינים בכל אירוע של חיבור, למרות שהמודל הנוכחי זמן האחזור של רפליקציית נתונים עשוי להיות לא אפס.
  6. הציוד ההיקפי לוקח את חבילת האודיו הראשונה מהתור הפנימי שלו (מספר רצף 0) ומשמיעים אותו.

המרכזית מנפיקה את הפקודה «Stop » כדי לסגור את שידור אודיו. אחרי הפקודה הזו, הציוד ההיקפי לא צריך להיות זמין בכל אירוע התחברות. כדי להפעיל מחדש את שידור האודיו, צריך לבצע את הרצף שלמעלה, החל משלב 5. כשהמרכז הוא לא אודיו בסטרימינג, עדיין אמור לשמור על חיבור LE ל-GATT שירותים שונים.

הציוד ההיקפי לא יעדכן את החיבור למרכז. כדי לחסוך בחשמל, יכול להיות שהמרכז יעדכן את החיבור ציוד היקפי כשהוא לא משדר אודיו.