
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. |
![]() |
Güncelleme, 31 Aralık 2012 : Makalede paylaştığım uygulamaya dair örnek kodlar GitHub repository‘sinde bulabilirsiniz. |
Ç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.
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
please check your e-mail 😉
Is there a chance to review the code?
I’ve already commit the source code to GitHub. Please browse https://github.com/fatihboy/IRRemote for the source code 😉
thank you
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.
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.
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
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 😉