Bir HID Device nasıl tasarlanır


01.09.2012
 

Burası sadece bir BLOG olduğu için tüm tasarım ayrıntılarına girmeyeceğim. O zaman zaten okunamayacak kadar karmaşık olur. Kendi HID device ‘ını tasarlamayı isteyen arkadaşlara izlemeleri gereken yol hakkında fikir vermek istiyorum.

1. Uc (microcontroller) tarafında size hazır HID araçları sunan bir çözüm seçin. Burası yani seçeceğiniz donanım katmanı özellikle bilgisayarınızın sağlığı açısından önemli. Her bilgisayarda sadece bir tane olan ana USB karargahını (main USB HUB) yakarsanız her şey bir anda biter. Tamamen koruma sağlayamaz ama yine de denemeler yaparken araya bir external HUB koymanızda büyük fayda olacaktır.

2. HID için öncelikle bir DEVICE DESCRIPTOR ve 2 END POINT DESCRIPTOR dan oluşan bir descriptor tablosu tanımlamanız gerekiyor. Bunun için internette yüzlerce örnek bulabilirsiniz. Burada hata yaparsanız çok sorun olmaz. Çok büyük ihtimalle “cihaz tanımamadı” veya “cihaz olması gerektiği gibi çalışmıyor” diye bir hata alırsınız. Ama descriptor tablolarındaki tüm parametreler doğru olmalı. Basit gibi görünür ama çok fazla detay olması sebebiyle düşünerek hazırlanmalı.

3. HID sınıfı içinde her bir cihaz için (Mouse, Klavye, joystick vs) sınıflar tanımlanmıştır. Cihaz bağlandığında bilgisayar ayrıca bir sürücüye ihtiyaç duymadan cihazın bağlantısını sağlar. Yani mesela tüm USB mouselarda sağ tuş bilgisayara aynı kodu gönderir. Cihazınızın sınıfını tanıtırken karışıklığa sebep olmamak için bu sınıfların listesini okuyup öğrenmeniz lazım. Yani yanlışlıkla özgün sınıf değil Mouse sınıfını kullanırsanız, bilgisayar tarafında ortalık karışacaktır.

4. HID haberleşme bir Interrupt haberleşmedir. Yani gönderilen ve alınan her bir paket bir interrupt oluşturur. Dolayısı ile doğru dürüst Interrup rutinleri yazabilecek durumda olmanız lazım. Dolayısı ile seçtiğiniz programlama diline hakim olmanız gerekiyor.

5. HID haberleşmesinde enpointler üzerinden 64 bytelık küçük paketler gönderilip alınır. Bu paketler içinde gidip gelecek olan veri aslında çoğu uygulama için yeterlidir. Eğer özgün chaz sınıfı oluşturdu iseniz, bu paketleri istediğiniz gibi düzenleyebilirsiniz. Ancak mesela bir Mouse yapmaya çalışıyorsanız, o cihaza ait tüm paket yapılarını ve eventları öğrenmeniz gerekir.

Yine de çok gerilmeyin. Ben yılların yazılımcısı ve elektronikçisi olmama rağmen ilk LED’i mi HID üzerinden yakıp söndürebilmek için 1 ay uğraştım.

 

USB.ORG HID sayfası.

HID Tasarımı ile ilgili başka bir sayfa

Yorum Bırakın...







Kybele Yazılım / Kybele Teknoloji
Ar-Ge - Yazılım Geliştirme - Donanım Tasarımı
www.kybelesoft.com - kybele@kybelesoft.com - +90 312 343 42 62