87
1 T.C. KARADENİZ TEKNİK ÜNİVERSİTESİ FEN EDEBİYAT FAKÜLTESİ İSTATİSTİK VE BİLGİSAYAR BİLİMLERİ BÖLÜMÜ BİTİRME ÇALIŞMASI KEMAL OLÇA TRABZON 2010

Cep telefonu ile bilgisayar kontrolü

Embed Size (px)

Citation preview

Page 1: Cep telefonu ile bilgisayar kontrolü

1

T.C.

KARADENİZ TEKNİK ÜNİVERSİTESİ

FEN EDEBİYAT FAKÜLTESİ

İSTATİSTİK VE BİLGİSAYAR BİLİMLERİ BÖLÜMÜ

BİTİRME ÇALIŞMASI

KEMAL OLÇA

TRABZON 2010

Page 2: Cep telefonu ile bilgisayar kontrolü

2

KARADENİZ TEKNİK ÜNİVERSİTESİ

FEN EDEBİYAT FAKÜLTESİ

İSTATİSTİK VE BİLGİSAYAR BİLİMLERİ BÖLÜMÜ

CEP TELEFONU İLE BİLGİSAYAR KONTROLÜ

180702 Kemal OLÇA

Danışman : Yrd. DOÇ.DR. Halil İbrahim ŞAHİN

Üye : Yrd.DOÇ.DR. Türkan E. DALKILIÇ

Üye : Yrd.DOÇ.DR. Zafer KÜÇÜK

Yedek Üye : Yrd.DOÇ.DR. Orhan KESEMEN

TRABZON 2010

Page 3: Cep telefonu ile bilgisayar kontrolü

3

ÖZET

Yapılan bu çalışmada mobil uygulama alanında en yaygın teklonoji olan J2ME (Java

2 Micro Edition) ve Bluetooth teklonojisi incelenmiştir. Ayrıca günümüzdeki mobil

cihazlar ve kablosuz ağ teknolojileri hakkında bilgi verilmiştir. Proje olarak bilgisayarın

fare ve klavyesinin cep telefonu üzerinden Bluetooth aracılığıyla kontrol edilmesi

sağlanmıştır.

Page 4: Cep telefonu ile bilgisayar kontrolü

4

ÖNSÖZ

Günümüzde kablosuz iletişim ve mobil uygulamaların popülaritesi her geçen gün

artmaktadır. Mobil cihazların taşınabilir olması ve kablosuz ağlara bağlanabilme

yeteneğinin de eklenmesi sonucu, günlük hayatımızda ve iş hayatımızda bizlere esneklik

ve güç sağlamaktadır. Bize sağlamış olduğu bu artılardan dolayı çok çeşitli mobil

cihazların üretimine de beraberinde getirmiştir.

J2ME (Java 2 Micro Edition), mobil cihazlara yazılım geliştirmede en çok kullanılan

programlama dillerinden biridir. Java da geliştirilen bir uygulamanın farklı platformlarda

çalışabilme özelliği sayesinde bir çok cep telefonunda çalışabilecek uygulamalar

yazılmasına olanak sağlamaktadır.

Kablosuz iletişimde ise en çok kullanılan teknoloji ise bluetooth teknolojisidir.

Bluetooth, kısa mesafede kablosuz iletişim ortamını bizlere sunmaktadır. Bilgisayar,

klavye, PDA, cep telefonu, yazıcı v.s sayısal giriş/çıkış birimlerinin ara bağlantı olmadan

ana sisteme bağlanmasını sağlayan bir teknolojidir.

Kablosuz teknolojilerin sağladığı avantajlar ve bu alanda yapılan çalışmalar

gelecekte her şeyin mobil teknolojiler üzerinde gerçekleştirileceğini göstermektedir.

Dolayısıyla mobil cihazlara yazılım geliştirme giderek popülerlik kazanmakta ve bu ihtiyaç

gün geçtikçe artmaktadır. Bu yüzden bitirme çalışmamı mobil uygulamalar ve kablosuz

iletişim teknolojisinin bir parçası olan bluetooth üzerinde yapma kararını aldım.

Çalışmalarımın sonucunda mobil uygulama geliştirme ve bluetooth cihazına erişim

kısmında birçok deneyim edindim. Bu nedenle projenin teoride ve uygulamada bir çok

katkısının olduğunu söyleyebilirim.

Çalışmalarım sırasında kaynak sağlayan Yrd. Doç Dr. Hüseyin PEHLİVAN’a,

üniversitedeki eğitim ve öğretim hayatımda destek olan Yrd. Doç Dr. Zafer KÜÇÜK, Yrd.

Doç. Dr. Halil İbrahim ŞAHİN ve diğer bölüm hocalarıma ve hayatım boyunca bana

destek olan aileme teşekkürlerimi sunarım.

Page 5: Cep telefonu ile bilgisayar kontrolü

5

SİMGELER VE KISALTMALAR

API: Application Programming Interface

AWT: Abstract Windowing/Windows Toolkit

CDC: Connected Device Configuration

CLDC: Connected, Limited Device Configuration

CVM: C Virtual Machine

DOM: Document Object Model

FP: Foundation Profile

HTML: Hypertext Markup Language

HTTP: Hypertext Transfer Protocol

IDL: Interface Definition Language

J2SE: Java 2 Standart Edition

J2EE : Java 2 Enterprice Edition

J2ME: Java 2 Micro Edition

JAD: Java Application Descriptor

JAR: Java Archieve

JAXP: Java API for XML Processing

JDBC: Java Database Connectivity

JDK: Java Development Kit

JFC: Java Foundation Classes

JIT: Just In Time

JMF: Java Media Framework

JRE: Java Runtime Environment

JRMP: Java Remote Method Protocol

JVM : Java Virtual Machine

JVMS: Java Virtual Machine Specification

KVM: Kilobyte Virtual Machine

MIDP: Mobile Information Device Profile

ODBC: Open Database Connectivity

OEM: Original Equipment Manufacturer

PBP: Personel Basis Profile

Page 6: Cep telefonu ile bilgisayar kontrolü

6

PDA: Personel Digital Assistant

PDAP: PDA Profile

PP: Personel Profile

RDBMS: Relational Database Management System

RMI: Remote Method Invocation

RMS: Kayıt Yönetim Sistemi

SAX: Simple API for XML

SGML: Standart Generalized Markup Language

SMS: Short Message Service

VM: Virtual Machine

WAP: Wireless Access Protocol

WML: Wireless Markup Language

XML: Extensible Markup Language

Page 7: Cep telefonu ile bilgisayar kontrolü

7

İçindekiler

ÖZET ........................................................................................................................... 1

ÖNSÖZ ........................................................................................................................ 4

SİMGELER VE KISALTMALAR .......................................................................... 5

1. GİRİŞ .................................................................................................................... 11

2. MOBIL TEKNOLOJILER ................................................................................ 12

2.1. PDA (Personal Digital Assistant) ............................................................................................. 12

2.2.Tablet PC’ler ............................................................................................................................. 13

2.3. Mobil Telefonlar ...................................................................................................................... 13

2.4.Mobil İşletim Sistemleri ........................................................................................................... 15

2.4.1.Symbian OS ........................................................................................................................... 15

2.3.2.Windows CE .......................................................................................................................... 16

2.3.3.PalmOS.................................................................................................................................. 17

3.KABLOSUZ AĞ TEKNOLOJİLERİ ................................................................. 19

3.1. Kızılötesi(IrDA) Teknolojisi ...................................................................................................... 19

3.2.Bluetooth Teknolojisi ............................................................................................................... 20

3.2.1.Bluetooth Protokol Katmanları .......................................................................................... 20

3.2.2.Bluetooth’un Temel Özellikleri .......................................................................................... 22

3.2.2.1.Birlikte Çalışabilirlik ......................................................................................................... 22

3.2.2.2.Kısa Mesafe Kablosuz Haberleşme Yapısı ....................................................................... 22

3.2.2.3.Açık Standart Yapısı ........................................................................................................ 22

3.2.2.4.Ses ve Veri Haberleşmesi ................................................................................................ 22

3.2.2.5.Güvenlik .......................................................................................................................... 22

3.2.3.Bluetooth Teknolojik Alt Yapısı .......................................................................................... 23

3.2.3.1.Bluetooth Radyo Güç Sınıfları ......................................................................................... 23

3.2.3.2.Master – Slave Yapısı ...................................................................................................... 23

3.2.3.3.Bluetooth Ağ Yapısı ......................................................................................................... 24

3.2.3.3.1.Piconet ......................................................................................................................... 24

3.2.3.3.1.Scatternet .................................................................................................................... 25

3.3.Wi-Fi (Wireless Fidelity)Teknolojisi /IEEE 802.11 ...................................................................... 26

3.4.GSM ......................................................................................................................................... 27

3.5.GPRS ........................................................................................................................................ 27

Page 8: Cep telefonu ile bilgisayar kontrolü

8

4. J2ME(JAVA 2 MICRO EDITION) PLATFORMU ......................................... 28

4.1. Java Dilinin Kısa Bir Tanıtımı .................................................................................................... 28

4.1.1. Java Mimarisi ....................................................................................................................... 28

4.1.2.Java 2 .................................................................................................................................... 29

4.2.Java 2 Micro Edition (J2ME)...................................................................................................... 31

4.2.Neden J2ME’ye Gerek Duyuyoruz? ........................................................................................... 34

4.3.Konfigürasyon ve Profiller ........................................................................................................ 35

4.4.Konfigürasyonlar ...................................................................................................................... 37

4.4.1.CLDC Konfigürasyonu......................................................................................................... 37

4.4.2.Kilobayt Sanal Makine (KVM) ............................................................................................ 38

4.4.3.Sınıf Dosyalarının Doğrulanması ........................................................................................ 39

4.4.4.CDC Konfigürasyonu .......................................................................................................... 39

4.4.5.C- Sanal Makinesi (CVM) .................................................................................................... 40

4.5.Profiller .................................................................................................................................... 41

4.5.1.MIDP Profili ........................................................................................................................ 41

4.5.2.PDA Profili (PDAP) .............................................................................................................. 42

4.5.3.Kuruluş Profili (Foundation Profile) ................................................................................... 42

4.5.4.Kişisel Profil (Personal Profile) ........................................................................................... 43

4.5.5.RMI Profili .......................................................................................................................... 43

4.5.6.Kişisel Temel Profil (Personal Basis Profile) ....................................................................... 44

4.5.7.Multimedya Profili (Multimedia Profile) ............................................................................ 44

4.5.8.Oyun Profili (Gaming Profile) ............................................................................................. 44

5.MIDP PROGRAMLAMA .................................................................................... 45

5.1.MIDP Uygulaması Geliştirme .................................................................................................... 45

5.1.1.MIDlet Nedir? .................................................................................................................... 45

5.1.2.Uygulamanın Derlenmesi .................................................................................................. 47

5.1.3.“Preverifying” İşleminin Gerçekleştirilmesi ....................................................................... 48

5.1.4.Uygulamanın Çalıştırılması ................................................................................................ 49

5.1.5.Uygulamaların JAR Dosyası Haline Getirilmesi .................................................................. 50

5.1.6.MIDlet Takımı Geliştirilmesi ............................................................................................... 51

5.1.7.MIDlet Takımı Tanımlayıcı Dosyası .................................................................................... 51

5.2.MIDP Kullanıcı Arayüz APIleri ................................................................................................... 52

5.2.1.MIDP Ekran Kontrolü ......................................................................................................... 52

Page 9: Cep telefonu ile bilgisayar kontrolü

9

5.2.2.Yüksek Seviyeli Kullanıcı Arayüz API’si ............................................................................... 53

5.2.2.1.Form ............................................................................................................................... 53

5.2.2.2.Alert ................................................................................................................................ 53

5.2.2.3.List .................................................................................................................................. 53

5.2.2.4.Choice Interface .............................................................................................................. 56

5.2.2.5.TextBox ........................................................................................................................... 56

5.2.2.6.Ticker ................................................................................................................................. 57

5.2.2.7.Items ............................................................................................................................... 57

5.2.3.Düşük Seviyeli Kullanıcı Arayüz APIsi ................................................................................. 57

5.2.3.1.Canvas ............................................................................................................................. 57

5.2.3.2.Graphics .......................................................................................................................... 58

5.2.3.3.Images ............................................................................................................................ 58

5.2.3.4.Fonts ............................................................................................................................... 58

5.2.4.Düşük Seviyeli Kullanıcı Arayüzü Örneği ............................................................................ 58

5.3.MIDP’de Kullanıcı Etkileşimlerinin Yönetilmesi ........................................................................ 59

5.3.1.Yüksek Seviyeli Kullanıcı Etkileşimlerinin Yönetilmesi ....................................................... 59

5.3.1.1.ItemStateListener ........................................................................................................... 59

5.3.1.2.Komutlar (Commands).................................................................................................... 59

5.3.1.3.CommandListener .......................................................................................................... 60

5.3.2.Düşük Seviyeli Kullanıcı Etkileşimlerinin Yönetilmesi ........................................................ 60

5.3.3.Etkileşimlerin Yönetildiği Yüksek Seviyeli Kullanıcı Arayüzü Örneği .................................. 60

6.BLUETOOTH STACK VE YAPISI ................................................................... 66

6.1.Bluetooth Stack ........................................................................................................................ 66

6.2.Bluetooth Stack’ın Katmanları .................................................................................................. 66

6.3.Bluetooth Stack Profilleri ......................................................................................................... 67

6.3.1.Generic Access Profili (GAP) .............................................................................................. 68

6.3.2.Service Discovery Application Profile (SDAP) .................................................................... 68

6.3.3. Serial Port Profile .............................................................................................................. 68

7.JAVA VE OBEX ................................................................................................... 69

7.1.OBEX ........................................................................................................................................ 69

7.2.OBEX Object Model .................................................................................................................. 70

7.3.OBEX Oturum Protokolü .......................................................................................................... 70

Page 10: Cep telefonu ile bilgisayar kontrolü

10

7.4.JSR82’deki OBEX API’leri .......................................................................................................... 72

7.4.1.Javax.obex.ClientSession ................................................................................................... 72

7.4.2.Javax.obex.HeaderSet ........................................................................................................ 72

7.4.3.Javax.obex.Operation ........................................................................................................ 73

7.4.4.Javax.obex.ResponseCodes ............................................................................................... 73

7.4.5.javax.obex.ServerRequestHandler..................................................................................... 74

7.4.6.javax.obex.SessionNotifier ................................................................................................ 74

8.PROJE TASARIMI VE GERÇEKLEŞTIRILMESI ........................................ 76

8.1. Proje Hakkında ........................................................................................................................ 76

8.2. Proje Mimarisi ......................................................................................................................... 76

8.3. Uygulamada Kullanılan Classlar ve İşlevleri ............................................................................. 78

8.3.1. Cep Telefonunda Oluşturulan J2ME Uygulaması .............................................................. 78

8.3.1.1.İstemci J2ME Uygulamasının Cep Telefonuna Yüklenmesi ............................................ 80

8.3.2. PC Tarafında Oluşturulan J2SE Uygulaması ...................................................................... 81

8.4. İstemci ve Server Uygulamalarının Çalıştırılması Kullanımı ...................................................... 82

8.4.1.İstemci Cep Telefonu Uygulamasının Çalıştırılması ve Kullanımı ....................................... 82

8.4.2.PC Taraflı Server Uygulamasının Çalıştırılması ve Kullanımı .............................................. 84

9. SONUÇ .................................................................................................................. 86

10. KAYNAKLAR ................................................................................................... 87

Page 11: Cep telefonu ile bilgisayar kontrolü

11

1. GİRİŞ

Bilgisayar veya diğer elektronik cihazlarda veri iletiminde en önemli noktalardan

birisi verinin iletimini gerçekleştirirken kullandığımız elektriksel işaretlerin taşındığı iletim

ortamıdır. Bu iletim ortamı kablo üzerinden sağlanabildiği gibi kablosuz olarak da

gerçekleştirilebilmektedir. Kabloya dayalı uygulamalarda uç sistemler arasında birebir

kablo bağlantısı mevcuttur. Kullanılan kablo tipi mesafeye ve diğer başka şartlara göre

değişebilir. Örneğin, UTP/STP veya fiber optik kablo günümüzde çok kullanılan kablo

türleridir.

Diğer taraftan kablosuz ağ bağlantısı kullanıldığında sistemler arasında herhangi bir

fiziksel kablo bağlantısı olmadan veri alışverişi gerçekleşmektedir. Günümüzde çok

değişik amaçlı kablosuz ağ erişimlerine ihtiyaç duyulmaktadır. Örneğin hiçbir kablo

bağlantısı yapılmadan bir LAN kurulabilir veya bir bilgisayar sistemiyle fare, yazıcı, PDA,

cep telefonu gibi cihazlar kablosuz şekilde birbirine haberleşebilir. Araya kablo

çekilmesinin zor olduğu, maliyetin yüksek olduğu veya izin verilmediği durumlarda iki

sistem arasına noktadan noktaya kablosuz bağlantı yapılabilir.

Kablosuz ağ teknolojilerinin band genişlikleri aynı olmasa da iki yönlü iletişim akla

gelir. Kabloya dayalı sistemlerde olduğu gibi kablosuz sistemler sistemler arasındada veri

aktarımına ek olarak kontrol işaretleri ve onaylama gibi bilgileride aktarmamız gerekir.

Günümüzde kablosuz ağ denildiğinde ilk akla gelen sözcükler WLAN, HiperLAN,

Bluetooth, GSM, WAP, Irda gelmektedir.

Bu iletişim teknikleri ile birlikte bir sıra farklı iletişim teknolojileride geliştirilmiş

durumdadır. Bunların da kendilerine göre avantaj ve dezavantajları vardır. Kullanım

alanına ve amacına göre bu teknolojiler birbirinden farklı özelliklere sahiptir.

Kablosuz teknolojilerin taşınabilir cihazlarda kullanılması da günümüzde çok yaygın

hale gelmiştir. Kullandığımız bu mobil teknojilerden en yaygın olanları ise cep telefonları

ve PDA lardır.

Page 12: Cep telefonu ile bilgisayar kontrolü

12

2. MOBIL TEKNOLOJILER

Mobil teknolojiler denildiği zaman ilk olarak kullanım yaygınlığı nedeniyle temel

fonksiyonlara sahip cep telefonları gelmektedir. Bunun yanında dizüstü bilgisayarlar,

PDA’lar, tablet pc lerde bu kapsama girmektedir.

Gelişen teknolojiyle birlikte taşınabilir cihazlar hızla yetenek kazanıp piyasada talep

görmektedir. Dizüstü bilgisayarlar ile masaüstü bilgisayarlar arasında hız ve işlevsellik

açısından artık pek bir fark kalmamıştır. Cep telefonları ile avuç içi bilgisayarlarda kendi

aralarında yarışır duruma gelmişlerdir. Mobil cihazların işlevsellikleri gün geçtikçe

artmakta ve boyut olarak da küçülmektedirler.

Mobil cihazların kullandıkları enerji miktarına baktığımızda her geçen gün azalmakta

ve yeni pil teknolojileri ile mobil cihazlarımızı, haftalarca belki aylarca kullanabilmemiz

mümkün olabilecektir. Günümüzde mobil cihazların sayesinde her yerden insanlarla

iletişim kurabilir, bilgi alış-verişi yapabilir ve internetin bizlere sunduğu kaynaklardan

sınırsız şekilde faydalanabilmekteyiz.

2.1. PDA (Personal Digital Assistant)

PDA kelimesi ile kez Apple şirketi tarafından üretilen Newton MessagePad cihazı

için kullanılmıştır. PDA'ların yaygınlaşması Palm tarafından 1996'da üretilen PalmPilot'la

birlikte başladı. Palm'in ilk modeli, kısa sürede PDA pazarının en popüler ürünü haline

geldi. Cep bilgisayarlarının ilk örneklerinde; renksiz ekran, sınırlı işlem gücü ve düşük

enerji tüketimleri sayesinde uzun pil ömrü özellikleri öne çıkar. Bu tür cihaz üretiminin

öncülerinden Japon şirketi Casio'yu daha sonra birçok üretici takip etmiştir.

Cep bilgisayarları, masaüstü bilgisayarlar veya diğer birimler ile USB üzerinden

kablolu iletişim yapabilirler. Yeni nesil cihazlar Bluetooth veya wi-fi üzerinden ya da

dahili GSM birimleri sayesinde bu protokol üzerinden kablosuz olarak da iletişim

kurabilmektedir. Bu sayede elektronik posta alma gönderme, web sayfalarını görüntüleme,

fax gönderme gibi işlemleri kolaylıkla gerçeklemektedir.

PDA'ların yaygın olarak kullandıkları işletim sistemlerine bakacak olursak PalmOS,

Windows CE veya Windows Mobile işletim sistemlerini görmekteyiz. Cep

bilgisayarlarında, uygun yazılım kullanarak neredeyse bir masa üstü bilgisayarında

yapılabilen her işi yapabilmek olasıdır. Sıradan bir cep bilgisayarında standart olan

Page 13: Cep telefonu ile bilgisayar kontrolü

13

özellikler; not defteri, kelime işlemci (Pocket Word vb.), hesaplama tablosu (Pocket Excel

vb.), hesap makinesi, çoklu ortam oynatıcı (Windows Media Player vs.), resim gösterici

