VAPI (VANTILATOR API) 1.0 SPECS

VAPI, PC'den vantilator kontrolu icin tasarlanmi$ standart bir programlama arabirimidir.

1. HARDWARE SPECIFICATIONS

a) Vantilator

"Vantilator" kelimesi insani serinletmeye yarayan tum cihazlari kapsamaktadir (Klima, Hava Ufleyebilen Soba ve tabi Vantilator)... VAPI standardina uygun Vantilator'lerde bir seri port giri$i bulunur (RS232C)... Bilgisayara herhangi bir null-modem cable ile baglanabilir...

b) Bilgisayar

Vantilatore direk bilgisayarin uzerindeki seri portlardan herhangi biriyle baglanabilir... UART olarak 8250 yeterlidir...

Ileti$im komutlari:

Vantilator ile bilgisayar arasindaki ileti$im 5 byte'lik VAPI Device Communcation Packet'lar kullanilarak saglanir. Bu packet'larin formati $oyledir:

VAPI Device Communcation Packets Structure:
Size Description
BYTE Command mnemonics
0 = NOP
1 = PLY
2 = STP
3 = EJT
4 = RPM
7 = ESC
8 = HGH
9 = AGH
A-FF = RES
DWORD Packet checksum

Ileti$im kanali 8,N,1'dir ve 9600 baud hizindadir. Handshake protokolleri ignore edilir. Carrier ignore edilir.

2. SOFTWARE SPECIFICATIONS

VAPI icin iki seviyeli bir API vardir: real mode api ve protected mode api... Real mode API direk BIOS'tan desteklenmektedir... Award BIOS'larin 6/6/96 ve daha yeni tarihlilerinde icsel real mode VAPI destegi mevcuttur... AMI BIOS'larin VAPI destegi hatalidir ve olumle sonuclanan kazalara yol acabilmektedir.

UYARI: Eger sisteminizde AMI HiFlex BIOS varsa kafanizi vantilatorun hizasinda tutmayin! Ayrica vantilatorunuzu cocuklarin eri$emeyecegi bir yerde saklayin. Vantilator buzdolabinda 3 ay tazelik ve nefasetini korur.

a) Real mode VAPI

Real mode VAPI, $7E interrupt'inda bulunur. Eger bu interrupt kullanimdaysa API server otomatik olarak sirasiyla $7E, $7F, 0, 1, 2 ve 3 interrupt'larini dener (ve cogunlukla ba$arisiz olur)... Istemci program VAPI destegini ara$tirmak icin bu interrupt'lari sirasiyla a$agidaki parametrelerle cagirmasi gerekir:

giri$te registerlar: AX=0000h ; VAPI signature
donu$te registerlar: AX=0000h ise VAPI hafizada mevcut.

Cogu durumda VAPI'nin install edilmedigini anlamak olanaksizdir... Boyle durumlarda istemci programin VAPI'ye ce$itli isteklerde bulunmasi ve sonuclari kontrol etmesi gerekir. Real mode VAPI'de istekler a$agidaki gibi yapilir:

Fonksiyon 01 - Get Device List

giri$te registerlar: AH=01h
donu$te registerlar: AH=01h (fonksiyon destekleniyor)
ES:DI=device info block'a pointer
bozulan registerlar: BP,DS

device info block formati:

Microsoft tarafindan hazirlanan VAPI Device Info Structure:
Size Description
WORD Reserved (must be zero)
WORD Reserved
DWORD Reserved (must be zero)
DWORD Reserved (read only. do not change!)
ASCIIZ Reserved (reserved for internal use. do not change!)
DWORD seg:offs pointer to next device info block (will be reserved)

Gelen device info'dan gerekli bilgiler okunduktan sonra her device icin Get Device Info fonksiyonu cagirilir:

Fonksiyon 02 - Get Device Info

giri$te registerlar: AH=02h
ES:DI points to device info structure
donu$te registerlar: AH=02h (i$lem ba$arili)
SP=device flags
bozulan registerlar: CR0,SP

