Bilgisayarım Dururken Kime Lazım Kumanda!

   Bir süredir evdeki uydu alıcısı, dvd player v.b. cihazları tek bir kutuda toplama planları yapıyorum, Home Theater PC (nam-ı değer HTPC). Veee dün bu planımın ilk adımını attım… Belki küçük; ama önemli bir adım, siparişini verdiğim USB-UIRT (USB Universal Infrared Receiver/Transmitter, USB Evrensel KızılÖtesi Alıcı/Verici) elime ulaştı.

USB-UIRT (USB Universal Infrared Receiver/Transmitter, USB Evrensel KızılÖtesi Alıcı/Verici)

   Bu şekilde evdeki mevcut kumandalarımı kullanarak HTPC’ye (ya da IR alıcıyı bağlayacağım herhangi bir pc’ye) komut gönderebileceğim, benzer şekilde IR verici özelliği sayesinde de IR üzerinden kontrol edilebilen cihazlarımı kumanda edebileceğim.

   Windows 7 x64 yüklü bir sistem üzerine bağladığım USB-UIRT cihazıma ait sürücüleri ürünün destek sitesinden indirip kurduktan sonra sıra ilk testlere geldi. Şanslıyım ki üreticiler C# üzerinden uygulama geliştirilebilmesi adına bir kütüphane ve örnek kod paylaşacak kadar naziklerdi. Kütüphane ile ilgili ilk sıkıntı biraz eski olması kaynaklı olarak derlenmek istendiğinde UsbUirtManagedWrapper projesi içerisindeki Controller.cs dosyası 894. satırının derlemeyi engellemesiydi;

USBUIRT_HandleWarning

 

   Bu sıkıntıyı hata veren satırı aşağıdaki gibi değiştirerek kolaylıkla aşabildim;

null == evt ? IntPtr.Zero : evt.SafeWaitHandle.DangerousGetHandle(), 

   Bu işlem ardında kodunuz derlenebilir olacaktır; fakat rehavete kapılmak yok, bu tüm dertlerin bittiği anlamına gelmiyor. Uygulamayı çalıştırmayı denediğinizde ise aşağıdaki hata ile karşılaşacaksınız;

Proje varsayılan ayarlarla derlendiğinde uygulama hata vererek çalışmayacaktır

 

UUIRTDRV Example Program…

===========================

An exception was thrown: System.TypeInitializationException: ‘UsbUirt.Controller’ tür başlatıcısı özel durum döndürdü. —> System.ApplicationException: Unable to read UsbUirt driver version —> System.BadImageFormatException: Geçersiz biçimdeki bir program yüklenmek istendi. (HRESULT özel durum döndürdü: 0x8007000B)

   konum: UsbUirt.Controller.UUIRTGetDrvInfo(UInt32& drvVersion)

   konum: UsbUirt.Controller..cctor() D:\Fatih\Downloads\usbuirt\api_example_cod

e\UsbUirt_rev1\UsbUirt\UsbUirt Managed Wrapper\Controller.cs içinde: satır 47

   — İç özel durum yığını izlemesinin sonu —

   konum: UsbUirt.Controller..cctor() D:\Fatih\Downloads\usbuirt\api_example_cod

e\UsbUirt_rev1\UsbUirt\UsbUirt Managed Wrapper\Controller.cs içinde: satır 56

   — İç özel durum yığını izlemesinin sonu —

   konum: UsbUirt.Controller.get_DriverVersion()

   konum: TestApp.Class1.RunTestApp() D:\Fatih\Downloads\usbuirt\api_example_cod

e\UsbUirt_rev1\UsbUirt\TestApp\TestApp.cs içinde: satır 39    konum: TestApp.Class1.Main(String[] args) D:\Fatih\Downloads\usbuirt\api_example_code\UsbUirt_rev1\UsbUirt\TestApp\TestApp.cs içinde: satır 24

Press return to exit.

    Şanslıyım ki bu da çözümü kolay bir problem (tabi nedenini biliyorsanız); uygulamayı derlediğiniz platformu Any CPU’dan x86’ya çekerek yeniden derlemeniz yeterli olacaktır.

UUIRTDRV

   Uygulamayı çalıştırıp bir kumandadan tuşlara basarak veri göndermeyi denediğimde yukarıdaki ekran görüntüsünde de görüldüğü şekilde cihaz tarafından alınan veri konsola yazdırılmakta.

  Bir sonraki adımda ise bilgisayarımız üzerinden göndermek istediğiniz verilere ait kodları bu yöntemle tespit ederek bir uygulama geliştirip göndermek olacak. Kodları bulabilmek için cihazı öğrenme modunda çalıştırarak bir süre aynı sinyali göndermemiz yeterli olacaktır. Bir kaç saniye süren bu basit işlem sonrasında  yukarıdaki uygulama bize ihtiyacımız olan bilgiyi sunacaktır. Usb-Uirt API’sini biraz dolaşarak bu işlemlerin nasıl yapılabildiğini keşfettikten sonra hem daha görsel bir arayüz sunabilmek hem de öğrenilen IR kodları için C# kodları üretebilmek için kendime aşağıda ekran görüntüsünü bulabileceğiniz basit bir uygulama yaptım;

geliştirdiğim IR kod üretici uygulaması ana ekranı

   Bu uygulama sayesinde arka arkaya pek çok IR kodunu öğrenerek en sonunda da bu IR kodları için istediğim formatta C# kodu üretebiliyorum. IR kodlarını bulduktan sonrası ise daha da kolay. Örnek uygulama üzerinden ihtiyacım olan tüm kodlara ulaşarak aşağıda ekran görüntüsünü bulabileceğiniz IR kumanda uygulamasını WPF ile geliştirdim.

