| 1 | % ------------------------------------------------------------------ |
|---|
| 2 | % |
|---|
| 3 | % TITLE: OSSIE Installation and User Guide 0.7.2 |
|---|
| 4 | % AUTHORS: Matt Carrick, Drew Cormier, Christopher Covington, |
|---|
| 5 | % Carl B. Dietrich, Joseph Gaeddert, Benjamin Hilburn, |
|---|
| 6 | % C. Ian Phelps, Shereef Sayed, Jason Snyder, Haris Volos |
|---|
| 7 | % CREATED: |
|---|
| 8 | % REVISED: |
|---|
| 9 | % URL: http://ossie.wireless.vt.edu/ |
|---|
| 10 | % |
|---|
| 11 | % ------------------------------------------------------------------ |
|---|
| 12 | |
|---|
| 13 | \documentclass[11pt]{article} |
|---|
| 14 | |
|---|
| 15 | \setlength{\textwidth}{6.5in} |
|---|
| 16 | \setlength{\textheight}{8.2in} |
|---|
| 17 | \setlength{\evensidemargin}{0in} |
|---|
| 18 | \setlength{\oddsidemargin}{0in} |
|---|
| 19 | \setlength{\topmargin}{0in} |
|---|
| 20 | \setlength{\parindent}{0pt} |
|---|
| 21 | \setlength{\parskip}{0.1in} |
|---|
| 22 | |
|---|
| 23 | \newcommand{\describeossiedemo}{The demonstration waveform simulates a very |
|---|
| 24 | basic QPSK communication system. It consists of three components: a transmitter, |
|---|
| 25 | a channel, and a receiver. The transmitter generates bursts of 512 QPSK symbols |
|---|
| 26 | that are sent through an AWGN channel and decoded by the receiver. The number of |
|---|
| 27 | errors per burst will be printed out on the screen while the waveform runs.} |
|---|
| 28 | |
|---|
| 29 | \newcommand{\ossieversion}{0.7.2} |
|---|
| 30 | |
|---|
| 31 | %@usepackage{html} |
|---|
| 32 | %@usepackage{verbatim} |
|---|
| 33 | |
|---|
| 34 | %@begin{comment} |
|---|
| 35 | \usepackage{listings} |
|---|
| 36 | %@end{comment} |
|---|
| 37 | |
|---|
| 38 | \usepackage{appendix} |
|---|
| 39 | \usepackage[pdftex]{graphicx} |
|---|
| 40 | \usepackage{url} |
|---|
| 41 | |
|---|
| 42 | % ------------------- BIBLIOGRAPHY STYLE ------------------- |
|---|
| 43 | \usepackage[sort]{natbib} |
|---|
| 44 | \bibliographystyle{plain} % note the change here |
|---|
| 45 | %\bibliographystyle{IEEEtran} |
|---|
| 46 | \bibpunct{[}{]}{,}{n}{}{;} % define bibliography punctuation |
|---|
| 47 | % The six mandatory arguments for \bibpunct are: |
|---|
| 48 | % 1. opening bracket: '(', '[', '{', or '<' |
|---|
| 49 | % 2. closing bracket: ')', ']', '}', or '>' |
|---|
| 50 | % 3. separator between multiple citations: ';' or ',' |
|---|
| 51 | % 4. citation style: 'n' for numerical style, 's' for numerical superscript style, or 'a' for authorÃyear style |
|---|
| 52 | % 5. punctuation between the author names and the year |
|---|
| 53 | % 6. punctuation between years or numbers when common author lists are suppressed: ',' or ';' |
|---|
| 54 | |
|---|
| 55 | %@begin{comment} |
|---|
| 56 | % due to magic hacks, hyperref must be right before document begin |
|---|
| 57 | \usepackage[pdftex]{hyperref} |
|---|
| 58 | \hypersetup{colorlinks, |
|---|
| 59 | citecolor=blue, |
|---|
| 60 | filecolor=blue, |
|---|
| 61 | linkcolor=blue, |
|---|
| 62 | urlcolor=blue, |
|---|
| 63 | pdftex} |
|---|
| 64 | %@end{comment} |
|---|
| 65 | |
|---|
| 66 | % ------------------- MAIN DOCUMENT ------------------- |
|---|
| 67 | \begin{document} |
|---|
| 68 | \thispagestyle{empty} |
|---|
| 69 | \pagenumbering{roman} |
|---|
| 70 | |
|---|
| 71 | %@begin{comment} |
|---|
| 72 | \definecolor{MyCommentColor}{rgb}{0.1,0.4,0.1} |
|---|
| 73 | \definecolor{MyCodeBackgroundColor}{rgb}{0.95,0.95,0.95} |
|---|
| 74 | %\definecolor{MyCodeFrameRuleColor}{rgb}{0.9,0.9,0.9} |
|---|
| 75 | \definecolor{MyStringColor}{rgb}{0.6,0.1,0.1} |
|---|
| 76 | \definecolor{MyKeywordColor}{rgb}{0.6,0.1,0.1} |
|---|
| 77 | |
|---|
| 78 | % define lstlistings style |
|---|
| 79 | % (see http://tug.ctan.org/tex-archive/macros/latex/contrib/listings/) |
|---|
| 80 | \lstloadlanguages{[GNU]C++,Python,[CORBA]IDL,sh} |
|---|
| 81 | |
|---|
| 82 | \lstset{% general command to set parameter(s) |
|---|
| 83 | basicstyle=\small\ttfamily, % print whole listing small |
|---|
| 84 | keywordstyle=\color{MyKeywordColor}\bfseries, |
|---|
| 85 | identifierstyle=\color{black}, |
|---|
| 86 | commentstyle=\color{MyCommentColor}, % define color and sytle of comments |
|---|
| 87 | stringstyle=\ttfamily\color{MyStringColor}, % typewriter type for strings |
|---|
| 88 | %showstringspaces=false, % no special string spaces |
|---|
| 89 | backgroundcolor=\color{MyCodeBackgroundColor}, |
|---|
| 90 | frame=none, |
|---|
| 91 | %framerule=0.5pt, |
|---|
| 92 | %framexleftmargin=2pt, |
|---|
| 93 | %framexrightmargin=2pt, |
|---|
| 94 | %framexbottommargin=2pt, |
|---|
| 95 | %framextopmargin=2pt, |
|---|
| 96 | %rulecolor=\color{MyCodeFrameRuleColor}, |
|---|
| 97 | nolol=true, % suppress listoflistings entry |
|---|
| 98 | tabsize=4, |
|---|
| 99 | linewidth=\linewidth, |
|---|
| 100 | breaklines=false, |
|---|
| 101 | xleftmargin=6pt, |
|---|
| 102 | xrightmargin=6pt |
|---|
| 103 | } |
|---|
| 104 | %@end{comment} |
|---|
| 105 | |
|---|
| 106 | {\huge OSSIE \ossieversion\ Installation and User Guide\\} |
|---|
| 107 | |
|---|
| 108 | %\vfill |
|---|
| 109 | |
|---|
| 110 | {\sf Matt Carrick, Drew Cormier, Christopher Covington, Carl B. Dietrich, \\ |
|---|
| 111 | Joseph Gaeddert, Benjamin Hilburn, C. Ian Phelps, Shereef Sayed, \\ |
|---|
| 112 | Jason Snyder, Haris Volos} |
|---|
| 113 | |
|---|
| 114 | \vfill |
|---|
| 115 | |
|---|
| 116 | February, 2009 |
|---|
| 117 | |
|---|
| 118 | |
|---|
| 119 | \vfill |
|---|
| 120 | |
|---|
| 121 | \begin{figure*}[!ht] |
|---|
| 122 | \centering |
|---|
| 123 | \includegraphics[width=6in]{figures/alf_screenshot_00.png} |
|---|
| 124 | \end{figure*} |
|---|
| 125 | |
|---|
| 126 | \vfill |
|---|
| 127 | |
|---|
| 128 | OSSIE is an open source Software Defined Radio (SDR) development effort based |
|---|
| 129 | at Virginia Tech. OSSIE is primarily intended to enable research and education |
|---|
| 130 | in SDR and wireless communications. The software package includes an SDR core |
|---|
| 131 | framework based on the JTRS Software Communications Architecture, tools |
|---|
| 132 | for rapid development of SDR components and waveforms (applications), and an |
|---|
| 133 | evolving library of pre-built components and waveforms. In addition, free |
|---|
| 134 | laboratory exercises for SDR education and training are being developed in |
|---|
| 135 | cooperation with the Naval Postgraduate School.\\ |
|---|
| 136 | |
|---|
| 137 | \begin{center} |
|---|
| 138 | {\sf\small OSSIE is the Open Source SCA Implementation::Embedded} |
|---|
| 139 | \end{center} |
|---|
| 140 | |
|---|
| 141 | \pagebreak |
|---|
| 142 | \tableofcontents |
|---|
| 143 | %@begin{comment} |
|---|
| 144 | \lstlistoflistings |
|---|
| 145 | %@end{comment} |
|---|
| 146 | |
|---|
| 147 | \pagebreak |
|---|
| 148 | \pagenumbering{arabic} |
|---|
| 149 | |
|---|
| 150 | % ------------------- Quick Start Guide ------------------- |
|---|
| 151 | \newpage |
|---|
| 152 | \input{QuickStartGuide} |
|---|
| 153 | |
|---|
| 154 | % ------------------- Introduction ------------------- |
|---|
| 155 | \newpage |
|---|
| 156 | \input{Introduction} |
|---|
| 157 | |
|---|
| 158 | % ------------------- Installation Guide ------------------- |
|---|
| 159 | \newpage |
|---|
| 160 | \input{Installation} |
|---|
| 161 | |
|---|
| 162 | % ------------------- Running Waveforms ------------------- |
|---|
| 163 | \newpage |
|---|
| 164 | \input{RunningWaveforms} |
|---|
| 165 | |
|---|
| 166 | |
|---|
| 167 | % ------------------- OEF Guide ------------------- |
|---|
| 168 | \newpage |
|---|
| 169 | \include{OEFGuide} |
|---|
| 170 | |
|---|
| 171 | % ------------------- OWD Guide ------------------- |
|---|
| 172 | \newpage |
|---|
| 173 | \include{OWDGuide} |
|---|
| 174 | |
|---|
| 175 | % ------------------- ALF Guide ------------------- |
|---|
| 176 | \newpage |
|---|
| 177 | \include{ALFGuide} |
|---|
| 178 | |
|---|
| 179 | % ------------------- Helping With Development ------------------- |
|---|
| 180 | \newpage |
|---|
| 181 | \input{HelpingWithDevelopment} |
|---|
| 182 | |
|---|
| 183 | % ------------------- Troubleshooting ------------------- |
|---|
| 184 | \newpage |
|---|
| 185 | \input{Troubleshooting} |
|---|
| 186 | |
|---|
| 187 | % ------------------- NoCites ------------------- |
|---|
| 188 | \nocite{vmware:web} |
|---|
| 189 | \nocite{irctutorial:web} |
|---|
| 190 | \nocite{writingbugreports:web} |
|---|
| 191 | \nocite{Bard:2007} |
|---|
| 192 | \nocite{Buracchini:2000} |
|---|
| 193 | \nocite{Reed:2002} |
|---|
| 194 | \nocite{jtrssca:web} |
|---|
| 195 | |
|---|
| 196 | % ------------------------------------------------------------------ |
|---|
| 197 | % |
|---|
| 198 | % APPENDICES |
|---|
| 199 | % |
|---|
| 200 | % ------------------------------------------------------------------ |
|---|
| 201 | \pagebreak |
|---|
| 202 | \appendix |
|---|
| 203 | \appendixpage |
|---|
| 204 | \addappheadtotoc |
|---|
| 205 | |
|---|
| 206 | % -------------------- managing services -------------------------- |
|---|
| 207 | \section{Managing Services on Fedora Core 9} |
|---|
| 208 | \label{appendix:services} |
|---|
| 209 | Controlling which services are currently running on your computer and which |
|---|
| 210 | start up with your computer is very easy with Fedora Core's Service |
|---|
| 211 | Configuration interface. From the GNOME taskbar, click |
|---|
| 212 | System$\to$Administration$\to$Services. You will need to enter your root (system |
|---|
| 213 | administrator) password to use the dialog. The window that pops up shows you |
|---|
| 214 | all of the available services on your computer. Services that have a check in |
|---|
| 215 | the box next to them are currently running. To turn a service on or off, |
|---|
| 216 | simply click the box, or select it and press the `Start' or `Stop' button at |
|---|
| 217 | the top of the list. |
|---|
| 218 | |
|---|
| 219 | In order to edit which services start with your computer when it boots, you need |
|---|
| 220 | to know a little about runlevels. You computer has several different |
|---|
| 221 | runlevels. The one you are most concerned with is runlevel 5. Runlevel 5 means |
|---|
| 222 | multiuser X-server mode. Generally speaking, if you are using a graphical |
|---|
| 223 | interface then you are in runlevel 5. |
|---|
| 224 | |
|---|
| 225 | To have omniNames start with your computer, select it in the services list, |
|---|
| 226 | click `Edit Runlevel' on the top menubar, and select runlevel 5. Click |
|---|
| 227 | the save button to save your configuration. |
|---|
| 228 | |
|---|
| 229 | That's it! The next time you start your computer, omniNames will start running |
|---|
| 230 | automatically. |
|---|
| 231 | |
|---|
| 232 | % ------------------- omniNames.sh ------------------- |
|---|
| 233 | \section{Creating {\tt omniNames.sh}} |
|---|
| 234 | \label{appendix:omninamessh} |
|---|
| 235 | Installing omniORB from RPM automatically starts the naming service when the |
|---|
| 236 | system boots. |
|---|
| 237 | If omniORB was {\it not} installed using RPM, the naming service will |
|---|
| 238 | probably need to be started manually. |
|---|
| 239 | To do so, create a file called {\tt omniNames.sh} containing the following |
|---|
| 240 | \begin{lstlisting}[caption={{\tt omniNames.sh} file}, nolol=false] |
|---|
| 241 | #!/bin/sh |
|---|
| 242 | |
|---|
| 243 | killall omniNames |
|---|
| 244 | rm /sdr/logs/omninames* |
|---|
| 245 | |
|---|
| 246 | omniNames -start -logdir /sdr/logs & |
|---|
| 247 | \end{lstlisting} |
|---|
| 248 | |
|---|
| 249 | Once this file is created, the file must be given executable permissions: |
|---|
| 250 | \begin{lstlisting}[] |
|---|
| 251 | $ chmod 755 omniNames.sh |
|---|
| 252 | # cp omniNames.sh /usr/local/bin |
|---|
| 253 | \end{lstlisting} |
|---|
| 254 | |
|---|
| 255 | Create a directory for the logs: |
|---|
| 256 | \begin{lstlisting}[] |
|---|
| 257 | $ mkdir /sdr/logs |
|---|
| 258 | \end{lstlisting} |
|---|
| 259 | |
|---|
| 260 | The script can now be run by executing {\tt omniNames.sh} in any terminal. |
|---|
| 261 | You can check to see if {\tt omniNames} is running by executing: |
|---|
| 262 | \begin{lstlisting}[] |
|---|
| 263 | $ nameclt list |
|---|
| 264 | \end{lstlisting} |
|---|
| 265 | If the naming service is {\it not} running you will see an error like: |
|---|
| 266 | \begin{lstlisting}[] |
|---|
| 267 | Unexpected error when trying to narrow the NamingContext. |
|---|
| 268 | \end{lstlisting} |
|---|
| 269 | |
|---|
| 270 | % ------------------- ossie.pth ------------------- |
|---|
| 271 | \newpage |
|---|
| 272 | \section{Configuring {\tt ossie.pth}} |
|---|
| 273 | \label{appendix:ossiepth} |
|---|
| 274 | In order for the Python tools to link properly, a Python path file must be |
|---|
| 275 | created to point to the shared modules. |
|---|
| 276 | The default {\tt ossie.pth} file is located under \\ |
|---|
| 277 | {\tt ossie-\ossieversion/src/system/ossie/idl/python/} and is installed by default in \\ |
|---|
| 278 | {\tt /usr/lib/pythonX.X/site-packages} when you install the ossie core |
|---|
| 279 | framework libraries. |
|---|
| 280 | |
|---|
| 281 | If you did {\it not} install omniORBpy using an RPM, you might need to add \\ |
|---|
| 282 | {\tt /usr/local/lib/pythonX.X/site-packages} to {\tt ossie.pth}, where |
|---|
| 283 | {\it X.X} corresponds to the specific version of Python installed on your |
|---|
| 284 | system. |
|---|
| 285 | Now reinstall by running {\tt python setup.py install} as root within the \\ |
|---|
| 286 | {\tt ossie-\ossieversion/src/system/ossie/idl/python/} directory: |
|---|
| 287 | \begin{lstlisting}[] |
|---|
| 288 | # cd ossie-0.7.2/src/system/ossie/idl/python/ |
|---|
| 289 | # python setup.py install |
|---|
| 290 | \end{lstlisting} |
|---|
| 291 | |
|---|
| 292 | % ----------- source component creation ---------- |
|---|
| 293 | \newpage |
|---|
| 294 | \section{Data Source Component Creation} |
|---|
| 295 | \label{appendix:datasourcecreation} |
|---|
| 296 | The component TxDemo will be used as an example on how to create a data source. |
|---|
| 297 | When creating a component which is not a data source, typically only the function |
|---|
| 298 | {\tt ProcessData} needs to be modified to include the desired operation. This is |
|---|
| 299 | not the case for a source component, however. The code that needs to be updated in |
|---|
| 300 | this example resides in the {\tt start}, {\tt stop}, and {\tt ProcessData} functions. |
|---|
| 301 | Locate the directory {\tt components/TxDemo} and open the files TxDemo.h and TxDemo.cpp. |
|---|
| 302 | |
|---|
| 303 | In TxDemo.h, near the end of the file the following code will be listed: |
|---|
| 304 | \begin{lstlisting}[] |
|---|
| 305 | bool continue_processing(void); |
|---|
| 306 | volatile bool thread_started; |
|---|
| 307 | \end{lstlisting} |
|---|
| 308 | The flag {\tt thread\_started} holds the state of the component; whether or not the |
|---|
| 309 | component should continue sending data. A function {\tt continue\_processing} is also |
|---|
| 310 | declared which will be used to check {\tt thread\_started} and determine if the component |
|---|
| 311 | should continue sending packets. |
|---|
| 312 | |
|---|
| 313 | In TxDemo.cpp, locate the {\tt start} function and the following code will be listed: |
|---|
| 314 | \begin{lstlisting}[] |
|---|
| 315 | omni_mutex_lock l(processing_mutex); |
|---|
| 316 | if (false == thread_started){ |
|---|
| 317 | thread_started = true; //initialize |
|---|
| 318 | //Create the thread for the writer's processing function |
|---|
| 319 | processing_thread = new omni_thread(Run, (void *) this); |
|---|
| 320 | |
|---|
| 321 | //Start the thread containing the writer's processing function |
|---|
| 322 | processing_thread->start(); |
|---|
| 323 | } |
|---|
| 324 | \end{lstlisting} |
|---|
| 325 | This code creates a new thread and starts processing when the {\tt thread\_started} |
|---|
| 326 | variable is set to true. |
|---|
| 327 | |
|---|
| 328 | Now locate the {\tt stop} function, and the following code will be listed: |
|---|
| 329 | \begin{lstlisting}[] |
|---|
| 330 | omni_mutex_lock l(processing_mutex); |
|---|
| 331 | thread_started=false; |
|---|
| 332 | \end{lstlisting} |
|---|
| 333 | This code stops the processing on the thread by setting {\tt thread\_started} to false. |
|---|
| 334 | |
|---|
| 335 | Now locate the {\tt ProcessData} function, and the following code will be listed: |
|---|
| 336 | \begin{lstlisting}[] |
|---|
| 337 | while(continue_processing()) { |
|---|
| 338 | // push data to output |
|---|
| 339 | dataOutPort->pushPacket(I_out, Q_out); |
|---|
| 340 | |
|---|
| 341 | // wait |
|---|
| 342 | usleep(packet_delay*1000); |
|---|
| 343 | } |
|---|
| 344 | \end{lstlisting} |
|---|
| 345 | This code checks the function {\tt continue\_processing} to determine if packets should |
|---|
| 346 | continue to be sent using {\tt pushPacket}. The {\tt usleep} function call is specific |
|---|
| 347 | to TxDemo, and is not necessarily required in other data sources. |
|---|
| 348 | |
|---|
| 349 | The last section of code that must be created is the {\tt continue\_processing} function. |
|---|
| 350 | The code for the function is listed as the following: |
|---|
| 351 | \begin{lstlisting}[] |
|---|
| 352 | bool TxDemo_i::continue_processing(void) |
|---|
| 353 | { |
|---|
| 354 | omni_mutex_lock l(processing_mutex); |
|---|
| 355 | return thread_started; |
|---|
| 356 | } |
|---|
| 357 | \end{lstlisting} |
|---|
| 358 | |
|---|
| 359 | All of the code listings provided above are not created by default when a new component is |
|---|
| 360 | generated, since the code is only required for source components. Instead, all of the |
|---|
| 361 | code must be added by hand. The addition of the code will create the appropriate environment |
|---|
| 362 | for the data source, and afterwards only the data creation must be added to the {\tt ProcessData} |
|---|
| 363 | function. |
|---|
| 364 | |
|---|
| 365 | % ------------------- Known Bugs ------------------- |
|---|
| 366 | \include{Bugs} |
|---|
| 367 | |
|---|
| 368 | |
|---|
| 369 | % ------------------- Abbreviations ------------------- |
|---|
| 370 | \input{Abbreviations} |
|---|
| 371 | |
|---|
| 372 | % ------------------------------------------------------------------ |
|---|
| 373 | % |
|---|
| 374 | % BIBLIOGRAPHY |
|---|
| 375 | % |
|---|
| 376 | % ------------------------------------------------------------------ |
|---|
| 377 | \newpage |
|---|
| 378 | \bibliography{UserGuide} |
|---|
| 379 | |
|---|
| 380 | % ------------------- Change Log ------------------- |
|---|
| 381 | \newpage |
|---|
| 382 | \section{Change Log} |
|---|
| 383 | \label{appendix:changelog} |
|---|
| 384 | |
|---|
| 385 | \subsection {OSSIE 0.7.2} |
|---|
| 386 | \begin{enumerate} |
|---|
| 387 | \item Improved start/stop capability within TxDemo component. |
|---|
| 388 | \item Corrected XML Template files for OWDC component generation. |
|---|
| 389 | \item Removal of incorrect entry point tags in default\_GPP\_node SPD. |
|---|
| 390 | \item Deletion of vestigial project files. |
|---|
| 391 | \item Addition of Interpolator component. |
|---|
| 392 | \end{enumerate} |
|---|
| 393 | |
|---|
| 394 | \subsection {OSSIE 0.7.1} |
|---|
| 395 | \begin{enumerate} |
|---|
| 396 | \item Removal of duplicate profile templates. |
|---|
| 397 | \item Added start, stop capability to TxDemo component. |
|---|
| 398 | \item Fixed USRP\_Commander rx\_freq property typo. |
|---|
| 399 | \item Fixed capability of components being run as waveforms. |
|---|
| 400 | \end{enumerate} |
|---|
| 401 | |
|---|
| 402 | \subsection {OSSIE 0.7.0} |
|---|
| 403 | \begin{enumerate} |
|---|
| 404 | \item Start of change log. |
|---|
| 405 | \item Allows for non /sdr install. |
|---|
| 406 | \item Installation through RPMs. |
|---|
| 407 | \item ALF can start and stop waveforms. |
|---|
| 408 | \item Reduced plot tool's refresh rate. |
|---|
| 409 | \item Removed ``sample waveform'' option in OWD. |
|---|
| 410 | \item Removed duplicate DOCTYPE descriptors in generated XML files. |
|---|
| 411 | \item Fixed path in USRP's SCD file. |
|---|
| 412 | \item Fixed soundCardCapture device name to prevent OWD error. |
|---|
| 413 | \item Added Ubuntu 8.04 as supported platform. |
|---|
| 414 | \item OWD default save directory is now home directory. |
|---|
| 415 | \item ALF's plot tool has normalized frequency axis. |
|---|
| 416 | \item Debug statements use DEBUG macro instead of std::cout. |
|---|
| 417 | \item Tools now installed to site-packages. |
|---|
| 418 | \item ALF, OWD, and OWD Component Editor can be run from any directory. |
|---|
| 419 | \item More than two nodes can be run through a single domain manager. |
|---|
| 420 | \item Added webcam components. |
|---|
| 421 | \item Installation from source broken into two steps. |
|---|
| 422 | \end{enumerate} |
|---|
| 423 | |
|---|
| 424 | \end{document} |
|---|