UYARI: Bu fonksiyon flag'leri SP registerinda dondurdugunden cagirmadan once SP register'ini bir yerde saklamayi unutmayiniz. Ornek bir program a$agida verilmi$tir:

  PUSH SP
  MOV AH,2
  INT 3     ; VAPI interrupt
  CALL 0    ; sistem daha ne kadar dayanacak test ediyoruz
  REP STOSB ; eger bundan da kurtulursa her$ey okey
  POP SP    ; SP'yi geri aliyoruz
  RETF      ; gulluk gulistan


Device flags:

bit 0 - Device is a cooling device (ustte bahsedilenler)
        Eger bu bit kapaliysa device'in sogutma degil isitma device'i oldugu
        ortaya cikiyor.

    1 - Device needs IOCTL calls.
        Bu bit device'in Microsoft tarafindan yazildigi anlamina geliyor.
        Borland programcilari ignore etsin.

    2 - Device supports software EJECT.
        Bu bit vantilatorlerde her zaman 0 degerini dondurur. Yine de
        yazilimcilar EJECT komutu vermeden once device'in vantilator
        olmadigindan emin olmak durumundadirlar.

    3-14 - reserved (must be zero)

    15 - Device is little endian.
        Bu device'in Intel LSB MSB notation'i kullandigini gosteriyor.
        Motorola i$lemcili Vantilator'lerde high-low swappingi gerekebilir.


Device hakkinda bilgileri aldiktan sonra artik device'a komut gondermeye ba$layabiliriz:

Fonksiyon 03 - Send Command to Device

giri$te registerlar: AH=03h
AL=komut kodu:
00 - play device
01 - stop device
02 - eject device (!UYARI! kismini okuyun)
03 - adjust RPM (sadece vantilatorler icin gecerli)
BX=1000000/RPM (ornek: 2600 RPM icin 384)
04 - adjust temperature
BX=sicaklik
CX=tahmini oda sicakligi
DX=ikisinin toplami (checksum)

donu$te registerlar: AH=03h ; fonksiyon destekleniyor
AL=hata kodu:
 CX:DX=gunun tarihi (MSDOS format)
BX=sistemdeki disket surucu sayisi

00 - hata yok, komut ba$arili
01 - bilinmeyen komut
02 - komut device tarafindan desteklenmiyor
03 - eject kontrolden cikti
04 - bilinmeyen hata (sadece Macintosh)
05-FF - OEM specific error codes
bozulan registerlar: DS,CS,IP 

UYARI: Bu fonksiyon'un size geri donmesini saglamak icin a$agidaki gibi bir kod kullanacaksiniz:

GetIntVec(3,myvec);
myvec^[$45f] := $90;   ‡ VAPI server kodunu patch ediyoruz §
myvec^[$460] := $90;
myvec^[$5A8] := donu$ adresi;

Bu koddan sonra VAPI'yi cagirdiginizda CS ve IP registerlari duzgun degerleri koruyacaktir.

b) Protected Mode API

Real mode'a benzer bir arabirim kullanilan Protected Mode API'de kullanim cok basittir... Oncelikle protected mode'a gecmeden evvel Real mode VAPI cagirilir ve buradan Protected mode VAPI address aranir:

Fonksiyon 04 - Get Protected Mode Entry Point
giri$te registerlar: AH=04h
donu$te registerlar: AH=04h (fonksiyon destekleniyor)
ES:DI (protected mode entry point)
bozulan registerlar: AX,BX,CX,DX,DS,ES,BP,SI,DI,FS,GS,CR0,DR0,Flags

Buradan ogrenilen real mode address protected mode'a gecerken IDT uzerinden INT $7E'ye atanir. Eger INT 7e kullanimdaysa sirasiyla 7f, 0, 1, 2 ve 3 denenmelidir.

Interrupt'larin cagirilmasi Real mode API ile aynidir. Fakat real mode API'de bozulan CR0 register'lari protected mode API'de bozulmamaktadir. API onun yerine DS:0'in gosterdigi bolgeyi scratch area olarak kullanmaktadir.

3. PROGRAMMING CONSIDERATIONS


CONTRIBUTORS



END OF VAPI 1.0 SPECIFICATIONS REFERENCE MANUAL