17-11-2011 23-10-39

   İhtiyacı olan IR kodlarını bir xml dosyasından okuyan bu uygulama, aynı anda hem televizyonu hem de uydu alıcısını (ya da siz her neyi istiyorsanız) kumanda edebilmekte. Xml dosyasına sakladığım IR kodları bana uygulamayı yeniden derlemeye gerek olmaksızın farklı farklı cihazları destekleme şansı sunmakta.

    Yakın zamanda bir videosunu çekerek Enterprisecoding video kanalında yayınlamayı düşündüğüm bu uygulama dışında usbsuirt cihazı ile size farklı ve güzel sürprizlerim de olacak.

Info

   Güncelleme, 19 Kasım 2011 : Enterprisecoding Video Kanalında yer alan bu makale hakkındaki görsel anlatımı aşağıda bulabilirsiniz.

Info

   Güncelleme, 31 Aralık 2012 : Makalede paylaştığım uygulamaya dair örnek kodlar GitHub repository‘sinde bulabilirsiniz.

Fatih Boy

Ankara'da yaşayan Fatih, bir kamu kurumunda danışman olarak çalışmaktadır. ALM süreçleri, kurumsal veri yolu sistemleri, kurumsal altyapı ve yazılım geliştirme konularında destek vermektedir. Boş zamanlarında açık kaynak kodlu projeler geliştirmeyi ve bilgisini yazdığı makalelerle paylaşmayı seven Fatih, aynı zamanda Visual C# ve Visual Studio teknolojileri konusundan Microsoft tarafından altı yıl üst üste MVP (En Değerli Profesyonel) ödülüne layık görülmüştür. İş hayatı boyunca masaüstü uygulamaları, web teknolojileri, akıllı istemciler gibi konularda Asp.Net, Php, C#, Java programlama dilleri ve MySql, MsSql ve Oracle gibi veritabanı yönetim yazılımları ile çalışmıştır. İngilizce ve Türkçe olarak yayınlanan makalelerini gerek İngilizce bloğunda, gerekse de Türkçe bloğunda bulabileceğiniz gibi web sitesinden de açık kaynak kodlu geliştirdiği yazılımlarına ulaşabilirsiniz. vCard - Twitter - Facebook - Google+

12 yorum

  1. eSerdaR   •  

    Çok güzel ve orjinal bir paylaşım olmuş teşekkürler… En kısa zamanda bende sipariş vereceğim cihazdan… Teşekkürler.

  2. akif   •  

    Çok yararlı bir paylaşım teşekkür ederim, emeğinize sağlık. Bu tam da aradığım bir ürün gibi görünüyor. Acaba tüm kumanda protollerine uygun mu, her tür kumanda da çalışır mı? ve yolladıkları api kullanışlı mı yani kendimiz arayüz hazırlamadan kumanda tanıtıp kullanabilir miyiz, teşekkür ederim..

    • Fatih Boy   •     Yazar

      USB-Uirt cihazının iki farklı sürümü bulunuyor. Benim kullandığım “USB-UIRT w/additional 56KHz IR Sensor” daha geniş bir yelpazede kumanda tanıyabilmekte. Web sitesinden yazımım başında da görebileceğiniz test uygulamasını indirebilirsiniz; fakat bu konsol uygulaması sizin istediğiniz şekilde bir kullanım için uygun değil. Sizin gelen API’yi kullanarak bir uygulama geliştirmeniz gerekecektir.

  3. Simon   •  

    Hello, I try to use USB-Uirt with VB.net but I have lots of difficulties to send and receive soemthing. could you send me your application in order to I see the programming.

    thans

  4. Ahmet   •  

    Fatih hocam merhaba ben bu usb uirt cihazını matlab üzerinden kontrol etmem gerekli, size sorum şu olacak c# için gerekli usb-uırt kütüphanesini nereden buldunuz ve bunun matlab için olan ayrıca kütüphanesi varmı? Şimdiden teşekkür ederim.

    • fatih   •     Yazar

      Merhaba Ahmet,
      C# kütüphanesini ürünün üreticileri sağladı. Bildiğim kadarı ile matlab için hazır bir kütüphanesi bulunmuyor; fakat üretici ile iletişime geçmekte fayda var. Seni matlab kütüphanesi konusunda yönlendirebilirler.

  5. Süleyman   •  

    Merhaba,USB-UIRT cihaz kendi yazılımı veya sizin uyarlamanız olan yazılımla basit bir uzaktan kumandalı(2 4 GHz) oyuncak arabayı aşağıda isimleri yazılı kablosuz-wireles joypad lerle çalıştırabilirmiyiz? Teşekkkürler…
    1-KONTORLAND PS2/PS3/PC USB 2 4 GHz WİRELESS GAME PAD
    2-LOGITECH F710 KABLOSUZ GAMEPAD
    3-Axcess Android Bluetooth Controller PS3-PC Red

    • fatih   •     Yazar

      Merhaba Süleyman,
      Gamepad’leri C# uygulamalarında kullanmak için hazır kütüphaneler bulunuyor. Özelde bahsettiğin 3 gamepad’i denememiş olmakla birlikte eminim ki standart arayüzleri sayesinden uygulaman içerisinde kullanman mümkün. Basılı tuşu algıladıktan sonrası ise basit; USB-UIRT üzerinden ilgili komutu göndermek.

      Diğer yandan, 2.4 GHz uyumluluğu konusunda elektronikte benden daha yetkin birisine danışmakta fayda var 😉

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir