• (bkz: ssg) (bkz: api) (bkz: hitnet) (bkz: vantilator)
  • 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..
hesabın var mı? giriş yap