00001 /** 00002 * @file applications.h 00003 * @brief Documentation: Overview of official WOSH Applications 00004 **************************************************************************** 00005 * @author Alessandro Polo 00006 * @version 0.8.527 $Id: applications.h 3774 2011-01-01 16:37:15Z alex $ 00007 ****************************************************************************/ 00008 /* Copyright (c) 2007-2011, WOSH - Wide Open Smart Home 00009 * by Alessandro Polo - OpenSmartHome.com 00010 * All rights reserved. 00011 * 00012 * Redistribution and use in source and binary forms, with or without 00013 * modification, are permitted provided that the following conditions are met: 00014 * * Redistributions of source code must retain the above copyright 00015 * notice, this list of conditions and the following disclaimer. 00016 * * Redistributions in binary form must reproduce the above copyright 00017 * notice, this list of conditions and the following disclaimer in the 00018 * documentation and/or other materials provided with the distribution. 00019 * * Neither the name of the OpenSmartHome.com WOSH nor the 00020 * names of its contributors may be used to endorse or promote products 00021 * derived from this software without specific prior written permission. 00022 * 00023 * THIS SOFTWARE IS PROVIDED BY Alessandro Polo ''AS IS'' AND ANY 00024 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 00025 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00026 * DISCLAIMED. IN NO EVENT SHALL Alessandro Polo BE LIABLE FOR ANY 00027 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 00028 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 00029 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 00030 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00031 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00032 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00033 ****************************************************************************/ 00034 00035 /*! \page page_applications Applications 00036 * 00037 * This page describes (official) Applications that ships with WOSH. 00038 * 00039 * \par Official WOSH Applications: 00040 * 00041 * - \ref page_applications_woshsrv 00042 * - \ref page_applications_woshcesrv 00043 * - \ref page_applications_woshshop 00044 * - \ref page_applications_wosh3d 00045 * - \ref page_applications_woshshell 00046 * - \ref page_applications_woshremote 00047 * - \ref page_applications_woshkiosk 00048 * 00049 * \section page_applications_toc Table of Contents: 00050 * 00051 * - \ref page_applications_overview 00052 * - \ref page_applications_philosophy 00053 * - \ref page_applications_flow 00054 * 00055 * - \ref page_applications_sample 00056 * 00057 * 00058 * \htmlonly <hr/> \endhtmlonly 00059 **************************************************************************** 00060 * \section page_applications_overview Overview 00061 * 00062 * A WOSH Application is defined as a generic software based on WOSH Framework. 00063 * 00064 * Such applications are designed for end-users (inhabitants) and system/home administrators. 00065 * 00066 * Main goal of WOSH applications is to load, setup and boot the WOSH Kernel. 00067 * Usually they also expose some access/viewport to the user (graphical or console). 00068 * Because of that, these application are not expected to be complex and grow as the 00069 * framework and its services. 00070 * 00071 * Beginners and Windows' users should give a look to \ref page_applications_woshshop "WOSH WorkShop": 00072 * a graphical application designed (mostly) for the administration of the whole system. 00073 * WoshShop is a good example of standalone vs. distributed/remote management, it can 00074 * control transparently the local kernel (integrated) and any reachable remote kernel both. 00075 * 00076 * Another graphical application, started recently, is \ref page_applications_woshkiosk "WOSH KiosK". 00077 * KiosK is designed specifically for the inhabitant user, preferably running on a 00078 * touch-screen device. KiosK is the most user-friendly WOSH application. 00079 * \note The development of WOSH KiosK has been delayed. 00080 * 00081 * \ref page_applications_woshcesrv "WOSH CE Server" is a minimal server designed for 00082 * on smartphones and embedded devices, it hosts a specific bundle which exports messaging 00083 * and communication services to the WOSH Network (assuming device is always connected to the network). 00084 * 00085 * Last but not least, \ref page_applications_woshsrv "WOSH Server" is a console (CLI) application 00086 * running WoshKernel and a standard I/O console to WOSH Shell. It is designed to be 00087 * (one of) the main server and run 24/7. 00088 * 00089 * Latest introduced WOSH Application is \ref page_applications_wosh3d "WOSH 3D", it's a 00090 * graphical application based on QT and GLC library, able to render the abstract representation 00091 * of the house (see wosh::building). 00092 * \note The development of WOSH 3D is in early stage. 00093 * 00094 * Expert users and developers just love shell and ssh, \ref page_applications_woshshell "WOSH Shell" 00095 * is a mimimal (console) client application designed to control WOSH System (remotely). 00096 * 00097 * 00098 * Applications' source code is located in <a href="../../src/apps">/src/apps</a> 00099 * folder [<a href="../../src/apps/README">README</a>]. 00100 * 00101 * Binaries are always built in <a href="../../bin">/bin</a> directory (eventually sub-folders). 00102 * 00103 * \note 00104 * Because of WOSH framework itself is under development, application are not linked 00105 * against the WOSH Library, but the whole WOSH Framework and bundles are directly 00106 * included in final executable (static linking). 00107 * 00108 * Once a stable release of WOSH is available, applications will statically or dynamically link 00109 * against the WOSH Framework library and bundles will be loaded from shared or dynamic libraries. 00110 * 00111 * 00112 * \htmlonly <hr/> \endhtmlonly 00113 **************************************************************************** 00114 * \section page_applications_philosophy Design (philosophy) 00115 * 00116 * Consider a WOSH server (such as \ref page_applications_woshsrv "woshsrv"), 00117 * it makes sense to have the WOSH Kernel on it because it hosts services (bundles). 00118 * 00119 * Generally speaking, frameworks and middleware are useful because of abstraction, 00120 * rapid development and well-defined interfaces/features. 00121 * So, why a graphical application like a remote controller or an embedded system 00122 * should implement custom accessing layers? In fact, having them based on the 00123 * same micro-kernel will speed up and simplify development and maintenance both. 00124 * 00125 * In other words: a WOSH application ships with a WOSH Kernel and acts as one 00126 * host of the WOSH network. The 'main' WOSH server running on the Residential gateway 00127 * (home server) and the \ref page_applications_woshremote "WOSH Remote" software 00128 * (running on the laptop) are two idempotent hosts of the WOSH network by many (most) 00129 * points of view. 00130 * 00131 * All WOSH applications are clients and servers at same time. 00132 * 00133 * 00134 * \htmlonly <hr/> \endhtmlonly 00135 **************************************************************************** 00136 * \section page_applications_flow Flow 00137 * 00138 * As said in previous sections, WOSH Applications share the underlying layer 00139 * (micro-kernel) and the (optional) configuration profile, because of that 00140 * the application flow follows the same structure. 00141 * 00142 * \msc 00143 Application,Settings,WoshKernel, QT; 00144 00145 Application=>QT [label="Initialize QT Framework"]; 00146 Application=>Settings [label="Initialize defaults and load settings"]; 00147 |||; 00148 Application=>WoshKernel [label="Initialize Kernel", URL="\ref wosh::WoshKernel::init()"]; 00149 Application=>WoshKernel [label="Start Kernel", URL="\ref wosh::WoshKernel::start()"]; 00150 |||; 00151 --- [ label=" More threads are launched "]; 00152 Application=>WoshKernel [label="Initialize explicit Bundles"]; 00153 |||; 00154 Application=>Application [label="Setup optional user Session"]; 00155 |||; 00156 Application=>WoshKernel [label="Acquire main thread"]; 00157 |||; 00158 Application=>WoshKernel [label="Shutdown Kernel", URL="\ref wosh::WoshKernel::shutdown()"]; 00159 * \endmsc 00160 * 00161 * 00162 * \htmlonly <hr/> \endhtmlonly 00163 **************************************************************************** 00164 * \section page_applications_sample Sample Log files 00165 * 00166 * A sample log file of \ref page_applications_woshsrv "woshsrv" 00167 * (<a href="../../var/log/sample.woshsrv.log">/var/log/sample.woshsrv.log</a>) 00168 * 00169 * A sample log file of \ref page_applications_woshshop "woshshop" 00170 * (<a href="../../var/log/sample.woshshop.log">/var/log/sample.woshshop.log</a>) 00171 * 00172 * 00173 **************************************************************************** 00174 * 00175 */