Ses Geçişi
Kullanıcılar günlük görevlerini gerçekleştirmek için birden fazla ses kaynağı cihazı kullanmaya başladıkça, farklı cihazlarda mikrofonlu kulaklık kullanımını yönetmek için daha basit bir çözüme yönelik talep artıyor. Ses Geçişi, kullanıcı etkinliğine (ör. film başlatma) ve öncelikli etkinliklere (ör. gelen arama) göre cihazlar arasında mikrofonlu kulaklık bağlantılarını sorunsuz bir şekilde geçirir.
Kullanıcı Deneyimi İlkeleri
- Bağlantı geçişi hızlı ve kullanıcı eylemine dayalı olmalıdır.
- Bağlantı geçişi kullanıcılara şeffaf olmalı ve istenen geçiş yapılmasını istemedikleri durumlarda bunları kontrol etmelerine/geri almalarına izin vermelidir.
- Geçiş yaparken kullanıcı gizliliğine saygı gösterilmelidir.
Roller
Ses Geçişi Arayan: Arayan, uygun olduğunda bağlanmak için yakındaki bir mikrofonlu kulaklık arayan bir ses kaynağı cihazıdır (ör. telefon veya tablet).
Ses Geçişi Sağlayıcısı: Sağlayıcı, normalde bilgisi ve bağlantı durumunu arayanların geçiş kararları vermesine yardımcı olan bir mikrofonlu kulaklıktır.
Koşullara Genel Bakış
Akıllı geçiş özelliğini kullanmak için sağlayıcılar aşağıdaki şartlara uymalıdır:
Ad | Açıklama | Koşullar | Zorunlu mu? |
---|---|---|---|
Sayfa Tarama | Mevcut bir bağlantı olduğunda başka bir arayandan gelen yeni bir bağlantı isteğini kabul etmek için. Tek noktalı Sağlayıcılar için:
|
Performansı iyileştirmek için düşük gecikmeli sayfa tarama modu (tarama aralığı 640 ms'den uzun olmamalıdır) gerekir. Pil ömrü ile geçiş performansı arasında denge kurmak için Sağlayıcı, çoğu durumda varsayılan bir sayfa tarama moduna sahip olabilir (düşük güç modu, tarama aralığı 1.280 ms'den uzun olmamalıdır). Ancak düşük gecikme modu aşağıdaki durumlarda kullanılmalıdır:
|
Zorunlu |
Bağlantı geçmişi | Önceki bağlantıya geri dönmek ve varsa oynatmaya devam etmek için. Geri dönüş, Message Stream API'leri aracılığıyla yapılan iletişimler tarafından tetiklenir. Mümkünse çalmaya devam etmek için ses duraklatma etkinliği kayda dahil edilmelidir. |
Bağlantı geçmişini koruyun ve Message Stream API'lerini uygulayın. | Zorunlu |
Bağlantı durumu | Arayanların bağlantı değiştirme kararını vermesi için.Bağlantı durumu şunları içerir:
|
Bağlantı durumunu BDE Tanıtımına ve Mesaj Akışına dahil edin. | Zorunlu |
Çalışma zamanı özellikleri değişiyor | Ses Geçişi, Sağlayıcıdaki donanım yazılımını yükseltilerek etkinleştirilebilir. Bu nedenle özelliklerin, çalışma zamanında Seeker ile Sağlayıcı arasında senkronize edilmesi gerekir. | Çalışma zamanı özelliklerine erişmek için Message Stream API'lerini uygulayın. | Zorunlu |
Yapılandırılabilir geçiş kuralları | Arayan'ın, kullanıcı tercihi ayarlarını kullanarak mevcut etkin ses akışı ve yeni ses akışı istekleri arasındaki önceliği yapılandırmasına izin verin. Örneğin, Ses Geçişi Arayan, kullanıcıların medya akışı ve arama arasında otomatik geçişi etkinleştirmesine/devre dışı bırakmasına olanak tanıyan kullanıcı arayüzü ayarları sağlayabilir. Ses Geçişi Arayan, geçiş kuralını Mesaj Akışı aracılığıyla ayarlar ve alır. |
Yalnızca çok noktalı sağlayıcılar. Bağlı cihazlar arasında geçiş kurallarını yapılandırılabilir hale getirmek için Message Stream API'lerini uygulayın. |
İsteğe bağlı |
Etkin cihaz geçişi | Ses Geçişi Arayan'ın, bağlı cihazlar arasında Ses geçişini simüle etmesine izin verin. Ses Geçişi Arayan tarafında, kullanıcıların bağlı cihazlar arasında kolayca geçiş yapmasını sağlayan bir kullanıcı arayüzü olabilir. |
Yalnızca Çok Noktalı Sağlayıcılar. Bağlı cihazlar arasındaki etkin ses kaynağını belirlemek amacıyla Ses Geçişi Arayan için Message Stream API'lerini uygulayın. |
Zorunlu |
Çok noktalı geçiş bildirimi | Ses Geçişi Arayan'ın geçiş bildirimini göstermesine izin verin. | Yalnızca Çok Noktalı Sağlayıcılar. Çok noktalı geçiş gerçekleştiğinde bağlı Ses Geçişi Arayanlara bildirimde bulunmak için Message Stream API'lerini uygulayın. |
Zorunlu |
Reklam yükü
Sağlayıcı, Reklamcılık: Bulunabilir olmadığında bölümünde açıklanan Hızlı Eşleme Hesabı verilerinin üzerine inşa edilmiş geçerli bağlantı durumunu reklama belirtecektir.
Tablo 4.2 sürümünün 0x1 olduğunu unutmayın.
Bağlantı Durumu Alanı
Sekizli | Veri türü | Açıklama | Değer | Zorunlu mu? |
---|---|---|---|---|
0 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL0101
|
Zorunlu |
1 | uint8 |
Bağlantı durumu 0bHAFRSSSS
|
0BHAFRSSS
|
Zorunlu |
2 | uint8 |
Özel veriler Şu anda bu veriler yalnızca mevcut ses akışının kullanımını açıklamak için kullanılan içerik türünü içeriyor. Arayan, isteği Sağlayıcı'ya gönderir. |
Değer, mevcut etkin akışın Arayanından Sağlayıcı'ya mesaj akışı aracılığıyla gönderilir. Geçerli etkin akış, Seeker'dan gelmiyorsa 0 değerini alır. | Zorunlu |
3 - var | Bağlı cihazlar bit eşlemi Şu anda Sağlayıcı'ya bağlı olan cihazları gösteren bir bit eşlem. Tüm bağlı cihazlar, bağlı tek bir cihaz için bir bit olacak şekilde sırayla düzenlenir. Süre, Sağlayıcı'nın bağlı cihazlarının sayısına göre belirlenir. |
Cihaz şu anda Sağlayıcı'ya bağlıysa eşlenen bit 1, aksi takdirde 0 olarak ayarlanır. Ayrıntılar için Bağlı Cihaz Bit Eşlemi bölümüne bakın. |
İsteğe bağlı |
Tablo 4.1: Bağlantı durumu alanının ham verileri
Bağlantı İşaretleri
0bH = kafa üzerinde algılama
- 1, şimdi başıda
- 0 (aksi takdirde, kafada değil veya OHD sensörü yok)
0bA = bağlantı kullanılabilirliği
- 1, kullanılabilir bir bağlantı var
- 0, aksi takdirde
0bF = odak modu
- 1. Odaklı modda, medya kullanımı için bağlantı değişikliğine izin verilmiyor. Yani A2DP'den A2DP'ye geçiş yapılamaz.
- 0, aksi takdirde
0 br = otomatik olarak yeniden bağlanıldı
- 1. Mevcut bağlantı, Sağlayıcı tarafından otomatik olarak yeniden bağlandıysa, yani kullanıcılar tarafından bağlanmamışsa (çoklu bağlantı noktaları için, mevcut bağlantılardan biri otomatik olarak yeniden bağlandıysa 1 olarak ayarlanmalıdır)
- 0, aksi takdirde
Bağlantı durumu
- 0x0: bağlantı yok
- 0x1: sayfalama
- 0x2: bağlı ancak veri aktarımı yok
- 0x3: Ses harici veri aktarımı (yalnızca değiştirilebilir, değilse 0xF kullanıldığında)
- 0x4: A2DP akışı, AVRCP geçerli değil
- 0x5: A2DP akışı ve AVRCP oynatma
- 0x6: Bant içi ve bant dışı zil sesi dahil HFP (telefon/voip araması) akışı
- 0x7: LE Audio - kontrolsüz medya akışı
- 0x8: LE Audio - kontrollü medya akışı
- 0x9: LE Audio - arama aktarma
- 0xA: LE Audio - yayınlama
- 0xF: Bağlantı anahtarını geçici olarak devre dışı bırak (ör. donanım yazılımı güncellemesi)
Bağlı Cihaz Bit Eşlemi
İstenmeyen bağlantı geçişlerini önlemek için Arayan'ın, mikrofonlu kulaklığın o anda hangi cihazlara bağlı olduğunu bilmesi gerekebilir. Örneğin, mikrofonlu kulaklık telefona bağlıyken, kullanıcı, aile üyelerinden biri tablette YouTube'u başlattığında bağlantı değişikliği nedeniyle kesintiye uğramak istemez.
Bu bit eşlemin anonim olduğunu, Arayan'ın diğer hangi cihazların Sağlayıcı'ya bağlı olduğunu bilemediğini unutmayın. Örneğin, 5 bağlı cihaz ele alalım:
- 0: dizüstü bilgisayar (0bx0000000)
- 1: telefonA (0b0x000000)
- 2: telefonB (0b00x00000)
- 3: tablet (0b000x0000)
- 4: TV (0b0000x000)
Şu anda bağlı cihazlar bir dizüstü bilgisayar ve tabletse bit eşlemin değeri 0b10010000 olur. Kullanıcılar mikrofonlu kulaklığı fabrika ayarlarına sıfırladığında veya bağlı cihaz sayısı üst sınıra ulaştığında, sipariş değişikliği kaçınılmazsa kabul edilebilir.
Rastgele Çözümlenebilir Reklam
Sağlayıcı, kullanıcı gizliliğini takip etmekten ve bu gizliliği korumaktan kaçınmak için alanı AES-TO kullanarak hesap anahtarına göre döndürmeli ve şifrelemelidir:
encrypted_connection_status_field = connection_status_raw_data ^ AES(Key, IV)
burada:
Anahtar, sonraki bölümde tanımlanan kullanımdaki hesap anahtarından türetilir.
Anahtar, SHA-256 karma işlevi kullanılarak HKDF işlevi IETF RFC 5869 tarafından oluşturulur.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
Sağlayıcı burada orijinal hesap anahtarını kullanmalıdır. Diğer bir deyişle, anahtarın ilk baytı 0x04'tür ve kullanım kalıbına dahil edilmemiştir.
IV (ilk vektör), Hesap Anahtar Verileri'nin dolgusu sıfır olan 2 baytlık takviye değeridir. Yani IV, konat(tuz, 14 bayt sıfır) değerine sahiptir.
Bağlantı durumu ham verileri tablo 4.1'de tanımlanmıştır. Bağlantı durumu değişirse takviye değer ve RPA aynı reklam zaman aralığında yeniden oluşturulmalıdır.
Bu, şifrelenmiş bağlantı durumu alanının, Hesap Anahtarı Verileri dönerken aynı anda dönmesini sağlar.
BDE reklamı aşağıdaki gibi yapılandırılır:
Sekizli | Veri türü | Açıklama | Değer | Zorunlu mu? |
---|---|---|---|---|
0 | uint8 |
Sürüm ve işaretler | 0x10 | Zorunlu |
1 - t | Hesap Anahtar Verileri | değişiklik gösterir | Zorunlu | |
t+1 - s | Pil Verileri | değişiklik gösterir | İsteğe bağlı | |
s+1 - var | Rastgele Çözümlenebilir Veriler | değişiklik gösterir | Hesap Anahtarı Listesi boş değilse zorunlu, aksi takdirde Hariç tutulur. |
Tablo 4.2: Rastgele Çözümlenebilir Veriler içeren BDE reklamı
Rastgele Çözümlenebilir Veriler şunları içerir:
Sekizli | Veri türü | Açıklama | Değer | Zorunlu mu? |
---|---|---|---|---|
0 | uint8 |
Alan uzunluğu ve türü 0bLLLLTTTT
|
0bLLLL0110
|
Zorunlu |
1 - var | Şifrelenmiş veriler | değişiklik gösterir | Zorunlu |
Tablo 4.2.1: Rastgele Çözülebilir Veriler
Örneğin, Rastgele Çözümlenebilir Veriler şifrelenmiş bir bağlantı durumu alanı içeriyorsa şifresi çözülmüş sonuç bağlantı durumu alanı olur.
Değişiklik yapılmasını önlemek için, Rastgele Çözülebilir Veriler reklama eklendiğinde yukarıdaki Hesap Anahtar Verileri üzerinde küçük değişiklikler yapılmalıdır. Normalde, hesap anahtarı filtresini oluştururken, hesap anahtarı filtresinin bir takviye değer ile birleştirilmesiyle bir V değeri üretilir. Bunun yerine, Rastgele Çözülebilir Verilerin de reklamı yapılıyorsa V değeri şu şekilde oluşturulmalıdır:
V = concat(account_key, salt, random_resolvable_data)
Hem Pil Verileri hem de Rastgele Çözülebilir Veriler reklamı yapılıyorsa V şu şekilde oluşturulmalıdır:
V = concat(account_key, salt, battery_data, random_resolvable_data)
Kullanılan Hesap Anahtarı
Bağlantı değiştirme hesap tabanlı olduğundan Sağlayıcı, mevcut bağlantının hesap bilgilerini BDE reklamına eklemelidir. Mevcut bağlı cihaz bir Ses Geçişi Arayan ise Sağlayıcı, bu Arayan ile ilişkilendirilen hesap anahtarını alabilir ve bağlantı durumu alanını şifrelemek için bu hesap anahtarını kullanabilir. Bağlı ses kaynağı "Ses Geçişi Arayan" değilse Sağlayıcı, en son kullanılan hesap anahtarını kullanmalıdır.
Sağlayıcı, hesap anahtarı filtresini hesaplamadan önce, hesap anahtarlarının ilk baytını, aşağıdaki kullanım kalıplarından birini içerecek şekilde değiştirmelidir:
- 0b00000100
Bu hesap anahtarı kullanımda değil.
Bu, varsayılan ayardır (Hesap anahtarı konusuna bakın). - 0b00000101
Bu hesap anahtarı, en son kullanılan hesap anahtarıdır.
Bağlantı durumu alanı bu hesap anahtarı tarafından şifrelenir. Mevcut bağlantı durumuyla ilgili hesap anahtarı bilgisi yoktur. Bu, hiçbir cihazın bağlı olmadığı veya bağlı cihazın bir Ses Geçişi Arayan olmadığı anlamına gelebilir. - 0b00000110
Bu hesap anahtarı, kullanımda olan hesap anahtarıdır.
Bağlantı durumu alanı bu hesap anahtarı tarafından şifrelenir ve bağlı mevcut cihaz bu hesap anahtarıyla ilişkilendirilir.
Ses geçişi yükü için şema
Aşağıdaki şekilde, Ses Geçişi yükü şeması gösterilmektedir.