olarak sıralanabilir.

Şekil 2.1: PDA

2.2.Tablet PC’ler

Tablet PC’ler üzerlerinde LCD ekran barındıran ve PDA’lerdeki kalemlere benzer

kalemlerle giriş yapılabilen taşınabilir bilgisayarlardır. PDA’ler ile dizüstü bilgisayarların

arasında bir konumda bulunmaktadırlar. Hatta bazı dizüstü bilgisayarlar, sahip oldukları

dönebilen ekranları sayesinde hem dizüstü hem de tablet pc olarak kullanılabilmektedir.

Intel’in çabaları sonucunda geçtiğimiz yıl içinde tablet pc’lerin yerini alabileceği planlanan

UMPC’ler (Ultra Mobile Personal Computer) de piyasada yerini almıştır. Microsoft da

paralel olarak Origami Projesi adı altında bu tür cihazlara destek vermektedir.

2.3. Mobil Telefonlar

Mobil telefonlar, kolayca taşınabilen ve geniş kapsama alanına sahip kablosuz

telefon sistemini kullanan bir cihazdır. Mobil telefonlar GSM (Global System for Mobile

Communications) standartını kullanır. Mobil İletişim için Küresel Sistem anlamına

gelmektedir. GSM standartları, hücresel ağ kullanır ve dolaşım sırasında bile hücreler arası

geçiş yapma kabiliyetine sahiptir. Teoride, eğer kapsama alanından çıkmazsanız, cep

telefonu ile tüm dünyayı telefon konuşmasını kesmeden dolaşmak mümkündür.

Mobil Telefon Sistemlerinin aşağıdaki nesilleri vardır:

0G olarak adlandırılan ilk nesil sistemlerde, analog veri akışı kullanılır.

1G olarak adlandırılan ilk nesil sistemlerde, analog veri akışı kullanılır.

Page 14: Cep telefonu ile bilgisayar kontrolü

14

2G olarak adlandırılan ikinci nesil sistemlerde sayısal veri akışı kullanılır. GSM 2G

kategorisine giren ikinci nesil bir sistemdir.

3G olarak adlandırılan üçüncü nesil sistem ile daha hızlı veri transferi ve bant

genişliğinin daha verimli kullanımı mümkün olmuştur.

4G olarak adlandırılan dördüncü nesil sistem ile kapsama alanı başta olmak üzere 3G

ile çözülememiş olan sorunların çözülmesi beklenmektedir.

Türkiye'de, 1G ve 2G teknolojileri yaygın olarak kullanılmakta olup 3G teklonojisi

son 2 yıl içerisinde kullanılmaya başlanmış olup hızla yaygınlaşmaktadır.

Şekil 2.2: Mobil telefonlar

Mobil telefonlar java uygulamalarını koşabilmek için en az 128 KB kalıcı ve 32 KB

kalıcı olmayan hafızaya sahip olmalıdır. Her iki tür bellekte RMS (Record Management

System) adı verilen bir sisteme göre düzenlenmiştir. MIDP 1.0 dan itibaren ve kalıcı

hafızanın içinde kalıcı hafızadan sorumlu bir mekanizma sunulur (RMS). Kayıtlar (kayıtlar

hafızadaki verilerin en küçük birimine verilen addır.) kayıt deposu adı verilen alanlarda

saklanır. Her kayda kendini tanımlayıcı bir kayıt kimliği atanır. Kayıtların tutarlılığından

sistemin yeniden başlatılması, şarj bitmesi ve pil değiştirme durumları da dahil olmak

üzere bu platform sorumludur.

Aynı MIDlet takımındaki uygulamalar birkaç kayıt oluşturabilirler fakat bu

kayıtlara bu takımda bulunan diger MIDletler erişemezler bir uygulamanın çalışması sona

erdiğinde o uygulama ile ilişkili olan kayıtlar da silinir.

javax.microedition.rms paketi kayıt oluşturma, açma, kapama, bir MIDlet takımına

ait tüm kayıtları listeleme, bir kayıt deposu içinde kayıt oluşturma açma kapama silme ve

depo içindeki erişilebilir alan bilgisini alma işlemlerine izin verir.

CLDC (Connected Limited Device Configurations) grubuna giren cihazlarda kalıcı

olmayan bellekten KVM (Kilobyte Virtual Machine) sorumludur. KVM başladığı zaman

sınıf dosyalarını yüklemek ve veri boyutunu tutmak iç yığın alanından bir blok ayırır.

Page 15: Cep telefonu ile bilgisayar kontrolü

15

KVM çok kolay bir algoritma kullanır kendine ayrılmış alanı kullanmayan bir nesnenin

bellek alanını diğer nesnelere ayırabilme yeteneğine sahiptir. Bu algoritma ile ilgili

problem ise parçalanmadır. (fragmentation) Bellekte iki ayrı silme işleminin ardından

açılan 2 blok varsa bunlar bağımsız blok gibi işlem görür buda parçalanmaya yol açar.

Yani boyutu bu iki bloğun her birinden daha büyük yalnız her ikisinin toplamından daha

küçük bir nesne varsa hafızada yeterli yer olmasına rağmen bu nesneye alan tahsisi

yapılamayacaktır.

Son zamanlarda piyasaya çıkan mobil telefonlar, kullanımı son derece yaygınlaşan

hafıza kartlarını desteklemesiyle büyük miktarlarda veri depolayabilme yeteneğine sahip

oldular.

2.4.Mobil İşletim Sistemleri

İşletim sistemi, bilindiği gibi bilgisayar donanımının denetimi ve yönetiminden,

temel sistem işlemlerinden ve uygulama programlarını çalıştırmaktan sorumlu olan bir

sistem yazılımıdır. Mobil teknolojiler de geliştikçe mobil işletim sistemlerine duyulan

ihtiyaç da arttı. Günümüzde en popular olan mobil işletim sistemleri ise Symbian OS,

Windows CE ve PalmOS dur.

2.4.1.Symbian OS

Symbian gelişmiş mobil cihazlar için işletim sistemi geliştirmeye odaklanmış bir

şirkettir. Günümüzde Symbian, mobil cihaz endüstrisinin lider oyuncuları tarafından

yönetilmektedir.

Symbian OS 32-bit, çoklu işlemli bir işletim sistemidir. Çok sık karşılaşılan asenkron

işlemlerin ve uygulamaların birbiri ile etkileşimli olarak çalışması için dizayn edilmiştir.

Örneğin bir telefon görüşmesi kullanıcının e-mail yazma işlemini kesebilir. İstenirse

kullanıcı telefon görüşmesi sırasında randevularına bakabilir veya not alabilir.

İlk zamanlardan bu yana Symbian OS kablosuz iletişim için düşük güç harcayacak

şekilde tasarlanmıştır. Diğer önemli özelliklerini şöyle sıralayabiliriz.

Performans açısından Symbian OS minimum pil kullanımı ve düşük kapasiteli

hafızayı etkin bir şekilde kullanacak şekilde tasarlanmıştır.

Çoklu işlem açısından Telefon ve mesajlaşma en genel bileşenlerdir. Tüm

uygulamalar birbiri ile fark edilmeksizin paralel çalışacak şekilde dizayn edilmiştir.

Page 16: Cep telefonu ile bilgisayar kontrolü

16

Symbian OS, benimsenmiş olan açık standartlar üzerine kurulmuştur.Böylelikle

uygulamaların platformlar arası taşınması kolaylaşır.

Nesne tabanlı yazılım mimarisi

Gömülü yazılımlar için hafıza yönetimi

Çalışma esnasında hafıza ihtiyaçlarının düşüklüğü ve çok küçük çalıştırılabilir

uygulama boyutları

Güvenli haberleşme ve veri depolama için güvenlik mekanizmaları

Unicode karakter seti ile uluslar arası uygulama desteği

2.3.2.Windows CE

Windows CE (Compact Edition), Microsoft tarafından taşınabilir cihazlar için

yazılmış bir işletim sistemidir. Windows CE, küçültülmüş bir Windows değil PDA türü

cihazlar için yazılmış, ayrı bir işletim sistemidir.

Bu yüzden Windows programları Windows CE altında kullanılamazlar. Bunun diğer

bir sebebi de, Windows CE işletim sisteminin çok farklı işlemci mimarilerinde çalışabilir

olmasıdır. Öte yandan, Windows CE için program yazması Windows için program

yazmaya fazlasıyla benzediğinden, bazı yazılımların Windows CE sürümü de mevcuttur.

Windows CE, birçok alanda kullanılabilir:

Pocket PC'ler

Cep telefonları

TV setleri

Benzer elektronik araçlar

Bir programcı için Windows CE'nin en büyük avantajı, önceden tanıdığı Win32

arayüzüne çok benzer bir arayüz sunmasıdır: diyalog pencereleri, registry ve DirectX

Windows CE'de aynı ya da oldukça ufak değişikliklerle kullanılabilir. Windows CE, Word,

Excel, Outlook ve PowerPoint uygulamalarını destekler. Internet Explorer Mobile başta

olmak üzere bazı web tarayıcılarını kullanılabilir, MSN Messenger'ın Windows CE sürümü

de mevcuttur.

Windows CE, aygıt sürücüsü bulunduğu takdirde Wi-fi, Bluetooth, GSM, GPRS,

EDGE, 3G veya VPN gibi sayısız bağlantı desteğine sahiptir . Bir çok çevre birim (USB

diskler gibi) desteklenir .

Page 17: Cep telefonu ile bilgisayar kontrolü

17

2.3.3.PalmOS

PalmOS, PalmSource firması tarafından cep bilgisayarları için tasarlanan bir işletim

sistemidir. PalmOS orijinal olarak US Robotics firmasının çıkardığı Pilot isimli PDA için

tasarlanmıştır. Günümüzde ise Palm adıyla satılan cep bilgisayarların da bu işletim sistemi

kullanılmaktadır.

Page 18: Cep telefonu ile bilgisayar kontrolü

18

Page 19: Cep telefonu ile bilgisayar kontrolü

19

3.KABLOSUZ AĞ TEKNOLOJİLERİ

Bir kablosuz WLAN (Wireless Local Area Network) teknolojisi, radyo teknolojisini

kullanarak, havadan radyo işaretlerinin belirli bir frekans kanalında iletildiği, bir

haberleşme yöntemidir. Kablosuz haberleşme sistemleri çok çeşitlidir. Günümüzde populer

olarak kullanılanlar arasında kızılötesi, bluetooth ve Wi-Fi gelir.

3.1. Kızılötesi(IrDA) Teknolojisi

Irda (Infared Data Associtation), 1993 yılında, aralarında Hewlett Packard ve IBM’in

de bulunduğu yaklaşık 30 firma, kızılötesi ışınlarla veri aktarımını standartlaştırmak için

bir araya geldi. İlk standart kızılötesi ara birimi (SIR), 115,2 Kbps’lik aktarım hızına

sahipti. Daha sonra Fast Infrared Standard (FIR) geliştirildi. FIR ile 4 Mbit/sn’lik aktarım

hızına ulaşıldı. Yeni duyurulan "Very Fast Infrared standardı" (VFIR) ile 16 Mbit/sn’lik

hızlarla veri aktarımı mümkün hale gelmiştir.

IrDA sisteminde verici olarak, dalga boyu 850-900 nm olan ve ışını 30 derecelik

açıyla yayan bir diyot kullanılıyor. Alıcının menzili, teorik olarak 1 metredir. Ancak

kızılötesi ışınlar, normal ışık ve yansıtıcı cisimler gibi etkenlerden kolayca etkilenirler. Bu

nedenle pratikte durum farklıdır. Parlak güneş ışığı altında menzilleri çok kısa, evlerde

kullanılan ışık altında ise menzilleri daha uzundur.

Bağlantı herhangi bir cihaz üzerinden kurulabilir. Aktif halde olduklarını belirtmek

için IrDA arabirimleri, her iki saniyede bir, bir ışık demeti yayınlarlar. Eğer civarda başka

bir IrDA cihazı bulunuyorsa, bu sinyalleri, algılar ve böylece bağlantı kurulur, ilk aşamada

cihazlar birbirlerine kendi özelliklerini bildiren verileri gönderirler.

Daha sonra Tiny Transport protokolü üzerinden asıl veri alışverişi gerçekleşir. Bu

protokolün üzerine farklı üç protokol daha kurulur: Yerel ağ girişi için IrLAN, veri

alışverişi için Infrared Object Exchange Protocol (IrOBEX) seri ve paralel arabirimlerin

oluşturulması için Ir-COMM protokolü kullanılır. Sonuncu protokole mobil internet

erişimi için ihtiyaç duyulur. IrDA özellikle cep telefonu ve PDA pazarında yaşanan

patlamadan sonra popüler oldu. Kızılötesi hem mobil internet erişimi için hem de masaüstü

bilgisayarı ile dizüstü bilgisayarı arasında veri alışverişi için kullanılan bir teknolojidir.

Bunun yanında uzaktan kumandalarda da kullanılmaktadır.

Page 20: Cep telefonu ile bilgisayar kontrolü

20

Bu teknolojinin en büyük avantajı yaygın olarak kullanılmasıdır. Dezavantajlarına

bakacak olursak düşük menzil, arıza riskinin yüksek olması ve konuşma desteğinin

olmaması bu teknolojinin eksiklerindendir.

3.2.Bluetooth Teknolojisi

Bluetooth, bir kablosuz iletişim teknolojisi ve telekomünikasyon standardıdır.

Türkçe’ye “mavi diş” olarak çevrilebilecek Bluetooth adı, 10. yüzyılda yaşamış olan

Viking Kralı Harald Blatand’dan gelmektedir. İngilizler tarafından Blatand’ın İngilizce

karşılığı olan Bluetooth olarak adlandırılan kral, şu anda Norveç, İsveç ve Danimarka

olarak bilinen toplumları o zamanlarda tek bir krallık altında toplamıştı. Bu hareketiyle

ardından gelenlere örnek olmayı başaran Blatand veya Bluetooth, denilmiştir. Günümüzde

ise değişik teknolojik cihazları tek bir çatı altında toplamaya çalışan bir teknoloji standardı

olarak karşımıza çıkmaktadır.

Bluetooth, yaklaşık 10 metrelik bir alan içerisinde faaliyet gösteren bir kısa dalga

radyo teknolojisi olma özelliği taşıyor ve bilgisayar, cep telefonu, avuç içi gibi cihazlara ek

olarak kulaklık veya yazıcı gibi çevre birim aygıtlarının birbirleriyle iletişim kurmasını

sağlıyor. Veri transfer hızı ise 721 kBit/s'yedir. Bu cihazlar arasında herhangi bir kablo

bağlantısına ihtiyaç duyulmaksızın anında iletişim kurulup, veri transferi

gerçekleştirilebilmektedir.

Şekil 3.1: Bluetooth usb dongle

Frekans bandı bakıldığında 2.4 GHz ile 2.48 GHz arasındadır. Bu bandın kullanımı

lisanssız olup endüstriyel, bilimsel ve medikal (ISM) bant olarak adlandırılmaktadır. Kanal

sayısı 1 MHz’lik aralıklarla toplam 79 adet olmakla birlikte bazı ülkelerde 23 adedi

kullanılmaktadır. Çevre gürültülerinden fazla etkilenmeyen bir teknolojidir.

3.2.1.Bluetooth Protokol Katmanları

Bluetooth sistemi, radyo birimi (Radio), link kontrol birimi (Link Controller), link

yönetimi (Link Manager) ve kullanıcı uç cihazı arayüz fonksiyonlarına destek veren bir

birimden oluşmaktadır. Ana bilgisayar kontrol arayüzü (HCI - Host Controller Interface)

ana birimin bluetooth donanımına erişmesi için bir araç vazifesi görmektedir.

Page 21: Cep telefonu ile bilgisayar kontrolü

21

Şekil 3.2: Bluetooth protokolünün katmanları

Radio Frequency (RF) : Dijital veriyi 2.4 GHz’lik analog sinyale çeviren

katmandır.

Baseband : Bluetooth’un dijital kısmıdır. Paketleri oluşturup şifreler, hata düzeltme

işini yönetir. Güvenli bağlantılar için veriyi şifreler ve şifreyi çözer, radyo frekansını

hesaplar ve senkronizasyonu sağlamaktadır.

Link Manager : Bluetooth bağlantılarında fiziksel detayı ele alır. Bağlantı oluşturur,

ne kadar sağlıklı olduğunu görüntüler, komut veya hataya bağlı olarak bağlantıları yok

eder.

Host Controller Interface ( HCI ) : Ana birim ile Bluetooth donanımı arasında bir

arayüzdür. Data komutları bu arayüz üzerinden iletilir. HCI, Baseband ve Link manager

arasında bir komut arayüzü oluştururarak donanım ve kontrol registerlarına erişimi sağlar.

Logical Link Control and Adaptation Protocol (L2CAP) : Üst düzey protokoller

ile baseband servisleri arasında arabirim oluşturur. Büyük paketlerin iletiminde ayırma

(segmentation) ve yeniden birleştirme (reassembly) işlemleri gerçekleştirir

Service Discovery Protocol (SDP) : Uygulamaların, varolan servisler ve

karakteristikleri hakkında bilgi edinmesini sağlar.

RFCOMM : İletim protokolü olup L2CAP protokolünden RS232 seri port ile iletim

sağlar. Eş zamanlı olarak cihazlar arasında 60 adet bağlantı kurabilir.

Page 22: Cep telefonu ile bilgisayar kontrolü

22

3.2.2.Bluetooth’un Temel Özellikleri

3.2.2.1.Birlikte Çalışabilirlik

Bluetooth spesifikasyonlarında farklı üretici firmaların farklı cihazlarının aynı profili

kullandıkları sürece birlikte çalışabilirliği garanti altına alınmıştır. Profiller, Bluetooth

protokol yığınının birlikte çalışabilirlik çözümleri sunmak için nasıl kullanılabileceğini

ortaya koymaktadır. Örneğin, bir farenin bir cep telefonu kulaklığı ile haberleşmesi gerekli

olmadığı için, fare ve kulaklık farklı profilleri esas alarak tasarlanabilir.

3.2.2.2.Kısa Mesafe Kablosuz Haberleşme Yapısı

Günümüzde, bilgi işlem ve haberleşme cihazları arasında sayısal haberleşme

genellikle kablolar vasıtasıyla gerçekleştirilmektedir. Bu kablolar da çeşitli şekillerde,

çeşitli boyutlarda ve çeşitli sayıda pinleri olan konnektörlere bağlanmaktadır. Bu da

kullanıcı için oldukça maliyetli olmaktadır.

Bluetooth teknolojisi ile haberleşecek olan cihazlar, kablosuz olarak bir hava- ara

yüzü vasıtasıyla radyo dalgalarını kullanarak bağlantı kurabilmektedirler. Bu teknoloji

özellikle kısa mesafe (yaklaşık 10 metre) haberleşmesi için tasarlanmıştır. Bunun nedeni,

teknolojiyi küçük, taşınabilir, batarya ile beslenen cihazlar için, çok az güç tüketimi

sayesinde, cazip hale getirmektir.

3.2.2.3.Açık Standart Yapısı

Bluetooth kablosuz haberleşme teknolojisini herkese açık, telif hakkı olmayan bir

teknoloji olarak tanımlamıştır. Bu açık standart yapısını benimsenmesinin nedeni

teknolojinin daha geniş kitleler tarafından kabulünü sağlamaktır.

3.2.2.4.Ses ve Veri Haberleşmesi

Bluetooth kablosuz haberleşme teknolojisi, hem ses hem de veri trafiğini taşıyacak

yapıya sahip, bütün cihazlara bu her iki içeriği de kullanma olanağı veren ideal

teknolojidir.

3.2.2.5.Güvenlik

Bluetooth cihazlarının gizlice dinlenmesi ya da mesajların çıkış noktasının

değiştirilmesi gibi tehlikelerin önüne geçmek amacıyla Bluetooth cihazları bazı güvenlik

özellikleri içermektedir.

Page 23: Cep telefonu ile bilgisayar kontrolü

23

3.2.3.Bluetooth Teknolojik Alt Yapısı

3.2.3.1.Bluetooth Radyo Güç Sınıfları

Bluetooth standartları, üç farklı tipte güç sınıfına müsade etmektedir. Bu güç sınıfları

Bluetooth cihazlarının farklı mesafelerde bağlantı kurmalarına imkan vermektedir. Bu güç

sınıflarının maksimum çıkış güçleri ve mesafeleri aşağıdaki tabloda gösterildiği gibidir.

Güç Sınıfı Maksimum Çıkış

Gücü

Mesafe

Class

1

100 mW (20 dBm) 100m

Class

2

2. 5 mW (4 dBm) 35m

Class

3

1 mW ( 0 dBm) 10m

Tablo 3.1: Bluetooth Radyo Güç Sınıfları

Bluetooth bağlantısı için ayrıca minimum mesafe de söz konusudur. Eğer radyolar

birbirine çok yakın konulurlarsa, bazı alıcılar doyma noktasına gelebilir ve birkaç

bluetooth radyosu kısa mesafadeki hatlarda güvenilir olmayabilir. Bu minimum mesafe

yaklaşık olarak 10 cm’dir.

