Cihazlar için kullanılabilen baş izleme insan arayüzü cihazı (HID) protokolü Android 13 ve sonraki sürümleri çalıştıran bir Android cihaza USB veya ve Android çerçevesi ile uygulamalarına erişim sahibi, sensors çerçevesidir. Bu protokol kontrol etmek için kullanılır Ses sanallaştırıcı efekti (3D ses). Bu sayfada cihaz ve Bluetooth anlamında ana makine (cihaz, baş izleme cihazı anlamına gelir) host ise Android ana makinesi anlamına gelir.
Cihaz üreticilerinin Android cihazlarını desteğin etkinleştirilmesi için yapılandırmaları gerekir: baş takip cihazı HID protokolüyle uyumlu. Ayrıntılı bilgi için hakkında daha fazla bilgi edinmek için Dinamik Sensörler BENİOKU).
Bu sayfada aşağıdaki kaynaklara aşina olduğunuz varsayılır:
Üst düzey yapı
Android çerçevesi, baş takip cihazını bir HID cihazı olarak tanımlar.
Geçerli bir HID tanımlayıcısının tam örneği için bkz. Ek 1: HID Açıklayıcı örneği.
Üst düzeyde, baş takip cihazı, şuna sahip bir uygulama koleksiyonudur:
Sensors
sayfası (0x20
) ve Other: Custom
kullanımı (0xE1
). İçinde
çeşitli veri alanları (girişler) ve özelliklerden (özellikler) oluşur.
Mülkler ve veri alanları
Bu bölümde, bir uygulamadaki özellikler ve veri alanları açıklanmaktadır baş takip cihazı koleksiyonu.
Özellik: Sensör Açıklaması (0x0308
)
Sensör Açıklaması (0x0308
) özelliği, salt okunur bir ASCII (8 bit) dizesidir
özelliği ekleyin:
#AndroidHeadTracker#1.0
Boş sonlandırıcı beklenmemektedir. Diğer bir deyişle, bu mülkün toplam boyutu 23 adet 8 bit karakterden oluşur.
Bu özellik, diğer öğelerle çakışmaları önlemek için özel sensörler.
Özellik: Kalıcı Benzersiz Kimlik (0x0302
)
Kalıcı Benzersiz Kimlik (0x0302
) özelliği, 16'lık salt okunur bir dizidir
öğeler, her biri 8 bit (toplam 128 bit). Boş sonlandırıcı beklenmemektedir. Bu
özelliği isteğe bağlıdır.
Bu özellik, sese entegre edilmiş baş izleme cihazlarına izin verir. cihazları, bağlı oldukları ses cihazına referans göstermek için kullanır. Aşağıdaki şemalar desteklenir.
Bağımsız baş takip cihazı
Kalıcı Benzersiz Kimlik (0x0302
) özelliği yoksa veya "all" değerine ayarlanmışsa
sıfırsa, baş takip cihazı
kalıcı olarak bir cihaza bağlı değildir.
ses cihazıdır ve ayrı olarak kullanılabilir (örneğin, kullanıcının
baş takip cihazını ayrı bir ses cihazıyla manuel olarak ilişkilendirme
Bluetooth MAC adresi kullanarak referans
Sekiz | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Değer | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | B | T | Bluetooth MAC |
Bu şemada, ilk 8 sekizlik 0
, 8 ve 9 sekizlikleri şunları içermelidir
sırasıyla B
ve T
ASCII değerleri ve aşağıdaki 6 sekizlik
bir Bluetooth MAC adresi olarak yorumlanır ve baş takip cihazının
bu MAC adresine sahip tüm ses sistemleri için geçerlidir.
UUID kullanan referans
8 sekizlinin en anlamlı biti (MSB) ayarlandığında (≥0x80
), alan
aşağıdaki gibi bir UUID olarak yorumlanır:
RFC-4122. İlgili içeriği oluşturmak için kullanılan
ses cihazında kayıtlı olan UUID'nin aynısını sağlar
sisteme özgü belirtilmemiş bir mekanizma aracılığıyla,
kullanılan ulaşım türünü ifade eder.
Mülk: Raporlama Durumu (0x0316
)
Raporlama Durumu (0x0316
) özelliği, aşağıdakileri içeren bir okuma/yazma özelliğidir:
HID spesifikasyonunda tanımlandığı gibi standart anlamlar. Ana makine, bunu
özelliğini kullanabilirsiniz. Yalnızca değerleri Hayır
Etkinlikler (0x0840
) ve Tüm Etkinlikler (0x0841
) kullanılır.
Bu alanın ilk değeri Etkinlik Yok olmalı ve hiçbir zaman olmamalıdır cihaz tarafından değiştirildiğinde yalnızca ana makine tarafından değiştirilir.
Mülk: Güç Durumu (0x0319
)
Güç Durumu (0x0319
) özelliği,
HID spesifikasyonunda tanımlandığı gibi standart anlamlar. Ana makine, bunu
özelliğini kullanarak cihazın hangi güç durumunda olması gerektiğini belirtir. Yalnızca
Tam Güç (0x0851
) ve Kapat (0x0855
) değerleri kullanılır.
Bu alanın ilk değeri cihaz tarafından belirlenir ve hiçbir zaman cihaz tarafından değiştirildiğinde yalnızca ana makine tarafından değiştirilir.
Mülk: Rapor Aralığı (0x030E
)
Rapor Aralığı (0x030E
) özelliği,
HID spesifikasyonunda tanımlandığı gibi standart anlamlar. Ana makine, bunu
özelliğini kullanmanızı öneririz.
Birimler saniyedir. Bu değer için geçerli aralık cihaz tarafından belirlenir
ve Fiziksel Min/Max mekanizması kullanılarak açıklandı. En az 50 Hz
raporlama ücreti desteklenmelidir. Önerilen maksimum raporlama ücreti:
100 Hz. Bu nedenle, minimum rapor aralığı en fazla şuna eşit olmalıdır:
20 ms'ye ayarlanır ve 10 ms'den yüksek veya 10 ms'ye eşit olması önerilir.
Veri alanı: Özel Değer 1 (0x0544
)
Özel Değer 1 (0x0544
) alanı,
gerçek baş izleme bilgileridir. Bu, 3 öğeli bir dizidir ve
Bölüm 6.2.2.7'de belirtildiği gibi, fiziksel değerler için normal HID kurallarına
HID spesifikasyonu. Her öğe için geçerli aralık [-÷, ÷] rad'dir. Birimler
her zaman radyandır.
Öğeler şu şekilde yorumlanır: [rx, ry, rz]
. Böylece [rx, ry, rz]
, bir
rotasyon vektörü için
, referans çerçeveden ana çerçeveye dönüştürmeyi temsil eder.
Büyüklük, [0..karma] aralığında olmalıdır.
Referans çerçevesi rastgeledir ancak genellikle sabittir ve sağ elle kullanılıyor. Az miktarda kayma kabul edilebilir. Baş eksenleri şunlardır:
- Sol kulaktan sağa X işareti
- kafanın arkasından buruna kadar Y (geriye doğru)
- boyundan kafanın üst kısmına Z
Veri alanı: Özel Değer 2 (0x0545
)
Özel Değer 2 (0x0545
) alanı,
gerçek baş izleme bilgileridir. Bu, 3 öğeli sabit noktalı bir dizidir,
Fiziksel değerler için normal HID kurallarına göre yorumlanır.
Birimler her zaman radyan/saniyedir.
Öğeler şu şekilde yorumlanır: [vx, vy, vz]
. Böylece [vx, vy, vz]
, bir
rotasyon vektörü için
baş çerçevesinin açısal hızını temsil eden (kendisine göre).
Veri alanı: Özel Değer 3 (0x0546
)
Özel Değer 3 (0x0546
) alanı, izleme için kullanılan bir giriş alanıdır
süreksizlikler olduğunu
gösterdiğini öğrendik. Bu, 8 bitlik skaler bir tam sayıdır
seçin. Bu değer cihaz tarafından artırılmalıdır (kapsamlı şekilde).
referans çerçevesinin değiştirilmesi (ör. bir yön filtresi algoritması
Yönü belirlemek için kullanılan zaman dilimi sıfırlanmış. Bu değer
Fiziksel değerler için normal HID kurallarına göre yorumlanır. Ancak,
veya birimlerin önemi yoktur. Yalnızca proje başlatma belgesine değil,
ana makine değiştirilmiş bir değerdir. Hassasiyet kaybıyla ilgili sayısal sorunları önlemek için
mantıksaldan fiziksel birimlere dönüştürürken,
bu alanda fiziksel minimum, fiziksel maks ve birim üs değerlerini sıfıra ayarlayın.
Rapor yapısı
Mülklerin raporlar halinde gruplandırılması (rapor kimliklerinin atamasına göre) daha esnek hale getirebilirsiniz. Verimlilik için salt okunur özellikleri ayırmanızı öneririz çıkarmanıza yardımcı olur.
Veri alanları için Özel Değer 1, 2 ve 3 alanları aynı olmalıdır belirli bir cihaz için (uygulama koleksiyonu) tek bir raporda yer alması gerekir.
Giriş raporlarını gönder
Cihaz periyodik ve eşzamansız olarak (HID INPUT mesajlarıyla) olmalıdır tüm şu koşullar karşılandığında giriş raporları gönder:
- Güç Durumu özelliği, Tam Güç olarak ayarlanır.
- Raporlama Durumu özelliği, Tüm Etkinlikler olarak ayarlanır.
- Raporlama Aralığı özelliği sıfır dışında bir değerdir.
Raporlama Aralığı özelliği, raporların ne sıklıkta gönderileceğini belirler. Zaman yukarıdaki koşullardan hiçbiri karşılanmadığında, cihazın herhangi bir rapor göndermemesi gerekir.
İleri ve geri uyumluluk
Ana izleyici HID protokolü, bir ana makine ile cihaz kullanan bir cihaz arasında birlikte çalışabilirlik sağlar. farklı sürümleri olabilir. Protokol sürümleri tanımlanmış küçük ve büyük olmak üzere iki sayıya göre gösterilir; bu iki sayı, aşağıdaki bölümlerde açıklanmıştır.
Cihazın desteklediği sürümler,
Sensör Açıklaması (0x0308
) özelliğini kullanın.
Alt sürüm uyumluluğu
Alt sürümdeki değişiklikler, önceki küçük sürümlerle geriye dönük uyumludur başka sürümler de olabilir. Küçüklere yönelik güncellemeler sürümünü içeriyorsa, ana makine ek veri alanlarını ve özelliklerini yoksayar. Örneğin, Protokol sürümü 1.6 kullanan bir cihazın, aşağıdakini destekleyen bir ana makineyle uyumlu olması: protokol sürümü 1.x (1.5 sürümü dahil).
Ana sürüm uyumluluğu
Ana sürümlerde yapılan değişikliklerde geriye dönük uyumlu olmayan değişikliklere izin verilir. Alıcı: Eski ve yeni barındırıcılarla birlikte çalışabilmek için birden çok ana sürümü destekler, cihazlar, raporlarında birden fazla uygulama koleksiyonu belirtebilir tanımlar. Örnek:
const unsigned char ReportDescriptor[] = {
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM,
HID_COLLECTION(HID_APPLICATION),
// Feature report 2 (read-only).
HID_REPORT_ID(2),
// Magic value: "#AndroidHeadTracker#1.5"
HID_USAGE_SENSOR_PROPERTY_SENSOR_DESCRIPTION,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(0xFF),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(23),
HID_FEATURE(HID_CONST_VAR_ABS),
...
HID_END_COLLECTION,
HID_COLLECTION(HID_APPLICATION),
// Feature report 12 (read-only).
HID_REPORT_ID(12),
// Magic value: "#AndroidHeadTracker#2.4"
HID_USAGE_SENSOR_PROPERTY_SENSOR_DESCRIPTION,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(0xFF),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(23),
HID_FEATURE(HID_CONST_VAR_ABS),
...
HID_END_COLLECTION,
};
Bu durumda ana makine, farklı tüm uygulama koleksiyonlarını numaralandırabilir. cihaz tarafından reklamı yapılan sensörlerin Sensör Açıklaması özelliğini her birinin uyguladığı protokol sürümlerini belirler ve ardından ana makinenin desteklediği en son protokol sürümüne sahip olmalıdır. Seçildiğinde, düzenleyen kullanıcı çalışır. (cihazın kullanım ömrü boyunca seçilen tek protokolle) bağlantı.
Ek: HID tanımlayıcısı örneği
Aşağıdaki örnekte tipik bir geçerli HID tanımlayıcısı gösterilmektedir. Şunu kullanır: kullanılan C makroları, HID Sensör Kullanımları (bölüm 4.1).
const unsigned char ReportDescriptor[] = {
HID_USAGE_PAGE_SENSOR,
HID_USAGE_SENSOR_TYPE_OTHER_CUSTOM,
HID_COLLECTION(HID_APPLICATION),
// Feature report 2 (read-only).
HID_REPORT_ID(2),
// Magic value: "#AndroidHeadTracker#1.0"
HID_USAGE_SENSOR_PROPERTY_SENSOR_DESCRIPTION,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(0xFF),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(23),
HID_FEATURE(HID_CONST_VAR_ABS),
// UUID.
HID_USAGE_SENSOR_PROPERTY_PERSISTENT_UNIQUE_ID,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(0xFF),
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(16),
HID_FEATURE(HID_CONST_VAR_ABS),
// Feature report 1 (read/write).
HID_REPORT_ID(1),
// 1-bit on/off reporting state.
HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(1),
HID_REPORT_SIZE(1),
HID_REPORT_COUNT(1),
HID_COLLECTION(HID_LOGICAL),
HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_NO_EVENTS,
HID_USAGE_SENSOR_PROPERTY_REPORTING_STATE_ALL_EVENTS,
HID_FEATURE(HID_DATA_ARR_ABS),
HID_END_COLLECTION,
// 1-bit on/off power state.
HID_USAGE_SENSOR_PROPERTY_POWER_STATE,
HID_LOGICAL_MIN_8(0),
HID_LOGICAL_MAX_8(1),
HID_REPORT_SIZE(1),
HID_REPORT_COUNT(1),
HID_COLLECTION(HID_LOGICAL),
HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D4_POWER_OFF,
HID_USAGE_SENSOR_PROPERTY_POWER_STATE_D0_FULL_POWER,
HID_FEATURE(HID_DATA_ARR_ABS),
HID_END_COLLECTION,
// 6-bit reporting interval, with values [0x00..0x3F] corresponding to [10ms..100ms].
HID_USAGE_SENSOR_PROPERTY_REPORT_INTERVAL,
HID_LOGICAL_MIN_8(0x00),
HID_LOGICAL_MAX_8(0x3F),
HID_PHYSICAL_MIN_8(10),
HID_PHYSICAL_MAX_8(100),
HID_REPORT_SIZE(6),
HID_REPORT_COUNT(1),
HID_USAGE_SENSOR_UNITS_SECOND,
HID_UNIT_EXPONENT(0xD), // 10^-3
HID_FEATURE(HID_DATA_VAR_ABS),
// Input report 1
// Orientation as rotation vector (scaled to [-pi..pi] rad).
HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_1,
HID_LOGICAL_MIN_16(0x01, 0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF, 0x7F), // LOGICAL_MAXIMUM (32767)
HID_PHYSICAL_MIN_32(0x60, 0x4F, 0x46, 0xED), // -314159265
HID_PHYSICAL_MAX_32(0xA1, 0xB0, 0xB9, 0x12), // 314159265
HID_UNIT_EXPONENT(0x08), // 10^-8
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(3),
HID_INPUT(HID_DATA_VAR_ABS),
// Angular velocity as rotation vector (scaled to [-32..32] rad/sec).
HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_2,
HID_LOGICAL_MIN_16(0x01, 0x80), // LOGICAL_MINIMUM (-32767)
HID_LOGICAL_MAX_16(0xFF, 0x7F), // LOGICAL_MAXIMUM (32767)
HID_PHYSICAL_MIN_8(0xE0),
HID_PHYSICAL_MAX_8(0x20),
HID_UNIT_EXPONENT(0x00), // 10^0
HID_REPORT_SIZE(16),
HID_REPORT_COUNT(3),
HID_INPUT(HID_DATA_VAR_ABS),
// Reference frame reset counter.
HID_USAGE_SENSOR_DATA_CUSTOM_VALUE_3,
HID_LOGICAL_MIN_16(0x00, 0x00), // LOGICAL_MINIMUM (0)
HID_LOGICAL_MAX_16(0xFF, 0x00), // LOGICAL_MAXIMUM (255)
HID_PHYSICAL_MIN_8(0x00),
HID_PHYSICAL_MAX_8(0x00),
HID_UNIT_EXPONENT(0x00), // 10^0
HID_REPORT_SIZE(8),
HID_REPORT_COUNT(1),
HID_INPUT(HID_DATA_VAR_ABS),
HID_END_COLLECTION,
};