Ovladac TTY pres RS232 pro TUOX





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.

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.


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.


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

Tomas Kupka Miroslav Hasala

Support The best Operating system on the World




>