~ruther/CTU-FEE-B0B35APO-Semestral-project

62248071a6746137c325e2efe111be1c619eecd5 — Boháček, František 4 years ago 007f26c + d252cd0
Merge branch 'docs' into 'dev'

Add final documenttion

See merge request bohacfr2/apo-sem!2
M Makefile => Makefile +1 -1
@@ 84,7 84,7 @@ run-image-viewer: copy-executable
run-text-viewer: copy-executable
	ssh $(SSH_OPTIONS) -t $(TARGET_USER)@$(TARGET_IP) $(TARGET_DIR)/text-viewer $(ARG)

docs:
docs: FORCE
	doxygen DOXYGEN

clean:

M README.md => README.md +240 -14
@@ 1,22 1,248 @@
* CTU FEE APO Semestral Project
# Zadání
Semestrální práce bude rozdělena do 3 jednotlivých programů vypracovaných pro MZAPO. Hlavní z nich
bude průzkumník souborů, ve kterém bude možné procházet celý kořenový souborový systém ~~a také externí zařízení~~.
~~Průzkumník bude umět základní operace jako kopírování, přesouvání a mazání souborů~~. Dále spouštět spustitelné soubory
a pro obrázky, resp. pro textové soubory otevřít prohlížeč obrázků, resp. textových souborů.

This project consists of 3 programs for MZ_APO.
Prohlížeč obrázků je druhý program, který bude umět otevřít formáty jpeg, png a ppm. Přes rotační enkodery
bude zařízen pohyb kurzoru po obrázku a následně se půjde na jednotlivé části obrázku přibližovat,
aby obrázek nebyl moc malý.

** Documentation
Documentation may be built using make docs
and then found in docs/ folder
Prohlížeč textových souborů je poslední program, ten bude umět otevírat kterékoliv soubory, ale korektně
bude zobrazovat jen ty textové. Půjde se v něm pohybovat za pomoci rotačních enkoderů.

** File browser
For viewing local filesystem, browsing folders and opening files
Vstup bude zařízen standardním vstupem pro ovládání na dálku a rotačními enkodery pro ovládání přímo.
Standardní výstup bude použit k logování hlášek o tom, co program právě dělá nebo v jakém chybovém stavu se nachází.

More can be found in manual
Pro rychlejší ladění bude možnost programy spouštět na osobním počítači, kde se jako displej využije SDL okno.

** Image viewer
For viewing images you can zoom to at cursor location
## Zhodnocení splnění zadání
U průzkumníku souborů jsem bohužel nestihl implementovat základní operace jako přesouvání, mazání nebo kopírování souborů.
Stejně tak průzkumník souborů neumí sám namountovat externí zařízení jak bylo v plánu. Průzkumník tak umí pouze procházet složky,
otevírat soubory v příslušném programu (podle mime typu).
Na druhou stranu z prohlížeče textových souborů i obrázků se mi podařilo implementovat vše ze zadání
jak pro ovládání přes rotační enkodery nebo přes standardní vstup.

More can be found in manual
Program na rychlejší lazení se mi povedlo vytvořit tak, že z většiny simuluje reálnou nízkou úroveň periferií. V kódu je tak potřeba
minimum změn, aby místo na MZAPO běžel na osobních počítačích, je potřeba pouze změnit inicializaci programu, mapovací funkci nahradit
vlastní mapovací funkcí a změnit posílání dat a příkazů displeji. Ovládání RGB LEDek i LED pásku zůstává stejné, není potřeba žádný zásah
do kódu. Šlo by i jednoduše implementovat rotační enkodery po odchycení SDL eventů.

** Text viewer
For viewing text files (it will not work correctly with non text files)
# Manuál
## Průzkumník souborů
### Funkce
Program slouží na procházení kořenového systému souborů.
Dokáže spouštět soubory a otevírat obrázky nebo textové soubory.
Lze vyvolat kontextové menu, ve kterém lze otevřít kterýkoliv
soubor v prohlížeči textu.