3.2.3.2.Master – Slave Yapısı

Bluetooth şebekesinde neredeyse tüm birimler özdeştir ve 48 bitlik adres bilgisi

dışında donanım ve yazılımları aynıdır. Bağlantı ilk kurulduğu zaman geçici bir başlangıç

ünitesi tahsis edilmektedir. Bağlantıyı kurmaya başlayan ve trafiği en fazla 7 üniteye kadar

kontrol edebilen bu sistem master adını almaktadır. Her bağlantı yolu şebekesi ise slave

olarak adlandırılmaktadır.

Bluetooth cihazları, her bir paketten sonra yeni bir frekansa atladıkları zaman

mutlaka kullanacakları frekans sırası ile uyuşmak zorundadırlar. Bluetooth cihazları maste

ve slave olmak üzere iki farklı modda çalışabilmektedir. Frekans atlama sırasını belirleyen

taraf ise master’dır. Slave’ler master ile eş zamanlı olarak onun frekans atlama sırasını

takip ederler.

Page 24: Cep telefonu ile bilgisayar kontrolü

24

Her bir Bluetooth cihazının kendine özgü bir bluetooth cihaz adresinin yanında bir de

bluetooth saati bulunmaktadır. Bluetooth spesifikasyonunun temel bant katmanı, bluetooth

cihaz adresi ve bluetooth saatinden frekans atlama sırasını hesaplayan bir algoritma

tanımlamaktadır. Slave’ler master’a bağlandıkları zaman onlara bluetooth cihaz adresi ve

master’ın saati bildirilir. Onlar da bu bilgileri frekans atlama sırasını hesaplamak amacıyla

kullanırlar. Çünkü, bütün slave’ler master’ın saatini ve adresini kullanmaktadırlar ve

master’ın frekans atlama sırasıyla eş zamanlı olarak çalışmaktadırlar.

Aynı zamanda master cihazların ne zaman gönderme yapabileceğini de kontrol

etmektedir. Master, slotları ses veya veri trafiği için tahsis ederek, slave’lere iletim için izin

verir. Data trafik dilimlerinde, slave’ler yalnızca master tarafından yapılan bir gönderime

cevap verme yetkisine sahiptir, onun dışında iletim yapamazlar. Ses trafik dilimlerinde ise,

slave’ler master’a cevap versin veya vermesin düzenli olarak, ayrılmış dilimlerde

gönderim yapmak durumundadırlar.

Master, toplam elde edilebilir bant genişliğinin slave’ler arasında nasıl bölündüğüne,

her bir slave ile ne kadar sıklıkla haberleştiğine bağlı olarak karar verir. Her bir cihazın

alacağı zaman dilimi sayısı, o cihazın veri transfer gereksinimine bağlı olmaktadır.

3.2.3.3.Bluetooth Ağ Yapısı

3.2.3.3.1.Piconet

Bluetooth teknolojisini kullanan cihazlar, ad-hoc biçimiyle bağlantı kurmaktadırlar.

Birbirlerinin kapsama alanı içerisinde bulunan Bluetooth birimleri noktadan noktaya ya da

noktadan çok noktaya bağlantı kurabilirler. İki veya daha fazla bluetooh birimi birbiriyle

bağlantı kurduğunda bunlar bir ağ oluştururlar ve bu ağa piconet adı verilmektedir. Piconet

birbirine bağlı iki birimle (dizüstü bilgisayar ve hücresel telefon gibi) başlar, birbirine

bağlanmış sekiz birime kadar genişleyebilir. Bütün bluetooth cihazları eşdeğer olmalarına

rağmen, piconet oluştururken piconet bağlantısı süresince bluetooth cihazlarından birisi

master, diğer bluetooth cihazları ise slave olarak ağda rol almaktadır.

Page 25: Cep telefonu ile bilgisayar kontrolü

25

Şekil 3.2: Piconet Yapısı

Piconet içerisinde bir slave sadece kendi master’ı ile haberleşebilir. Piconet

içerisindeki tüm birimler master’ın saatini ve Bluetooth adresini kullanarak hesaplanan

aynı frekans atlama sırasını paylaşırlar.

3.2.3.3.1.Scatternet

Birden fazla piconet aynı alanda kesişiyor olabilir. Her bir piconet farklı master’a

sahip olacağı için piconet’lerin frekans atlamaları birbirinden bağımsız olacaktır. Birden

fazla piconet’in birbirine bağlanmasıyla oluşan şebeke yapısına scatternet adı verilir.

Standartlara baktığımızda piconet içerisindeki slave sayısını 7 ile sınırlandırmış olmasına

rağmen, scatternet yapısı kullanılarak ağ içerisindeki cihaz sayısı attırılabilir ve daha geniş

bir kapsama alanı elde edilebilir. Eğer bir bluetooth cihazı birden fazla piconet’e ait ise,

mutlaka zaman-paylaşımlı (time sharing) olmalıdır. Bunun anlamı, bluetooth cihazı birkaç

dilim bir piconet’te birkaç dilim diğer piconet’te harcayacak demektir.

Bluetooth v1.1 standartlarına göre, bir bluetooth cihazı, iki farklı piconet’te slave

olarak rol alabilmektedir fakat, master olarak düşünüldüğünde ise sadece bir piconet’te

görev alma yetkisi verilmiştir.

Şekil 3.3: Scatternet Yapısı

Bir master ya da slave başka bir piconet’in master’ı tarafından çağırılarak (paging) o

piconet’te slave olarak rol alabilir. Aşağıda örnek olarak master M1, master M2’ yi

çağırmakta ve böylece master M2 iki role sahip olmaktadır; birinci piconet’te slave, ikinci

piconet’te master.

Page 26: Cep telefonu ile bilgisayar kontrolü

26

Şekil 3.4: Bir bluetooth master biriminin slave olarak rol alması.

3.3.Wi-Fi (Wireless Fidelity)Teknolojisi /IEEE 802.11

Kablosuz yerel ağ yapıları (Wireless Local Area Networks-WLAN) için geliştirilen

uluslararası bir standart bulunmaktadır. IEEE (Institute of Electrical and Electronic

Engineers) tarafından kablosuz yerel ağlar için geliştirilmiş bir radyo transmisyon

standardıdır. Wi-Fi, Bluetooth teknolojisi gibi 2.4GHz’lik spektrumda çalışır. 100 metre

yarı çap menzilindeki tüm Wi-Fi uyumlu cihazlarla 11Mbps – 54Mbps gibi yüksek

hızlarda veri alışverişi gerçekleştirmektedir. Böylece Wi-Fi kullanılan evlerde, ofislerde ve

mekanlarda kablo karmaşasından kurtulup, kullanıcılara özgürce hareket imkanı

verilmektedir. Wi-Fi uyumlu PDA’ler, kablosuz yerel ağlar üzerinde veri aktarımı için

kullanılan bu teknoloji sayesinde yerel mobil uygulamalarda önemli avantajlar

sağlamaktadır.

Şekil 3.5 Kablosuz Modem Bağlantısı

Page 27: Cep telefonu ile bilgisayar kontrolü

27

3.4.GSM

Gsm (Global System for MObile Communication) 2. nesil teknolojisidir. Ses ve veri

aktarımı için kullanılabilir. Bu sistem Avrupa’da 900Mhz ve 1.8Ghz frekanslarında

kullanılırken Amerika’da 1.9 Ghz frekanslarında kullanılır. Veri aktarım hızı 9.6kbps’a

kadar çıkabilir. Dünya çapında yaygındır. 160 karaktere kadar mesaj yollayıp mesaj alımı

yapılabilir.

3.5.GPRS

GPRS (General Packet Radio Service) bir çok şebekenin kullanıcılarının veri

uygulamalarına erişim sağlayabilmek için kullanmak durumunda olduğu bir teknolojidir.

GPRS, son kullanıcının mobil veri iletişimini, 'devamlı sanal bağlantı' durumunu ekonomik

hale getirerek ve veri alımını ve gönderimini bugünkünden çok daha yüksek hızda

mümkün kılarak önemli ölçüde geliştirir. Veri transferi 115kbps'a kadar çıkabilir. Aynı

zaman da mesaj 160 karakterle sınırlı değildir.

Page 28: Cep telefonu ile bilgisayar kontrolü

28

4. J2ME(JAVA 2 MICRO EDITION) PLATFORMU

4.1. Java Dilinin Kısa Bir Tanıtımı

Java programlama dili bilgisayar dünyasında önemli bir yer teşkil etmektedir. Nesne

tabanlı programlama özelliği, yazılan programın değişikliğe uğraması ya da yeniden

derlenmesi gerekmeden farklı yapıdaki bilgisayar sistemlerinde kullanılması gibi özellikler

Java dilinin popülerliğini sağlayan önemli özelliklerin sadece birkaçıdır. İlk geliştirilme

amacı SUN Microsystem şirketinin içinde ortak bir dil kullanılması olan ve o zamanki adı

OAK olan Java dili, kısa zamanda dünya çapında yoğun olarak kullanıma girmiştir.

Javanın kullanıldığı yerler, basit bir ev bilgisayarlarından, en karmaşık sistem sunuculara

kadar değişen bir yelpazede yer almıştır.

4.1.1. Java Mimarisi

Java mimarisi ilk yayımlandığı günden bu yana pek değişmemiştir. Java derleyicisi

Java programlama dilini “bytecode” kümelerine çevirmektedir. Bytecodelar, “sanal

makina” olarak bilinen soyut hesap makinası komutlarıdır. Java Sanal Makinası (JVM),

Java programını çalıştırabilmek için java kodlarını yorumlar. Java bytecode uygulamaları,

Sun Microsystems tarafından verilmiş belirtimleri (Java Virtual Machine Specification

(JVMS)) izlemek zorundadır.

Java dilinin doğasından gelen en güçlü yönlerinden biri taşınabilirliğidir. Java

programı alınır ve tekrar derlenmesine gerek kalmadan değişik işletim sistemleri üzerinde

çalıştırılabilir. Bu taşınabilirliği pek çok yolla sağlayabilir. Java belirtimleri, tiplerin ve

bytecode’ların altta çalışan işletim sisteminden bağımsız olduğunu garanti ederler.

Java, güvenlik altyapısıyla da bilinmektedir. Java çalışma-zamanı ortamı Java

programlarını “sandbox” içinde çalıştırır. Bu “sandbox”lar programın çalışacağı

bilgisayarın kaynaklarının kısıtlı bir kümesine ulaşırlar. Java programları “sandbox”lar

içine hapsedilirler, böylece kötü programlar programa ulaşamazlar veya programın

çalışacağı bilgisayara zarar veremezler. Bu özellik dağıtık veya web-tabanlı uygulamaların

hem sunucu hem de istemci taraflarında gereklidir.

Java dilini bir diğer önemli özelliği nesneye dayalı olmasıdır. Java’daki nesne

modelinin genişletilmesi oldukça kolaydır. Çoğu nesneye dayalı diller sert, yönetilmesi zor

nesne hiyerarşileri seçerler veya performansı ve çok yönlülüğü arttırmak için tamamen

Page 29: Cep telefonu ile bilgisayar kontrolü

29

dinamik nesne modelleri kullanırlar. Java ise dengeyi sağlamıştır, gerektiği yerde

kullanılan dinamik arayüz modeli ile basit bir sınıf mekanizması sağlar.

Java dili basittir. Java dili eğer başka bir nesneye dayalı programlama diline

aşinaysanız basittir. Java’nın sözdizimi öğrenilmesi kolaydır. Java dilinin sözdizimi C++

ile benzerdir ve diğer programlama dillerinde bulunan yararlı özellikleri içerir.

4.1.2.Java 2

Tüm programlama dilleri ve geliştirme ortamları gibi Java da ilk çıktığı günden bu

yana gelişmiştir. Java’nın ilk çıkışından itibaren pek çok özellik ve yetenek Java’ya

eklenmiştir. Java 1.2 deki ilerlemeler üzerine Sun Microsystems Java’yı yeniden tanımladı

ve Java’da temel değişikler yapmak üzere Java’yı lisansladı. Java 1.2 Java 2 oldu ve JDK

ve JRE versiyonları 1.2 de kaldı. Daha önemlisi Java platformu 3 sürüme ayrıldı.

1. Java 2 Standart Edition (J2SE)

2. Java 2 Enterprise Edition (J2EE)

3. Java 2 Micro Edition (J2ME)

Her sürüm Java tabanlı uygulamaları geliştirmek için Java sanal makinasını ve

çalışma zamanı sınıflarını içeren eksiksiz bir ortam sunar. Üç sürüm de değişik cihazlar

üzerinde çalışabilen uygulamaları hedeflerler. Masaüstü uygulamaları için gerekli kullanıcı

arayüz sınıflarını sunan J2SE kullanılır. Bileşen tabanlı programlamayı vurgulayan J2EE

ise sunucu tabanlı uygulamalarda tercih edilir. Gömülü ve el cihazları içinse hedef

J2ME’dir.

Bir sürümü diğerinden ayıran, her sürümün tanımladığı sınıf kütüphaneleridir.

J2ME’yi J2SE’nin alt kümesi olarak ve J2SE’yi de J2EE’nin alt kümesi olarak

düşünebiliriz. Bytecode’ların gerektirdiği, üç sürümde de bulunan sınıfları sağlayarak Java

bytecode’unu her sürümde çalıştırmak mümkündür. J2ME tabanlı cihazlar J2SE ve

J2EE’nin sağladığı sınıflardan çok daha az sınıfa sahiptir.

Şekil 4.1 de, soldaki yüksek seviyeli kullanıcı platformlarından başlayarak sağdaki

düşük seviyeli kullanıcı platformlarına doğru ilerleyen Java 2 Platform’unun sürümlerini

ve hedef pazarları gösterilmektedir. Temel olarak, beş hedef pazar veya geniş cihaz

kategorileri tanımlanmıştır. Sunucu bilgisayarlar Java 2 Eneterprise Edition,ve kişisel

bilgisayarlar Java 2 Standart Edition ile desteklenmektedir. Java 2 Micro Edition ise

yüksek seviyeli ve düşük seviyeli kullanıcı cihazlarına odaklanan iki kategoriye ayrılmıştır.

Son olarak, Java Kart standartları ise smart kart pazarına odaklanmıştır.

Page 30: Cep telefonu ile bilgisayar kontrolü

30

1. Java 2 Standart Edition

Java 2 Standart Edition, temel Java ortamıdır. Bu ortam, çekirdek Java sınıflarını ve

API’lerini web browserlar üzerinde çalışabilecek uygulamalar da dahil standart istemci-

sunucu uygulamalarını geliştirme ve çalıştırma olanağı sağlar.

• Java 2 SDK (J2SE)

• Java 2 Runtime Environment

• Java Plug-in

• Java Web Start

• Java HotSpot Server Virtual Machine

• Collections Framework

• Java Foundation Classes (JFC)

• Swing Components

• Pluggable Look & Feel

• Accessibility

• Drag and Drop

• Security

• Java IDL

• JDBC

• JavaBeans

• Remote Method Invocation (RMI)

• Java 2D

2. Java 2 Enterprise Edition

Java 2 Enterprise Edition farklı Java API’lerini ve Java olmayan teknolojileri

birleştirir. Genellikle çok katlı ve dağıtık uygulamaları geliştirmek için kullanılır. J2EE

teknolojileri, günümüzün büyük çok katlı, heterojen uygulamalarını birarada sunar. J2EE

sıklıkla orta-katman veya sunucu taraflı teknolojileri tanımlamak için kullanılır. Gerçekte,

J2EE bilgi sistemlerinin tüm katmanlarında kullanılan teknolojileri içerir. JDBC’yi örnek

olarak alalım. JDBC istemci Java appletlerinden, orta katmanlı Java servleti veya

Enterprise Java Bean tarafından verilere ulaşmak için kullanılır.

• Java 2 SDK (J2SE)

• Java 2 Runtime Environment

Page 31: Cep telefonu ile bilgisayar kontrolü

31

• Java Plug-in

• Java Web Start

• Java HotSpot Server Virtual Machine

• Collections Framework

• Java Foundation Classes (JFC)

• Swing Components

• Pluggable Look & Feel

• Accessibility

• Drag and Drop

• Security

• Java IDL

• JDBC

• JavaBeans

• Remote Method Invocation (RMI)

• Java 2D

4.2.Java 2 Micro Edition (J2ME)

Java 2 Micro Edition veya J2ME, Java yazılımlarını elektronik ve gömülü cihazlara

yerleştirebilmek için dizayn edilmiş geliştirme ve çalıştırma ortamıdır. Diğer daha büyük

Java sürümleri gibi, Java 2 Micro Edition’ın amacı ürünler arasındaki uyumluluk, kodun

taşınabilirliği, güvenli ağ yapısı ve ölçeklenebilirliğin arttırılması gibi Java teknolojisinin

özelliklerinin sürdürebilmektir. Hayatta pekçok şeyde olduğu gibi bir boyut herşeye

uymaz. Doğal olarak mainframelerden cep telefonlarına kadar herşeye uyan bir Java

platformu pek pratik olmaz. J2ME Java dilini kişisel bilgi, iletişim ve hesap makinalarına

yerleştirmiştir. Genellikle bu cihazlar geleneksel bilgisayarlardan daha küçük ve daha az

güçlüdürler.

J2ME’nin geliştirilmesine Sun tarafından başlanılmıştır, fakat günümüzde dünyanın

en büyük elektronik ve gömülü cihaz üreticileri tarafından desteklenmektedir. Dünyanın

mobil ve kablosuz teknoloji satıcıları J2ME teknolojisini inceliyorlar veya aktif olarak

katılıyorlar veya yarışan ürünler üzerinde çalışıyorlar. Bu destekleyiciler Sun tarafından

geliştirilen J2ME’yi standartlaştırmak için bir topluluk oluşumu başlattılar. Bu oluşum

Java Community Process olarak adlandırıldı ve J2ME’nin ilerlemesinde önemli rol oynadı.

Page 32: Cep telefonu ile bilgisayar kontrolü

32

J2ME veya diğer Java uygulamalarının çalıştığı platformlara genel olarak “cihaz”

denilir. J2ME için bu cihazlar “küçük cihazlar ” başlığı altında toplanır. Bu cihazları başka

sözcüklerle de ifade edebiliriz: bilgi cihazları, tüketici elektronikleri, gömülü cihazlar gibi.

Bu “küçük cihazların” geniş çeşitlerini tanımlamak önemlidir ve asıl önemli olan bu küçük

cihazların J2ME’nin hedef cihazları olduğudur.

Java’nın J2ME ile küçük cihazlar için programlama dili ve yazılım platformu olarak

yeniden doğumu, yakın gelecekte bilgisayar sistemlerinin sayısını aşacaktır. Genç bir

teknoloji olarak J2ME hala gelişmektedir ve J2ME için temel destek hala büyümektedir.

J2ME kablosuz ve mobil cihazlar için Java olarak bilinir. J2ME teknolojisi pek çok

kablosuz ve mobil cihaz için kullanılsa da J2ME sadece bu ortamlarda kullanılmaz. J2ME

mobil platformlar için önemli bir Java platformu olmasına rağmen mobil platformlar için

tek Java platformu değildir. Ve sadece Java da bir çözüm değildir.

“Mobil” bir cihazın kapasite veya durumunu tanımlar. Mobil cihazlar daha küçüktür

ve bunların kaynakları kısıtlıdır. J2ME mobil cihazlar için önemli bir rol oynasa da

“mobil” deyimi tüm J2ME uygulamalarını kapsamaz. Ayrıca J2ME kablosuz cihazlar

üzerinde de çalışabilir, fakat “kablosuz” deyimi de “mobil” deyimi gibi tüm J2ME

uygulamalarını kapsamaz.

J2ME’nin arkasında yatan yüksek seviyeli düşünce elektronik ve gömülü cihazlar

pazarı için dinamik olarak genişletilebilen, ağ özellikleri fazla cihazlar ve uygulamalar

yaratmak için etraflı bir uygulama geliştirme platformu sağlamaktır.

J2ME’in sınırlı özelliklerin bulunmasının temel sebebi cep telefonları ve mesaj

cihazı gibi bilgisayar sistemlerin kapasitelerin kısıtlı olmasıdır. İlk olarak bu sistemlerin

kısıtlı hafızaları bulunmaktadır. Ayrıca bu sistemlerin işlemcileri basit bir bilgisayarlarla

bile kıyaslanmayacak kadar azdır. Kablosuz cihazların diğer bir farkı basit klavye

özellikleridir. Birçoğunun kullandığı klavye keypad olarak bilinen ve birkaç tuştan oluşan

bir teknolojidir. Bunlara ilaveten, kablosuz cihazların ekranları küçük ve birçoğu ekranı

yalnızca siyah beyazdır.

Kablosuz cihazların bahsi geçen sınırlamaları göz önüne alındığında J2ME’nin neden

diğer sürümlere oranla kısıtlı özellikler taşıdığı daha iyi anlaşılmaktadır. Java’nın kablosuz

cihazlar için ürettiği J2ME sürümü üretilmeden önce Wireless Access Protocol (WAP) ve

i-mode adında iki programlama platformu geliştirilmiştir. Bu teknolojilerde hali hazırda

var olan programlama platformları tamamen yeniden düzenlenmiştir. Örneğin WAP,

