From 038d7d3e2b7c87f7687aa942712591eea8bdebb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Wed, 16 May 2018 12:17:43 +0200 Subject: [PATCH] more cleaning --- ch.fat16.tex | 4 ++-- ch.usb.tex | 2 +- thesis.pdf | Bin 4550535 -> 4550516 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ch.fat16.tex b/ch.fat16.tex index 50a3d8e..e8a0d63 100644 --- a/ch.fat16.tex +++ b/ch.fat16.tex @@ -111,7 +111,7 @@ As shown in \cref{tab:fat16-disk-areas}, the disk consists of several areas. The The user can only read files that already exist on the disk, in our case, \verb|UNITS.INI| and \verb|SYSTEM.INI|. Those files are generated from the binary settings storage, and conversely, parsed, line-by-line, without ever existing in their full form. This fact makes our task more challenging, as the files cannot be easily measured and there's no obvious way to read a sector from the middle of a longer file. We solve this by implementing two additional functions in the INI file writer: a \textit{read window} and a \textit{dummy read mode}. -A read window is a byte range which we wish to generate. The INI writer discards bytes before the start of the read window, writes those inside the window to our data buffer, and stops when its end is reached. This lets us extract a sector from anywhere in a file. The second function, dummy read, is tied to the window function: we set the start index so high that it is never reached (e.g. 0xFFFFFFFF), and have the writer count discarded characters. When the dummy file generation ends, this character counter holds its size. +A read window is a byte range which we wish to generate. The INI writer discards bytes before the start of the read window, writes those inside the window to our data buffer, and stops when its end is reached. This lets us extract a sector from anywhere in a file. The second function, dummy read, is tied to the window function: we set the start index so high that it is never reached (e.g., 0xFFFFFFFF), and have the writer count discarded characters. When the dummy file generation ends, this character counter holds its size. Now, just one problem remains: how to tell which sectors contain which part of our files? This is straightforward when we realize that the files change only when the user modifies the settings. After each such change, an algorithm is run which allocates clusters to the files and preserves this information in a holding structure. A subsequent read access simply requires a look into this structure and the corresponding chunk of a file may be served using the read window function. The \gls{FAT} can be dynamically generated from this information as well. @@ -126,7 +126,7 @@ It must be noted that due to the nonexistence of a physical storage medium, it i A file is deleted by: \begin{enumerate} - \item Marking all sectors used by it as free in the \gls{FAT} + \item Marking all \gls{FAT} sectors used by the file as free \item Replacing the first character of its name in the directory table by 0xE5 to indicate the slot is free \end{enumerate} diff --git a/ch.usb.tex b/ch.usb.tex index a37d3c6..521f751 100644 --- a/ch.usb.tex +++ b/ch.usb.tex @@ -112,7 +112,7 @@ An interesting property of the \gls{CDC} class is that the bulk endpoints transp The original \gls{USB} specification expected that each function will have only one interface enabled at a time. After it became apparent that there is a need to have multiple unrelated interfaces working in parallel, the \gls{IAD}~\cite{usbif-iad} was introduced as a workaround. -The \gls{IAD} is an entry in the descriptor table that defines which interfaces belong together and should be handled by the same software driver. To use the \gls{IAD}, the function's class must be set to 239 (0xEF), subclass 2 and protocol 1 in the top level descriptor, so that the \gls{OS} knows to look for this descriptor before binding drivers to any interfaces. +The \gls{IAD} is an entry in the descriptor table that defines which interfaces belong together and should be handled by the same software driver. To use the \gls{IAD}, the function's class must be set to 0xEF, subclass 0x02, and protocol 0x01 in the top level descriptor, so that the \gls{OS} knows to look for this descriptor before binding drivers to any interfaces. In GEX, the \gls{IAD} is used to tie together the \gls{CDC} and \gls{ACM} interfaces while leaving out the \gls{MSC} interface which should be handled by a different driver. To make this work, a new \textit{composite class} had to be created as a wrapper for the library-provided \gls{MSC} and \gls{CDCACM} implementation. diff --git a/thesis.pdf b/thesis.pdf index 1a00ee9365ffe113b523ea01e7d1ea1da1a5fbf7..383cfbf014ab4093f8fe77a77d6ae27764f77ef3 100644 GIT binary patch delta 16275 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 delta 16274 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

-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