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ı.
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;
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;
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.
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;
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.
İ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.
Güncelleme, 19 Kasım 2011 : Enterprisecoding Video Kanalında yer alan bu makale hakkındaki görsel anlatımı aşağıda bulabilirsiniz. |
Related posts:



November 17, 2011 









Android işletim sistemli cep telefonunuz var, peki Enterprisecoding Android uygulamasını denediniz mi? Enterprisecoding web sitesini her yerden takip edebileceğiniz, offline
Çok güzel ve orjinal bir paylaşım olmuş teşekkürler… En kısa zamanda bende sipariş vereceğim cihazdan… Teşekkürler.
Ç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..
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.