Portál AbcLinuxu, 14. května 2025 19:11

Dotaz: terminal

22.8.2016 23:04 strudl
terminal
Přečteno: 557×
Odpovědět | Admin
Ahoj, vedel by nekdo jak se programuje terminal? Vrta mi v hlave jak to funguje. Rekneme, ze mam nejaky monoliticky chip a chtel bych udelat podporu prikazoveho radku. Tzn. abych se pres COM port pripojil terminalem k tomu chipu. Ukazala by se mi prikazova radka a mohl bych psat prikazy a sledovat jejich vystup.

Jak treba ten chip pozna, ze na strane pc nekdo spustil terminal a pripojil se k nemu? Je nejaky standardizovany protokol prikazove radky, ktery by rikal, ze po urcite sekvenci se vrati aktualni prompt? Protoze, kdyz by byl chip pripojeny pres COM a nekdo by spustil terminal a tem by chipu neposlal zadne data, tak by terminal nezobrazil zadnou odpoved a obrazovka by byla prazdna.

Dalsi vec je jak funguje prepisovani textu. Kdyby se mel porad na stejnem miste zobrazovat loading indicator. Tak chip by posilal porad postupne znaky | / - \ - \ simulujici otaceni carky na miste, ale misto animace by se jen vypisovaly znaky na miste. Takze chip musi nejak do vystupu rict, ze kurzor se nema posunout, nebo ze ma skocit na dane misto. Jak to funguje?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.8.2016 06:35 ZAH | skóre: 43 | blog: ZAH
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus pročíst toto https://alioth.debian.org/projects/minicom/ myslím , že dělá něco podobného na co se ptáš a navíc má poměrně solidní nastavení komunikace.
23.8.2016 09:34 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak treba ten chip pozna, ze na strane pc nekdo spustil terminal a pripojil se k nemu?

Na strane pc, urobíš open("/dev/ttyS0",O_RDWR). /dev/ttyS0 zodpovedá COM1. Dostaneš handle a na ten handle urobíš write(buf), kde buf získaš napr. prečítaním riadku zo stdin. Na druhej strane tej sériovej linky musí niečo tie dáta čítať. A bude ich napr. čítať kým nepríde znak EOL. Keď nájde EOL, tak urobí akciu a zapíše niečo naspäť a to ty prečítaš cez read() z toho istého handle-u.

Predpokladám, že na ten handle získaný z open() sa dajú potom robiť nejaké volania, ktorými sa nastavuje rýchlosť, parita atd. Keby aj nie, tak sa pozri na stty (a tiež napr. chat) (ach zlaté časy analógových modemov ;-) )
23.8.2016 12:17 jare | skóre: 1
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jenom abychom si to ujasnili - asi nechceš programovat terminál, ale spíš něco, co s tím terminálem bude komunikovat. A teď k Tvým otázkám:

Po tom, co z terminálu přijde znak konce řádku se zpracuje obsah řádku (tj. většinou se spustí nějaký program a zobrazí se jeho výpis) a pak se zobrazí prompt. Je-li řádek prázdný, zobrazí se rovnou prompt. Je to velice hrubý popis,ale pro první představu snad stačí.

Posuny kurzoru a podobné záležitosti se řeší pomocí řídicích kódů. Každý terminál je má trochu jiné, ale základ je většinou stejný. Podívej se třeba na http://wiki.bash-hackers.org/scripting/terminalcodes.
23.8.2016 12:51 Ivan2 | skóre: 5
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
vetsina dnes pouzivanych terminalu, je klonem VT100.

http://www.vt100.net/.

Jinak kazdy Unix ma databazi, kde je popsano, co ktery terminal umi. Ke sprave te databaze slouzi nastroje tic, tac a toe. tic = terminal information compiler. (tac a toe uz je jen jazykova hricka). Pak je tu jeste prikaz infocmp, ktery ti z te databaze vypise definici terminalu.

PS: nektera jmena terminalu jsou jen aliasy. Napr. term byve jen alias to termr6

23.8.2016 12:54 Ivan2 | skóre: 5
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jeste je potreba poznamenat, ze definice terminalu jsou neco co proslo desitkami let vyvoje. Viz "man 5 terminfo".
25.8.2016 09:46 strudl
Rozbalit Rozbalit vše Re: terminal
Odpovědět | | Sbalit | Link | Blokovat | Admin
Diky za reakce, odkazy se mi budou hodit.

Spise mi jde o tu druhou stranu na chipu. Zkousel jsem cist z USARTU radky a odesilat vystup. Docela to i funguje, ale napr. po pripojeni z Windows pres Putty na COM port se nic nestane. Vidim cernou obrazovku. Nevypise prompt dokud nestisknu nejakou klavesu. Protoze se zadne data z Putty na chip neposlou tak ani chip nevi, ze ma poslat vypis promptu. Po stisku klavesy chip posle prompt, ktery se zobrazi v Putty.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.