Page 33: Cep telefonu ile bilgisayar kontrolü

33

HTML adındaki normal bilgisayarlarda kullanılan dil yerine, Wireless Markup Language

(WML) adında kendi uygulama dilini hazırlamıştır. Benzer çalışmalar “i-mode"

teknolojisinde de yapılmıştır. Tamamen yeniden düzenlenen programlama yapısı, farklı

makinelerde uyum problemine yol açmaktadır. Farklı yapıdaki programlama yapısı ile aynı

programın değişik makinelerde kullanılması mümkün olmamaktadır. Örneğin, WAP

destekli cihazlar normal bilgisayarlar için hazırlanan web sayfalarını ziyaret

edememektedirler. Bu yüzden WAP kullanıcılarının bu sayfaları görebilmeleri için

tamamen yeniden bir sayfanın hazırlanması gerekmektedir. Benzer bir şekilde, i-mode

kullanıcıları sitelere basit socket bağlantıları yapamamakta ve ancak bağlantı kurucu ek

protokoller ile bağlantı işlemlerini yerine getirebilmektedirler. WAP ve i-mode sistemleri

hakkında bahsi geçen farklı programlama yapıları J2ME için geçerli değildir. Java dilinde

yazılan bir program ile socket bağlantısında, Internet sitelerine giriş direkt olarak

sağlanabilmektedir.

Değişik mimarisinin sonucu olarak J2ME, J2SE ve J2EE’ye kıyasla değişik amaçlara

sahiptir. Aşağıda J2ME mimarisinin ana hedefleri özetlenmeye çalışılmıştır:

1. Değişik yetenekteki cihazlara destek sağlar. Bu cihazlar kullanıcı arayüzü, veri depolama,

ağ bağlantısı ve bant genişliği, bellek büyüklüğü, güç tüketimi, güvenlik gereksinimleri

duyarlar.

2. Çok fazla kişiselleştirilmiş hatta sadece tek bir kişi tarfından kullanılan cihazlara

odaklanmıştır.

3. Değişen aralıklardaki ağ kapasitelerinde ve servislerinde ağ bağlantısı sağlar. Ağ bağlantısı

J2ME uzayında yer alan cihazlar için çoğunlukla hayati önem taşır ve yetenekleri, düşük

bant genişliği, kablosuz ve aralıklı bağlantıdan daha sık ve daha yüksek bant genişliğindeki

bağlantılar aralığında değişir.

4. Ağ bağlantısı üzerinden uygulamaların ve verinin alınmasını sağlar. Ağ bağlantısı J2ME

uygulamalarının cihazlara taşınmasında tercih edilen bir yoldur. Uygulamaların cihaz

üzerinde hazırlanabilmesi veya belleğe doğrudan yüklenebilmesi ve çalıştıktan sonra

bellekten atılabilmesi gerekir.

5. Java dilinin çapraz-platform özelliklerini her cihazın eşsiz özelliklerini ve kısıtlarını alarak

genişletir.

6. Hızlıca değişen pazara esneklik ve var olan ve henüz çıkmamış uygulamalara uyum sağlar.

Page 34: Cep telefonu ile bilgisayar kontrolü

34

7. Değişik yetenekteki, özellikteki ve işlem gücündeki cihazlarda uygulamaların

ölçeklenmesini sağlar.

8. Original Equipment Manufacturer (OEM)’dan bağımsız olarak J2ME destekli cihazlarda

uygulama geliştirmeyi sağlar.

Şekil 4.1: JAVA Kavram Haritası

4.2.Neden J2ME’ye Gerek Duyuyoruz?

Java ilk olarak elektronik cihazlar için tasarlandığından doğal olarak aklımıza neden

yeni bir sürüme gerek duyulduğu sorusu geliyor. Neden standart Java’yı küçük cihazlar

için kullanamıyoruz? Daha iyi bir organizasyon için API’leri üç ayrı sürüme ayırma

fikrinin arkasında Sun firmasının gelirlerini arttırma isteği olabilir. Ayrıca Java’yı değişik

sürüme ayırmanın bir gerekliliği de J2ME’nin hedef cihazlarının özel gerekliliklerinin

olduğudur. Bu cihazların geniş uygulama yazılım ortamından farklı yazılım gereksinimleri

var. Genelde yazılımın küçük bir ayak izi olması gerekir. Bazı durumlarda Java

uygulamaları, Java sınıfları ve sanal makine için gereken toplam bellek yüzlerce kilobaytı

bulabiliyor. Ayrıca, elektronik ve gömülü cihazlar için geliştirilmiş yazılım uygulamaları

genellikle tekil yayılma mekanizmasına sahiptirler. Örneğin, PDA cihazlarının masaüstü

Page 35: Cep telefonu ile bilgisayar kontrolü

35

bilgisayarlarından uygulamaları ve veriyi indirmek için “cradle” adı verilen cihazları

vardır. Sonuç olarak, bu cihazların kullanıcı arayüzü, ağ bağlantıları var ve diğer pek çok

gereklilikleri Java API’leriyle karşılanamaz. Cep telefonlarının küçük ekranları için grafik

kullanıcı arayüzü geliştirirken Java’nın kullanıcı arayüzü geliştirmek için kullanılan Swing

paketinin içerdiği bileşenler genişletilmelidir. Fakat bu paket cep telefonunun belleğine

sığmaz. Bir Java ortamının tüm cihazlara uymayacağı gerçeğini J2ME göstermiştir.

Platform bağımsızlığının gerektirdiği aynı prensipler, dil sözdizimi, güvenlik ve

güvenilirlik J2ME de dahil tüm Java sürümlerinde bulunmaktadır.

4.3.Konfigürasyon ve Profiller

J2ME mimarisinin çözmeye çalıştığı en önemli problem farklı kısıtlara, özelliklere,

becerilere sahip çeşitli cihazları nasıl destekleyeceği sorunudur. Birinci çözüm yolu; her

cihaz için gerekli olacak tüm mimari elemanları katarak Java’yı genişletmekti. Fakat bu

bellek sıkıntısı çeken küçük cihazların kullanılamamasına yol açtı. Başka bir çözüm yolu,

bu cihazların ortak özelliklerini içerecek şekilde J2ME’yi kısıtlamaktı. Bu çözüm yoluyla

da güçlü cihazların becerilerini özellikleri, becerileri daha az olan araçlarmış gibi

sınırlandırmak zorunda kalınmıştır.

İki çözümde ihtiyaçları karşılamadığı için J2ME çeşitli konfigürasyon ve profillere

bölünmüştür. Konfigürasyon ve profiller J2ME’nin modüler yapısını oluşturan temel

elemanlardır. Bu iki eleman J2ME destekli pek çok cihaz için uygundurlar.

J2ME konfigürasyonu küçük cihazlar ailesi için minimum Java platformunu

tanımlar. Bu ailenin üyelerinin hepsi aynı bellek ve işlemci gücü gereksinimlerine sahiptir.

Konfigürasyon, uygun sistem seviyesindeki özellikleri, Java dili özelliklerini, mevcut sanal

makine karakteristik ve özelliklerini ve minimum Java kütüphanelerini tanımlar. Yazılım

geliştiriciler belirli bir konfigürasyonu kullanan cihaz ailesi için belirli bir düzeyde sistem

desteğinin olabileceğini umarlar. Ayrıca bir konfigürasyon belirli bir cihaz kategorosi için

minimum özellikler kümesini belirler. Cihaz üreticileri, gerçek bir platform sağlamak

amacıyla belirtilen konfigürasyondaki yetenekleri mevcut, belirli bir cihaz ailesi için

profiller gerçekleştirirler.

Diğer bir J2ME yapı taşı olan profil, belirli sınıftaki cihazlar için uygulama

seviyesinde arayüz tanımlarlar. Profil gerçekleştirimi, bu uygulama seviyesindeki

arayüzleri sağlayan Java sınıf kütüphanelerini içerir. Böylece profil, teorik olarak tüm

işlevsellik ve servisleri belirler. Aslında yaratıcıların niyeti tam olarak bu değildi. J2ME

Page 36: Cep telefonu ile bilgisayar kontrolü

36

yaratıcıları profilin belirli bir cihaz kategorisinin ihtiyaçlarını göstermesi niyetindeydiler.

Düşünce, profilin içinde çok sayıdaki alakasız uygulamayı toplamak değildi.

Asıl amaç, aynı kategorideki tüm cihazlar arasında Java uygulaması geliştirmek için

standart bir platform tanımlayarak “interoperability”i değişik üreticilerin gerçekleştirimleri

arasında uyumluluk garanti etmektir. Örneğin, bir profil mobil telefonlarca kullanılan Kısa

Mesaj Servis (SMS) standardı için ağ iletişimini destekleyebilir. Çünkü SMS standardı

mobil telefonların her yerde olan bir özelliğidir, bu yüzden mobil telefonları hedef alan bu

özelliği konfigürasyonun içine yerleştirmek yerine profilin içinde tanımlamak gerekir.

Profil konfigürasyonun üzerinde gerçekleşir, yani gerçek-dünya uygulamalarına bir

adım daha yakındır. Tipik olarak, profiller konfigürasyonların oluştuğu kütüphanelerden

daha cihaz karakteristiklerine özel kütüphaneler içerirler. Uygulamalar, konfigürasyon ve

profilin üzerine yerleşirler; bu uygulamalar sadece bu iki düşük seviyeli spesifikasyonların

desteklediği sınıf kütüphanelerini kullanırlar. Profillerden biri bir diğerinin üzerine

yerleşebilir. J2ME platformu sadece bir konfigürasyon içerebilir.

J2ME platformu, temel Java kütüphaneleri ve Sanal Makineyle (VM) temel

çalıştırma ortamından, konfigürasyondaki sistem seviyesinde uygulama programlama

arayüzleri kümesinden, ve profillerdeki uygulama seviyesi API’lerden oluşur.

Konfigürasyon üç temel elemanı tanımlar:

1. Java programlama dili özellikleri kümesi

2. Java sanal makine özellikleri kümesi

3. Java kütüphanelerinin ve uygulama programlama arayüzlerinin (APIs)

kümesini

J2ME yaratıcıları uyumsuz platformlar arasındaki parçalanmışlığı önlemek için

sadece iki konfigürasyon tanımlamışlardır.

Konfigürasyonlar arasında içiçe bir ilişki vardır. J2ME mimarisindeki tüm

konfigürasyonlar süper küme altküme sıralanışı içindedirler. Bu kısıtlanmış bir

konfigürasyondan daha zengin özellikli bir konfigürasyona doğru ilerlerken taşınabilirliği

arttırır.

Teorik olarak, bir konfigürasyon J2SE platformu kütüphanelerinin benzeri bir

destek sağlar. Fakat gerçek dünyada bu mümkün olmaz çünkü J2ME masaüstü

bilgisayarlarından daha az güçlü cihazları hedefler. Konfigürasyon spesifikasyonları, J2SE

den uyarlanmış tüm Java sınıflarının aynı veya altkümesi şeklinde orijinal J2SE sınıflarını

Page 37: Cep telefonu ile bilgisayar kontrolü

37

gerektirir. Yani bir sınıf J2SE versiyonunda bulunmayan bir methodu ekleyemez.

Konfigürasyonlar, kendi spesifikasyonlarına sınıflar ekleyebilirler, yine de

konfigürasyonlar mutlaka J2SE’nin bir altkümesi değildirler. Örneğin, her iki

konfigürasyon da cihaz özelliklerine ve kısıtlarına bağlı olarak J2SE’de bulunmayan tarih

sınıflarını tanımlamışlardır.

Konfigürasyonlar JVM(Java Virtual Machine) detaylarını ve belli sınıftaki cihazlarla

kullanılabilecek temel kütüphaneleri tanımlayan belirtimlerdir. Mesela 512KB bellekten az

hafıza alanı ve sınırlı bir ağ bağlantısı olan cihazların konfigürasyonu CLDC olarak

adlandırılır. CLDC’lere örnek olarak bazı cep telefonları ve avuç içi bilgisayarlar (PDA’s)

verilebilir. Daha fazla belleğe ve işlemci gücüne sahip, sürekli ağ bağlantısı olan diğer

konfigürasyon ise CDC olarak adlandırılır (Connected Device Configuration). Bunlara

örnek olarak ise Sharp Zaurus avuç içi bilgisayarları verilebilir.

Profiller uygulama geliştirmeye daha yetkin bir ortam sunabilmek için

konfigürasyonun üzerine tanımlanan kütüphanelerdir. Konfigürasyon java sanal makinesi

(JVM) ve temel kütüphaneleri tanımlarken, bir uygulama geliştirilirken ihtiyaç

duyulabilecek yetkinlikte kütüphaneleri tanımlamaz. Profiller bu alanda uygulamanın

yaşam döngüsü, kullanıcı arabirimi ve kalıcı bellek kütüphanelerini içerirler.

J2ME ortamı sanal makineden, bir konfigürasyondan ve bir veya daha fazla profilden

oluşur. Sanal makine işletim sistemiyle konfigürasyon arasındaki bağlantıyı kurar. Profiller

ise uygulama ile J2ME ortamı arasındaki bağlantıyı sağlar.

4.4.Konfigürasyonlar

4.4.1.CLDC Konfigürasyonu

CLCD (Connected, Limited Device Configuration) daha kısıtlı kaynaklara sahip

cihazlara yönelik bir J2ME konfigürasyonudur. Bu profilin çekirdeğinde bir Java sanal

makinesi olan KVM yatmaktadır. KVM, JVM’nin bazı kısımlarının çıkartılarak JVM’nin

daha önemli ve gerekli parçalarını içerecek şekilde tasarlanmış halidir. Bu konfigürasyona

ait Java paketleri:

1. java.io

2. java.lang

3. java.lang.ref

4. java.util

Page 38: Cep telefonu ile bilgisayar kontrolü

38

5. javax.microedition.io

CLDC spesifikasyonları java.sun.com/products/cldc adresinde bulunabilir.

Kaynakları kısıtlı cihazların aşağıdaki karakteristikleri olmalıdır:

1. Java ortamı için 160Kb tan 512Kb’a kadar toplam bellek.

2. 16-bit veya 32-bit işlemci.

3. Düşük güç tüketimi. Genellikle bu cihazlar pil gücüyle çalışırlar.

4. Belirli bir çeşit ağ bağlantısını desteklemelidirler. Kesikli ve düşük bant

genişliğindeki bağlantılar.

CLDC J2SE’yi baz alır fakat bazı özellikleri dahil etmez. CLDC bir temel üzerine

aşağıdaki özelliklerden gerekli olanları eklenerek oluşturulur:

1. Bu tip cihazlar için fonksiyonellik uygun mudur?

2. Bu fonksiyonellik büyük miktarda binary koda gerek duyar mı veya bellek ve

CPU zamanından çok fazla tüketir mi?

3. Gerektiğinde fonksiyonellik kolaylıkla sağlanabiliyor mu?

4. Bu cihazlar genellikle fonksiyonelliği destekliyorlar mı?

5. Bu kaynakları kısıtlı cihazlarda fonksiyonelliğe bağlı bir güvenlik riskleri var

mı?

CLDC küçük cihazların ihtiyaçlarını karşılamak için J2SE ortamında bulunan bazı

özellikleri çıkarmıştır.

4.4.2.Kilobayt Sanal Makine (KVM)

KVM olabildiğince Java Sanal Makine Spesifikasyonlarına benzerdir. KVM’nin

yetenekleri CLDC spesifikasyonlarıyla tanımlanmıştır. KVM, Java Sanal Makine

Spesifikasyonlarından iyileştirme veya API desteği nedenleriyle CLDC gerektirdiğinde

veya izin verdiğinde farklılaşır. Örneğin, kayan noktalı veya double veri tipileri CLDC

uzayındaki cihazlar tarafından desteklenmez. Sonuç olarak, bu cihazlar üzerinde bu veri

tiplerini gerçekleştirmek çok pahalı olacağından üreticiler tarafından desteklenmemektedir.

Kayan noktalı ve double tipi CLDC tarafından desteklenmediğinden KVM tarafından da

tanınmamaktadır.

KVM cihazlar üzerinde küçük bir yer gerektirir, derleme tercihine ve hedef

platforma bağlı olarak 40Kb ve 80Kb arasında. Bu da KVM nin 128Kb toplam belleğe

sahip cihazlar üzerinde bile çalışabilmesini sağlar.

Page 39: Cep telefonu ile bilgisayar kontrolü

39

KVM, C tabanlı geliştirilmiştir ve %30 dan %80 arasındaki bir hızda çalışan JIT

(just-in-time-compiler) olmayan standart Java Sanal Makinesi kadar tam ve hızlı dizayn

edilmiştir.

KVM’nin hedef cihazlardaki rolü çok önemlidir. Bazı gerçekleştirimlerde, KVM

cihaza dinamik, interaktif, güvenli Java içeriklerini yükleyebilmek ve çalıştırabilmek için

mevcut yazılım yığının üstünde kullanılır. Bazı uygulamalarda ise, KVM Java

programlama dili içindeki, cihazın düşük seviyeli sistem yazılımlarını ve uygulamalarını

da gerçekleştirebilmek için düşük seviyede kullanılabilir.

4.4.3.Sınıf Dosyalarının Doğrulanması

Standart Java sanal makinesi sınıf dosyalarının gerçeklenmesi (class file verification)

çalışma zamanında gerçekleştirilen bir süreçtir.

Bu işlem, sınıfın geçerli bir Java sınıf dosyası olduğundan ve “iyi davranışlı” yani

tanımlanandan farklı bir yere ulaşmayan veya java.* paketini javax.* paketiyle

değiştirmeye çalışmadığından emin olmak için yapılır. Sınıf dosyalarının gerçeklenmesi

Java güvenlik modelinde önemli bir rol oynar.

CLDC cihazları için sınıf dosyalarının doğrulanması yoğun bir kaynak operasyonları

ve önemli miktarda güç, bellek ve binary kod uzayı kullanır. Sonuç olarak KVM sınıf

dosyalarını doğrulanmasını standart Java Sanal Makinesinden farklı tanımlar.

KVM’yi küçültmek için, çoğu sınıf dosyalarının gerçekleştirimi işlemi KVM’nin

hatta cihazın dışında yapılır. Bir sınıf bir cihazın içine yerleştirilmeden önce sınıf

“preverify” tarafından değerlendirilir. “preverify” sınıf dosyasını javac derleyicisi

tarafından oluşur, sınıfın geçerli bir sınıf olduğunu gösteren bytecode’ları ekler. Çalışma

zamanında KVM bu sahaları kontrol eder. Eğer bu sahalar bulunmuyorsa veya doğru bilgi

içermiyorlarsa, sınıfın yüklenmesi durdurulur ve aykırı durum fırlatılır.

4.4.4.CDC Konfigürasyonu

CDC (Connected Device Configuration) daha az kısıtlı kaynaklara sahip cihazlara

yönelik bir J2ME konfigürasyonudur. Bu profilin çekirdeğinde de CVM (Compact Virtual

Machine) sanal makinesi bulunmaktadır. Genellikle CLDC den daha fazla hafıza ve

işlemci gücüne sahip cihazlarda kullanılır. Ayrıca bu cihazlar sürekli ağ bağlantısına

sahiptirler.

Bu konfigürasyona ait Java paketleri:

Page 40: Cep telefonu ile bilgisayar kontrolü

40

1 java.io

2 java.lang

3 java.lang.ref

4 java.lang.reflect

5 java.math, java.net

6 java.security

7 java.security.cert

8 java.text, java.util

9 java.util.jar, java.util.zip

10 javax.microedition.io

4.4.5.C- Sanal Makinesi (CVM)

CVM, Java Sanal Makinesi Spesifikasyonlarına tamamen uysa da, cihazlar ve ağ

uygulamaları için iyileştirildiğinden gerçekleştirimi J2SE sanal makişnesinden tamamen

farklıdır. Garbage collection algoritmaları CVM’nin içine değişik garbage collection

algoritmaları yerleştirilebilsin diye sanal makineden tamamen ayılmıştır. Referans

gerçekleştirimi, sanal makinenin uzun garbage collection periyotlarına oranla daha kısa

garbage collection periyotları kullanır. Garbage collection daha sık ve kısa zaman

aralıklarında çalışır. Garbage collector daha dikkatlidir, garbage collection zamanında tüm

pointerları bilir böylece cpu devirlerinden fazla harcamamış olur. Platformlar arası

taşınabilirliği arttırmak için referans gerçekleştirimi multithreading’i sanal makinenin

içinde tanımlar. Sanal makinenin içinde gerçekleşen threadlere “green threads” denir.

“green thread”lerin kullanımı, multithreading için işletim sistemi bağımlılığı olmadığından

beri sanal makinenin taşınabilir olmasını sağlamıştır. Sınıf dosyası gerçeklenmesi cihazda

gerçekleşir. CDC kullanırken preverification adımı yoktur.

Page 41: Cep telefonu ile bilgisayar kontrolü

41

4.5.Profiller

4.5.1.MIDP Profili

MIDP(Mobile Information Device Profile) mevcut profiller arasında ilk ve en yaygın

olanıdır ve uygulamanın yaşam döngüsü, kullanıcı grafik arabirimleri, iletişim ağı ve kalıcı

