vapi
-
-
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
dwordpacket 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!)
asciizreserved (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
* vapi'ye recursive call'lar yapmayiniz.
* vapi'ye interrupt icinden call yapmayiniz. eger interrupt icinden call
yapmaniz gerekirse $oyle bir kod kullanin:
cli
int 3
sti
* vapi'ye call yaparken carry flag'i mutlaka set konumunda olmalidir.
eger carry flag'i unset ise vapi bunu "unlink and self-destruct all
devices" komutu olarak algilar. guvenlik olarak $oyle bir macro
tanimlayin:
vapi macro
clc
int 3
vapi endm
* vapi'yi iki cagiri$iniz arasindaki zaman en az 1 ms en fazla 3 ms
olmalidir. eger vapi'yi 3 ms icinde tekrar cagirmazsaniz vapi idle
konumda oldugunu du$unup sistemi power saving moduna gecirecektir. bunu
da a$agidaki kodla cozebilirsiniz:
getintvec(8,oldint8); ?interrupt handler
setintvec(8,?myint8);
procedure myint8;interrupt;
begin
vapi;
asm pushf end;
oldint8;
end;
boylece saniyenin 18.2'sinde bir vapi cagirilacak ve sistem
gocmeyecektir.
(not: 3 ms tabii ki saniyenin 18.2'sinde birden uzundur. bundan dolayi
a$agidaki debug script ile timer interval'i 1 ms granularity'ye
du$urmeniz gerekiyor:
-o 40 0
-o 40 0
bundan sonra duzgun cali$masi gerek)
veya alternatif cozum olarak sistemde apm yukluyse "disable apm"
komutuyla da bu i$i halledebilirsiniz.
* multitasking ortamlarda ayni anda iki task'ten vapi'nin cagirilmamasi
gerekmektedir. eger boyle bir durum zorunluysa her task icin iki ayri
vapi driver'i yuklenmesi gerekmektedir.
* vapi'yi os/2 dos box'ta cagirmadan once os/2'nin disabled durumda
olmasi gerekmektedir. bunun icin os/2 dos backdoor'unun "start critical
section" ve "end critical section" function'larini kullanabilirsiniz.
* vapi driver'ini yuklemeden once, hard diske yazmayi engelleyici bir tsr
yuklemeyi unutmayin. hdlock gibi bir program i$inizi gorur. win95 direk
disk eri$imin engellediginden win95 altinda yuklemenize gerek yoktur.
contributors
* sedat kapanoglu - (kapanoglu international software systems)
* harun arabulan - (supertv broadcasting & corporation)
* necdet yumurtaci - (capa rubber engineering and reproduction ltd)
* meric $entunali - (arapoglu production & reporduction inc)
end of vapi 1.0 specifications reference manual -
ben yaptim boole bishii gecen donem okulda proce dersinde
(bkz: pwm) yontemi ile motor chalistirilior ve bu pulse'larin duty cyclelari msctls_trackbar32 kontrolu ilen artirip azaltileybil.
ikinci bir thread de bu pulse'lari seri porttan gönderio. seri porta baali tarafimdan tasarilmi$ bi kart sayesinde motora darbeler gonderilio darbeler ne kadar siksa o kadar hisli doneyo
taam interface olmeyo ama pervane takinca gusel bi vantilator oluo
serinletio ohh -
(bkz: vapiti)
-
hindistan'da mumbai'den 3 saat uzaklıkta dün gittiğim şehir, endüstri bölgesinde arka sokaktaki firmayı bilmeyen güvenlikçilerin cirit attığı yer. gittiğimiz yol aynı manisa - salihli arasındaki yolun tıpkısı, yol kenarı tezgahta meyve satanlar, motorsikletler, duraklama yerleri, bir tek geçilen ödemeli gişeler eksik.. gişede parayı almak için 4 kişi olması, elden ele parayı bankonun içindeki görevliye uzatması, sonra soldan cama vuran boyalı suratlı değişik giysili tip, yolda uyurken gördüğüm bir rüya gibi ama gerçek..
ekşi sözlük kullanıcılarıyla mesajlaşmak ve yazdıkları entry'leri
takip etmek için giriş yapmalısın.
hesabın var mı? giriş yap