.NET Micro Framework: USB Fare Kullanımı
Gömülü bir sistemin kullanıcı deneyimini
zenginleştirmek için sisteme fare entegre ederek masaüstü bilgisayarlarının
kullanım kolaylığını yakalayabiliriz. .NET Micro Framework ile USB fare
entegrasyonu yapmamız son derece kolay olacaktır. Örneğimizde mikrodenetleyiciye
bağladığımız USB farenin hareket, buton ve tekerlek değerlerini sorgulayıp debug
mesajı olarak yazdırmayı göreceğiz.
Öngereksinimler
Uygulamayı çalıştıracağınız mikrodenetleyicinin .NET Micro
Framework 4.0 yada 4.1 desteklemesi ve USB Host özelliğinin bulunması gerekiyor.
Örnek kodları GHI Electronics'in USB Host destekleyen cihazlarında
çalıştırabilirsiniz. (USBizi 144, EMX, Embedded Master ve FEZ).
Uygulama Kodları
Visual Studio 2010 ile yeni bir .NET Micro Framework 4.0 Console
Application oluşturduktan sonra, proje referanslarına
GHIElectronics.NETMF.USBHost.dll, GHIElectronics.NETMF.System.dll ve
GHIElectronics.NETMF.Hardware.USBizi.dll kütüpanelerini ekleyelim.
(Mikrodenetleyiciniz .NET MF 4.0 ile çalışıyorsa, proje özelliklerinden Target
Framework ayarını 4.0 olarak değiştirin). Sonrasında Program.cs dosyasına
aşağıda açıkladığım kodları yazalım.
using System;
using System.Threading;
using Microsoft.SPOT;
using GHIElectronics.NETMF.USBHost;
namespace MFUSBMouse
{
public class Program
{
static USBH_Mouse mouse;
public static void Main()
{
//USB Cihazı bağlandığında fırlayacak eventi belirleyelim:
USBHostController.DeviceConnectedEvent
+= new USBH_DeviceConnectionEventHandler(USBHostController_DeviceConnectedEvent);
//Main Thread'i uyutalım:
Thread.Sleep(Timeout.Infinite);
}
//USB Cihaz bağlandığında fırlayacak event:
static void USBHostController_DeviceConnectedEvent(USBH_Device device)
{
if (device.TYPE == USBH_DeviceType.Mouse)
{
//Bağlanan cihaz fareyse Immediate Window'da gösterelim:
Debug.Print("Fare algılandı.");
//Fare cihazını oluşturalım:
mouse = new USBH_Mouse(device);
//Fare durumunun taranacağı thread'in önceliğini ayarlayalım:
mouse.InternalThreadPriority = ThreadPriority.Normal;
//Highest değeri daha sık tarama yapacaktır, fakat diğer thread'lere düşen işlemci
//zamanını düşürecektir.
//Farenin hareket edeceği alanın sınırlarını belirleyelim:
mouse.SetCursorBounds(0, 319, 0, 239);
//İmleç sınırlarını kullanacağınız ekranın çözünürlüğüne göre ayarlayabilirsiniz.
//Varsayılan değerler 0 ile 512 arasındadır.
//İmlecin hızını ayarlayalım:
mouse.Scale(1);
//Fare hareketinde fırlayacak event:
mouse.MouseMove += new USBH_MouseEventHandler(mouse_MouseMove);
//Herhangi bir butona tıklandığında fırlayacak event:
mouse.MouseDown += new USBH_MouseEventHandler(mouse_MouseDown);
//Basılı buton serbest bırakıldığında fırlayacak event:
mouse.MouseUp += new USBH_MouseEventHandler(mouse_MouseUp);
//Fare tekerleri hareket ettiğinde fırlayacak event:
mouse.MouseWheel += new USBH_MouseEventHandler(mouse_MouseWheel);
//Fare bağlantısı kesildiğinde fırlayacak event:
mouse.Disconnected += new USBH_MouseEventHandler(mouse_Disconnected);
}
}
//Fare hareketinde fırlayacak event:
static void mouse_MouseMove(USBH_Mouse sender, USBH_MouseEventArgs args)
{
Debug.Print("Pozisyon: " + sender.Cursor.X + ", " + sender.Cursor.Y + ", " +
"Delta: " + args.DeltaPosition.X.ToString() + ", " + args.DeltaPosition.Y.ToString());
//Cursor X be Y değerleri, farenin yukarıda sınırlarını belirlediğimiz alan üzerindeki
//pozisyon değerlerini döndürür.
//Delta değeri ise, sınırlara bağlı kalmaksızın farenin bir önceki taramadan sonra
//ne kadar hareket ettiğini gösterir.
}
//Herhangi bir butona tıklandığında fırlayacak event:
static void mouse_MouseDown(USBH_Mouse sender, USBH_MouseEventArgs args)
{
Debug.Print("Buton Tıklandı: " + args.ChangedButton);
}
//Basılı buton serbest bırakıldığında fırlayacak event:
static void mouse_MouseUp(USBH_Mouse sender, USBH_MouseEventArgs args)
{
Debug.Print("Buton Serbest: " + args.ChangedButton);
}
//Fare tekerleri hareket ettiğinde fırlayacak event:
static void mouse_MouseWheel(USBH_Mouse sender, USBH_MouseEventArgs args)
{
Debug.Print("Tekerlek: " + args.DeltaPosition.ScrollWheelValue.ToString());
}
//Fare bağlantısı kesildiğinde fırlayacak event:
static void mouse_Disconnected(USBH_Mouse sender, USBH_MouseEventArgs args)
{
Debug.Print("Fare söküldü.");
}
}
}
Debug Zamanı
Uygulamayı çalıştırıp mikrodenetleyicinizin USB portuna fare
bağladığınızda, Visual Studio Immediate Window'da aşağıdaki gibi değerler
görünecektir.
Fare algılandı.
Buton Tıklandı: 0
Buton Serbest: 0
Buton Tıklandı: 1
Buton Serbest: 1
Buton Tıklandı: 2
Buton Serbest: 2
Buton Tıklandı: 3
Buton Serbest: 3
Buton Tıklandı: 4
Buton Serbest: 4
Tekerlek: -5
Tekerlek: 4
Pozisyon: 0, 0, Delta: 0, 0
Pozisyon: 3, 0, Delta: 0, -1
Pozisyon: 10, 1, Delta: 1, 0
Pozisyon: 16, 2, Delta: 6, 1
Pozisyon: 25, 3, Delta: 9, 1
Pozisyon: 27, 3, Delta: 2, 0
Pozisyon: 29, 3, Delta: 2, 0
Pozisyon: 168, 0, Delta: -2, -8
Pozisyon: 167, 0, Delta: -1, -3
Pozisyon: 149, 0, Delta: -2, -5
Pozisyon: 268, 188, Delta: 0, 4
Pozisyon: 269, 193, Delta: 1, 5
Pozisyon: 270, 210, Delta: 0, 3
Pozisyon: 270, 213, Delta: 0, 3
Pozisyon: 270, 217, Delta: 0, 4
Fare söküldü.