depolama ile ilgili kütüphanelerini içerir. MIDP CLDC konfigürasyonunun üzerine oturur

ve günümüzde Motorola, Nokia, Ericsson ve RIM (Blackburry) gibi sector devleri

tarafından desteklenmektedir.

MIDP 1.0 ın desteklediği paketler:

1 java.io

2 java.lang,java.util

3 javax.microedition.io

4 javax.microedition.lcdui

5 javax.microedition.midlet

6 javax.microedition.rms

MIDP 2.0 ın desteklediği paketler:

1 java.io

2 java.lang

3 java.util

4 javax.microedition.io

5 javax.microedition.lcdui

6 javax.microedition.lcdui.game

7 javax.microedition.media

8 javax.microedition.media.control

9 javax.microedition.midlet, javax.microedition.pki

10 javax.microedition.rms

Page 42: Cep telefonu ile bilgisayar kontrolü

42

Bu profil Palm işletim sistemi(Palm OS) üzerinde de çalışabilir. Bu profili kullanan

cihazlar çok fazla kişiselleşmiş cihazlardır. Çoğu zaman bu cihazların kullanıcısı sadece

kullanıcıdır. Bu cihazların kullanıcı arayüzü için küçük ekranları, veri girişi için küçük

klavyeleri ve limitli veri depolama yetenekleri gibi kısıtlı kaynakları vardır.

Şekil 4.2: MIDP Kapasiteli Cihaz Mimarisi:

4.5.2.PDA Profili (PDAP)

Bu profil PDA-stilinde grafiksel kullanıcı arayüzüne ve dokunmatik ekrana sahip

kullanıcı arayüzü ve veri depolama yeteneklerine sahip kişisel dijital ajandaların

gerekliliklerini karşılamak içindir.

4.5.3.Kuruluş Profili (Foundation Profile)

Kuruluş profili grafiksel kullanıcı arayüzü, veri depolama, dağıtık Java ağ bağlantısı

gibi özellikler sağlayan CDC profiline bir taban gibi hizmet eder. Taban profili olarak

işlevlerinin yanında yüksek bant genişliği ve fazla bağlantı kuran cihazlar için zengin bir

ağ desteği sağlar. Bu profil, kişisel bilgisayarlardan daha küçük cihazlar için diğer

profillerle kullanılarak daha zengin bir uygulama ortamı sağlar.

Page 43: Cep telefonu ile bilgisayar kontrolü

43

4.5.4.Kişisel Profil (Personal Profile)

Kişisel profil pek çok kişisel Java API’leri için yeni bir yurttur. Cep bilgisayarlarını

hedef alan kişisel-Java API’leri J2ME mimarisine uyacak şekilde yeniden oluşturuldu.

Kişisel java CDC’nin içinde Kuruluş Profili ve Kişisel Profile ayrıldı. Kişisel profile ek

olarak JavaPhone ve JavaTV API’leri eklendi.

CDC tabanlı bazı profiller ve ilişkileri:

Şekil 4.3: CDC tabanlı bazı profiller ve ilişkileri:

4.5.5.RMI Profili

RMI profili CDC uzayındaki uygulamalar için dağıtık bir destek sağlar. Bu profil

uzak metod çağırımlarının parametrelerine ve dönüş değerlerine bir altyapı sağlar. Kablo

protokolü olan JPMP (Java Remote Method Protocol) desteklenmelidir. Aşağıdaki paketler

RMI profilinin içinde yer almaz:

• java.rmi.server.disableHttp

• java.rmi.activation.port

• java.rmi.loader.packagePrefix

• java.rmi.registry.packagePrefix

• java.rmi.server.packagePrefix

Page 44: Cep telefonu ile bilgisayar kontrolü

44

4.5.6.Kişisel Temel Profil (Personal Basis Profile)

Bu profil CDC konfigürasyonunda ve kuruluş profilinde çalışan cihazların grafiksel

yetenekleri için temel bir seviye sağlar. Ayrıca kişisel profiling grafiksel yetenekleri için

temel oluşturur.

4.5.7.Multimedya Profili (Multimedia Profile)

Bu profil ses ve diğer medya için CLDC ve CDC konfigürasyonları için temel

multimedia desteği sağlar. Java Media Framework’ün fikirleri benimsenmiştir fakat bu

profil JMF ile uyumlu değildir. Multimedya profili diğer J2ME profilleriyle kullanılmak

üzere seçimlik geliştirilmiştir.

4.5.8.Oyun Profili (Gaming Profile)

Bu profil J2ME cihazları için oyun desteği sağlar. CDC konfigürasyonu bu profiling

hedef ortamıdır. Diğer J2ME profilleriyle kullanılabilecek seçimlik bir profildir.

Şekil 4.3: J2ME Konfigürasyon ve Profil Haritası:

Page 45: Cep telefonu ile bilgisayar kontrolü

45

5.MIDP PROGRAMLAMA

Cep telefonları, kişisel dijital ajandalar gibi küçük kapasiteli araçlarda uygulamalar

“MIDP” profili kullanılarak, “javax.microedition.midlet.MIDLET” sınıfı genişletilerek

oluşturulur. Bu sınıf, araçta bulunan Uygulama Yönetim Yazılımı ile MIDP uygulamaları

arasında bir arayüz gibi davranır.

MIDP uygulamaları oluşturulurken, başlangıç noktası bir MIDlet’tir.

5.1.MIDP Uygulaması Geliştirme

5.1.1.MIDlet Nedir?

MIDlet, MIDP uygulamalarının temel noktasını oluşturmak için yaratılan soyut bir sınıftır.

MIDlet sınıfı, “javax.microedition.MIDlet” paketi içinde yer alır. Bu nedenle gerçekleştirilmek

istenen bir MIDlet’te aşağıda verilen kod parçaları mutlaka yer almalıdır.

import javax.microedition.midlet.MIDlet;

public class MerhabaDunya extends MIDlet {

}

Eğer bir metin kutusu görüntülenmek istenirse sınıf içinde bir “constructor” tanımlanmalı

ve metin kutusunun tanımlanma kodu da “constructor”ın içinde yer almalıdır.

import javax.microedition.midlet.MIDlet;

import javax.microedition.lcdui.*;

public class MerhabaDunya extends MIDlet {

private TextBox textbox;

public MerhabaDunya() {

textbox = new TextBox("", "Hi Small World!", 20, 0);

}

}

MIDlet’ler “startApp()”, “pauseApp()” ve “destroyApp(boolean b)” olmak üzere üç tane

önemli metot içerirler. MIDlet başlatıldığı zaman, cihazdaki uygulama yönetim servisi ilk olarak

“startApp()” metodunu çağırır.

Page 46: Cep telefonu ile bilgisayar kontrolü

46

1. startApp() : MIDlet’in yaşam döngüsü boyunca defalarca kez çağırılabilir.

İlkleme işlemlerinin gerçekleştirildiği bir metot değildir. Uygulamanın çalıştırılacağı

cihazda, bir MIDlet’in başlatılacağı mesajı alınınca Uygulama Yönetim Servisi bu metodu

çağırır. Metot içinde metin kutusunun aktif duruma getirildiği bir örnek kod parçası

aşağıda verilmiştir:

public void startApp() {

Display.getDisplay(this).setCurrent(textbox);

}

2. pauseApp() : Kullanıcı veya cihaz, çalışan uygulamayı kesip başka bir görev

gerçekleştirmek istediğinde cihaz tarafından çağırılan bir metottur. Bu metod

çağırıldığında MIDlet “duraklatılmış” duruma geçer.

Eğer ekranda sadece bir metin kutusu gösterilecekse “pauseApp()” metodu boş olarak

gerçekleştirilebilir.

public void pauseApp() {

}

3. destroyApp(boolean b) : Kullanıcı uygulamayı kapatmak istediğinde veya

sistem (bir nedenden dolayı) uygulamanın kapatılmasını isterse bu metod çağırılır. Bu

metod, çalışmakta olan uygulamaya kullandığı kaynak varsa, bunları düzenlemesi için

olanak tanır. Parametre olarak “TRUE” değerini alırsa, uygulamanın kaynakları

temizlemekten başka çaresi yoktur. Parametre olarak “FALSE” değerini alırsa, uygulama

çalışmaya devam etmek için “MIDletStateChangeException” fırlatabilir. Eğer metoda

parametre geçirilmezse uygulamanın temizlemesi gereken kaynağı yok demektir.

Ekranda sadece bir metin kutusu gösterileceğinden ve herhangi bir kaynak temizlemesine

gerek duyulmayacağından “destroyApp(boolean b)” metodu da boş olarak gerçekleştirilebilir.

public void destroyApp(boolean unconditional) { }

Basit bir MIDlet için temel olarak yukarıda bahsedilen üç metod yeterlidir. Bu üç metodun

kullanıldığı “MerhabaDunya” MIDlet’inin kodu aşağıda verilmiştir:

MerhabaDunya.java

import javax.microedition.midlet.MIDlet;

Page 47: Cep telefonu ile bilgisayar kontrolü

47

import javax.microedition.lcdui.*;

