From ac5f4ef0123b2f83e885192f553168d395abfb7c Mon Sep 17 00:00:00 2001 From: Thomas Pietrzak Date: Fri, 12 Nov 2021 14:31:23 +0100 Subject: [PATCH] LagMeter done --- figures/lagmeter.tex | 90 ++++++++++++++++++-------------------- figures/piezotrigger.png | Bin 0 -> 32574 bytes figures/piezotrigger.tex | 40 +++++++++++++++++ figures/screenflicker.png | Bin 0 -> 13032 bytes tex/3-input.tex | 86 +++++++++++++++++++++++++++++++----- 5 files changed, 159 insertions(+), 57 deletions(-) create mode 100644 figures/piezotrigger.png create mode 100644 figures/piezotrigger.tex create mode 100644 figures/screenflicker.png diff --git a/figures/lagmeter.tex b/figures/lagmeter.tex index d9b856e..41e6ef3 100644 --- a/figures/lagmeter.tex +++ b/figures/lagmeter.tex @@ -26,61 +26,57 @@ \node[minimum width=1.2cm, minimum height=1.2cm,dashed, text=black, draw=black, text width=1.2cm, align=center, rounded corners=1mm, outer sep=0](#3) at (#1) {#2}; } \tikzexternalenable - \begin{tikzpicture} + \begin{tikzpicture}[x=1mm, y=1mm] \scriptsize - \begin{scope}[x=1mm, y=1mm] + %\node[anchor=south west] () at (0, 55) {Device}; + %\draw[very thick] (0,55) -- (170,55); - %\node[anchor=south west] () at (0, 55) {Device}; - %\draw[very thick] (0,55) -- (170,55); + \redcell{15,65}{User action}{} + \dashedcell{30,65}{Device HID sent}{mousehid} + \darkbluecell{125,65}{Sytem response}{} - \redcell{15,65}{User action}{} - \dashedcell{30,65}{Device HID sent}{mousehid} - \darkbluecell{125,65}{Sytem response}{} + \draw[fill=black!10, rounded corners=2mm] (0,0) rectangle (170,55); - \draw[fill=black!10, rounded corners=2mm] (0,0) rectangle (170,55); + \node[anchor=south west] () at (0, 10) {Host computer}; + \draw[very thick] (0,10) -- (170,10); - \node[anchor=south west] () at (0, 10) {Host computer}; - \draw[very thick] (0,10) -- (170,10); + \bluecell{45,20}{Raw HID received}{rawhidreceived1} + \draw[ultra thick] (45,8) -- (45,12); + \node[anchor=north] () at (45, 8) {piezo}; + \dashedcell{60,20}{Device HID received}{hosthid} + \draw[ultra thick] (60,8) -- (60,12); + \node[anchor=north] () at (60, 8) {libpointing}; + \dashedcell{75,20}{Low-level event}{} + \draw[ultra thick] (75,8) -- (75,12); + \node[anchor=north] () at (75, 8) {system}; + \dashedcell{90,20}{Event delivered}{} + \draw[ultra thick] (90,8) -- (90,12); + \node[anchor=north] () at (90, 8) {toolkit}; + \dashedcell{105,20}{Window repaint}{} + \draw[ultra thick] (105,8) -- (105,12); + \node[anchor=north] () at (105, 8) {repaint}; + \dashedcell{120,20}{Screen update}{} + \draw[ultra thick] (120,8) -- (120,12); + \node[anchor=north] () at (120, 8) {screen}; + \darkbluecell{160,20}{Raw HID received}{rawhidreceived2} + \draw[ultra thick] (160,8) -- (160,12); + \node[anchor=north] () at (160, 8) {photodiode}; - \bluecell{45,20}{Raw HID received}{rawhidreceived1} - \draw[ultra thick] (45,8) -- (45,12); - \node[anchor=north] () at (45, 8) {piezo}; - \dashedcell{60,20}{Device HID received}{hosthid} - \draw[ultra thick] (60,8) -- (60,12); - \node[anchor=north] () at (60, 8) {libpointing}; - \dashedcell{75,20}{Low-level event}{} - \draw[ultra thick] (75,8) -- (75,12); - \node[anchor=north] () at (75, 8) {system}; - \dashedcell{90,20}{Event delivered}{} - \draw[ultra thick] (90,8) -- (90,12); - \node[anchor=north] () at (90, 8) {toolkit}; - \dashedcell{105,20}{Window repaint}{} - \draw[ultra thick] (105,8) -- (105,12); - \node[anchor=north] () at (105, 8) {repaint}; - \dashedcell{120,20}{Screen update}{} - \draw[ultra thick] (120,8) -- (120,12); - \node[anchor=north] () at (120, 8) {screen}; - \darkbluecell{160,20}{Raw HID received}{rawhidreceived2} - \draw[ultra thick] (160,8) -- (160,12); - \node[anchor=north] () at (160, 8) {photodiode}; + \node[anchor=south west] () at (0, 35) {Arduino}; + \draw[very thick] (0,35) -- (170,35); - \node[anchor=south west] () at (0, 35) {Arduino}; - \draw[very thick] (0,35) -- (170,35); + \bluecell{20,45}{Piezo trigger}{} + \draw[ultra thick] (20,33) -- (20,37); + \node[anchor=north] () at (20, 33) {piezo}; + \bluecell{35,45}{Raw HID sent}{rawhidsent1} + \darkbluecell{135,45}{Photo-diode trigger}{} + \draw[ultra thick] (135,33) -- (135,37); + \node[anchor=north] () at (135, 33) {photodiode}; + \darkbluecell{150,45}{Raw HID sent}{rawhidsent2} - \bluecell{20,45}{Piezo trigger}{} - \draw[ultra thick] (20,33) -- (20,37); - \node[anchor=north] () at (20, 33) {piezo}; - \bluecell{35,45}{Raw HID sent}{rawhidsent1} - \darkbluecell{135,45}{Photo-diode trigger}{} - \draw[ultra thick] (135,33) -- (135,37); - \node[anchor=north] () at (135, 33) {photodiode}; - \darkbluecell{150,45}{Raw HID sent}{rawhidsent2} - - \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (mousehid) edge (hosthid); - \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (rawhidsent1) edge (rawhidreceived1); - \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (rawhidsent2) edge (rawhidreceived2); - - \end{scope} + \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (mousehid) edge (hosthid); + \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (rawhidsent1) edge (rawhidreceived1); + \path[-{Stealth[length=2mm, width=1.5mm]}, dashed, to path={-| (\tikztotarget)}] (rawhidsent2) edge (rawhidreceived2); \end{tikzpicture} \tikzexternaldisable \caption[LagMeter measurement process.]{LagMeter measurement process.} diff --git a/figures/piezotrigger.png b/figures/piezotrigger.png new file mode 100644 index 0000000000000000000000000000000000000000..571e8c6d2a5d8e295684cdd5bf287499dc80d1d9 GIT binary patch literal 32574 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 P_LP@azLR&`;OYMYt0CLi literal 0 HcmV?d00001 diff --git a/figures/piezotrigger.tex b/figures/piezotrigger.tex new file mode 100644 index 0000000..996051f --- /dev/null +++ b/figures/piezotrigger.tex @@ -0,0 +1,40 @@ +%!TEX root = ../hdrmain.tex + +\begin{figure}[htb] + \definecolor{customgreen}{RGB} {21,156,62} + \definecolor{customred}{RGB} {244,8,39} + \definecolor{customblue}{RGB} {16 0 255} + + \tikzexternalenable + \begin{tikzpicture}[x=1mm,y=1mm] + \small + \coordinate (threshold) at (0,45); + \coordinate (fingerpoint) at (28.8,26); + \coordinate (buttonpoint) at (56.1,27); + \coordinate (piezopoint) at (83,45); + \coordinate (fingerbottom) at ($(fingerpoint) - (0,13)$); + \coordinate (buttonbottom) at ($(buttonpoint) - (0,14)$); + \coordinate (piezobottom) at ($(piezopoint) - (0,32)$); + % + \node[anchor=south west,inner sep=0,outer sep=0] (oscillo) { + \includegraphics[width=\columnwidth]{figures/piezotrigger.png} + }; + %\draw[help lines] (0,0) grid (170,80); + \node[customblue, anchor=north] (finger) at (fingerbottom) {Finger contact}; + \node[customred, anchor=north] (button) at (buttonbottom) {Button pressed}; + \node[customgreen, anchor=north] (piezo) at (piezobottom) {Piezo trigger}; + + % Threshold + + \draw[draw=violet, ultra thick] (threshold) to ($(threshold) + (169,0)$); + \node[violet, anchor=south east] () at ($(threshold) + (160,0)$) {$1.5V$ Threshold}; + + % Arrows + \draw[draw=customblue, -stealth', very thick, anchor=north] (fingerbottom) to (fingerpoint); + \draw[draw=customred, -stealth', very thick] (buttonbottom) to (buttonpoint); + \draw[draw=customgreen, -stealth', very thick] (piezobottom) to (piezopoint); + \end{tikzpicture} + \tikzexternaldisable + \label{fig:piezotrigger} + \caption[Latency measurement of a button press]{Latency measurement of a button press. The blue line goes to 5V when the finger touches the surface. The red lines goes to 0V when the button is pressed. The green curves shows the piezoelectric vibratio sensor signal. The violet line shows a $1.5V$ threshold.} +\end{figure} diff --git a/figures/screenflicker.png b/figures/screenflicker.png new file mode 100644 index 0000000000000000000000000000000000000000..86d8727623b3454a85173c24af2ff0fbcabd7a50 GIT binary patch literal 13032 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 zµ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