More can be found in manual
Program obsahuje jednoduchý návod k obsluze,
ke kterému se jde dostat v hlavním menu.

### (Virtuální) okna
Program se skládá z oken, mezi kterými se přepíná.

#### Výchozí menu

Ve výchozím menu lze otevřít průzkumník souborů
nebo si přečíst, jak se program ovládá.

#### Průzkumník souborů

Průzkumník souborů zobrazuje, v jaké složce
se zrovna člověk nachází a soubory v ní.
Lze se navigovat mezi složkami, zobrazit kontextové
menu nebo spouštět soubory.

#### Kontextové menu

V kontextovém menu lze soubor spustit nebo ho
zobrazit v prohlížeči textu.

#### Dialog

Dialogové okno se typicky ukáže při chybě.
Je v něm zachycená chyba, která nastala.

### Spouštění
Program nepřijímá žádné argumenty, ty jsou ignorovány.

Použití:
`
./file-browser
`

### LED pásek
Na LED pásku se ukazuje vertikální pozice v průzkumníku souborů,
aby bylo poznat, kolik souborů je ještě potřeba projít do konce
složky.

### Chybové stavy
Chyby se hlásí přes dialogové okno.

### Ovládání

#### Standardní vstup
- `h`, `j`, `k`, `l` - pohyb pohledu po souboru (doleva, dolů, nahoru, doprava)
- `y`, `i`, `o`, `p` - pohyb o celou obrazovku pro rychlejší navigaci (doleva, dolů, nahoru, doprava)
- `z`, `x` - přiblížení a oddálení textu
- `n` - vrácení pohledu na začátek seznamu souborů
- `m` - pohled na konec seznamu souborů
- `e` - ukončení programu
- `c` - kontextové menu souboru
- `v` - potvrzení výběru (spuštění souboru / přepnutí složky)

#### Rotační enkodery
- První (červený) - horizontální posun pohledu
- Druhý (zelený) - vertikální posun pohledu
- Třetí (modrý) - přiblížení nebo oddálení textu
- Tlačítko prvního enkoderu - ukončení programu / pohyb zpět
- Tlačítko druhého enkoderu - kontextové menu souboru
- Tlačítko třetího enkoderu - potvrzení výběru (spuštění souboru / přepnutí složky)
## Prohlížeč textových souborů
### Funkce
Program zobrazí na LCD displeji text z textového souboru, lze se po něm pohybovat rotačními enkodery.
Pokud program nedostane textový soubor, je možné, že ho nezobrazí korektně.

### Spouštění
Program nelze bez argumentů spustit, je vždy potřeba spustit s cestou k souboru s textem.
Jinak program skončí s chybovým stavem vyobrazeným na RGB LEDkách.

`
./text-viewer [cesta-k-souboru]
`

### LED pásek
Na LED pásku se ve fázi načítání ukazuje kolik dat je již načtených.
Po načtení se zobrazuje vertikální pozice v souboru podle toho, jak moc je soubor posunutý.

### Chybové stavy
Pokud se program nespustí správně, jedna z RGB LEDek se rozsvítí červeně.

Levá RGB LED znamená, že nebyl předán žádný argument. Pravá RGB LED znamená, že soubor se nepodařilo načíst,
neexistuje nebo k němu nejsou přístupová práva. Konkrétní chybová hláška se objeví na standardním výstupu.

### Ovládání

#### Standardní vstup
- `h`, `j`, `k`, `l` - pohyb pohledu po souboru (doleva, dolů, nahoru, doprava)
- `y`, `i`, `o`, `p` - pohyb o celou obrazovku pro rychlejší navigaci (doleva, dolů, nahoru, doprava)
- `z`, `x` - přiblížení a oddálení textu
- `n` - vrácení pohledu na začátek souboru
- `m` - pohled na konec souboru
- `e` - ukončení programu

