Nasim ukolem bylo zjistit stav a zprovoznit
stavajici implementaci terminalu po seriove lince RS232. Pote se pokusit emulovat
sekvence terminalu VT100.
Puvodni stav
Ovladac
neni schopen zadneho rozumneho spojeni s terminalem, natoz jakehokoliv prenosu deklarovaneho
predchozi skupinou. Zdrojovy kod stale zustava rozclenen na mnoho "incu".
Stav nasi prace
1)
Pri zajistovani spojeni TUOXu s terminalem dochazelo k vypisovani nesmyslnych hodnot. Problem
byl ve funkci int vypocti_del(int rychlost_prenosu) ,
ktera vraci prislušnou hodnotu pro delitele rychlosti. Panove v predchozi skupine si totiz
popletli hexa a deci formaty cisel. Po oprave teto chyby jsme uz byli schopni se s
terminalem spojit bez problemu.
2)
Pri spojeni s terminalem server
vypisoval vse na obrazovku. Ve skutecnosti by vsak mel vracet echo zpet na terminal. Toto je
zpusobeno ponekud chaotickou koncepci volani obsluznych funkci pri prijmu udalosti od COM
portu. Z postupu zprcovani udalosti je zrejme, ze se s terminalem pres RS232 nepocitalo hned
od zacatku.
3)
Dale bylo zprovozneno premapovani ESC sekvenci z TUOXu na VT100 pro posun kurzoru, vymazani
radku od pozice kurzoru, atributy vypisu (barva textu ci pozadi) a pro posun kurzoru libovolne
po obrazovce.
Puvodni koncepce volani vypadala asi takto :
Pri prichodu znaku z COM portu se volala fce out_char(OUT_CHAR.INC),
ktera navic delala premapovani ESC sekvenci VT100 na naše ESC sekvence, dale se pak volala
fceflush(TTY_SCRL.INC), ktera vše
vysypala na obrazovku a až nasledne se volala tty_devstart,
ktera opet delala premapovani ESC sekvenci a navic zkousela prenest vystupni frontu zpet na
terminal, ale jiz nemela co.
Jak je videt nektere veci se delaly dvakrat a postup volani nemel v tomto pripade zadnou
logiku.
Proto byl zmenen postup volani fci:
Pri prijmu znaku z COM portu je volana fce do_write,
kde se prijaty znak preda do vystupni fronty a pak je volana v pripade potreby fce flush(),
ze ktere je volan tty_devstart
a ten si obslouzi vyst. frontu dle prisl. terminalu. Funkce flush lze volat i fce echo(),
ktera se pouziva pri nastaveni echa na terminalu.
Zhodnoceni
Cely terminalovy ovladac je schopen provozu s VT100 terminalem. Jedinou doposud znamou chybou je nemoznost poslani znaku 0x00 z terminalu na server pri pouziti ESC sekvenci (zmena atrib.), cimž cely premapovavaci automat zustane v nedefinovanem stavu a po urcite dobe zaplni vystupni frontu a server prestane prijimat veskere znaky.
Stavajici problem, ktery nebyl vyresen je stale velke a dosti
neprehledne mnozstvi *.INC souboru.
Poznamka:
Na tomto miste bych chtel uvest soubory, ktere byly upravovany :
console.inc
do_write.inc
out_char.inc
tty_init
rs232.inc
dev232.inc
tty_scrl.inc
Pokud mate zajem, muzete se podivat na definice struktur a ESC sekvenci u nasich predchudcuTTY
Support The best Operating system on the World
>