Tema: Re: PC valdymas per IrDa
Autorius: saimhe
Data: 2010-10-27 15:19:48
> o jei RXD sujungsiu su DSR, tai kazka paimines ?

   Kokie baitai gali matytis, jau rašiau. Toks iškreiptas būdas leis
grubiai matuoti impulso trukmę, su sąlyga, kad intervalas tarp jų yra
pakankamai didelis, impulsas yra nuo 1 iki 10 bitų trukmės (atitinkamai
parinkus porto baud rate). Jei intervalas irgi koduoja informaciją, ją
prarasi.

   Pavyzdžiui, http://www.sbprojects.com/knowledge/ir/rc5.htm būtina
matuoti abi trukmes. Šitas kodavimas primena UART duomenų formatą
tik iš dalies.
   Ekvivalentinis baud rate yra 1 / 889e-6, gana toli nuo artimiausių
standartinių 600 ir 1200. Kai kurie UART išspaudžia įvairesnius greičius,
bet reikia žiūrėti dokumentaciją. Pavyzdžiui, FT232
http://www.ftdichip.com/Support/Documents/AppNotes/AN232B-05_BaudRates.pdf
draiveriui tiesiog padavus suapvalintą reikšmę 1125 bps, paklaida bus
pakankamai maža.
   Atskiras klausimas, ar visada gausis start/stop bitai, be kurių
UART nieko nepriims. Imkim paveiksliuke duotą paketą (adresas 05h,
komanda 35h). Pirmas baitas gautųsi 0A9h. Bet, esant parity "none",
priims tik kol bit6=0, nes jo pirmoji pusė atitinka stop bitą (su
bit6=1 jau reikia parity "space"). Kol kas sekasi. bit6=0 antroji
pusė yra visai neblogas start bitas, todėl antras baitas gautųsi 56h.
Jo stop bitu gali būti tik bit11 pirmoji pusė, vadinasi, reikia bit11=1.
Deja, greitai kaitalioti parity neleidžia nei UART, nei draiveris.
Tegul pasisekė ir bit11=1, jame tuo pačiu randame start bitą,
tolimesni bitai užkoduoja 0D9h (du paskutiniai bitai ir stop imami
iš pauzės tarp paketų).
   Vienžo, užsiknisi ir universaliai tikrai nesigaus. Kai kurių
distancinių (dėl siunčiamo nepalankaus adreso) nematys apskritai,
o kituose nematys dalies mygtukų.

   girder irgi neturi kitos išeities. Turėtų neblogai gautis, imant
DSR atsiradimo ir dingimo timestamp'us su GetSystemTimeAsFileTime():
raiška 0.1 mikrosekundės, ir naudojant vien FILETIME.dwLowDateTime,
maksimali trukmė daugiau nei pakankama (429 sekundės), tačiau reikšmė
retkarčiais "apsiverčia" (timestamp skirtumas gausis neigiamas --
reikia koreguoti). Rezultatas bus keliolikos skaičių masyvas ir, šias
trukmes analizuojant, galima dekoduoti.

-- 
  saimhe