#### Rotační enkodery
- První (červený) - horizontální posun pohledu
- Druhý (zelený) - vertikální posun pohledu
- Třetí (modrý) - přiblížení nebo oddálení textu
- Tlačítko prvního enkoderu - ukončení programu
- Tlačítko druhého enkoderu - vrácení pohledu na začátek souboru
- Tlačítko třetího enkoderu - pohled na konec souboru
## Prohlížeč obrázků
### Funkce
Program zobrazí na LCD displeji přeškálovaný obrázek, který se dá přibližovat pomocí rotačních enkoderů nebo standardního vstupu.
Při spuštění programu je obrázek oddálený tak, aby se vešel celý na obrazovku.

### Spouštění
Program nelze bez argumentů spustit, je vždy potřeba spustit s cestou k souboru s obrázkem.
Jinak program skončí s chybovým stavem vyobrazeným na RGB LEDkách.

Použití:
`
./image-viewer [cesta-k-souboru]
`

### Podporované formáty
- jpg
- png
- ppm

Formáty se rozlišují podle jejich hlaviček, koncovky se nerozlišují

### LED pásek
Na LED pásku se ve fázi načítání ukazuje kolik dat je již načtených.
Po načtení se zobrazuje horizontální pozice kurzoru na obrázku
pro snazší orientaci při větším zvětšení.

### Chybové stavy
Pokud se program nespustí správně, jedna z RGB LEDek se rozsvítí červeně.

Levá RGB LED znamená, že nebyl předán žádný argument. Pravá RGB LED znamená, že soubor se nepodařilo načíst,
neexistuje, není správný formát nebo k němu nejsou přístupová práva. Konkrétní chybová hláška se objeví na standardním výstupu.

### Ovládání
Program má kurzor, podle kterého se určuje, kam se přibližuje. Kurzor se zobrazí, když se s ním hýbe a chvilku potom. 

#### Standardní vstup
- `h`, `j`, `k`, `l` - ovládání kurzoru nebo posunu po celém obrázku v závislosti na módu, viz klávesa m (doleva, dolů, nahoru, doprava)
- `z`, `x` - přiblížení a oddálení obrázku (do místa, kde je kurzor)
- `r` - vrácení do původního stavu (oddálí obrázek a nastaví kurzor doprostřed obrázku)
- `m` - přepnutí mezi módy pohybu po obrázku nebo pohybu kurzorem (při módu pohybu po obrázku svítí RGB LEDky zeleně)
- `e` - ukončení programu

#### Rotační enkodery
- První (červený) - posun kurzoru horizontálně nebo posun horizontálně celého obrázku (viz tlačítko druhého enkoderu)
- Druhý (zelený) - posun kurzoru vertikálně nebo posun vertikálně celého obrázku (viz tlačítko druhého enkoderu)
- Třetí (modrý) - přiblížení a oddálení
- Tlačítko prvního enkoderu - ukončení programu
- Tlačítko druhého enkoderu - přepnutí mezi módy pohybu po obrázku nebo pohybu kurzorem
- Tlačítko třetího enkoderu - vrácení do původního stavu přiblížení

# Kompilace, instalace, spouštění
Na kompilaci je použit `Makefile`.

## Křížová kompilace pro MZAPO
Pro křížovou kompilaci je zapotřebí `arm-gnueabihf-gcc` a dynamické knihovny
`libjpeg` verze 62, `libpng` verze 16 a `libmagic` verze 1 pro MZAPO.

Soubory se po kompilaci uloží do složky `bin`, pro spuštění je potřeba
je překopírovat na MZAPO.

