SİTE
İÇİ ARAMA |
|
Blogroll |
|
|
|
Masaüstü İskelet Bluetooth Yazılımı |
|
Gönderiliyor lütfen bekleyin... |
|
|
Mobil cihaz yazılımlarında
bluetooth programlama çok bilinen bir olaydır. .Net Compact Framework, Symbian
API ya da J2ME içinden bu sınıflara ulaşılabilirsiniz. Ben ise bu yazıda masaüstünden
bluetooth programlamayı göstereceğim. Konsept ağ programlama olduğu için söz konusu
kütüphaneler Windows’un user-mode daki API’sı olan Win32API’nin Winsock bölümünün
altında. Son sürüm Windows Platform SDKyı indirdiginiz takdirde gerekli win32api
kütüphane uzantıları geliştirmeye hazır olarak sistem ekleniyor. Fakat bu yazımda
bluetooth programalaya C/C++ ile sistem programlama seviyesinde değil de .Net
seviyesinde bazı hazır kütüphaneleri kullanarak gösteceğim. Bundan sonraki yazılarımda
da bu yazıda kullanılan hazır .net bileşenlerinin nasıl yazıldığını uygulamalı
olarak göstereceğim.
Benim bu yazıda kullancağım component Device Application Developer
MVP ünvanına sahip Peter Foot’un kurduğu www.32feet.net
sitesinden indirebileceğiniz gene Peter Foot’un yazdığı ücretsiz bir kütüphane.
Bluetooth haricinde IrDA desteği de mevcut. Dilerseniz şimdi uygulamaya geçelim.
1. Kullanılan İsim Alanları :
Bazı operasyonlarda arayüzü kitlememek için threadlerden yararlanacağız. Bununla
beraber 32feetden indirdiğimiz
Componentlarla gelen isimalanların programa dahil edilmiş hali aşağıdaki gibidir.
using
InTheHand.IO;
using
InTheHand.Net;
using
InTheHand.Net.Sockets;
using
InTheHand.Net.Bluetooth;
using
System.Threading ; |
2. Global
Değişkenler :
InTheHand.Net.BluetoothAddress[]
adres_dizisi = new BluetoothAddress [1000];
private Thread arama_kanali ;
private Thread gonderme_kanali ; |
InTheHand.Net.BluetoothAddress
sınıfı componet ile beraber gelen bizim için bir bluetooth destekleyen cihazın
bluetooth protokolü adresini sembolize eden ve saklayan bir sınıftır. Arama
operasyonu sonucu bulunan cihazların adreslerini bu dizide tutacağız. Arama_Kanali
ve Gonderme_Kanali ise cihaz arama ve belli bir cihaza dosya gönderme sırasında
işletilecek fonksiyonların yerleştirileceği threadlerdir.
3. Ağ Tarama
:
Asağıdaki fonksiyonlar
herhangibir arayüz ile entegre edilebilir :
private
void button_cihaz_tara ()
{
// Arama butonu pasif hale getirilebilir
….
this.arama_kanali
= new Thread (new
ThreadStart(arama));
this.arama_kanali.Start();
}
private void
arama ()
{
//
Nesnelerin gösterileceği listbox,treeview gibi yapılar burada boşaltılabilir.
InTheHand.Net.Sockets.BluetoothClient
bc = new InTheHand.Net.Sockets.BluetoothClient
();
InTheHand.Net.Sockets.BluetoothDeviceInfo[]
gecici_dizi = bc.DiscoverDevices();
for(int
i = 0 ; i<gecici_dizi.Length;i++)
{
this.adres_dizisi[i]
= gecici_dizi[i].DeviceAddress;
//
gecici_dizi[i].DeviceName ifadesi iterasyondaki cihazın adını
//
string olarak geri döndürür. Bu noktada cihazların listelendiği
//
listbox vb.. yapılara Item eklemesi yapılabilir.
}
//
Arayüzdeki arama butonu tekrar aktifleştirilip kullancıya aramanı bittiğine
dair bir
//
mesaj gösterilebilir.
|
InTheHand.Net.Sockets.BluetoothClient
ile bir nevi ağ tarayıcısı için bir istemci oluşturuyoruz. Daha sonra nTheHand.Net.Sockets.BluetoothDeviceInfo
sınıfı türünden nesneleri tutan bir geçiçi dizi bildiriyoruz. Böylelikle cihaz
bilgilerine bu sınıf sayesinde ulaşacağız. InTheHand.Net.Sockets. sınıfının
DiscoverDevices( ) metodu ile de aramaya başlıyoruz ve geri dönüş değeri olarak
bir diziyi “gecici_dizi”ye atıyoruz. Tarama bittikten sonra tek yapmamız gereken
bir iterasyon ile elde edilen bilgilerin amaca yönelik işlenmesi. InTheHand.Net.Sockets.BluetoothDeviceInfo
sınıfının DeviceAddress özelliği ile cihazın ağ adresini alabiliriz.
4. Dosya Atma :
Bu iş için “OBEX” yani Object Exchange protokolü kullanılmaktadır.
Bileşenimizde bu işleri bizim için halleden sınıflar mevcut. Arayüzü kitlememek
için gene threadli bir yapı kullanılabilir :
private
void
button_dosyaat ()
{
this.gonderme_kanali
= new Thread ( new
ThreadStart(obex));
// Arayüzdeki
dosya gönderme butonu bu noktada pasifleştirilebilir.
this.gonderme_kanali.Start();
}
private void obex ()
{
int
index ;
//
Index değikenine global cihaz dizisinin hangi indisli cihazına dosya atılacağı
bildirilmelidir.
//
listbox_cihazlar adında bir listbox ımz olduğunu varsayalım
index
= this.listBox_cihazlar.SelectedIndex ;
InTheHand.Net.BluetoothAddress
adres = this.adres_dizisi[index];
//
Dosya olarak programla aynı klasörde deneme.txt dosyasını seçelim. Burada
dosya açma diyalogu kullanılır ise daha şık duracaktır.
System.Uri
uri = new Uri("obex://" + adres.ToString()
+ "/" + "deneme.txt");
ObexWebRequest
request = new ObexWebRequest(uri);
request.ReadFile("deneme.txt");
ObexWebResponse
response = (ObexWebResponse)request.GetResponse();
response.Close();
//
Arayüzdeki dosya gönderme butonu bu noktada aktifleştirilebilir.
}
|
“Uniform
Resource Identifier” yani yukardaki Uri sınıfını dosya transferinde
kullanacağız. String oluşturmada web üstünde nasıl ”http:/” şeklinde protokol
belirten bir tanımlama yapılıyor ise burarad “obex:/” şeklinde bir tanımlama
söz konusu. Daha önce soket programlama hatta .net altında WebClient sınıfı
ile uğraşmış olanlar için yukaridaki kodlar hiç yabancı gelmeyecektir.
5. Cihaz
Tanıma :
MAC adreslerinin
belli kısımlara cihaz modellerini belirtmektedir
string
id = adres_dizisi[index].ToString().Substring(0,6);
if(id == "00:E0:" )
MessageBox.Show(“Nokia 6670”) ; |
Bazı cihazların
idlerinin olduğu bir text dosyasını uygulama dosyaları arasında bulabilirsiniz.

Bu görüntü bir
taramadan sonra "MAC Göster" butonuna tıklandıktan sonra elde edilmiştir.
Örnek
uygulamayı indirmek için tıklayınız.
Makale:
Masaüstü İskelet Bluetooth Yazılımı Mobil Programlama Akın Öcal
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|
|