Mesajlar
Bağlantı kurulduğunda Seeker ve Sağlayıcı, Ses Geçişi özelliğini senkronize etmek, bir bağlantı anahtarını tetiklemek, geçiş tercihini ayarlayıp almak, bağlantı durumunu bildirmek ve benzeri işlemler için Mesaj akışını kullanabilir. Aşağıdaki gibi, Ses Geçişi'ne özel bir mesaj grubu ve mesaj kodları oluştururuz.
Mesaj Grubu Adı | Değer |
---|---|
Ses geçişi | 0x07 |
Her bir mesaj koduyla ilgili ek ayrıntılar aşağıdaki bölümlerde açıklanmıştır.
Mesaj Kodu Adı | Değer | Yalnızca çok noktalı | Gönderen | Katılımcı | Şifrele | MAC | EİK |
---|---|---|---|---|---|---|---|
Ses Geçişi özelliğini kullanın | 0x10 | N | Her ikisi de | Her ikisi de 0x11 koduyla | N | H | N |
Ses Geçişi özelliğini bildirme | 0x11 | N | Her ikisi de | Her ikisi de | N | E | E |
Çok noktalı durumu ayarlama | 0x12 | E | Arayan | Sağlayıcı | N | E | E |
Geçiş tercihini ayarlama | 0x20 | E | Arayan | Sağlayıcı | N | E | E |
Geçiş tercihi alma | 0x21 | E | Arayan | Sağlayıcı (0x22 koduyla) | N | H | N |
Bildirim değiştirme tercihi | 0x22 | E | Sağlayıcı | Arayan | N | H | N |
Etkin ses kaynağını değiştirme(bağlı cihaza) | 0x30 | E | Arayan | Sağlayıcı | N | E | E |
Geri dön (bağlantısı kesilen cihaza) | 0x31 | N | Arayan | Sağlayıcı | N | E | E |
Çok noktalı geçiş etkinliğini bildir | 0x32 | E | Sağlayıcı | Arayan | N | H | N |
Bağlantı durumunu alma | 0x33 | E | Arayan | Sağlayıcı (0x34 koduyla) | N | H | N |
Bağlantı durumunu bildir | 0x34 | E | Sağlayıcı | Arayan | E | H | N |
Ses geçişi başlatılan bağlantıyı bildir | 0x40 | N | Arayan | Sağlayıcı | N | E | E |
Hesap anahtarı kullanılırken bunu belirtin | 0x41 | N | Arayan | Sağlayıcı | N | E | E |
Özel verileri gönder | 0x42 | N | Arayan | Sağlayıcı | N | E | E |
Bağlantıyı kesme hedefini ayarlama | 0x43 | E | Arayan | Sağlayıcı | N | E | E |
Tablo 4.3: Ses değiştirme mesajları
Ses Geçişi Mesajlarının MAC Adresi
Mesaj kimlik doğrulaması sağlamak için Arayan'dan Sağlayıcıya gönderilen ek verilerle tüm Ses Geçişi mesajları için bir Mesaj Kimlik Doğrulama Kodu gerekir. MAC içeren bir mesaj alındığında, Arayan'ın, Sağlayıcının mesaja tepki verip vermediğini bilmesi için mesaj onaylanmalıdır.
Mesaj kimlik doğrulaması başarılı olursa Sağlayıcı, mesaj için ACK'yi gönderir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Onay | 0xFF |
1 | Uint8 | EİK | 0x01 |
2 - 3 | uint16 | Ek veri uzunluğu | değişiklik gösterir |
4 | Uint8 | Ses geçişi | 0x07 |
5 | Uint8 | Ses değiştirme mesaj kodu | değişiklik gösterir |
6 - sn | Ek veriler | değişiklik gösterir |
Başarısız olursa Sağlayıcı mesaj için NAK'yi gönderecektir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Onay | 0xFF |
1 | Uint8 | YOK | 0x02 |
2 - 3 | uint16 | Ek veri uzunluğu | 0x0003 |
4 | Uint8 | Hata nedeni | değişiklik gösterir |
5 | Uint8 | Ses geçişi | 0x07 |
6 | Uint8 | Ses değiştirme mesaj kodu | değişiklik gösterir |
Gönderenin sağlayıcı olması durumunda MAC'nin gerekli olmadığını unutmayın.
Ses Geçişi özelliğini kullanın
Ses Geçişi Sağlayıcı ve Arayan, bağlı Hızlı Eşleme Arayan/Sağlayıcı'nın, Ses Geçişi'ni destekleyip desteklemediğini aşağıdaki mesajı kullanarak kontrol edebilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Ses Geçişi özelliğini kullanın | 0x10 |
2 - 3 | uint16 | Ek veri uzunluğu | 0 |
Tablo 4.3.1.0: Ses Geçişi özelliğini alma
Ses Geçişi özelliğini bildirme
Ses Geçişi özelliğimesaj kodunu aldıktan sonra, Ses Geçişi Arayan/Sağlayıcı aşağıdaki işaretlerden biriyle yanıt verir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Ses Geçişi özelliğini bildirme | 0x11 |
2 - 3 | uint16 | Ek veri uzunluğu | Bu, Sağlayıcı tarafından gönderildiyse 4 tarafından gönderildiyse 20 |
4 - 5 | uint16 | Ses geçişi sürüm kodu | Sıfır olmayan bir değer, Ses Geçişi'ni desteklediği anlamına gelir. Mevcut sürüm kodu (güvenlik geliştirmesi içeren) 0x0102'dir. 0x0000 veya 1 saniyede yanıt verilmemesi, Ses Geçişi'nin bu cihazda desteklenmediği anlamına gelir |
6 - 7 | flags | Sağlayıcının ses değiştirme özelliği işaretleri Bu bilgi Seeker tarafından gönderilirse bu iki bayt yoksayılmalıdır. |
değişiklik gösterir Ses değiştirme işlevi işaretleri'ne bakın. |
8 - 15 | Mesaj tek seferlik rastgele Yalnızca Arayan tarafından gönderildiğinde zorunludur |
değişiklik gösterir | |
16 - 23 | Mesaj kimlik doğrulama kodu Yalnızca arayan tarafından gönderildiğinde zorunludur |
değişiklik gösterir |
Tablo 4.3.1.1: Ses Geçişi özelliğini bildirme
Ses değiştirme işlevi işaretleri
Bit 0 (6 sekizli, MSB): Ses geçiş durumu
- Ses geçiş durumu açıksa 1
- 0, aksi takdirde
Bit 1: Çok noktalı yapılandırılabilirlik
- 1, cihaz birden fazla noktayı destekliyorsa ve açık ve kapalı duruma getirilebilirse
- 0, aksi takdirde (çok noktalı desteklenmez veya çok nokta her zaman açıktır)
Bit 2: Çok noktalı geçerli durum
- Birden çok nokta açıksa 1
- 0, aksi takdirde
Bit 3: Kafada algılama
- 1, bu cihaz kafa üzerinde algılamayı destekliyorsa (kafa üstü algılama şu anda kapatılmış olsa bile)
- 0, aksi takdirde
Bit 4: Kafa üzerinde algılama mevcut durumu
- Kafa üzerinde algılama özelliği etkinse 1
- 0, aksi takdirde (kafada algılamayı desteklemez veya kafa üzerinde algılama devre dışıdır)
Diğer tüm bitler ayrılmıştır (varsayılan olarak 0).
Çok noktalı durum ayarla
Ses Geçişi Arayanlar'a, kullanıcılara çok noktalı işlevini açma/kapatma ayarı sunabiliriz. Arayan, aşağıdaki mesajı kullanarak çoklu nokta durumunu Sağlayıcı'ya ayarlar:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Çok noktalı durum ayarla | 0x12 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | Uint8 | Çok noktalı durum | 0: çoklu noktayı kapat 1: çok noktalı anahtarı aç |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.1.2: Çok nokta durumunu ayarlama
Geçiş tercihini ayarla
Ses Geçişi Arayanlar, çok noktanın geçiş tercihini değiştirebilir ve aşağıdaki mesajı kullanarak bunu Sağlayıcı olarak ayarlayabilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Geçiş tercihini ayarla | 0x20 |
2 - 3 | uint16 | Ek veri uzunluğu | 18 |
4 | flags | Geçiş tercihi | değişiklik gösterir Çok noktalı geçiş tercihi işaretini inceleyin |
5 | Gelişmiş geçiş ayarları Bu bayt ayrılmış, varsayılan değer 0'dır |
değişiklik gösterir | |
6 - 13 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
14 - 21 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.2.0: Geçiş tercihini ayarlama
Çok nokta değiştirme tercihi işareti
- Bit 0 (MSB): A2DP ve A2DP (varsayılan 0)
- Bit 1: HFP ve HFP (varsayılan 0)
- Bit 2: A2DP ve HFP (varsayılan 0)
- Bit 3: HFP ve A2DP (varsayılan 1)
- Bit 4 - 7: ayırtıldı
- Yukarıdaki ifade "yeni profil isteği" ve "mevcut etkin profil" karşılaştırmasını gösterir.
- Geçiş yapmamak için 0
- Geçiş için 1
Geçiş tercihini alma
Ses Geçişi Arayanlar, aşağıdaki mesajı kullanarak birden çok noktanın geçiş tercihini Sağlayıcı'dan sorgulayabilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Geçiş yapılandırması alma | 0x21 |
2 - 3 | uint16 | Ek veri uzunluğu | 0 |
Tablo 4.3.2.1: Geçiş tercihini alma
Bildirim değiştirme tercihi
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Bildirim değiştirme tercihi | 0x22 |
2 - 3 | uint16 | Ek veri uzunluğu | 2 |
4 | flags | Tercih işaretlerini değiştirme | değişiklik gösterir Çok noktalı geçiş tercihi işaretini inceleyin |
5 | Gelişmiş geçiş ayarları Bu bayt ayrılmış, varsayılan değer 0 olmalıdır |
değişiklik gösterir |
Tablo 4.3.2.2: Geçiş tercihini bildirme
Etkin ses kaynağını değiştirir (bağlı cihaza)
Ses Geçişi Arayanlar, aşağıdaki mesajı kullanarak çok noktalı sağlayıcıdan bağlı cihazlar arasında etkin ses kaynağını değiştirmesini isteyebilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Etkin ses kaynağını değiştirir (bağlı cihaza) | 0x30 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | flags | Etkin ses kaynağı etkinlik bayraklarını değiştirme | değişiklik gösterir Etkin ses kaynağı etkinliğini değiştirme bölümüne bakın |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.3.0: Etkin ses kaynağını (bağlı cihaza) değiştirin
Etkin ses kaynağı etkinliğini değiştirme
- Bit 0 (MSB): Bu cihaz için 1 anahtar, ikinci bağlı cihaza 0 anahtar
- Bit 1: 1, geçişten sonra cihaz geçişinde oynatmaya devam eder. Aksi takdirde 0. Oynamaya devam etmek, Sağlayıcının AVRCP profili üzerinden Arayan'a bir OYNATMA bildirimi göndermesi anlamına gelir. Önceki durum (taşınmadan önceki) PLAY değilse Sağlayıcı bu işareti yok saymalıdır.
- Bit 2: Dışarıdaki cihazda 1 reddetme SCO'su, aksi takdirde 0
- Bit 3: 1'i açma cihazında Bluetooth bağlantısını kesin, aksi takdirde 0'ı seçin.
- Bit 4 - 7: ayrılmış.
Ses Geçişi Arayanlar, durum bilgilerini her zaman doğru şekilde bilemeyebilirler. Bu nedenle, Arayan kişi zaten etkin cihaz olduğunda Sağlayıcı'nın "bu cihaza geç" mesajı alması mümkündür. Bu durumda, Sağlayıcı, Seeker'da doğru kullanıcı arayüzünü göstermek için hata nedeni olan 0x4 - Yedek cihaz işlemi olan bir NAK gönderebilir.
Geri dön (bağlantısı kesilen cihaza)
Bağlantının değiştirilmesi istenmiyorsa kullanıcılar geçişi geri alabilir ve bazı durumlarda, kesintiyi en aza indirmek için ses bağlantısını geri yüklemek mantıklıdır. Arayan, tekrar geçiş yapmak için aşağıdaki mesajı kullanır:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Geri dön (bağlantısı kesilen cihaza) | 0x31 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | Uint8 | Geri dönme etkinliği | değişken 0x01: eski haline dön 0x02: geri dön ve oynatmaya devam et |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.3.1: Geri dönme (bağlantısı kesilen cihaza)
Çok noktalı Sağlayıcılar söz konusu olduğunda, Sağlayıcı, bağlantı değiştirme işlemi için bir ses kaynağı cihazıyla olan bağlantıyı kesip diğer ses kaynağındaki ses oturumunu duraklatabilir. Örneğin, çok noktalı mikrofonlu kulaklığın bir tablete ve desteklenen 3. bir Ses geçiş cihazına bağlı olduğunu varsayalım. Telefondan gelen bir arama olduğunda kullanıcı tablette video izliyor. Telefon, mikrofonlu kulaklıkta bir bağlantı anahtarını tetikler. Bu geçişin, telefona bağlanmak için 3. cihazın bağlantısını kesmesi gerekir. Aynı zamanda, zil sesini telefondan almak için tabletteki medya oturumunu duraklatmanız gerekir. Kullanıcı aramayı reddederse telefon, mikrofonlu kulaklıktan "geri dönüp çalmaya devam etmesini" isteyebilir. Bu istek alındıktan sonra mikrofonlu kulaklık 3. cihaza yeniden bağlanmalı ve duraklatılan videoyu tablette oynatmaya devam etmelidir.
Birden çok noktalı geçiş etkinliğini bildir
Ses Geçişi Arayan özelliği, kullanıcılara çok noktalı geçiş etkinliğinden haberdar olmalarını sağlamak için kullanıcılara bildirim gösterebilir. Sağlayıcı, bağlı Ses Geçişi Arayanlara geçiş etkinliği hakkında bilgi vermelidir.
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Çok noktalı geçişi bildir Sağlayıcı bunu her anahtarda göndermelidir: Ses Geçişi Arayan - Ses Olmayan Geçiş Arayan, Ses Olmayan Geçiş Arayan - Ses Geçişi Arayan ve Ses Geçişi Arayan - Ses Geçişi Arayan - Ses Geçişi Arayan |
0x32 |
2 - 3 | uint16 | Ek veri uzunluğu | değişiklik gösterir |
4 | Uint8 | Geçiş nedeni | değişiklik gösterir 0x00: Belirtilmemiş 0x01: A2DP akışı 0x02: HFP |
5 | Uint8 | Hedef cihaz | değişiklik gösterir 0x01: bu cihaz 0x02: başka bir bağlı cihaz |
6 - n | Uf8 | Hedef cihaz adı Hedef cihaz, Arayan'ın gönderdiği adı kullanan ve Ses Geçişi Arayan ise adresinin son 2 baytı (uygun değilse) kullanılarak |
değişiklik gösterir |
Tablo 4.3.3.2: Birden çok noktalı geçiş etkinliğini bildirme
Bağlantı durumunu alma
Arayan, geçerli bağlantı durumunu Sağlayıcıdan alabilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Bağlantı durumunu alma | 0x33 |
2 - 3 | uint16 | Ek veri uzunluğu | 0 |
Tablo 4.3.3.3: Bağlantı durumunu alma
Bu mesajı aldıktan sonra Sağlayıcı, 0x34 mesaj koduyla yanıt verecek ve bağlantı durumunu bildirecektir.
Bağlantı durumunu bildir
BDE reklam yükünde tanımlandığı gibi, çok noktalı Sağlayıcılar için bağlantı durumu değişirse (reklam paketinin değiştirilmesi hariç) Sağlayıcı, aynı hesap anahtarını kullanan Bağlı Arayanlara da değişiklik hakkında bilgi vermelidir. Sağlayıcı, bir Ses Geçişi Arayan ve Ses Geçişi Arayan'a bağlı değilse Ses Geçişi Arayan'a, Ses Geçişi Arayan'ın etkin olması halinde Sağlayıcı, bağlı Ses Geçişi Arayan'a da bağlantı durumu hakkında bilgi vermelidir (arayan'ın hesap anahtarını kullanarak).
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Bağlantı durumunu bildir | 0x34 |
2 - 3 | uint16 | Ek veri uzunluğu | değişiklik gösterir |
4 | Uint8 | Etkin cihaz işareti | değişken 0x00: Bu Arayan pasiftir ve aktif cihaz aynı hesap anahtarını ( 0x01) kullanmaktadır: Bu Arayan, etkin cihaz 0x02'dir: Bu Arayan pasif, etkin cihaz ise Ses Geçişi Arayan' değildir. |
5 - n | Şifrelenmiş bağlantı durumu | değişiklik gösterir | |
n+1 - n+8 | İleti tek seferlik rastgele sayısı | değişiklik gösterir |
Tablo 4.3.3.4: Bağlantı durumunu bildirme
Şifrelenmiş bağlantı durumu mesajı
encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)
Bu örnekte:
Anahtar, kullanımdaki hesap anahtarından türetilir. bkz. Rastgele Çözümlenebilir Reklam.
Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
IV: concat(Session_nonce, Message_nonce)
link_status_raw_data = concat(bağlantı_durumu, özel_veriler, bağlı_cihazlar), BDE reklam yükünde tanımlanır. Burada mesaj kodu ve veri uzunluğu bulunduğundan, alan uzunluğu ve türü için baytın dahil edilmemesi gerektiğini unutmayın.
Ses geçişi başlatılan bağlantıyı bildir
Ses Geçişi Sağlayıcıların, bağlantı geçişinin farklı tepkilerin verilmesi için Ses Geçişi tarafından tetiklenip tetiklenmediğini bilmesi gerekebilir (ör. Ses Geçişi etkinlikleri için ses sinyallerini devre dışı bırakma). Arayan, Sağlayıcı'ya bu bağlantının Ses Geçişi'nden başlatılan bir bağlantı olduğunu bildirmek için bir mesaj gönderir.
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Ses geçişi başlatılan bağlantıyı bildir | 0x40 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | Uint8 | Ses geçişi başlatma bağlantı göstergesi | değişiklik gösterir 0: Bu bağlantı, 1 Ses anahtarı tarafından tetiklenmedi: Bu, Ses geçişi tarafından başlatılan bir bağlantıydı |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.4.0: Ses geçişi başlatılan bağlantıyı bildirme
Hesap anahtarı kullanılırken belirtin
Arayan'da birden fazla hesap anahtarı (ör. birden çok kullanıcı) Sağlayıcı ile ilişkilendirilmişse Arayan, hangi hesap anahtarının kullanılmakta olduğunu belirtmek için aşağıdaki mesajı kullanır.
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Hesap anahtarı kullanılırken belirtin | 0x41 |
2 - 3 | uint16 | Ek veri uzunluğu | 22 |
4 - 9 | Uf8 | Kullanılan dize | UTF8 ("kullanımda") |
10 - 17 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
18 - 25 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.4.1: Kullanımdaki hesap anahtarını belirtin
Sağlayıcı, bu mesajı aldıktan sonra mesaj kimlik doğrulama kodunu doğrulayarak hangi hesap anahtarının kullanılmakta olduğunu bilir.
Özel veri gönder
Etkin Ses Geçişi Arayan, ses akışıyla ilgili bilgileri (ör. ses kullanımı) özel veri baytı olarak kapsayabilir ve aşağıdaki mesajı kullanarak Sağlayıcı'ya gönderebilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Özel veri gönder | 0x42 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | Uint8 | Özel veriler | değişiklik gösterir |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.4.2: Özel verileri gönderme
Sağlayıcı, özel verileri aldıktan sonra reklam paketini özel verileri içerecek şekilde günceller. Çok noktalı Sağlayıcı için aynı hesap anahtarını kullanarak bağlantı durumu değişikliğinin başka bir Bağlı Arayana da bildirilmesi gerekir.
Bağlantıyı kesme hedefini ayarla
Çok noktalı mikrofonlu kulaklıklarda, kesilecek tercih edilen bağlantı en son kullanılan bağlantı değilse Ses Geçişi Arayanlar, aşağıdaki mesajı kullanarak Sağlayıcı'ya hangi cihazın kesileceğini söyleyebilir:
Sekizli | Veri Türü | Açıklama | Değer |
---|---|---|---|
0 | Uint8 | Ses geçişi | 0x07 |
1 | Uint8 | Bağlantıyı kesme hedefini ayarla | 0x43 |
2 - 3 | uint16 | Ek veri uzunluğu | 17 |
4 | Uint8 | Bırakılacak bağlı cihazı hedefle | 1'e değişir: bu cihaz |
5 - 12 | İleti tek seferlik rastgele sayısı | değişiklik gösterir | |
13 - 20 | İleti kimlik doğrulama kodu | değişiklik gösterir |
Tablo 4.3.4.3: Bağlantı kesme hedefini ayarlama
Referans Uygulama
Referans uygulaması için Yakındaki yerleştirilmiş SDK kitaplığı'na bakın