Překopírování jde realizovat pomocí ssh, lze použít `make`, konkrétně
`
TARGET_IP=[ip-addr] make copy-executable
`
kde za `ip-addr` je potřeba dosadit ip adresu MZAPO.
V základním režimu se počítá s tím, že je použit SSH tunel
a `mzapo-root-key` (SSH klíč pro mzapo) se nachází
na cestě ``/.ssh/mzapo-root-key`. Pro změnu základního nastavení
stačí změnit konfiguraci v `Makefile` v kořenu projektu.
Možné konfigurace jsou zakomentované na řádcích začínajících
`SSHOPTIONS`

Pro spuštění lze využít sériového portu nebo ssh. Případně pomocí `make`,
na spuštění průzkumníku souborů:
`
TARGET_IP=[ip-addr] make run
`
případně pro spuštění prohlížeče obrázků `run-image-viewer`
a pro spuštění prohlížeče textových souborů `run-text-viewer`.
Pro předání argumentu slouží environment proměnná ARG

Například lze použít
`
TARGET_IP=[ip-addr] ARG=/path/to/image make run-image-viewer
`
nebo
`
TARGET_IP=[ip-addr] ARG=/path/to/image make run-text-viewer
`

Program je třeba spouštět s cwd ve složce, kde se nachází binární soubory.
## Kompilace na osobní počítač
Pro lepší ladění je možnost program zkompilovat
pro osobní počítač, kde je displej simulován
pomocí SDL okna.

Pro kompilaci pro počítač lze využít environment proměnné `COMPUTER`.
Lze pak využít
`
COMPUTER=1 make
`

Po kompilaci jsou soubory ve složce `bin` v kořenu projektu.
Lze je spustit napřímo s potřebnými parametry viz Manuál.

Je potřeba překopírovat soubory ze složky `copy/` do složky `bin/` a program spouštět
s cwd ve složce, kde se nachází všechny binární soubory

A docs/README.md => docs/README.md +12 -0
@@ 0,0 1,12 @@
* Dokumentace semestrální práce

** Manuál (česky)
Manuál společně s návodem, jak program zkompilovat a spustit lze najít v souboru user-manual.pdf.

** Kód (anglicky)
Dokumentace kódu byla vygenerována přes Doxygen a její vstupní html index
se nachází v `doxy/html/index.html`

** Blokové schéma (anglicky)
Diagramy s blokovým schématem programů se nachází ve složce diagrams/,
nachází se zde 3 diagramy, pro každý program zvlášť.

A docs/diagrams/file-browser.png => docs/diagrams/file-browser.png +0 -0
A docs/diagrams/image-viewer.png => docs/diagrams/image-viewer.png +0 -0
A docs/diagrams/text-viewer.png => docs/diagrams/text-viewer.png +0 -0
M docs/user-manual.org => docs/user-manual.org +102 -7
@@ 1,12 1,12 @@
#+TITLE: APO - Semestrální práce
#+SUBTITLE: Průzkumník souborů, prohlížeč obrázků, textových souborů
#+AUTHOR: František Boháček
#+DATE: červen 2020
#+DATE: červen 2021

* Zadání
Semestrální práce bude rozdělena do 3 jednotlivých programů vypracovaných pro MZAPO. Hlavní z nich
bude průzkumník souborů, ve kterém bude možné procházet celý kořenový souborový systém a také externí zařízení.
Průzkumník bude umět základní operace jako kopírování, přesouvání a mazání souborů. Dále spouštět spustitelné soubory
bude průzkumník souborů, ve kterém bude možné procházet celý kořenový souborový systém +a také externí zařízení+.
+Průzkumník bude umět základní operace jako kopírování, přesouvání a mazání souborů+. Dále spouštět spustitelné soubory
a pro obrázky, resp. pro textové soubory otevřít prohlížeč obrázků, resp. textových souborů.

Prohlížeč obrázků je druhý program, který bude umět otevřít formáty jpeg, png a ppm. Přes rotační enkodery


@@ 21,8 21,89 @@ Standardní výstup bude použit k logování hlášek o tom, co program právě

Pro rychlejší ladění bude možnost programy spouštět na osobním počítači, kde se jako displej využije SDL okno.

** Zhodnocení splnění zadání
U průzkumníku souborů jsem bohužel nestihl implementovat základní operace jako přesouvání, mazání nebo kopírování souborů.
Stejně tak průzkumník souborů neumí sám namountovat externí zařízení jak bylo v plánu. Průzkumník tak umí pouze procházet složky,
otevírat soubory v příslušném programu (podle mime typu).
Na druhou stranu z prohlížeče textových souborů i obrázků se mi podařilo implementovat vše ze zadání
jak pro ovládání přes rotační enkodery nebo přes standardní vstup.

Program na rychlejší lazení se mi povedlo vytvořit tak, že z většiny simuluje reálnou nízkou úroveň periferií. V kódu je tak potřeba
minimum změn, aby místo na MZAPO běžel na osobních počítačích, je potřeba pouze změnit inicializaci programu, mapovací funkci nahradit
vlastní mapovací funkcí a změnit posílání dat a příkazů displeji. Ovládání RGB LEDek i LED pásku zůstává stejné, není potřeba žádný zásah
do kódu. Šlo by i jednoduše implementovat rotační enkodery po odchycení SDL eventů.

* Manuál
** Průzkumník souborů
*** Funkce
Program slouží na procházení kořenového systému souborů.
Dokáže spouštět soubory a otevírat obrázky nebo textové soubory.
Lze vyvolat kontextové menu, ve kterém lze otevřít kterýkoliv
soubor v prohlížeči textu.

Program obsahuje jednoduchý návod k obsluze,
ke kterému se jde dostat v hlavním menu.

*** (Virtuální) okna
Program se skládá z oken, mezi kterými se přepíná.

**** Výchozí menu

Ve výchozím menu lze otevřít průzkumník souborů
nebo si přečíst, jak se program ovládá.

**** Průzkumník souborů

Průzkumník souborů zobrazuje, v jaké složce
se zrovna člověk nachází a soubory v ní.
Lze se navigovat mezi složkami, zobrazit kontextové
menu nebo spouštět soubory.

**** Kontextové menu

V kontextovém menu lze soubor spustit nebo ho
zobrazit v prohlížeči textu.

**** Dialog

Dialogové okno se typicky ukáže při chybě.
Je v něm zachycená chyba, která nastala.

*** Spouštění
Program nepřijímá žádné argumenty, ty jsou ignorovány.

Použití:
#+begin_src
./file-browser
#+end_src

*** LED pásek
Na LED pásku se ukazuje vertikální pozice v průzkumníku souborů,
aby bylo poznat, kolik souborů je ještě potřeba projít do konce
složky.

*** Chybové stavy
Chyby se hlásí přes dialogové okno.

*** Ovládání

**** Standardní vstup
- ~h~, ~j~, ~k~, ~l~ - pohyb pohledu po souboru (doleva, dolů, nahoru, doprava)
- ~y~, ~i~, ~o~, ~p~ - pohyb o celou obrazovku pro rychlejší navigaci (doleva, dolů, nahoru, doprava)
- ~z~, ~x~ - přiblížení a oddálení textu
- ~n~ - vrácení pohledu na začátek seznamu souborů
- ~m~ - pohled na konec seznamu souborů
- ~e~ - ukončení programu
- ~c~ - kontextové menu souboru
- ~v~ - potvrzení výběru (spuštění souboru / přepnutí složky)

**** Rotační enkodery
- První (červený) - horizontální posun pohledu
- Druhý (zelený) - vertikální posun pohledu
- Třetí (modrý) - přiblížení nebo oddálení textu
- Tlačítko prvního enkoderu - ukončení programu / pohyb zpět
- Tlačítko druhého enkoderu - kontextové menu souboru
- Tlačítko třetího enkoderu - potvrzení výběru (spuštění souboru / přepnutí složky)
** Prohlížeč textových souborů
*** Funkce
Program zobrazí na LCD displeji text z textového souboru, lze se po něm pohybovat rotačními enkodery.


@@ 51,13 132,16 @@ neexistuje nebo k němu nejsou přístupová práva. Konkrétní chybová hláš

**** Standardní vstup
- ~h~, ~j~, ~k~, ~l~ - pohyb pohledu po souboru (doleva, dolů, nahoru, doprava)
- ~r~ - vrácení pohledu na začátek souboru
- ~t~ - pohled na konec souboru
- ~y~, ~i~, ~o~, ~p~ - pohyb o celou obrazovku pro rychlejší navigaci (doleva, dolů, nahoru, doprava)
- ~z~, ~x~ - přiblížení a oddálení textu
- ~n~ - vrácení pohledu na začátek souboru
- ~m~ - pohled na konec souboru
- ~e~ - ukončení programu

**** Rotační enkodery
- První (červený) - horizontální posun pohledu
- Druhý (zelený) - vertikální posun pohledu
- Třetí (modrý) - přiblížení nebo oddálení textu
- Tlačítko prvního enkoderu - ukončení programu
- Tlačítko druhého enkoderu - vrácení pohledu na začátek souboru
- Tlačítko třetího enkoderu - pohled na konec souboru


@@ 100,7 184,7 @@ Program má kurzor, podle kterého se určuje, kam se přibližuje. Kurzor se zo
- ~h~, ~j~, ~k~, ~l~ - ovládání kurzoru nebo posunu po celém obrázku v závislosti na módu, viz klávesa m (doleva, dolů, nahoru, doprava)
- ~z~, ~x~ - přiblížení a oddálení obrázku (do místa, kde je kurzor)
- ~r~ - vrácení do původního stavu (oddálí obrázek a nastaví kurzor doprostřed obrázku)
- ~m~ - přepnutí mezi módy pohybu po obrázku nebo pohybu kurzorem
- ~m~ - přepnutí mezi módy pohybu po obrázku nebo pohybu kurzorem (při módu pohybu po obrázku svítí RGB LEDky zeleně)
- ~e~ - ukončení programu

**** Rotační enkodery


@@ 112,7 196,7 @@ Program má kurzor, podle kterého se určuje, kam se přibližuje. Kurzor se zo
- Tlačítko třetího enkoderu - vrácení do původního stavu přiblížení

* Kompilace, instalace, spouštění
Na kompilaci je použit Makefile.
Na kompilaci je použit ~Makefile~.

** Křížová kompilace pro MZAPO
Pro křížovou kompilaci je zapotřebí ~arm-gnueabihf-gcc~ a dynamické knihovny


@@ 126,6 210,12 @@ Překopírování jde realizovat pomocí ssh, lze použít ~make~, konkrétně
TARGET_IP=[ip-addr] make copy-executable
#+end_src
kde za ~ip-addr~ je potřeba dosadit ip adresu MZAPO.
V základním režimu se počítá s tím, že je použit SSH tunel
a ~mzapo-root-key~ (SSH klíč pro mzapo) se nachází
na cestě ~~/.ssh/mzapo-root-key~. Pro změnu základního nastavení
stačí změnit konfiguraci v ~Makefile~ v kořenu projektu.
Možné konfigurace jsou zakomentované na řádcích začínajících
~SSHOPTIONS~

Pro spuštění lze využít sériového portu nebo ssh. Případně pomocí ~make~,
na spuštění průzkumníku souborů:


@@ 144,6 234,8 @@ nebo
#+begin_src
TARGET_IP=[ip-addr] ARG=/path/to/image make run-text-viewer
#+end_src

Program je třeba spouštět s cwd ve složce, kde se nachází binární soubory.
** Kompilace na osobní počítač
Pro lepší ladění je možnost program zkompilovat
pro osobní počítač, kde je displej simulován


@@ 157,3 249,6 @@ COMPUTER=1 make

Po kompilaci jsou soubory ve složce ~bin~ v kořenu projektu.
Lze je spustit napřímo s potřebnými parametry viz Manuál.

Je potřeba překopírovat soubory ze složky ~copy/~ do složky ~bin/~ a program spouštět
s cwd ve složce, kde se nachází všechny binární soubory