From 422b75afa7d0abc675dc7c64668bb159bde356fe Mon Sep 17 00:00:00 2001
From: Leonard Kugis <leonard@kug.is>
Date: Fri, 19 Mar 2021 23:50:52 +0100
Subject: Dokumentation
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Grundprinzip Software erläutert.
---
 Dokumentation/doc.tex | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

(limited to 'Dokumentation/doc.tex')

diff --git a/Dokumentation/doc.tex b/Dokumentation/doc.tex
index d75522b..8e2c504 100644
--- a/Dokumentation/doc.tex
+++ b/Dokumentation/doc.tex
@@ -1,6 +1,10 @@
 \documentclass[12pt,a4paper]{scrartcl}
 \usepackage[utf8]{inputenc}
 \usepackage[ngerman]{babel}
+\usepackage{graphicx}
+\usepackage[table,dvipsnames]{xcolor}
+
+\definecolor{tablehead}{hsb}{0,0,0.9}
 
 \title{Pinlock: Dokumentation}
 \subtitle{Mikrocontroller-Seminar}
@@ -12,6 +16,8 @@
 
 \tableofcontents
 
+\newpage
+
 \section{Idee}
 
 \section{Hardware}
@@ -24,10 +30,75 @@
 
 \section{Software}
 
+Das Programm wurde in AVR-Assembler geschrieben, mit Assemblerdirektiven
+für den \emph{Avra}-Assembler.
+
 \subsection{Grundprinzip}
 
+Nach Zurücksetzen des Mikrocontrollers durchläuft das Programm eine Initialisierungsroutine.
+Diese beinhaltet im Wesentlichen folgende Schritte:
+
+\begin{enumerate}
+  \item Initialisierung des Stackpointers mit den Grenzen des verfügbaren RAMs
+  \item Konfiguration der GPIO-Ports
+  \item Initialisierung der Displays
+  \item Lesen des Zugangscodes aus dem EEPROM
+\end{enumerate}
+
+Anschließend wird eine endlose Hauptschleife durchlaufen, die folgende Aktionen
+periodisch ausführt:
+
+\begin{enumerate}
+  \item Warte 12240 Zyklen.
+  \item Lese alle Tasten der Eingabematrix aus.
+  \item Ermittle Änderungen des neuen Tastenstatus zu dem alten Tastenstatus.
+  \item Bei positiver Flanke (Taste war vorher nicht gedrückt und ist jetzt gedrückt):
+    Behandle den Tastendruck bezüglich des aktuellen Zustands (s.u.).
+  \item Puffere den neuen Tastenstatus.
+\end{enumerate}
+
+Die Behandlung der (neu) gedrückten Taste bezüglich des aktuellen Zustandes erfolgt nach der
+in Abbildung~\ref{fig:states} dargestellten \emph{Finite-State-Machine} (FSM).
+Dabei folgt die Notation der Transitionsbedingungen dem Schema \colorbox{lightgray}{\texttt{<Taste> / <Wesentliche Aktionen>}}.
+Die Tastendarstellungen innerhalb des Programmes unterliegen dabei der Zuordnung in
+Tabelle~\ref{tbl:keymap}.
+Die Zustände sind dabei nach folgendem Schema benannt:
+
+\begin{tabular}{r@{: }l r@{: }l}
+  \texttt{A} & \emph{Authenticating}, Authentifizierung findet gerade durch Codeeingabe statt \\
+  \texttt{AS} & \emph{Authentication Submitted}, Code wurde bestätigt und wird überprüft \\
+  \texttt{AD} & \emph{Authenticated}, Benutzer ist authentifiziert und hat Zugriff \\
+  \texttt{C} & \emph{Change}, Benutzer ändert den Zugriffscode
+\end{tabular}
+
+\begin{figure}[!htb]
+  \centering
+  \includegraphics[width=0.7\linewidth, keepaspectratio]{resources/states}
+  \caption{FSM der Behandlung von Tastendrücken (schematisch)}
+  \label{fig:states}
+\end{figure}
+
+\begin{table}[!htb]
+  \centering
+  \begin{tabular}{|c|c|}
+    \hline
+    \rowcolor{tablehead} Taste extern & Taste intern \\ \hline
+    \texttt{0..9} & \texttt{0x00..0x09} \\ \hline
+    \texttt{A..D} & \texttt{0x0A..0x0D} \\ \hline
+    \texttt{*} & \texttt{0x0E} \\ \hline
+    \texttt{\#} & \texttt{0x0F} \\ \hline
+  \end{tabular}
+  \caption{Zuordnung von externen zu internen Tastendarstellungen}
+  \label{tbl:keymap}
+\end{table}
+
 \subsection{Funktionen}
 
+Das Auslesen der Tasten der Eingabematrix erfolgt über die Schieberegister:
+eines (Serial-In-Parallel-Out) zur Selektion der auszulesenden Zeile und eines (Parallel-In-Serial-Out)
+zum eigentlichen Auslesen selbiger. Dies wird innerhalb der Ausleseroutine mit jeder
+Zeile gemacht, um gedrückte Tasten zu identifizieren.
+
 \section{Bedienung}
 
 \end{document}
-- 
cgit v1.2.3