public class MerhabaDunya extends MIDlet {

private TextBox textbox;

public MerhabaDunya() {

textbox = new TextBox("", "Hi Small World!", 20, 0);

}

public void startApp() {

Display.getDisplay(this).setCurrent(textbox);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

Bir MIDlet yaratıldığı veya başlatıldığı zaman “Duraklatılmış” durumdadır. Eğer herhangi

bir aykırı durum oluşursa MIDlet “Sonlandırılmış” duruma geçer. MIDletler “Aktif” durumdan

“Duraklatılmış” duruma, “pauseApp()” metodunun işletilmesi tamamlandıktan sonra geçerler.

“Sonlandırılmış” duruma ise “destroyApp()” metodu tamamlanınca geçilir.

Şekil 5.1: MIDlet yaşam döngüsü:

5.1.2.Uygulamanın Derlenmesi

Derleme işleminin gerçekleştirilebilmesi için “MIDP Geliştirme Ortamı”na ihtiyaç vardır.

Sun’ın MIDP ürünü “http://java.sun.com” internet adresinden indirilebilir. MIDP, “midp-fcs”

diznine kaydedilir. MIDP kaydedildikten sonra bazı ortam değişkenlerine değer verilmesi

gerekmektedir:

MIDP=\midp-fcs

MIDPClasses=\midp-fcs\classes

Page 48: Cep telefonu ile bilgisayar kontrolü

48

MIDPTools=\midp-fcs\bin

Ortam değişkenlerine değerleri verildikten sonra derleme işlemine geçilebilir.

Standart “javac” derleme komutu kullanılarak, derleme işlemi yapılmaktadır. “javac”,

J2SE uygulamalarını derlemek için kullanılmaktadır; ancak, J2ME uygulamalarının da “javac”

komutu ile derlenmesi için “-bootclasspath” opsiyonu ile kullanılmalıdır. “-bootclasspath”

opsiyonu kullanılarak, derleyicinin J2ME kütüphanesini kullanması sağlanır.

J2ME uygulamalarının derlenmesi için;

>javac -g:none -bootclasspath %MIDPClasses% HiSmallWorld.java

komut satırı kullanılmalıdır.

“-g:none” opsiyonu kullanılarak, “*.class” dosyalarının hata ayıklama bilgilerini içermesi

önlenir. Bu opsiyon kullanılarak, “*.class” dosyalarının boyutları küçük tutulmaktadır.

“%MIDPClasses%” değişkeni, bir ortam değişkenidir. Bu değişken J2ME sınıflarının

bulunduğu dizini göstermektedir.

5.1.3.“Preverifying” İşleminin Gerçekleştirilmesi

Güvenlik nedenleri ile standart “Java Runtime Environment”, “class” dosyalarını belleğe

yüklemeden önce doğrulama işleminden geçirir. Bu doğrulama işlemi, “class” dosyasının

geçerli olup olmadığının anlaşılması için gerçekleştirilir.

J2ME cihazları, masaüstü bilgisayarlarına göre daha kısıtlı özelliklere sahip olduklarından

bazı J2ME sanal makineleri; “class” dosyalarının doğrulanma işlemini, standart Java sanal

makineden farklı şekilde yapmaktadır. J2ME cihazlarında, doğrulama işleminin tamamı cihaz

üzerinde yapılmaz. Her “class” dosyası, J2ME geliştirme ortamının sahip olduğu “preverify”

özelliği ile önceden doğrulanmalıdır. “Preverify” işlemi, tüm sınıfları doğrulama işleminden

geçirir ve sonrasında dosyalara doğrulandıklarını belirten özel bir değer ekler. Çalışma

zamanında ise J2ME sanal makinesi bu özel değerleri kontrol eder. Eğer bu özel değer geçerli

ise, sanal makine sınıfı çalıştırabilir. Ancak; “class” dosyası özel değere sahip değilse sanal

makine aykırı bir durum olduğunu tespit eder ve sınıfın yükleme sürecini durdurur.

Önceden doğrulama işlemi “preverify.exe” dosyası çalıştırılarak yapılmaktadır. Bir

uygulamanın önceden doğrulanması için ;

>%MIDPTools%\preverify -classpath %MIDPClasses%;. HiSmallWorld

Page 49: Cep telefonu ile bilgisayar kontrolü

49

komut satırı kullanılmaktadır. Önceden doğrulama işlemi sonucunda, “class” dosyaları

oluşturulur.

5.1.4.Uygulamanın Çalıştırılması

Sınıfları Derlenen ve doğrulama işlemi gerçekleştirilen uygulama çalıştırılmaya hazırdır.

Uygulamanın çalıştırılabilmesi için bir emülatöre ihtiyaç vardır. “MIDP Referans

Gerçekleştirimi” de bir emülatördür. Emülatörün çalıştırılabilir ismi, “midp” dir ve “midp-

fcs\bin” dizini altında yer almaktadır. Uygulamanın çalıştırılabilmesi için aşağıdaki komut satırı

kullanılmaktadır:

>%MIDPTools%\midp -classpath %MIDPClasses%;.\output MerhabaDunya

Bu komut “-classpath” parametresi ile uygulamada bulunan sınıf dosyalarını çalıştırılan

“midp” ye geçirir. “.\output” parametresi ise, önceden doğrulama işlemi sonucunda oluşmuş

olan “class” dosyalarının nerede kayıtlı olduklarını göstermek için kullanılır.

Şekil 5.2: Eğer 2.1.1 konusunda Verilen “MerhabaDunya.java” Uygulaması

Sorunsuz Bir Şekilde Çalışırsa Ekran Görüntüsü

Emülatör kapatıldıktan sonra komut ekranına aşağıdaki gibi çıktılar yazılmaktadır:

D:\java\MerhabaDunya>\midp-fcs\bin\midp -classpath \midp-fcs\classes;.\output

Page 50: Cep telefonu ile bilgisayar kontrolü

50

MerhabaDunya

Execution completed successfully

8205 bytecodes executed

7 thread switches

204 classes loaded (149 bytes)

220 objects allocated (9572 bytes)

0 garbage collections

0 bytes collected

0 objects deferred in GC

0 (maximum) objects deferred at any one time

0 rescans of heap because of deferral overflow

0 pointer validations requiring heap scans

Current memory usage 9572 bytes

Heap size 300000 bytes

5.1.5.Uygulamaların JAR Dosyası Haline Getirilmesi

Birçok durumda, MIDP uygulamaları “JAR” dosyaları haline getirilir. Kullanılan ağ

protokolü ve onun içerdiği istemci-sunucu yazılımına bağlı olarak, belirli bir protokol üzerinden

birçok uygulama yüklemesi yapılırken JAR dosyaları daha verimlidir. Örneğin; HTTP protokolü

ile uygulama yüklenirken her sınıf dosyası için bir bağlantıya ihtiyaç duyulurken, JAR dosyası

için tek bağlantı yeterli olmaktadır.

Mevcut olan “class” dosyalarını kullanarak jar dosyası oluşturulurken;

>jar cf merhaba.jar -C .\output MerhabaDunya.class

komut satırı işletilir.

“cf” parametresi, “jar” çalışabilir dosyasına “merhaba.jar” isimli bir yeni bir JAR dosyası

oluşturması gerektiğini belirtir. “-C” opsiyonu ise, “.\output” dizini altındaki

“MerhabaDunya.class” dosyasına erişebilmeyi sağlar.

Uygulamayı, oluşturulan “merhaba.jar” dosyasından çalıştırabilmek için JAR dosyasına

yol tanımlamak gerekmektedir.

>%MIDPTools%\midp -classpath %MIDPClasses%;.\merhaba.jar

MerhabaDunya

Page 51: Cep telefonu ile bilgisayar kontrolü

51

Komut satırı işletilerek uygulamanın ilgili jar dosyasından çalışması sağlanmaktadır.

5.1.6.MIDlet Takımı Geliştirilmesi

Birçok MIDlet, bir MIDlet takımı kullanılarak gruplanabilir. Bir MIDlet takımı; tüm

MIDlet’leri içeren bir JAR dosyası, desteleyici sınıflar ve Uygulama Tanımlayıcı Dosyası’ndan

oluşur. Uygulama Tanımlayıcı Dosyası, MIDlet takımı hakkındaki bilgileri içeren metinsel bir

dosyadır. Bu dosyanın uzantısı “.jad” dır.

MIDlet’lerin takımların bir parçası olarak kullanılması, bazı yönlerden avantaj sağlar.

Örneğin, bir takımın içindeki MIDlet’ler cihazdaki kaynakları paylaşabilir.

Bir MIDlet takımı oluşturmak için birden fazla sayıda MIDlet sınıfına gerek vardır.

(Örneklerde basit olması açısından “MerhabaDunya1” ve “MerhabaDunya2” MIDlet’leri

kullanılmaktadır.) Öncelikle, MIDlet’ler ayrı ayrı derlenmeli ve doğrulama işleminden

geçirilmelidir.

>javac -g:none -bootclasspath %MIDPClasses% MerhabaDunya1.java

>%MIDPTools%\preverify -classpath %MIDPClasses%;. MerhabaDunya1

>javac -g:none -bootclasspath %MIDPClasses% MerhabaDunya2.java

>%MIDPTools%\preverify -classpath %MIDPClasses%;. MerhabaDunya2

Komut satırları işletildikten sonra MIDlet takımı oluşturmak için hazır duruma

gelinmektedir.

5.1.7.MIDlet Takımı Tanımlayıcı Dosyası

İlk adım, MIDlet takımı için tanımlayıcı bir dosya oluşturmaktır. Cihazdaki Java

Uygulama Yöneticisi, uygulamanın yaşam döngüsünü yönetirken bu tanımlayıcı dosyayı

kullanır. Java Uygulama Yöneticisi, uygulamaların indirilmesi, yüklenmesi, çalıştırılması ve

silinmesinden sorumludur veya bu işlemlerin yapılmasına katkıda bulunur.

Tanımlayıcı dosya da Java kaynak dosyaları ile aynı dizine kaydedilmelidir. Aşağıda

örnek bir tanımlayıcı dosyanın içeriği verilmiştir:

MIDlet-Name: MerhabaDunyaTakimi

MIDlet-Version: 1.0.0

MIDlet-Vendor: KTU, Istatistik ve Bilgisayar Bilimleri

MIDlet-Description: Ornek bir MIDlet takimi

MIDlet-Info-URL: http://www.ktu.edu.tr/

MIDlet-Jar-URL: http://localhost/merhaba.jar

Page 52: Cep telefonu ile bilgisayar kontrolü

52

MIDlet-Jar-Size: 3000

MicroEdition-Profile: MIDP-1.0

MicroEdition-Configuration: CLDC-1.0

MIDlet-1: Merhaba1, , MerhabaDunya1

MIDlet-2: Merhaba 2, , MerhabaDunya2

5.2.MIDP Kullanıcı Arayüz APIleri

Kaynakları kısıtlı olan cihazların, bellekleri ve ekran boyutları kısıtlı olduğundan

görüntüleme kapasiteleri de kısıtlıdır. Bu nedenden, MIDP uygulamalarında kullanıcı arayüzü

oluşturulurken J2SE’deki AWT sınıfı kullanılamaz. MIDP kendi kullanıcı arayüzü API’sine

sahiptir.

MIDP düşük seviyeli ve yüksek seviyeli olmak üzere iki tane kullanıcı arayüz API’si

içerir. Düşük seviyeli API “Canvas” soyut sınıfına dayanırken; yüksek seviyeli API’nin

kullandığı “Alert, Form, List, TextBox” sınıfları “Screen” soyut sınıfına dayanır. (Şekil 2.4:

MIDP kullanıcı arayüz tiplerinin sınıf diyagramı)

5.2.1.MIDP Ekran Kontrolü

MIDP’de cihazın ekran ve görüntüsünü yöneten “Display” nesnesi vardır. “Display”

nesnesi, düşük veya yüksek seviyeli API’ler için kullanıcı arayüzü elemanlarını ekrana çizmek

ve bunları ekranda görüntülemek için gereken metotları içerir

Şekil 5.4: MIDP Kullanıcı Arayüz Tiplerinin Sınıf Diyagramı

Page 53: Cep telefonu ile bilgisayar kontrolü

53

Cihazın ekranında kullanıcı arayüz nesnelerinin gösterilebilmesi için, bir “Displayable”

nesnesi diğer gösterilmek istenen kullanıcı arayüz nesnelerini içermelidir. Belirli bir zamanda,

sadece bir tane “Displayable” nesnesi gösterilebilir. Belirli bir zamanda gösterilen

“Displayable” nesnesinin hangisi olduğu “getCurrent()” metodu ile öğrenilebilir. Ekranda

gösterilen nesne ise “setCurrent(Displayable birSonrakiEkran)” metodu kullanılarak

değiştirilebilir.

5.2.2.Yüksek Seviyeli Kullanıcı Arayüz API’si

“Screen” sınıfı, tüm yüksek seviyeli “Displayable” nesnelerinin süper sınıfıdır. Alt

sınıfları iki farklı türde olabilir. Birinci türde, kullanıcı arayüz elemanı önceden tanımlanmış bir

tiptedir ve kullanıcıya bilgi görüntülemek için kullanılır. İkinci türde ise, uygulamalar ekrandan

grafiksel eleman eklenmesine veya çıkarılmasına izin verirler(bir “Form” nesnesindeki metin

kutusuna ad_soyad girilmesi gibi).

5.2.2.1.Form

Bir “Form”, “items” adı verilen onay kutusu, seçenek kutusu, yazı alanı gibi grafiksel

elemanları içerebilir. Uygulamalar, “Displayable” nesnesinin içeriğini ancak görünür

olmadıkları zaman değiştirebilir.

5.2.2.2.Alert

“Alert”, bir mesaj çeşididir. Kullanıcıya bilgi vermek için kullanılır. Cihaz tarafından

belirlenmiş süre kadar bu mesaj ekranda görüntülenir. Cihaz tarafından belirlenen süreyi

kullanmak yerine, uygulama içerisinde mesajın görüntüleneceği süre milisaniye cinsinden

belirtilebilir.

Alert (String title);

Alert (String title, String messageString, Image alertImage,AlertType alertType);

5.2.2.3.List

Kullanıcı girişlerinde sadece karakter girişleri yeterli olmayabilir. Bazı durumlarda

kullanıcıya belirli değerleri seçtirmek isteyebiliriz iste böyle durumlarda List sınıfını

kullanıyoruz. List bir dizi değer içerisinden bir ve bir kaçını seçmemize yarayan UI (User

Interface) bileşenidir

List yapısı aşağıdaki gibidir.

List (String title, int listType);

Page 54: Cep telefonu ile bilgisayar kontrolü

54

List sınıfının iki adet kurucu metodu vardır. Bunlar title ve listType tır.

“title List” üzerinde görünecek baslık listType List in biçimi belirtir.

Örnek bir List tanımlayacak olursak

List liste= new List("Ürünler",1);

Yukarıdaki örnekte liste adında ve List sınıfı tipinde bir nesne yarattık bu nesneye iki adet

kurucu metot parametresi gönderdik “Ürünler” ve 1 bu parametrelere göre liste nesnemizin

baslığı Ürünler tipide 1 olacaktır.

List içerisine veri eklemek için List.append() metodu kullanılır. Kullanım sekli aşağıdaki

gibidir.

List.append(String stringPart, Image imagePart);

append() metodu sırasıyla iki adet parametre alır. Bunlar yazı (String) içeriği ve resim

(Image) içeriği. Image yaratmak zorunlu değildir eğer elimizde bir resim yok ise Image nesnesi

olarak null atayabiliriz. Bu durumda ekranda herhangi bir resim görünmeyecektir.

Kodumuzu örneklendirecek olursak.

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class OrnekMIDlet extends MIDlet {

public void startApp() { List liste= new List("Ürünler",List.EXCLUSIVE);

liste.append("Bilgisayar", null);

liste.append("Telefon", null);

liste.append("DVD", null);

Display ekran=Display.getDisplay(this);

ekran.setCurrent(liste);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

Page 55: Cep telefonu ile bilgisayar kontrolü

55

Göründüğü gibi üç adet ürün listelenmiş ve bunlardan birini seçme hakkı sağlanmıştır. Üst

bölümde ise Ürünler baslığı bulunmaktadır. Image olarak null verdiğimiz için listemizde

herhangi bir resim görünmüyor. Bunu resimli olarak göstermek istersek kodumuz aşağıdaki gibi

olmalıdır.

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class OrnekMIDlet extends MIDlet {

public void startApp() {

Image resim= null;

try{

resim=Image.createImage("/resim.jpg");

}

catch(Exception e){

System.out.println("Resim olusturulamadı");

}

List liste= new List("Ürünler",List.EXCLUSIVE);

liste.append("Bilgisayar", resim);

liste.append("Telefon", resim);

liste.append("DVD", resim);

Display ekran=Display.getDisplay(this);

ekran.setCurrent(liste);

}

public void pauseApp() {

}

public void destroyApp(boolean unconditional) {

}

}

Page 56: Cep telefonu ile bilgisayar kontrolü

56

5.2.2.4.Choice Interface

Çoktan seçmeli alanlardaki kısıtları belirler. Üç türde seçim yapılmasını sağlar.

“EXCLUSIVE” seçimde sadece bir tane eleman seçilebilir. “MULTIPLE” seçim, birden fazla

eleman seçileceğinde kullanılır. “IMPLICIT” seçim ise, bir “Command” nesnesi başlatıldığında

ona odaklanan seçimdir.

5.2.2.5.TextBox

J2ME ortamında yazı tipinde veri girişi yapmak için kullandığımız bileşenlerden biri

TextBox’ dır. Bu nesne tüm ekranımızı kaplayarak bize tam sayfa görünümünde veri girişi

yapma imkanı verir. Bu veri girişi harf, sayı veya klavyemizin desteklediği herhangi bir karakter

olabilir. TextBox’ lar tüm yüksek seviye bileşenler gibi telefonlar arasında farklılıklar

gösterebilir.

TextBox yapısı aşağıdaki gibidir.

TextBox (String title, String text, int maxSize, int constraints)

Bu yapıda istenen dört parametre sırası ile title, text, maxSize ve constraints’ tir.

title Yazı girişi alanının üstünde bulunacak baslıktır.

text Veri girişi alanımızın içerisinde başlangıçta bulunacak yazı.

maxSize Veri giriş alanımızın alabileceği karakter sayısı

constraints Girilecek verinin kontrolü.

Constraints bize belli bir veri girişi tipi sunar örnek olarak 0 gönderirsek istediğimiz

herhangi bir karakteri girebiliriz. Ancak kod içerisine sayı girmek kafa karıştırılabilir ve çoğu

zaman hangi sayının neye karşılık geldiğini unutabiliriz. Bu yüzden sayı girmek yerine bir form

bileşeni olan TextField sınıfına ait veri giriş tiplerinin sayı karşılıklarını döndüren static

değişkenleri kullanabiliriz. Bu değişkenler bize kullanmamız gereken sayıları daha anlamlı bir

şekilde gösterir. Örnek olarak 0 kullanacağımız yerde TextField.ANY diyebiliriz burada

dönecek değişken bize herhangi bir karakter girişi yapmamızı sağlayabilir. TextField nesnesine

ait bu değişkenler final ve static’tir bu yüzden değiştirilemez ve nesnesi oluşturulması

gerekmez.

TextField Nesnesine ait kullanabileceğimiz diğer tipler aşağıdaki gibidir.

ANY Herhangi bir karakter

EMAILADDR E-mail adresi

NUMERIC Sayı

PHONENUMBER Telefon numarası

Page 57: Cep telefonu ile bilgisayar kontrolü

57

URL İnternet adresi

DECIMAL Ondalıklı

PASSWORD Şifre

5.2.2.6.Ticker

“Ticker”, ekranda bir yazının sürekli olarak kaymasını sağlar. “Screen” sınıfının bir

metodu olan “setTicker(Ticker ticker)” metodu ile “Ticker” örneğinin ilgili “Screen” örneği ile

ilişkilendirilmesi işlemini gerçekleştirir.

5.2.2.7.Items

Bir “Form” nesnesine eklenebilecek interaktif grafiksel elemanlar için kullanılan bir süper

sınıftır.

“ChoiceGroup” nesnesi, bir grup seçenek veya elemandan oluşur. Tek elemanlık seçim

yapılabileceği gibi birden çok elemanın seçildiği tipte bir seçime de izin verilir. Radyo

düğmeleri tekli seçimi desteklerken, kontrol kutucukları da çoklu seçimi destekler.

“DateField” nesnesi, “Form” nesnesinde tarih ve saat bilgilerinin görüntülenmesi için

kullanır.

“Gauge” nesnesi, ekranda belirli değerlere göre çubuk grafiği çizilmesini gerçekleştirir.

“StringItem” nesnesi, kullanıcıya metinsel bilgileri görüntülemede kullanılır.

“TextField” nesnesi, “Form” nesnesi içindeki metin editörüdür.

5.2.3.Düşük Seviyeli Kullanıcı Arayüz APIsi

Düşük seviyeli kullanıcı arayüz APIsi kullanılarak arayüz oluştururken, çizim yapmak ve

ekranı yenilemek için piksel koordinatları, yazı boyutu ve geometrik şekiller gibi birçok düşük

seviyeli detayla ilgilenilmelidir.

5.2.3.1.Canvas

“Canvas” sınıfı “Displayable” sınıfının, düşük seviyeli kullanıcı arayüzü oluşturmak için

bulunan tek alt sınıfıdır.

“Canvas” tüm ekranı çizmeyi sağlayan bir bileşendir, “Canvas” ile tüm ekran kontrol

altına alınabilir. Bu nedenle, “Canvas” alt sınıfı genellikle oyun uygulamaları yazılırken

kullanılır.

Yüksek seviyeli API’lerde ekranın yenilenme işlemi tüm “Screen” nesneleri için otomatik

olarak yapılır; ancak, “Canvas” sınıfında ekran yenilenmesi “paint(Graphics g)” metodu

kullanılarak yapılır. Bu metod çağrıldığında bir “Graphics” nesnesi oluşturulur.

Page 58: Cep telefonu ile bilgisayar kontrolü

58

5.2.3.2.Graphics

“Graphics” nesnesinden oluşturulan bir örnek ile ekrandaki tüm çizimler gerçekleştirilir.

Çizim işlemleri, ekranın piksel piksel boyanması ile gerçekleştirilir.

5.2.3.3.Images

Bir “Image” nesnesi, grafiksel resim verisini tutar. Ancak, uygulama tarafından

çağrıldığında çizim yapabilir. “Graphics” nesnesinde bulunan, “drawImage(Image img, int x, int

y, int anchor)” metodu kullanılarak “Canvas” sınıfına gösterilir.

“Sabit” ve “Değişebilir” olmak üzere iki tip “Image” vardır. Sabit “Image”lar, bir

kaynaktan gelen resim verisinin yüklenmesi ile oluşturulur. Sabit “Image”lar, sadece yüksek

seviyeli kullanıcı arayüzü bileşenleri ile kullanılabilir. Değişebilir “Image”lar ise genelde düşük

seviyeli bileşenlerle kullanılır.

5.2.3.4.Fonts

“Fonts” bileşeni; düşük seviyeli kullanıcı arayüzünde, ekrana çizilmiş herhangi bir yazının

boyutunu belirler.

5.2.4.Düşük Seviyeli Kullanıcı Arayüzü Örneği

CanvasDemo.java

import javax.microedition.lcdui.*;

class CanvasDemo extends Canvas {

protected void paint(Graphics g){

/***Ekranda (1,1) koordinatlarından başlayarak “CanvasDemo”

yazısı yazdırılmaktadır.***/

g.drawString("Canvas Demo",1,1,Graphics.TOP|Graphics.LEFT);

/***Ekrana verilen parametrelere bağlı oalrak içi dolu bir

dikdörtgen çizilmektedir.***/

g.fillRect (20,30,30,20);

/***Aşağıdaki dört satırda, verilen koordinatlara göre dikdörtgen

oluşturmak amacıyla dört çizgi ekrana çizilmektedir.***/

g.drawLine(50,50,75,50);

g.drawLine(75,50,75,75);

g.drawLine(75,75,50,75);

g.drawLine(50,75,50,50);

}

}

Page 59: Cep telefonu ile bilgisayar kontrolü

59

5.3.MIDP’de Kullanıcı Etkileşimlerinin Yönetilmesi

Bir uygulama çalışırken, kullanıcının bu sırada cihazla olan etkileşimi olay olarak

adlandırılmaktadır. Bir düğmeye basılması, seçenekler arasından bir tanesinin seçilmesi veya

metin alanına bilgi girilmesi bir olayı temsil eder. Uygulamalar, olayları beklemek ve

gerçekleşen olaylarda ilgili işlemi yapmak için oluşturulur.

Uygulamalar, olabilecek olan olayları “listener interface” gerçekleştirerek dinlerler ve bu

olaylara bağlı olarak ilgili işlemleri yapacak olan “callback” metotlarını gerçekleştirirler.

“Callback” metotları; genelde uygulama tarafından çağrılmayan, sistem tarafından özel bir olay

için uyandırılan metotlardır. Kullanıcı, uygulamanın dinlemekte olduğu belirli bir olayı

tetiklediğinde cihaz otomatik olarak olayla ilişkilendirilmiş olan “callback” metodunu çağırır.

MIDP profili, yüksek ve düşük seviyeli olarak iki türde olay yönetimine sahiptir. Yüksek

seviyeli olay ve olay yönetim mekanizmaları daha soyuttur. Geleneksel iş uygulamalarının

ihtiyaçlarını karşılarlar. Yüksek seviyeli olaylar, MID profilin çalıştığı farklı cihazlar için

taşınabilirdir. Düşük seviyeli olaylar ve olay yönetim mekanizmaları ise, basit olayları yakalar

ve yönetir. Basit olaylar; basılan belirli bir tuşun yakalanması veya imlecin sürüklenmesi gibi

olaylar olabilir. Düşük seviyeli olaylar, cihazlara özgüdür veya yüksek seviyeli olaylara göre

daha az taşınabilirdir.

Olayların yönetimi aynı anda, paralel olarak yapılamaz. Ancak, MIDP’deki “Timer”

nesnesi, işlerin belirli bir sıra dahilinde, arka planda çalışan bir iş parçacığı tarafından

yapılmasına olanak tanır. “Timer callback” metotları, “callback” metotları ile aynı zamanda

çalışabilir.

5.3.1.Yüksek Seviyeli Kullanıcı Etkileşimlerinin Yönetilmesi

Yüksek seviyeli API’de, olaylar iki tip kullanıcı etkileşimi sırasında gerçekleşir. Olaylar,

kullanıcı bir formdaki bir değeri değiştirdiğinde veya bir komutu tetiklediğinde oluşabilir.

Yüksek seviyeli olaylar için iki tip “listener” bulunmaktadır.

5.3.1.1.ItemStateListener

Bir “item”ın değeri değiştiğinde “itemStateChanged(Item i)” metodu, “callback” metodu

olarak çağırılır. “ItemStateListener”, bir formdan gelen olaylar için kullanılır.

5.3.1.2.Komutlar (Commands)

MIDP’de kullanıcıların, bir düğmeye basmaları veya menüden bir seçeneği seçmeleri

“Command” nesnesini oluşturur.

Page 60: Cep telefonu ile bilgisayar kontrolü

60

“Command”, üç bölümden oluşur. Bu bölümler; etiket, tip ve önceliktir. Etiket, cihaz

tarafından, komutu ekranda görüntülerken kullanılır. Bir komutun tipi, onun anlamını belirler.

Komutun tipi; “GERİ”, “İPTAL”, “YARDIM”, “TAMAM”, “EKRAN” veya “DUR” olabilir.

Komutlar, önem sırasına göre değerlendirilirler. Cihaz komutları değerlendirirken önem

sıralarını, öncelik değerlerine bakarak belirler.

5.3.1.3.CommandListener

Komut olaylarını yönetmek için kullanılır. Öncelikle “CommandListener”, komut

nesnesini bulunduran “Displayable” nesnesi ile ilişkilendirilmelidir. İlişkilendirme işlemi,

“setCommandListener(CommandListener cmdListener)” metodu ile yapılır.

5.3.2.Düşük Seviyeli Kullanıcı Etkileşimlerinin Yönetilmesi

Düşük seviyeli API, kullanıcıya daha fazla kontrol verilmesi gerekirken oyun

uygulamalarında kullanılır.

Tuş Kodları ve Düşük Seviyeli API Olayları (Key Codes and Low-Level API Events)

Düşük seviyeli API’de bir tuşa basılması, uygulama tarafından bir tuş kodu ile bildirilir.

Olay Dağıtım Metodları (Event Delivery Methods)

Yüksek seviyeli API’de olay yönetimi “listener” nesneleri aracığıyla gerçekleştirilir.

Ancak; düşük seviyeli API’de “listener” nesnesi yoktur.

“Canvas” sınıfı, olay dağıtım metodlarına sahiptir. Bu metodlar;

“showNotify()”,“hideNotify()” ve “paint(Graphics g)” metodlarıdır. “showNotify()” metodu,

“Canvas” görüntülenmeden önce çağrılır. “hideNotfy()” metodu, “Canvas” görüntüden

kaldırıldığında çağrılır.

Olay dağıtım metotları seri olarak çağrılabilir. Aynı anda birden fazla metot çağrılamaz.

5.3.3.Etkileşimlerin Yönetildiği Yüksek Seviyeli Kullanıcı Arayüzü Örneği

AnketMIDlet sınıfında, EntryForm tipinde bir form oluşturulur. Bu form

“displayMngr.setCurrent(entryForm)” komut satırı kullanılarak cep telefonunun ekranında

görünür hale getirilir. Kullanıcı Şekil 2.5’deki gibi ilgili alanlara adını, yaş grubunu ve

hobilerini girer. Daha sonra ekranın sağ tuşunun yönettiği “Get” komutuna basıyor. Bu tuşa

basınca kullanıcının seçtiği bilgilerin görüntülendiği bir “Alert” oluşturulur ve Şekil 2.5 (c)’deki

gibi ekranda görüntülenir. Kullanıcı bu mesajı ekranda gördükten sonra ekranın sağındaki

“Done” tuşuna basınca, Şekil 2.5 (a)’daki gibi boş bir form ekranda tekrar görüntülenir.

Kullanıcı bu ekranın solunda “Exit” komutunu yöneten tuşa bastığında uygulamayı sonlandırır.

Page 61: Cep telefonu ile bilgisayar kontrolü

61

AnketMIDlet.java

package AnketDemo;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

public class AnketMIDlet extends MIDlet {

String sym = new String(); // textfielda girilen ismi tutan değişken

String soru2 = new String(); // seçilen yaş grubunun tutulduğu değişken

String soru3; // seçilen hobileri tutan değişken

//uygulamanın hayat devresini tutması için bir lokal değişken tanımlanır.

private Display displayMngr = null;

//EntryForm sinifindan bir degisken tanimlaniyor.

private EntryForm entryForm = null;

//Alert nesnesine bir referans degiskeni tanimlaniyor.

private Alert resultsAlert = null;

public AnketMIDlet () {

}

private void initListener () {

CommandListener commandListener = new CommandListener() {

public void commandAction(Command c, Displayable d) {

soru3 = new String();

if (c == entryForm.getExitCommand()) {

destroyApp(true);

} else if (c == entryForm.getGetCommand()) {

if (entryForm.getcevap1Field().getString().length() > 0) {

sym = entryForm.getcevap1Field().getString();

}

if (entryForm.getsoru2Choice().getSelectedIndex() == 0) {

soru2 = "Genc";

}

else {

soru2 = "Orta Yasli";

}

if (entryForm.getsoru3Choice().isSelected(0)){

soru3 = "\n *muzik";

}

if (entryForm.getsoru3Choice().isSelected(1)){

soru3 = soru3+"\n *resim";

}

if (entryForm.getsoru3Choice().isSelected(2)){

soru3 = soru3+"\n *sinema";

Page 62: Cep telefonu ile bilgisayar kontrolü

62

}

if (entryForm.getsoru3Choice().isSelected(3)){

soru3 = soru3+"\n *tenis";

}

if (entryForm.getsoru3Choice().isSelected(4)){

soru3 = soru3+"\n *yuzme";

}

displayInformation("Hosgeldin " + sym + " !\n"+ soru2

+"grubundasin.\n"+ "Hobilerin: "+ soru3);

} //END OF else if (c == entryForm.getGetCommand())

} //END OF public void commandAction

};

entryForm.setCommandListener(commandListener);

}

//tanimlanan EntryFormun ekranda gosterilmesi icin bir metod

private void displayEntryForm () {

if (entryForm == null) {

entryForm = new EntryForm("Anket");

}

initListener();

//o an display managerin EntryFormu gostermesi icin

//setCurrent kullaniliyor

displayMngr.setCurrent(entryForm);

}

//sonsuza kadar ekranda kalabilecek olan alert icin bir metod olusturuluyor

private void displayInformation(String quoteString) {

if (resultsAlert == null) {

resultsAlert = new Alert("Anket Sonuclari", null, null,

AlertType.CONFIRMATION);

resultsAlert.setTimeout(Alert.FOREVER);

}

resultsAlert.setString(quoteString);

//o an Alert in gosterilmesini, ancak bir sonraki ekran olarak

//EntryForm'a donulmesi tanimlaniyor

displayMngr.setCurrent(resultsAlert, entryForm);

entryForm.setcevap1Field();

entryForm.setsoru2Choice();

entryForm.setsoru3Choice();

}

//Display instance alinir ve referansi displayMngr degiskeni içine koyulur

Page 63: Cep telefonu ile bilgisayar kontrolü

63

// entryForm sinifi olusturuldugunda displayEntryForm metodu cagriliyor

protected void startApp() {

displayMngr = Display.getDisplay(this);

displayEntryForm();

}

protected void pauseApp() { }

protected void destroyApp(boolean unconditional) {

notifyDestroyed();

}

public void commandAction(Command c, Displayable s) { }

} //END OF AnketMIDlet.java

EntryForm.java

package AnketDemo;

import javax.microedition.midlet.*;

import javax.microedition.lcdui.*;

//Form sinifi iki tane consructor a sahiptir.

//bunlarin en azindan birinin yeni sinifta overridden edilmesi gerekir

public class EntryForm extends Form {

// exit ve get komutlari icin referans degiskenleri tanimlaniyor

private Command exitCommand = null;

private Command getCommand = null;

// kullanıcı isminin tutulduğu bileşenler

private StringItem soru1Field = null;

private TextField cevap1Field = null;

// yas grubunu belirleyen bileşenler

private StringItem soru2Field = null;

private ChoiceGroup soru2Choice = null;

// hobilerin tutulduğu bileşenler

private StringItem soru3Field = null;

private ChoiceGroup soru3Choice = null;

public EntryForm(String title) {

super(title);

soru1Field = new StringItem(null, "1- ADINIZ:");

//textField tanimlaniyor.

//1. parametre -> textfield'in etiketini olusturuyor.

//2. -> "" oldugundan baslangic degeri verilmiyor.

//3. -> kullanici en fazla 10 karakter girebilir.

//4. -> bu alana giris yaparken herhangi bir kisit olmadigi belirtiliyor.

cevap1Field = new TextField("", "", 10, TextField.ANY);

Page 64: Cep telefonu ile bilgisayar kontrolü

64

soru2Field = new StringItem(null, "2- YASINIZ:");

String choices_yas[] = {"20-39", "40-59"};

soru2Choice = new ChoiceGroup("", Choice.EXCLUSIVE,

choices_yas, null);

soru3Field = new StringItem(null, "3- HOBILERINIZ:");

String choices_hobi[] = {"Muzik", "Resim", "Sinema",

"Tenis", "Yuzme"};

soru3Choice = new ChoiceGroup("", Choice.MULTIPLE,

choices_hobi, null);

// exit ve get komutlari olusturuluyor,

// exit komutuna en yuksek oncelik veriliyor

exitCommand = new Command("Exit", Command.EXIT, 1);

getCommand = new Command("Get", Command.SCREEN, 2);

// tanımlanan ekran bileşenleri forma ekleniyor

append(soru1Field);

append(cevap1Field);

append(soru2Field);

append(soru2Choice);

append(soru3Field);

append(soru3Choice);

//commandler forma ekleniyor

addCommand(exitCommand);

addCommand(getCommand);

}

// anket sorularının cevaplarının alınabilmesi ve gerektiğinde ilgili

// alanların boşaltılması için getter ve setter metodlar tanımlanıyor

public StringItem getsoru1Field() {

return soru1Field;

}

public StringItem getsoru2Field() {

return soru2Field;

}

public StringItem getsoru3Field() {

return soru3Field;

}

public TextField getcevap1Field() {

return cevap1Field;

}

public void setcevap1Field() {

cevap1Field.setString("");

Page 65: Cep telefonu ile bilgisayar kontrolü

65

}

public ChoiceGroup getsoru2Choice() {

return soru2Choice;

}

public void setsoru2Choice() {

soru2Choice.setSelectedIndex(0,true);

}

public ChoiceGroup getsoru3Choice() {

return soru3Choice;

}

public void setsoru3Choice() {

soru3Choice.setSelectedIndex(0,false);

soru3Choice.setSelectedIndex(1,false);

soru3Choice.setSelectedIndex(2,false);

soru3Choice.setSelectedIndex(3,false);

soru3Choice.setSelectedIndex(4,false);

}

//commandlere erisebilmek icin getter metodlar tanimlaniyor

public Command getExitCommand() {

return exitCommand;

}

public Command getGetCommand() {

return getCommand;

}

}

Uygulama Çalıştırıldığında Oluşan Ekran Görüntüleri

(a) (b) (c)

Şekil 5.5: AnketMIDlet Uygulaması Çalıştırıldığında Oluşan Ekran Görüntüleri

Page 66: Cep telefonu ile bilgisayar kontrolü

66

6.BLUETOOTH STACK VE YAPISI

6.1.Bluetooth Stack

Bluetooth stack, PC de bluetooth cihazını kontrol etmek amacıyla kullanılan yazılımdır.

Bluetooth stack bluetooth protokolünü gerçekler ve aynı zamanda bluetooth cihazının

programlanabilirliğini kontrol etmeye izin verir. Bu izinler şunlardır.

Diğer bluetooth cihazları ile haberleşmek

Üzerinde bulunduğu Bluetooth cihazını kontrol etmek

Bir bluetooth protokol stack bluetooth istemcileri ve sunucularının kablosuz ağ üzerinde

veri alışverişine izin verir. Bluetooth cihazı ve bluetooth stack birlikte nasıl çalıştığını ve

aralarındaki ilişkiyi şöyle özetleyebiliriz. Bluetooth cihazı, bluetooth stack olmadığında tıpkı

işletim sistemi olmayan bir bilgisayar gibi düşünülebilir. Ya da sürücüsü olmayan bir cihaz

gibidir.

Şekil 6.1: Kablo veya Bluetooth Bağlantısı Durumunda Sürücü Gereksinimi

Bluetooth protokolü ile haberleşme yapmak ve bir bluetooth cihazını kontrol etmek için

bilgisayar bluetooth stack’ını kullanır. Stack’ın her bir bileşeni bir katman olarak adlandırılır.

6.2.Bluetooth Stack’ın Katmanları

Uygulama geliştiriciler, Bluetooth protokol, iki ana parçaya ayrılabilir. Bunlar, katmanlar

ve profillerdir. Bluetooth protokolün tüm katmanları protokol stack’ını oluşturur. Bluetooth

protokol katmanları aşağıdaki gibidir.

Host Controller Interface (HCI)

Logical Link Control and Adaptation Protocol (L2CAP)

Service Discovery Protocol (SDP)

RFCOMM

Telephony Control Protocol Specification (TCS-BIN)

Wireless Access Protocol (WAP)

Page 67: Cep telefonu ile bilgisayar kontrolü

67

Object Exchange (OBEX)

Bluetooth Network Encapsulation Protocol (BNEP)

Human Interface Device Protocol (HID)

6.3.Bluetooth Stack Profilleri

Bir bluetooth profili, bluetooth cihazları için tasarlanmış işlevsellik kümesidir. Örneğin,

telefon ve PDA aralarında veri senkronizasyonu yapmak için senkronizasyon profilini

desteklemelidir. PDA dan cep telefonuna bir dosyanın nesne olarak gönderilmesi için her iki

cihazında Object Push Profilini gerçeklemiş olması gerekir. PDA nın cep telefonunu kullanarak

interneti kablosuz kullanabilmesi için Dial-Up Networking Profilini her iki cihazda

desteklemelidir. Bluetooth özelliğine sahip cihazlarının birbirleriyle haberleşebilmesi için

bluetooth stack yeterli değildir. Ayrıca bu cihazların aynı profillere sahip olması da

gerekmektedir. Bluetooth profilleri aşağıdaki gibidir.

Generic Access Profili

Service Discovery Application

Profili

Serial Port Profili

Dial-up Networking Profili

Fax profili

Headset Profili

LAN Access Profili

Personal Area Networking

Profili

Cordless Telephony Profili

Intercom Profili

Generic Object Exchange

Profili

Object Push Profili

File Transfer Profili

Synchronization Profili

Basic Printing Profili

Hard Copy Cable Replacement

Profili

Basic Imaging Profili

Hands Free Profili

Human Interface Device

Profili

Page 68: Cep telefonu ile bilgisayar kontrolü

68

6.3.1.Generic Access Profili (GAP)

GAP, iki Bluetooth birimlerinin nasıl birbirlerini keşfedip bağlantı kuracağını tanımlar.

Bağlanmamış birimler arasında keşif ve kurulumu yönetir. Bu profil genel olan ve GAP’a

değinilen ve çok profilli cihazlar tarafından kullanılan işlemleri tanımlar. GAP herhangi iki

Bluetooth birimi, herhangi üretici veya uygulamanın Bluetooth üzerinden bilgi alışverişini

sağlamak amacıyla birimlerin ne tür uygulama birimlerini desteklediğini bilgilerini verir. Başka

herhangi bir bluetooth profilini desteklemeyen Bluetooth birimleri temel çalışabilirlik ve

birlikteliği sağlamak için GAP’ı kullanmalıdır. Ayrıca güvenliği yönetir.

6.3.2.Service Discovery Application Profile (SDAP)

SDAP mevcut olan Bluetooth birimi servislerini araştırıp tanımlar. Bu profil bilinen ve

hemen hemen genel olan belirli servislerin aranmasını yönetir. SDAP , kullanıcı uygulamaları

araştırma servisi adında Bluetooth biriminde servis bulmak için gerekli olan uygulama içerir.

Bu uygulamanın arayüzü olan the Service Discovery Protocol diğer Bluetooth birimlerinden

servis soruşturması gönderip alır. Bu nedenle SDAP belirli Bluetooth protocolu ile son kullanıcı

için avantajlı arayüzlü bir uygulama tanımlar. SDAP, GAP’a bağlıdır.

6.3.3. Serial Port Profile

Bu profil nasıl iki cihaz üzerinde sanal seri bağlantı noktaları kurulacağını tanımlar ve bu

bağlantının Bluetooth ile kurulmasını sağlar. Bu profilin kullanımıyla Bluetooth birimleriyle

RS232 kontrol sinyalizasyonu kullanan bir seri kablonun bir öykünümü sağlanır (RS232 veri

haberleşme araçları için ortak arayüz standardı; bir sıradan PC'nin seri portunda kullanılan

standart). Bu profil kullanılabilir 128kbit/sn. veri yolu sağlar. Serial Port Profile, GAP'a

bağlıdır. SDAP gibi Serial Port Profile da GAP'ın bir paçasını kullanır.

Page 69: Cep telefonu ile bilgisayar kontrolü

69

7.JAVA VE OBEX

Bluetooth, data göndermek ve almak için bize üç tane protokol sunmaktadır. Bunlar,

RFCOMM (stream data göndermek için)

L2CAP(paket data göndermek için)

OBEX(obje data göndermek için)

Bu bölümde OBEX protokol mekanizmasını ve bluetooth cihazları arasında nesnelerin

nasıl gönderildiğinden bahsedilecektir. Bu java.obex paketindeki API leri kapsayacak ve iki

cihaz arasında OBEX kullanarak dosya göndermenin nasıl gerçekleştileceği gösterilecektir.

7.1.OBEX

OBEX(Object Exchange) iki cihaz arasında obje data transferine izin veren bir

haberleşme protokolüdür. Burada cihazların kablosuz veya fiziksel bağlantı ile bağlı olmasının

bir önemi yoktur. OBEX, aslında kızılötesi için geliştirilmişti. Fakat daha sonra bluetooth

protokollerinden biri haline geldi. OBEX, bluetooth ve kızılötesi(IrDA) için uygun bir

protokoldür.

OBEX

SDP RFCOMM

L2CAP

HCL

Link Manager

Link Controller

Şekil 7.1: OBEX, IrDA Protokol Yığınında IrOBEX Olarak Bilinir.

Bluetooth tanımlamasında, OBEX protokolünün temelinde aşağıdaki bluetooth profilleri

kullanılmaktadır.

Generic Object Exchange Profili

Object Push Profili

Senkronizasyon Profili

Dosya Transfer Profili

Basic Imaging Profili

Basic Printing Profili

OBEX implement edilirken javax.bluetooh.obex değil javax.obex paketinin import

edilmesi gerekmektedir.

IrOBEX

IAS Tiny Transport Protocol

Infrared Link Manager

Infrared Link Protocol

Page 70: Cep telefonu ile bilgisayar kontrolü

70

OBEX protokolü basit bir istemci/sunucu mimarisine sahiptir. OBEX istemciler

nesneleri OBEX sunuculara yerleştirme ve alma işlemlerini gerçekleştirir. OBEX sunucular,

istemcilerden gelen istekleri bekler. OBEX tanımı iki kısımda özetlenebilir. Bunlar OBEX

Object Model ve OBEX Session Protokoldür. Object Model OBEX nesnelerin tanımlanmasını

ve nasıl transfer edileceği hakkında bilgi verir. Session Protokol, cihazlar arasında nesnelerin

transferi esnasında istemci ve sunucu arasında olması gereken el sıkışmayı tanımlamaktadır.

7.2.OBEX Object Model

OBEX Object Model, bir nesne hakkındaki tüm detayları temsil eder. Örneğin header

olarak bilinen özellikleri tanımlar. Her header nesne yada nesnenin kendisi hakkında bir bilgi

içerecektir. (Örnegin, nesnenin ismi gibi.) Object Model header lardaki header ID yi bir byte ile

tanımlarken header in değeri bir veya daha fazla byte ile tanımlamaktadır.

Şekil 7.2 OBEX header

OBEX Object Model, bir OBEX nesne özellikleri için 17 header tanımlamıştır. Java

OBEX tanımlamasında java.obex.HeaderSet interface içerisinde sabitlerden yalnızca 12

tanesi tanımlanmıştır.

7.3.OBEX Oturum Protokolü

OBEX Session Protokolü, OBEX sunucu ve istemci arasıdaki haberleşme için gerekli tüm

kuralları ve süreçleri tanımlar. Haberleşme yapısı istek-cevap işlemi şeklinde olup basittir.

İstemci bir istek gönderir ve sunucu bu isteğe bir cevap verir. İstek ve cevabın her ikiside

paketler şeklinde gönderilirler. İstemciler, sunucuyla 8 basit işlem aracılığıyla haberleşir.

Bunlar;

CONNECT

DISCONNECT

PUT

GET

SETPATH

ABORT

CREATE-EMPTY

PUT-DELETE

OBEX sunucular, sırasıyla OBEX istemcilere cevap verirler. Bu cevap şekli aşağıdaki

gibidir.

SUCCESS

FAILURE

Bir Byte Bir veya daha fazla byte

Page 71: Cep telefonu ile bilgisayar kontrolü

71

CONTINUE

Pek çok OBEX cevabı bulunmaktadır. Tüm cevap kodlarını javax.obex API paketi

içerisindeki javax.obex.ResponseCodes classı içerisinde görebilirsiniz. OBEX oturumu boyunca

meydana gelen mesaj akışı aşağıda gösterildiği gibidir.

Şekil 7.3: OBEX İstemci ve Sunucu Arasındaki Mesaj Akışı

İstemci CONNECT operasyonu ile bir istek paketi göndererek haberleşme sürecini

başlatır. İstek paketi, operasyon, paket uzunluğu ve headerlar için kod içermektedir. Bu istek

alındığında sunucu gönderdiği paketde cevap kodunu, cevabın uzunluğunu ve cevap verisini

karşılık olarak gönderir. Normal durumda sunucu SUCCESS cevap kodu ile birlikte paketi

gönderir. Eğer bazı problemler meydana geldi ise sunucu FAILURE kodunu gönderir.

PUT operasyonu, istemciden sunucuya bir nesne gönderilmesine izin vermektedir. Boyutu

küçük bir nesne, bir tek PUT istek paketi ile gönderilebilir. Eğer tek paket ile gönderilemiyorsa

istemci bir den fazla paket gönderir ve sunucu CONTINUE cevap kodu ile yanıt verir. Sunucu

istemcinin gönderdiği son PUT paketine SUCCESS kodu ile cevap verir.

Benzer şekilde istemciler GET istek paketi göndererek sunucudan nesneleri alabilir. Eğer

sunucu paketi kabul ederse, SUCCESS veya CONTINUE kodlarından herhangi birisiyle yanıt

verir. Eğer sunucu CONTINUE ile yanıt verirse, istemcide GET isteğini göndermeye devam

eder. Sunucu SUCCESS kodu ile yanıt verene kadar bu işlem devam eder.

OBEX İstemci Uygulaması OBEX Sunucu Uygulaması

Connect Request

Success

Put/Get

Continue

Put/Get

Success

Disconnect

Success

Page 72: Cep telefonu ile bilgisayar kontrolü

72

İstemci, sunucudaki bir dizini değiştirmek istediğinde PUT ve GET işlemleri ile birlikte

SETPATH işlemini kullanır. İstemci, zamanından önce sunucu ile olan oturumu sonlandırmak

istiyorsa ABORT işlemini kullanabilir. Aynı zamanda CREATE-EMPTY işlemini kullanarak

sunucu üzerinde boş bir dosya oluşturabilir . PUT-DELETE işlemini kullanarak sunucu üzerinde

bulunan bir nesneyi kaldırabilir.

7.4.JSR82’deki OBEX API’leri

JSR deki APIsindeki java.obex paketinde bulunan classlar aşağıdaki gibidir.

Authenticator

ClientSession

HeaderSet

Operation

PasswordAuthenticator

ResponseCodes

SessionNotifier

ServerRequestHandler

Javax.obex.ClientSession

ClientSession interface

7.4.1.Javax.obex.ClientSession

ClientSession interface javax.microedition.io.Connection classının bir alt classıdır ve

istemci açısından bir OBEX bağlantısını temsil eder. Aşağıdaki kod satırında bu interface den

bir nesne oluşturulmuştur.

ClientSession session = (ClientSession) Connector.open(baglantiURL);

Bu interface OBEX işlemleri için bir header tanımlanmasını sağlar. Örneğin, put() ve get()

metodu sırasıyla PUT ve GET işlemlerini gerçekleştirmemize izin verir. Bu metodlar

javax.obex.Operation nesnesini geri döndürür ve böylece işlemi tamamlayabiliriz.

Connect(), disconnect() ve setPath() metodları sırasıyla CONNECT, DISCONNECT ve

SETPATH işlemlerini tanımlar. Javax.obex.HeaderSet nesnesi sonuç olarak geri döner.

7.4.2.Javax.obex.HeaderSet

HeaderSet interface tüm OBEX headerlarını tanımlamak için kullanılır.

ClientSession.createHeaderSet() çağrısı ile temsil edilir. Aşağıda bir OBEX istemci örneği

görülmektedir.

HeaderSet hdr = clientSession.createHeaderSet();

// Sunucudan resim.png dosyası istemek için bir header set oluşturulur.

hdr.setHeader(HeaderSet.TYPE," image/png");

hdr.setHeader(HeaderSet.NAME," masaustu.png");

Page 73: Cep telefonu ile bilgisayar kontrolü

73

Bir OBEX sunucu, sırasıyla getHeader() veya getHeaderList() metodlarının herhangi

birisini çağırarak istenciden gönderilen header’ları alabilir.

7.4.3.Javax.obex.Operation

Bu interface GET ve PUT işlemleri için gerekli olan metodları sağlar. Aşağıdaki kod

parçacığında ClientSession daki put() metodu kullanılarak bir işlem oluşturuldu.

ClientSession session = (ClientSession)Connector.open(baglantiURL);

Operation op = session.put(null);

Ancak, gönderilmek istenen nesneyi yerleştirine kadar ve bazı headerlar eklenene kadar

Operation işlemi tamamlanmayacaktır. PUT örneği aşağıdaki gibidir.

ClientSession session = (ClientSession)Connector.open(baglantiURL);

Operation op = session.put(null);

OutputStream out=op.openOutputStream();

Out.write(“Deneme”.getBytes());

Out.close();

CREATE-EMPTY işlemini gerçekleştirmek için, herhangi bir data yazmaksızın

OutputStream i açıp kapatarak bu işlemi gerçekleştirebiliriz. Bu işlem aşağıdaki gibidir.

ClientSession session = (ClientSession)Connector.open(baglantiURL);

Operation op = session.put(null);

OutputStream out=op.openOutputStream();

Out.close();

Bu classdaki delete() metodunu çağırılarak PUT-DELETE işlemini yapmak daha basittir.

7.4.4.Javax.obex.ResponseCodes

ResponseCodes classı, OBEX sunucunun, istemcilerine gönderebileceği tüm geçerli

cevap kodlarını içerir. OBEX istek/cevap modeli HTTP den çok daha basit bir modeldir.

Aşağıda verilen bazı cevaplar gösterilmektedir.

OBEX_HTTP_ACCEPTED

OBEX_HTTP_BAD_METHO

D

OBEX_HTTP_BAD_REQUE

ST

OBEX_HTTP_CONFLICT

OBEX_HTTP_OK

OBEX_HTTP_RESET

Page 74: Cep telefonu ile bilgisayar kontrolü

74

Eğer PUT işlemi başarılı olursa ResponseCodes classının nasıl kullanıldığına dair

bir örnek verelim.

ClientSession session = (ClientSession)Connector.open(baglantiURL);

Operation op = session.put(null);

OutputStream out = op.openOutputStream();

out.write("Deneme".getBytes());

out.close();

if(op.getResponseCode() ==ResponseCodes.OBEX_HTTP_OK)

System.out.println("PUT işlemi başarılı şekilde gerçekleşti.");

7.4.5.javax.obex.ServerRequestHandler

ServerRequestHandler, OBEX sunucu için çok kullanışlı bir classtır. OBEX

isteklerini cevaplayan event listener içerir. Bu bir classtır, interface değildir. Implement

etmeden miras yoluyla kullanabiliriz. Bu class uygun operasyonu içeren istemci istekleri

geldiği zaman çağrılacak olan aşağıdaki metotlara sahiptir.

OnConnect()

onSetPath()

onDelete()

onGet()

onPut()

JVM tarafından çağrılan callback metodundan sonra Operation nesnesinden

headerları elde edebiliriz.

public int onGet(Operation op) {

try{

HeaderSet hdr = op.getReceivedHeaders();

}

}

7.4.6.javax.obex.SessionNotifier

SessionNotifier interface J2ME deki tüm notifierlar gibi benzer bir yöntem kullanır.

Bir OBEX sunucuya bağlanmak isteyen bir cihaz bu interface’i implement etmeli,

acceptAndOpen() metodunu çağırmalı ve istemcileri beklemelidir. Aşağıdaki kod bu

işlemleri göstermektedir.

Page 75: Cep telefonu ile bilgisayar kontrolü

75

SessionNotifier sn = (SessionNotifier)

Connector.open("btgoep://localhost:1106;name = FTP");

sn.acceptAndOpen(serverRequestHandler);

Sunucu, istemciden gelen bağlantıları kabul eder. Daha sonra istemci için bir kanal

açılır. serverRequestHandler dan oluşturulan alt class acceptAndOpen() metoduna

geçirilerek istemciden gelen tüm istekler sunucu tarafından alınır.

Page 76: Cep telefonu ile bilgisayar kontrolü

76

8.PROJE TASARIMI VE GERÇEKLEŞTIRILMESI

8.1. Proje Hakkında

Projede yapılmak istenen bluetooth teknolojisini kullanarak cep telefonu üzerinden

bilgisayarın fare ve klavyesini kontrol edebilmektir. Cep telefonları için uygulama

yazmada sağladığı esnekliklerden dolayı java programlama dili kullanıldı. Java’nın dili ile

yazılmış programların çalışması için gerekli olan java sanal makine’nin birçok cihazda

bulunması Java programlama dilinin tercih edilmesinde büyük bir etkendir. Bu sebeplerden

dolayı cep telefonu üzerinde J2ME platformu, bilgisayar tarafında ise J2SE platformu

kullanılmıştır. Bilgisayar tarafında yazılan program sunucu cep telefonu tarafındaki

program ise istemci olarak düşünülmüştür.

Sunucu tarafı, öncelikle yerel bluetooth aygıtına erişip istemcinin bağlanması için

gerekli olan servisleri açmak zorundadır. İstemci ise öncelikle çevredeki bluetooth

cihazlarını arar. Arama işlemi sona erdiğinde uygun bluetooth cihazı kullanıcı tarafından

seçilir. Sonraki aşamada seçilen bluetooth cihazının servisleri taranır. Eğer uygun bir servis

bulunursa bağlantı sağlanmış olur. Aksi takdirde servis bulunamadığı için bağlantı

sağlanamaz.

8.2. Proje Mimarisi

Projede öncelikli olarak PC tarafında kullanılan bluetooth cihazı usb dongle olmak

zorundadır ve bu cihazın kendi yazılımı yüklenmeyip Microsoft bluetooth sürücüleri

yüklenmelidir. Microsoft bluetooth sürücüleri yüklendiğinde Microsoft bluetooth stack da

yüklenmiş olacaktır. Microsoft bluetooth stack bize cihazı programlama esnekliğini

sunmaktadır. Usb bluetooth dongle haricinde bir bluetooth cihazı kullandığımızda örnegin

dizüstü bilgisayarın bluetooth cihazına erişmek istediğimizde cihazın sürücüleri yazılım

geliştirme esnekliğini sağlamıyorsa cihaza erişip programlama mümkün olamamaktadır.

Bu nedenden dolayı usb bluetooth cihazı ve Microsoft Bluetooth Stack kullanılmıştır.

Microsoft Bluetooth Stack’a java ile doğrudan erişmek mümkün değildir. Bunun için

java geliştiricileri tarafından yazılmış bluecove paketinin yüklenmesi gerekir. Bu paket

içerisinde JNI(Java Native Interface) formunda yazılmış “intelbth.dll” dosyası

bulunmaktadır. Bu dosya Microsoft Bluetooth Stack’daki Bluetooth API lerine erişmeyi

sağlar. JNI formunda yazıldığı için java tarafından, intelbth.dll dosyasındaki fonksiyonları

çağırmak mümkün olabilmektedir. Şekil 8.1 bu yapıyı bize açık olarak göstermektedir.

Page 77: Cep telefonu ile bilgisayar kontrolü

77

Şekil 8.1 PC tarafında bluetooth cihazına erişim

Şekilde de görüldüğü PC üzerindeki bluetooth cihazına erişim ancak JNI üzerinden

gerçekleştirilmektedir. Javanın Bluetooth Stack eksikliği ancak bu şekilde

giderilebilmektedir. Cep telefonunda ise JSR-82 API leri kullanılarak bluetooth cihazına

erişimi işletim sisteminin kendi sağlamaktadır.

Gerçekleştirlen projede bluetooth cihazları arasındaki haberleşmenin şeklini çizelim.

Şekil 8.2 PC ile Cep telefonu arasındaki haberleşme

Şekil 8.2 de görüldüğü gibi Microsoft Bluetooth Stack API(Application

programming Interface) ve Bluecove paketi cihaza erişim sorununu çözmektedir.

Bluetooth Cihazı

Microsoft Bluetooth

Stack API

Bluecove (intelbth.dll-JNI)

JAVA

Page 78: Cep telefonu ile bilgisayar kontrolü

78

Microsoft Bluetooth Stack API’si C’API sidir. BlueCove ve Microsoft API arasındaki

entegrasyonun sağlanması ise JNI aracılığıyla sağlanmıştır.

Bluecove API’si JSR-82 tabanlıdır. BlueCove aşağıdaki profilleri desteklemektedir.

Genel Erişim Profili

Servis Araştırma Profili

Seri Port Profili

8.3. Uygulamada Kullanılan Classlar ve İşlevleri

Uygulamayı oluşturan classların temel görevleri ve yazılış amacına göz atalım.

8.3.1. Cep Telefonunda Oluşturulan J2ME Uygulaması

Cep telefonu istemci yazılımında arayüzlerin oluşturulması ve arayüzler arasında

geçişi sağlamak amacıyla ilkMIDlet isimli MIDlet oluşturuldu. ilkMIDlet MIDlet’i ile

programın başlangıcında bir tanıtıcı açılış ekranı (splash form) oluşturuldu. Açılış ekranın

ardından ana menü olarak bir List oluşturdu. Bu List ekranına bağlantı oluşturma işlemi

için hazırlanan List olan Cihaz Listesi’ne bağlı olan “Bağlantı Oluşturma” elementi,

programı tanıtan forma bağlı olan “Program Hakkında” elementi, çıkış için ise “ Çıkış”

elementleri eklendi. Cihaz Listesi List’inde “cihaz ara” butonuyla yakındaki cihazlar

aranmaya başlanır. Bu süreçte aşağıda belirtilen cihaz sorgulama fonksiyonu kullanılır ve

ardından bulunan cihazlar Cihaz Listesi’ne eklenir.

// CİHAZ SORGULAMASI

Vector cihazSorgulamasiYap(){

try {

// onceki cihaz bilgileri siliniyor

cihazlar.removeAllElements();

cihazSiniflari.removeAllElements();

yerelCihazAdresi = LocalDevice.getLocalDevice();

yerelCihazAdresi.setDiscoverable(DiscoveryAgent.GIAC); .

kasif = yerelCihazAdresi.getDiscoveryAgent();

kasif.startInquiry( DiscoveryAgent.GIAC , new BlueDinleyici() );

CihazListesi.deleteAll();

CihazListesi.append( "--ARANIYOR--", null );

while(!cihazaramatamamlandi)

{ }

Page 79: Cep telefonu ile bilgisayar kontrolü

79

cihazaramatamamlandi = false;

} catch (BluetoothStateException ex) { ex.printStackTrace(); }

return cihazlar;

}

// CİHAZ SORGULAMASI

“yerelCihazAdresi= LocalDevice.getLocalDevice();

yerelCihazAdresi.setDiscoverable(DiscoveryAgent.GIAC); .

Kodları ile mevcut cihaz bulunur ve yerel cihaz arama için hazırlanır.

kasif = yerelCihazAdresi.getDiscoveryAgent();

kasif.startInquiry( DiscoveryAgent.GIAC , new BlueDinleyici() );

Kodlarıyla kasif adında ajan belirtilir ve bu ajanla civardaki bluetooth cihazları

aranır. Bulunan cihazlar BlueDinleyici isimli dinleyici sınıfı tarafından tututulur .

BlueDinleyici sınıfında bulunan ;

public void deviceDiscovered(RemoteDevice uzakCihaz, DeviceClass cihazSinif) {

if(cihazSinif.getMajorDeviceClass() == 0x0100 )

{cihazlar.addElement( uzakCihaz );

cihazSiniflari.addElement( cihazSinif );}

prosedür ile keşfedilen cihazlardan sadece PC veya Laptop olanlar (cihaz sınıfı

0x0100 olanlar ) Cihaz Listesi’ne aktarılır. Cihaz Listesi’nden sunucu programın

bulunduğu cihaz seçildikten sonra aşağıdaki fonksiyon ile servis araması yapılır.

// SERVİS SORGULAMASI

public void servisSorgulamasiYap(RemoteDevice secilencihaz, UUID[] uuids){

try {

kasif.searchServices(null,uuids, secilencihaz, new BlueDinleyici());

while(!servisaramatamamlandi) { }

servisaramatamamlandi = false;

}

catch(BluetoothStateException e) {}

}

// SERVİS SORGULAMASI

Page 80: Cep telefonu ile bilgisayar kontrolü

80

Uygun bir servis bulunmasıyla sunucuyla istemci telefon arasındaki haberleşme

başlatılır. Cihazlar arası iletisim için aşağıdaki sınıf kullanılır.

// Cihaza bağlanma

class cihazabaglanma {

public void setServiceRecord(ServiceRecord sr){

secilenservis = sr;

getStreams(); }

private void getStreams(){

baglantiURL =

secilenservis.getConnectionURL(ServiceRecord.NOAUTHENTICATE_NOENCRYPT,

false );

try {streamconnection = (StreamConnection) Connector.open( baglantiURL );

dataoutputstream = streamconnection.openDataOutputStream();

datainputstream = streamconnection.openDataInputStream();}

catch (IOException ex) {ex.printStackTrace();}

}

public void mesajYaz(String mesaj){

try {dataoutputstream.writeUTF(mesaj);

dataoutputstream.flush();}

catch (Exception ex) {ex.printStackTrace();}

}

}

8.3.1.1.İstemci J2ME Uygulamasının Cep Telefonuna Yüklenmesi

Uygulama derlendikten sonra jad(Java Description) ve jar (Java Archive) uzantılı iki

dosya oluşur. Derleme sonucu oluşan dosyalar ve uygulamamızda kullandığımız ses yada

resim dosyaları jar uzantılı dosya içerisinde bulunur. Jad dosyası uygulamanın profil,

konfigürasyon jar dosyasının yeri ve boyu gibi bilgileri vermektedir. Uygulama

kurulmadan önce bu dosyaya bakılır eğer cihazımız bu uygulamayı kurmaya uygunsa jar

dosyası jad dosyasının işaret ettiği yerden indirilir ve kurulur. Uygulamanın cep

telefonuna aktarılması için hem bilgisayarın, hem de telefonun desteklediği veri aktarım

teknojilerinden birisi kullanılabilir. Bu aktarım Bluetooth, kızılötesi veya veri kablosu

kullanarak yapılabilir.

Page 81: Cep telefonu ile bilgisayar kontrolü

81

8.3.2. PC Tarafında Oluşturulan J2SE Uygulaması

AnaForm class’ı programın arayüzünü oluşturmaktadır. Bu class üzerinde sunucunun

başlatılmasını ve bağlı olan istemcilerin liste kutusunda görülmesini ve bluetooth cihazı

hakkındaki bilgilerin ekranda görüntülenmesini sağlar.

PCServer class’ı sunucu üzerindeki yerel bluetooth cihazının bulunması, sunucunun

oluşturulması, bağlanacak istemciler için gerekli servislerin sağlanması ve bağlanan

istemciden gelen mesajları alıp bu mesajları yorumlayan classtır.

PCServer class’ında, cep telefonu üzerindeki istemcide de belirtiğimiz aynı 32

karakterlik UUID numarası bağlantı adresi belirtilirken kullanılır. UUID , haberleşme

sırasında Bluetooth sinyallerinde kullanılan bir servis için verilmiş tekil kimlik

numarasıdır. Haberleşmenin kolay ve özel olması için bu kimlik özel belirtilmiştir. İstemci

cep telefonu bu kimlik numarası ile PC’ deki server’a bağlanır.

İstemci cep telefonu için serverı başlatmak amaçlı “Bluetooth cihazı” menüsü

içinde “Sunucuyu Başlat” komutu yer almaktadır. Bu komut çalıştırılmasıyla PCServer

class’ının run() prosedürü çalışmaya başlar. Bu prosedürde istemci programında olduğu

gibi yerel bluetooth cihazı aktif edilmektedir ve ekranda PC server da tanımlanan UUID

numarasıyla sunucunun adresi tanımlanır. Sunucunun adresi

“btspp://localhost:102030405060708090a0b0c0d0e0f010; name=PCSunucu” olarak

belirlenmiştir. Buradaki “btspp” ifadesi Bluetooth Serial Port Profile nin kullanıldığını

belirtir. “localhost” ise sunucu olduğunu belirtir. “102030405060708090a0b0c0d0e0f010”

şeklinde belirtilen ise UUID dir. Tanımlanan adreste en son belirtilen “PCSunucu” ise

servis ismini belirmektedir.

String url = "btspp://localhost:" + uuid.toString() +";name="+ uygulamaAdi;

form.mesajGoster("URL: " + url );

Adres belirtildikten sonra bağlantı için istemci cep telefonundan adrese bağlanması

beklenir ve tanımlanan servis istemci için tanımlı kılınır.

server = (StreamConnectionNotifier)Connector.open( url );

ServiceRecord rec = cihaz.getRecord( server );

Bağlantı kabul etme ve sağlama metodu ile istemci bağlanana kadar servis

aşağıdaki kod bölümüyle sağlanır.

form.mesajGoster("Sunucu istemci baglantisi icin bekliyor...");

Page 82: Cep telefonu ile bilgisayar kontrolü

82

while( !done) {

try {

// istemci bağlantısı kabul edilmeye baÅŸlanıyor.

// İstemci bağlanana kadar bloklanacaktır.

StreamConnection istemci = server.acceptAndOpen();

new BAGLANTI(istemci).start(); } catch (Exception e) {

e.printStackTrace(); } }

İstemci cep telefonu bağlandıktan sonra istemciden gelen mesajlar okunmaya

başlanır. Okunan mesajlar PCServer class’ında belirtilen mesajlar ile aynı olduğunda

belirtilen kodlar çalıştırılır. Robot sınıfında bulunan mause ve klavye metodları ile

gelem mesajlar icra edilir. Örneğin aşağıda belirtilen kodlar ile farenin sağa ve sola

hareket etmesi sağlanır.

if (s.equals("masaustu")){

Dosya dosya = new Dosya();

FareHareketDinleyici f = new FareHareketDinleyici(dosya);

dosya.start();

f.start();

//JOptionPane.showMessageDialog(form, "masaustu istegi geldi...");

} else if (s.equals("hsag")){

mouseKoordinat=MouseInfo.getPointerInfo().getLocation();

robot.mouseMove(mouseKoordinat.x+40, mouseKoordinat.y);

} else if (s.equals("hsol")){

mouseKoordinat=MouseInfo.getPointerInfo().getLocation();

robot.mouseMove(mouseKoordinat.x-40, mouseKoordinat.y); }

8.4. İstemci ve Server Uygulamalarının Çalıştırılması Kullanımı

Hazırlanan istemci ve sunucu uygulamalarının çalıştılması ve kullanımıngöz atalım.

8.4.1.İstemci Cep Telefonu Uygulamasının Çalıştırılması ve Kullanımı

İstemci program çalıştırıldığında öncelikle bir açılış formu görünür. Daha sonra Şekil

8.3 (a) da belirtilen menü isimli List ekrana gelir. Menüden “Bağlantı Oluşturma”

elementini seçerek “Cihaz Listesi” List’i görünür duruma gelir (Şekil 8.3 b). “Cihaz Ara”

tuşuna basarak civardaki PC veya Laptop sınıfı görünür cihazların Bluetooth isimleri

listeye yazılır.

Page 83: Cep telefonu ile bilgisayar kontrolü

83

Arama tamamlandıktan sonra, Sunucu programınının bulunduğu bilgisayarın

Bluetooth ismi seçilir ve cihaza bağlanım sağlanır. Bağlantı kurulduktan sonra

“Bağlantılar” menüsü görünür hale gelir ve “Fare Kontrolü” ile “klavye” fonksiyonları

kullanılabilir hale getirilir(Şekil 8.3 c ). Klavye fonksiyonu için de oluşturulan arayüz

Şekil 8.3 (d) de gösterilmiştir.

(a) (b)

(c) (d)

Şekil 8.3: Cep istemci programının Arayüzleri

Page 84: Cep telefonu ile bilgisayar kontrolü

84

8.4.2.PC Taraflı Server Uygulamasının Çalıştırılması ve Kullanımı

PC tarafında çalışan programın çalıştırılmadan önce bluetooth cihazının takılmış

olması gerekir. Daha sonra sunucu tarafı aşağıda görüldüğü gibi çalıştırılır.

Şekil 8.4: PC tarafındaki bluetooth sunucunun başlatılması

Sunucu başlatıldıktan sonra bilgisayar, bağlanacak istemciler için bir servis açar.

Bağlantı istekleri için beklemeye başlar.

Page 85: Cep telefonu ile bilgisayar kontrolü

85

Şekil 8.4: Bluetooth sunucu istemcilerin bağlanmasını bekliyor.

Sunucunun adresi

“btspp://localhost:102030405060708090a0b0c0d0e0f010;name=PCSunucu” olarak

belirlenmiştir. Buradaki “btspp” ifadesi Bluetooth Serial Port Profile nin kullanıldığını

belirtir. “localhost” ise sunucu olduğunu belirtir. “102030405060708090a0b0c0d0e0f010”

şeklinde belirtilen ise UUID dir. Yani haberleşmenin özel olarak gerçekleşmesini sağlayan

unique ID dir. İstemci tarafı olan cep telefonun bu UUID’yi bilmesi gerekir. “PC Sunucu”

ise servis ismini belirtmektedir.

Page 86: Cep telefonu ile bilgisayar kontrolü

86

9. SONUÇ

Lisans seviyesinde gerçekleştirilen bu tezde, teorik araştırmalarda, bluetooth

donanımına erişmede, tasarım ve grafik kodlama konusunda pek çok bilgi ve tecrübeler

elde edinilmiştir.

Mobil cihazlar gelişen hızlı teknolojilerle birlikte, hızla gün geçtikçe yeni

yetenekler, yeni özellikler kazanmaktadırlar. Teknolojik gelişmeler gösteriyor ki mobil

cihazlar ve kablosuz teknojiler ilerde hayatımıza tamamen girerek yeni özellikleriyle insan

hayatını kolaylaştırmaya devam edeceği açık olarak görülmektedir.

Page 87: Cep telefonu ile bilgisayar kontrolü

87

10. KAYNAKLAR

[1] HOPKINS Bruce, ANTONY Ranjith : Bluetooth For Java

[2] WILEY John and Sons:Programming Java 2 Micro Edition for Symbian OS

[3] ÖZÇELİK, Mehmet Ali : Bluetooth Üzerinden Güvenli Veri İletimi

[4] ALTINTAŞ, Altuğ B. : Java Yazılım Tasarımı

[5] HORSTMANN Cay, CORNELL Gary : Core Java 2 Volume II

[6] SOKULLU Radosveta, DUT Pınar, KARTAL Bilge : Bluetooth İnteraktif

Eğitim Aracı ve Chat Uygulaması

[7] ÇÖLKESEN, R., ÖRENCİK, B., 2002. "Bilgisayar Haberleşmesi ve Ağ

Teknolojileri"kitabı,

[8] C. Bala KUMAR, Paul J. KLINE, Timothy J. THOMPSON : Bluetooth

Application Programming with the JAVA API’s

[9] Jonathank KNUDSEN and Sing LI : Begining J2ME From Novice to

Professional

[10] Samiul HOQUE, Prosenjit SHAHA :Control Pc Via Bluetooth Enable

Mobile

[11] http://www.bluetooth.com

[12] http://www.java.sun.com

[13] http://www.benhui.net

[14] http://www.nokia.com

[15] http://www.belgeler.org