aboutsummaryrefslogtreecommitdiff
path: root/docs/designDocs.tex
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2011-02-15 15:15:43 -0500
committerGravatar rcoh <rcoh@mit.edu>2011-02-15 15:15:43 -0500
commit84d914b0a015ef6c588253ac7f70382bfa9030e5 (patch)
treeafaed4909873652dbf5257091a07fa80a60c444e /docs/designDocs.tex
parent5b18ae78733cb4ffbc0ca9fd8f13f5ae1f7e37a6 (diff)
Added documentation to repo in docs folder.
Diffstat (limited to 'docs/designDocs.tex')
-rw-r--r--docs/designDocs.tex192
1 files changed, 0 insertions, 192 deletions
diff --git a/docs/designDocs.tex b/docs/designDocs.tex
deleted file mode 100644
index 8e62edc..0000000
--- a/docs/designDocs.tex
+++ /dev/null
@@ -1,192 +0,0 @@
-\documentclass{article}
-\usepackage{fullpage}
-\begin{document}
- \title{150 Smoots Lighting Installation Design Document}
- \author{Russell Cohen}
- \date{\today}
- \maketitle
- \newcommand{\classDoc}[5]{
- \subsection{#1}
- \begin{itemize}
- \item \textbf{Inherits from: } #2
- \item \textbf{Inherited by: } #3
- \item \textbf{Brief Description: } #4
- \item \textbf{Argument Requirements: } #5
- \end{itemize}
- }
- \section{Intro}
- \textbf{NB: These docs give an overview of the classes and methods but
- may lag behind the code for certain in-flux functionality. For
- up-to-the minute docs, please use pydoc.} \\
- The system, which we will describe henceforth as SmootLight is a
- modular system designed with the following goals in mind:
- \begin{itemize}
- \item The system must abstract away from all components while
- remaining useful (\verb=Renderer=, \verb=Input=, \verb=Behavior=)
- \item The system must be modular and be easy to write new code for.
- \item More goals as I think of them
- \end{itemize}
- We accomplish this in the following manner:
- \begin{itemize}
- \item The system is configured by an XML file which specifies its
- components.
- \item All classes are initialized with a dictionary as an argument
- containing anything a class may need. All objects are passed
- between members as python dictionaries because their easy
- serialization.
- \end{itemize}
- \section{Overview}
- \begin{itemize}
- \item
- \section{Operations Class Patterns}
- \classDoc{SmootCoreObject}{None}{All 2nd level classes (PixelAssembler, Renderer,
- Input, Behavior)}
- {SmootCoreObject is essentially a super-object
- that makes things easy for us. It does the following actions:
- \begin{itemize}
- \item Defines a constructor that sets argDict
- \item Defines a \texttt{\_\_getitem\_\_} , which lets us acces items in
- argDict as if the class was a dictionary.
- (\texttt{self['itemName']}). It also automatically maps the
- initial contents of the argDict to class attributes.
- \item Defines validateArgs and validateArgDict which
- validate the incoming arguments against a dictionary
- containing argument names as keys and an error message to
- display if they are missing as a values. This file should
- be named classname.params and look like a python dict
- (\texttt{\{'key':value, 'key2':value2\}} )
- \end{itemize}
- Note that at this point, the only class using this functionality
- is the PixelEvent class.}
- {No required parameters in argDict}
- \classDoc{PixelAssembler}{SmootCoreObject}{LineLayout, ZigzagLayout}{
- PixelAssembler is a class that defines the positions of lights. It
- provides a method \texttt{getLightLocations} which give a list of
- all light locations for a given strip. Inheriting classes must
- define \texttt{layoutFunc} which returns the next location given the
- previous location. (They may simply override
- \texttt{getLightLocations}
- instead, if they wish, but be careful when doing so). In
- heriting classes may defint \texttt{initLayout} which is called at
- initialization.}{\begin{itemize}
- \item \texttt{lightToLightSpacing}: this is the length of wire
- between 2 adjacent LEDs. Common values are 4 or 12.
- \item \texttt{numLights}: Number of lights in a strip.
- \item \texttt{originLocation}: Location of the first light.
- \end{itemize}}
- \classDoc{Renderer}{SmootCoreObject}{PygameRenderer, IndoorRenderer}{
- Renderer is a class that serves as an abstract class for renderers
- interacting with the system. Inheriting classes must define
- render, which is passed a \texttt{lightSystem} object. Inheriting
- classes may define initRenderer which is called on initiation.
- }{No required arguments}
- \classDoc{Input}{SmootCoreObject, threading.Thread}{PygameInput,
- TCPInput,UDPInput}{Input is a abstract class which facilitates Inputs.
- It does this by providing a method that is polled at a periodic
- interval within which the inheriting class can raise an event.
- Inheriting classes must define \texttt{sensingLoop} which is
- called at the interval specified in the config. Inheriting
- classes should call respond with an dictionary as an argument
- to raise an event. Classes using (not
- inheriting) input must pass a scope into
- the argDict which offers a \texttt{processInput}
- method. Inputs are marked as Daemon threads, and
- are therefore killed when their parent is
- killed.}{\begin{itemize}
- \item \texttt{InputId}: The string id of a given input. Must be
- unique.
- \item Optional:\texttt{RefreshInterval}: The interval in
- seconds (will soon be changed to milliseconds) between
- sucessive calls to the sensingLoop method. TODO: make
- timeout.
- \end{itemize}}
- \classDoc{Behavior}{SmootCoreObject}{EchoBehavior, DebugBehavior}{
-Abstract class for a behavior. On every time step, the behavior is passed the
-inputs from all sensors it is bound to as well as any recursive inputs that it
-spawned during the last time step. Inheriting classes MUST define
-\texttt{processBehavior}. \texttt{processBehavior} should return a list of dictionaries which
-define the properties of the light response. The must return a location
-\texttt{PixelEvent} class. Soon be be deprecated:\textit{They must give a location and
-color. They may define a function pointer which defines a custom mapping.
-[More on this later. Bug Russell if you want to do it].}
-Call \texttt{recursiveResponse} to queue a input on the next iteration with a dictionary
-argument. This will be passed in via recursive inputs.}
-{\begin{itemize}
- \item \texttt{Inputs}: A list of input Ids specifying input to the
- behavior. In the future, this may also contain behavior ids.
-\end{itemize}}
-\classDoc{PixelEvent}{SmootCoreObject}{StepResponse}{
- Abstract class defining the behavior of a light after it has been turned on.
- Inheriting classes should defint \texttt{lightState} which is passed a
- timeDelay in ms as an argument. \texttt{lightState} should return a
- color or None if the response is complete.}{\begin{itemize}
- \item \texttt{Color}: The color of response. \textit{This is may be
- removed in the future}
- \end{itemize}
- }
-\section{The Screen Class and Its Relatives}
-\classDoc{Screen}{None}{None}
-{The \texttt{Screen} class is a representation of an entire system of pixels,
- distributed over space. The Screen class and its relatives process
- responses (mapped to pixels via a LayoutEngine), and add PixelEvents
- to the individual pixels. The Screen provides an instance that
- renderers can call to determine the color of all the individual pixels. It contains a list of PixelStrips, which each
- address the individual pixels. \texttt{Screen} offers a
- \texttt{respond} method which takes a dictionary containing information
- about a response. TODO: detail the contents of this dictionary (maybe
- somewhere else). Note: \texttt{Screen} will not process its
- responses until \texttt{timeStep} is called which processes all responses that
- have been queued since the last time that \texttt{timeStep} was
- called. Screen also offers an iterator over \textit{all} lights,
- accesible by using an expression like: \texttt{for light in screen:}. For
- addressing of specific \texttt{PixelStrips} , \texttt{self.pixelStrips}
- is exposed.}{No required parameters}
-\classDoc{PixelStrip}{None}{None}
-{The \texttt{PixelStrip} class is a representation of a string of Pixels that are
- connected in physical space (eg. a strip of lights). A \texttt{PixelStrip} takes a
- \texttt{LayoutBuilder} (\textit{Name up for debate, currently known as layout
- engine}) as an argument. The \texttt{argDict} of the
- \texttt{LayoutBuilder} is
- passed becomes the \texttt{argDict} of the \texttt{PixelStrip}.
- \texttt{PixelStrip} generally shouldn't be
- adressed directly unless you need Strip-Identification for rendering
- purposes. You should never, for example, call \texttt{respond} on a
- \texttt{PixelStrip}
- directly, unless you really know what you're doing. Well, actually you
- should never need to do that.
- never. Don't do it.}{Takes a \texttt{LayoutBuilder} as an argument.}
- \section{Best Practices}
- \subsection{Variable and function naming}
- I'm pretty bad about being consistent. However, in all future
- code, please adhere to the following:
- \begin{itemize}
- \item Classes: \texttt{FirstLetterCaps}
- \item Functions: \texttt{camelCase}
- \item Property Names: \texttt{FirstLetterCaps}
- \item Constants: \texttt{ALL\_CAPS\_WITH\_UNDERSCORES}
- \end{itemize}
- \subsection{Time}
- For time, use the \texttt{util.TimeOps.time()} method to return the current
- time in ms.
- \subsection{Acessing a Component Given an Id}
- Use \texttt{util.ComponentRegistry.getComponent(id)}. This provides any
- component access to any other components. We may consider a way to
- make this read-only.
- \subsection{Acessing Pixels}
- The ideal method for acessing Pixels in a screen is to use its
- iterator. Iterating over the individual PixelStrips is also an
- acceptable method.
- \subsection{Determining the state of a \texttt{Pixel}}
- The best practice for determining the color of a \texttt{Pixel} is to call
- \texttt{state}. This ensures
- all current active responses running on the Pixel contribute correctly.
- \subsection{Color}
- For color, use a tuple of (R,G,B) 0-255 for each. Colors can be
- easily manipulated with members of the Util class.
- \subsection{Locations}
- Locations are stored (x,y), in whatever unit you light system is
- in. (Whatever unit you use when you define spacing).
- \subsection{Constant Strings (key strings, 'Location', 'Color', etc.)}
- Use the util.Strings module. It contains many currently in use
- Strings, and ensures consistency.
- \end{document}