commit 4cce70a84c566c1722a2fb2d55fa4feb61e1fafb
Author: Thomas Schöpping <tschoepp@cit-ec.uni-bielefeld.de>
Date:   Thu Apr 20 16:15:11 2017 +0200

    README.txt overhauled.
    A setup script is now available.
    Overhault of the QuCreator IDE setup scrip.
    SerialBoot startup prompt was updated and enhanced.

diff --git a/Host/Source/SerialBoot/main.c b/Host/Source/SerialBoot/main.c
index f7815bc..0370812 100644
--- a/Host/Source/SerialBoot/main.c
+++ b/Host/Source/SerialBoot/main.c
@@ -209,19 +209,20 @@ sb_int32 main(sb_int32 argc, sb_char *argv[])
 static void DisplayProgramInfo(void)
 {
   printf("---------------------------------------------------------------------------\n");
-  printf("SerialBoot version 1.00. Performs firmware updates via the serial port\n");
-  printf("for a microcontroller based system that runs the OpenBLT bootloader.\n\n");
-  printf("Copyright (c) by Feaser  http://www.feaser.com\n");
+  printf("SerialBoot version 1.00. Performs firmware updates via the serial port     \n");
+  printf("for a microcontroller based system that runs the OpenBLT bootloader.       \n");
+  printf("                                                                           \n");
+  printf("Copyright (c) by Feaser  http://www.feaser.com                             \n");
   printf("---------------------------------------------------------------------------\n");
-  printf("This tool was modified for the 'Autonomous Mini Robot' - AMiRo.\n");
-  printf("Copyright (c) 2016 by Marvin Barther, Thomas Schoepping, and Stefan\n");
-  printf("Herbrechtsmeier.\n");
-  printf("This is free software; see the source for copying conditions. There is NO\n");
+  printf("This tool was modified for the 'Autonomous Mini Robot' - AMiRo.            \n");
+  printf("Copyright (c) 2016..2017  Marvin Barther, Thomas Schoepping, and Stefan    \n");
+  printf("                          Herbrechtsmeier                                  \n");
+  printf("This is free software; see the source for copying conditions. There is NO  \n");
   printf("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
-  printf("The development of this software was supported by the Excellence Cluster\n");
+  printf("The development of this software was supported by the Excellence Cluster   \n");
   printf("EXC 227 Cognitive Interaction Technology. The Excellence Cluster EXC 227 is\n");
-  printf("a grant of the Deutsche Forschungsgemeinschaft (DFG) in the context of the\n");
-  printf("German Excellence Initiative.\n");
+  printf("a grant of the Deutsche Forschungsgemeinschaft (DFG) in the context of the \n");
+  printf("German Excellence Initiative.                                              \n");
   printf("---------------------------------------------------------------------------\n");
 } /*** end of DisplayProgramInfo ***/
 
diff --git a/README.txt b/README.txt
index 25d86b2..372f6d6 100644
--- a/README.txt
+++ b/README.txt
@@ -1,12 +1,22 @@
-AMiRo-BLT is the bootloader and flashing toolchain for the base
-version of the Autonomous Mini Robot (AMiRo) [1,2,3]. It is based on
-OpenBLT developed by Feaser (<http://feaser.com/en/openblt.php>).
+AMiRo-BLT is the bootloader and flashing toolchain for the base version of the
+Autonomous Mini Robot (AMiRo) [1,2]. It is based on OpenBLT developed by Feaser
+(see <http://feaser.com/en/openblt.php>).
 
-Copyright (C) 2016  Thomas Schöpping et al.
+Copyright (C) 2016..2017  Thomas Schöpping et al.
 (a complete list of all authors is given below)
 
-For details about the license of this software, please refer to the
-provided file (./Doc/license.html).
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or (at
+your option) any later version.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 This research/work was supported by the Cluster of Excellence
 Cognitive Interaction Technology 'CITEC' (EXC 277) at Bielefeld
@@ -18,117 +28,159 @@ Authors:
  - Marvin Barther
 
 References:
- [1] Herbrechtsmeier S., Rückert U., & Sitte J. (2012). "AMiRo -
-     Autonomous Mini Robot for Research and Education". In Advances in
-     Autonomous Mini Robots (pp. 101-112). Springer Berlin Heidelberg.
- [2] Schöpping T., Korthals T., Herbrechtsmeier S., & Rückert U.
-     (2015). "AMiRo: A Mini Robot for Scientific Applications" In
-     Advances in Computational Intelligence (pp. 199-205). Springer
-     International Publishing.
+ [1] Herbrechtsmeier S., Rückert U., & Sitte J. (2012). "AMiRo - Autonomous Mini
+     Robot for Research and Education". In Advances in Autonomous Mini Robots
+     (pp. 101-112). Springer Berlin Heidelberg.
+ [2] Schöpping T., Korthals T., Herbrechtsmeier S., & Rückert U. (2015). "AMiRo:
+     A Mini Robot for Scientific Applications" In Advances in Computational
+     Intelligence (pp. 199-205). Springer International Publishing.
  
 
 
-#####################################################################
-#                                                                   #
-#     RRRRRRRR  EEEEEEEE    AAA    DDDDDDDD  MM     MM EEEEEEEE     #
-#     RR     RR EE         AA AA   DD     DD MMM   MMM EE           #
-#     RR     RR EE        AA   AA  DD     DD MMMM MMMM EE           #
-#     RRRRRRRR  EEEEEE   AA     AA DD     DD MM MMM MM EEEEEE       #
-#     RR   RR   EE       AAAAAAAAA DD     DD MM     MM EE           #
-#     RR    RR  EE       AA     AA DD     DD MM     MM EE           #
-#     RR     RR EEEEEEEE AA     AA DDDDDDDD  MM     MM EEEEEEEE     #
-#                                                                   #
-#####################################################################
+################################################################################
+#                                                                              #
+#        RRRRRRRR   EEEEEEEE     AAA     DDDDDDDD   MM     MM  EEEEEEEE        #
+#        RR     RR  EE          AA AA    DD     DD  MMM   MMM  EE              #
+#        RR     RR  EE         AA   AA   DD     DD  MMMM MMMM  EE              #
+#        RRRRRRRR   EEEEEE    AA     AA  DD     DD  MM MMM MM  EEEEEE          #
+#        RR   RR    EE        AAAAAAAAA  DD     DD  MM     MM  EE              #
+#        RR    RR   EE        AA     AA  DD     DD  MM     MM  EE              #
+#        RR     RR  EEEEEEEE  AA     AA  DDDDDDDD   MM     MM  EEEEEEEE        #
+#                                                                              #
+################################################################################
 
-This file will help you to setup all required software on your system,
-compile the source code, and use the tools and flash the bootloader
-software to the AMiRo modules.
+This file will help you to setup all required software on your system, compile
+the source code, and use the tools and flash the bootloader software to the
+AMiRo base modules.
 
-=====================================================================
+================================================================================
 
 CONTENTS:
- 1  Required software
-   1.1  stm32flash
-   1.2  gcc-arm-none-eabi
- 2  Compiling the source code
-   1.1  target software
-   1.2  host software
 
-=====================================================================
+  1  Required software
+    1.1  stm32flash
+    1.2  GCC ARM Embedded Toolchain
+    1.3  GNU Make
+    1.4  CMake
+  2  Recommended Software
+  3  Compiling the source code
+    3.1  target software
+    3.2  host software
+
+================================================================================
+
+
 
 1 - REQUIRED SOFTWARE
 ---------------------
 
-The only third party software required are stm32flash and GCC for ARM
-embedded devices.
+The only third party software required are stm32flash and GCC for ARM embedded
+devices. While the latter is a compiler to build binaries that are compatible
+with the microcontrollers (MCUs) of AMiRo, the former is used to write this data
+to the hardware.
+
+
 
 1.1 - stm32flash
+----------------
 
-To build the tool from source, clone the GIT repository to a local
-folder on your machine:
+To build the tool from source, clone the GIT repository to a local folder on
+your machine:
   >$ git clone git://git.code.sf.net/p/stm32flash/code
-Please make sure that you have version 0.4 or later of the tool. It is
-recommend to checkout the following commit:
-  >$ git checkout fb52b4d80613b19b28ab82ba9fa415378d00fb9a
-You can now build the tool by executing 'make'.
-Finally, you must make the resulting binary (stm32flash) globally
-available on your system. You can do so by either copying the file to
-an appropriate location (e.g. /usr/local/bin/) or creating an
-according link.
+Make sure that you have selected version 0.4 or later of the tool. You can now
+build the tool simply by executing 'make'. Finally, you must make the resulting
+binary (stm32flash) globally available in your environment. You can do so by
+either copying the file to an appropriate location (e.g. /usr/local/bin/) or
+creating an according link. The tool must be available as 'stm32flash' in every
+new shell.
 
-1.2 - gcc-arm-none-eabi
+
+1.2 - GCC ARM Embedded Toolchain
+--------------------------------
 
 Various versions of the GCC for ARM embedded devices can be found at
-<https://launchpad.net/gcc-arm-embedded>. It is highly recommended to
-use the version 4.8 with update 2014-q1 since some others will cause
-issues. For installation of the compiler toolchain, please follow the
-instructions that can be found on the web page.
+<https://launchpad.net/gcc-arm-embedded>. For installation of the compiler
+toolchain, please follow the instructions that can be found on the web page.
+If you have access to the AMiRo-OS project as well, it is highly recommended
+to use the setup application provided there.
+
+
+1.3 - GNU Make
+--------------
+
+GNU Make usually comes as preinstalled tool on Ubuntu based operating systems.
+If your system is missing GNU Make, it is recommended to install it from the
+standard repositories since no special requirements (e.g. features of a very
+recent version) are required.
+
+
+1.4 - CMake
+-----------
 
-2 - COMPILING THE SOURCE CODE
+In order to build the SerialBoot host application, CMake version 2.8 or later is
+required. If possible, it is recommended to instal it from the standard
+repositories of your operating system.
+
+
+
+2 - RECOMMENDED SOFTWARE
+------------------------
+
+AMiRo-BLT provides support for the QtCreator IDE. In order to setup according
+projects, use the ./setup.sh script and follow the instructions. It will
+automatically generate the required files and you can import the projects by
+opening the .creator files with Qtcreator IDE.
+
+
+
+3 - COMPILING THE SOURCE CODE
 -----------------------------
 
-The AMiRo-BLT project is separated into two major parts: target and
-host related software. The former comprises the bootloaders for the
-three base modules of the AMiRo. The latter is the SerialBoot tool,
-which can be used to flash further binaries (e.g. a complex operating
-system) to the microcontrollers without the need to connect to the
-module directly. Since the programming connector of the lowermost
-AMiRo module is the only one accessible when the robot is fully set
-up, this enables to update the firmware even for other modules.
-
-2.1 - target software
-
-In the ./Target/Demo/ directory there are three subfolders, one for
-each AMiRo base module. Within each of these is an additional Boot/
-folder (./Target/Demo/<device>/Boot/), which contains a makefile.
-Each bootloader can be compiled by executing 'make' in these
-directories.
-
-In order to flash the bootloader to the microcontroller, you first
-have to set full read and write permissions to the USB ports of your
-system. You can do so by executing the following command:
+The AMiRo-BLT project is separated into two major parts: target- and host-
+related software. The former comprises the bootloaders for the three base
+modules of the AMiRo. The latter is the SerialBoot tool, which can be used to
+flash further binaries (e.g. a complex operating system) to the microcontrollers
+without connecting to the module directly (data is passed through via CAN bus).
+Since the programming connector of the lowermost AMiRo module is the only one
+accessible when the robot is fully set up, this enables to update the firmware
+even for other modules.
+
+
+3.1 - target software
+---------------------
+
+In the ./Target/Demo/ directory there are three subfolders, one for each AMiRo
+base module. Within each of these is an additional Boot/ folder
+(./Target/Demo/<device>/Boot/), which contains a makefile. Each bootloader can
+be compiled by executing 'make' in these directories.
+
+In order to flash the bootloader to a microcontroller, you first have to set
+full read and write permissions to the USB ports of your system. You can do so
+by executing the following command:
   >$ sudo echo 'KERNEL=="ttyUSB[0-9]*",NAME="tts/USB%n",SYMLINK+="%k",MODE="0666"' > /etc/udev/rules.d/50-ttyusb.rules
-Now connect the module you want to flash directly to your system (note
-that indirect flashing is not possible for the bootloader itself) and
-run the command
+Now connect the module you want to flash directly to your system (note that
+indirect flashing is not possible for the bootloader itself) and run the command
   >$ make flash
 If the procedure was not successful, the following hints might help:
-  1) Could the makefile execute the stm32flash tool?
-  2) Are the permissions for USB ports set correctly?
-  3) Is the AMiRo module connected to your system?
+  - Could the makefile execute the stm32flash tool?
+  - Are the permissions for USB ports set correctly?
+  - Are there any other applications using the serial connection?
+  - Is the AMiRo module connected to your system?
+  - Is the AMiRo module powered up?
+
+ATTENTION:
+Never flash a bootloader to the wrong module! Doing so might cause severe errors
+and damage the robot.
 
-WARNING:
-never flash a bootloader to another module! Doing so might cause
-severe errors and damage the robot.
 
-2.2 - host software
+3.2 - host software
+-------------------
 
-The SerialBoot tool can be built by using cmake. The according
-CMakeLists.txt file can be found in the ./Host/Source/SerialBoot/
-directory. You can just run the command
-  >$ cmake . && make
-to generate the binary, though it is recommended to built the tool
-out-of-source.
+The SerialBoot tool can be built by using cmake. The according CMakeLists.txt
+file can be found in the ./Host/Source/SerialBoot/ directory. To ensure
+compatibility with other software (e.g. AMiRo-OS) it is higly recommended to use
+the provided ./setup.sh script to build SerialBoot. In the end the binary path
+should be ./Host/Sotware/SerialBoot/build/SerialBoot.
 
-=====================================================================
+================================================================================
 
diff --git a/ide/QtCreator/QtCreatorSetup.sh b/ide/QtCreator/QtCreatorSetup.sh
index b86be15..787cdc3 100755
--- a/ide/QtCreator/QtCreatorSetup.sh
+++ b/ide/QtCreator/QtCreatorSetup.sh
@@ -1,10 +1,33 @@
+################################################################################
+# AMiRo-OS is an operating system designed for the Autonomous Mini Robot       #
+# (AMiRo) platform.                                                            #
+# Copyright (C) 2016..2017  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
 #!/bin/bash
 
-###############################################################################
-###   HELPER FUNCTIONS                                                      ###
-###############################################################################
+################################################################################
+###   HELPER FUNCTIONS                                                       ###
+################################################################################
 
-#------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
 # toAbsolutePath $1 [$2]
 #
 # Makes a given path absolute and either echos the result or stores it in the
@@ -46,9 +69,9 @@ function toAbsolutePath {
   unset ORIGIN_PATH
   unset ABSOLUTE_PATH
 }
-#------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
 
-#------------------------------------------------------------------------------
+#-------------------------------------------------------------------------------
 # getRelativePath $1 $2 [$3]
 #
 # Computes the relative path from one to another location.
@@ -106,257 +129,330 @@ function getRelativePath {
   unset RELATIVE_PATH
   unset UNIQUE_POSTFIX
 }
-#------------------------------------------------------------------------------
-
-#------------------------------------------------------------------------------
-# printHelp
-#
-# Prnts a help text, how to use this script
-function printHelp {
-  echo -e "The following commands are available:"
-  echo -e ""
-  echo -e "  help  - Prints this help text."
-  echo -e "  all   - Creates a project for each of the AMiRo base modules."
-  echo -e "  clean - Deletes all files created by this script."
-  echo -e "  wipe  - In addittion to 'clean', the .user files created by QtCreator are deleted as well."
-  echo -e ""
-  echo -e "Note: This script does not create a project for the host application."
-  echo -e "      Since the host application uses CMAKE, QtCreator can import it directly."
-}
+#-------------------------------------------------------------------------------
 
-#------------------------------------------------------------------------------
 
 
-
-###############################################################################
-###   INTRO                                                                 ###
-###############################################################################
-
-echo "-------------------------------------------------------------------------------"
-echo ""
-echo "Setup to create QtCreator projects"
-echo "=================================="
-echo ""
-
 ###############################################################################
 ###   INITIALIZATION                                                        ###
 ###############################################################################
 
-# the current user dir
-USER_DIR="${PWD}/"
-
-# the directory containing this script file
-toAbsolutePath $(dirname ${BASH_SOURCE[0]}) SCRIPT_DIR
-
-# the root directory of the project
-toAbsolutePath ${SCRIPT_DIR}../../ PROJECT_ROOT_DIR
-
-# the location where to create the QtCreator files
-QTCREATOR_FILES_PATH=${PROJECT_ROOT_DIR}
+# ignore case when comparing strings
+shopt -s nocasematch
 
-# the include path for GCC specific headers
-ARM_NONE_EABI_GCC_BIN=$(which arm-none-eabi-gcc)
-while [ -L $ARM_NONE_EABI_GCC_BIN ]; do
-  ARM_NONE_EABI_GCC_BIN=$(readlink $ARM_NONE_EABI_GCC_BIN)
+# detect what exactly should be done
+NOINFO_FLAG="NOINFO"
+HELP_FLAG="HELP"
+CLEAN_FLAG="CLEAN"
+WIPE_FLAG="WIPE"
+LIGHTRING_FLAG="LR"
+POWERMANAGEMENT_FLAG="PM"
+DIWHEELDRIVE_FLAG="DWD"
+
+# start with an empty array
+ARG_LIST=()
+# try to interpret all given arguments
+for ARG in "$@"; do
+  case $ARG in
+    "no_info")
+      ARG_LIST+=( "$NOINFO_FLAG" )
+      ;;
+    "help")
+      ARG_LIST+=( "$HELP_FLAG" )
+      ;;
+    "clean")
+      ARG_LIST+=( "$CLEAN_FLAG" )
+      ;;
+    "wipe")
+      ARG_LIST+=( "$WIPE_FLAG" )
+      ;;
+    "all")
+      ARG_LIST+=( "$LIGHTRING_FLAG" "$POWERMANAGEMENT_FLAG" "$DIWHEELDRIVE_FLAG" )
+      ;;
+    "LightRing"|"LR")
+      ARG_LIST+=( "$LIGHTRING_FLAG" )
+      ;;
+    "PowerManagement"|"PM")
+      ARG_LIST+=( "$POWERMANAGEMENT_FLAG" )
+      ;;
+    "DiWheelDrive"|"DWD")
+      ARG_LIST+=( "$DIWHEELDRIVE_FLAG" )
+      ;;
+  esac
 done
-toAbsolutePath "$(dirname $ARM_NONE_EABI_GCC_BIN)/../arm-none-eabi/include/" ARM_NONE_EABI_GCC_INCLUDE_PATH
-
-# a common path for all projects
-COMMON_SOURCE_INCLUDE_PATH=${PROJECT_ROOT_DIR}Target/Source
 
-# the paths to the individual projects
-POWERMANAGEMENT_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM4_STM32F405_Power_Management_GCC/Boot
-DIWHEELDRIVE_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM3_STM32F103_DiWheelDrive_GCC/Boot
-LIGHTRING_PROJECT_ROOT_PATH=${PROJECT_ROOT_DIR}Target/Demo/ARMCM3_STM32F103_LightRing_GCC/Boot
-
-# some prefixes for the project files
-POWERMANAGEMENT_PROJECT_PREFIX="PowerManagement"
-DIWHEELDRIVE_PROJECT_PREFIX="DiWheelDrive"
-LIGHTRING_PROJECT_PREFIX="LightRing"
-
-# evaluate user arguments
-COMMAND=""
-shopt -s nocasematch
-if [ $# == 0 ]; then
-  COMMAND="help"
-else
-  case $1 in
-    "help"|"h")
-      COMMAND="help"
+# evaluate if a help text shall be printed and which further actions to take
+PRINT_INFO=true
+PRINT_HELP=false
+ACTION_REQUESTED=false
+for ARG in ${ARG_LIST[@]}; do
+  case $ARG in
+    $NOINFO_FLAG)
+      PRINT_INFO=false
       ;;
-    "all"|"a")
-      COMMAND="all"
+    $HELP_FLAG)
+      PRINT_HELP=true
       ;;
-    "clean"|"c")
-      COMMAND="clean"
-      ;;
-    "wipe"|"w")
-      COMMAND="wipe"
+    $CLEAN_FLAG|$WIPE_FLAG|$LIGHTRING_FLAG|$POWERMANAGEMENT_FLAG|$DIWHEELDRIVE_FLAG)
+      ACTION_REQUESTED=true
       ;;
     *)
-      COMMAND="unknown"
+      PRINT_HELP=true
       ;;
-   esac
-fi
-
-###############################################################################
-###   SETUP                                                                 ###
-###############################################################################
-
-cd $QTCREATOR_FILES_PATH
-
-case $COMMAND in
-
-  #############################################################################
-  ###   HELP CASE                                                           ###
-  #############################################################################
-  "help")
-    printHelp
-    ;;
-
-  #############################################################################
-  ###   CLEAN / WIPE CASE                                                   ###
-  #############################################################################
-  "clean"|"wipe")
-    echo -n "removing project files..."
-
-    rm ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
-    rm ${POWERMANAGEMENT_PROJECT_PREFIX}.files
-    rm ${POWERMANAGEMENT_PROJECT_PREFIX}.config
-    rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator
-
-    rm ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
-    rm ${DIWHEELDRIVE_PROJECT_PREFIX}.files
-    rm ${DIWHEELDRIVE_PROJECT_PREFIX}.config
-    rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator
-
-    rm ${LIGHTRING_PROJECT_PREFIX}.includes
-    rm ${LIGHTRING_PROJECT_PREFIX}.files
-    rm ${LIGHTRING_PROJECT_PREFIX}.config
-    rm ${LIGHTRING_PROJECT_PREFIX}.creator
-
-    echo -e "\tdone"
-
-    if [ $COMMAND == "wipe" ]; then
-      echo -n "removing .user project files..."
-      if [ -f ${POWERMANAGEMENT_PROJECT_PREFIX}.creator.user ]; then
-        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator.user
-      fi
-      if [ -f ${DIWHEELDRIVE_PROJECT_PREFIX}.creator.user ]; then
-        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator.user
-      fi
-      if [ -f ${LIGHTRING_PROJECT_PREFIX}.creator.user ]; then
-        rm ${LIGHTRING_PROJECT_PREFIX}.creator.user
-      fi
-      echo -e "\tdone"
-    fi
-    ;;
-
-  #############################################################################
-  ###   CREATE CASE                                                         ###
-  #############################################################################
-  "all")
-    ###########################################################################
-    ###   Create PowerManagement Project                                    ###
-    ###########################################################################
-    echo -n "creating project files for ${POWERMANAGEMENT_PROJECT_PREFIX} (STM32F405RGT6)..."
-
-    # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
-    find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
-    find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM3_STM32" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
-    find $POWERMANAGEMENT_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
-
-    # generate a file that specifies all files
-    echo -n "" > ${POWERMANAGEMENT_PROJECT_PREFIX}.files
-    for path in `cat ${POWERMANAGEMENT_PROJECT_PREFIX}.includes`; do
-       find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.files
-    done
-
-    # generate a default project configuration file if none exists so far
-    if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.config ]; then
-      echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.config
-    fi
+  esac
+done
 
-    # generate a default .creator file if none exists so far
-    if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.creator ]; then
-      echo -e "[general]\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.creator
-    fi
+# print the info prompt
+if [[ $PRINT_INFO = true ]]; then
+
+  ##############################################################################
+  ###   PRINT INFO                                                           ###
+  ##############################################################################
+
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "#            Welcome to the AMiRo-BLT QtCreator IDE setup            #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "# Copyright (c) 2016..2017  Thomas Schöpping                         #\n"
+  printf "#                                                                    #\n"
+  printf "# This is free software; see the source for copying conditions.      #\n"
+  printf "# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR  #\n"
+  printf "# A PARTICULAR PURPOSE. The development of this software was         #\n"
+  printf "# supported by the Excellence Cluster EXC 227 Cognitive Interaction  #\n"
+  printf "# Technology. The Excellence Cluster EXC 227 is a grant of the       #\n"
+  printf "# Deutsche Forschungsgemeinschaft (DFG) in the context of the German #\n"
+  printf "# Excellence Initiative.                                             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "\n"
+fi
 
-    echo -e "\tdone"
+# print setup header
+printf "QtCreator projects setup\n"
+printf "========================\n"
+printf "\n"
+
+# print the help text
+if [[ ${#ARG_LIST[@]} == 0 ||
+      (${#ARG_LIST[@]} == 1 && ${ARG_LIST[0]} == "$NOINFO_FLAG") ||
+      $PRINT_HELP = true ]]; then
+
+  ##############################################################################
+  ###   PRINT HELP                                                           ###
+  ##############################################################################
+
+  printf "The following commands are available:                                 \n"
+  printf "                                                                      \n"
+  printf "  help            - Prints this help text.                            \n"
+  printf "  clean           - Deletes all files created by this script.         \n"
+  printf "  wipe            - Deletes the .user files, created by QtCreator.    \n"
+  printf "  LightRing       - Creates a project for the LightRing module.       \n"
+  printf "  PowerManagement - Creates a project for the PowerManagement module. \n"
+  printf "  DiWheelDrive    - Creates a project for the DiWheelDrive module.    \n"
+  printf "  all             - Creates all three projects.                       \n"
+  printf "                                                                      \n"
+  printf "Any of these commands can be combined, e.g.                           \n"
+  printf "  $> ./setup.sh PowerManagement DiWheelDrive                          \n"
+  printf "will create two projects.                                             \n"
+  printf "\n"
+  printf "Note that this script does not create a project for the SerialBoot    \n"
+  printf "application. Since it uses CMAKE, QtCreator can import it directly.   \n"
 
-    ###########################################################################
-    ###   Create DiWheelDrive Project                                       ###
-    ###########################################################################
-    echo -n "creating project files for ${DIWHEELDRIVE_PROJECT_PREFIX} (STM32F103RET6)..."
+fi
 
-    # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
-    find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
-    find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
-    find $DIWHEELDRIVE_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
+# execute action
+if [ $ACTION_REQUESTED = true ]; then
 
-    # generate a file that specifies all files
-    echo -n "" > ${DIWHEELDRIVE_PROJECT_PREFIX}.files
-    for path in `cat ${DIWHEELDRIVE_PROJECT_PREFIX}.includes`; do
-       find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.files
-    done
+  ##############################################################################
+  ###   CONFIGURATION                                                        ###
+  ##############################################################################
 
-    # generate a default project configuration file if none exists so far
-    if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.config ]; then
-      echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.config
-    fi
+  # the current user dir
+  USER_DIR="${PWD}/"
 
-    # generate a default .creator file if none exists so far
-    if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.creator ]; then
-      echo -e "[general]\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.creator
-    fi
+  # the directory containing this script file
+  toAbsolutePath $(dirname ${BASH_SOURCE[0]}) SCRIPT_DIR
 
-    echo -e "\tdone"
+  # the root directory of the project
+  toAbsolutePath ${SCRIPT_DIR}../.. PROJECT_ROOT_PATH
 
-    ###########################################################################
-    ###   Create LightRing Project                                          ###
-    ###########################################################################
-    echo -n "creating project files for ${LIGHTRING_PROJECT_PREFIX} (STM32F103RET6)..."
+  # the relative path where all project files shall be generated
+  read -p "path where to create/delete the project files: " -i "$PROJECT_ROOT_PATH" -e QTCREATOR_FILES_PATH
+  toAbsolutePath $QTCREATOR_FILES_PATH QTCREATOR_FILES_PATH
 
-    # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
-    find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${LIGHTRING_PROJECT_PREFIX}.includes
-    find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${LIGHTRING_PROJECT_PREFIX}.includes
-    find $LIGHTRING_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${LIGHTRING_PROJECT_PREFIX}.includes
+  # the include path for GCC specific headers
+  ARM_NONE_EABI_GCC_BIN=$(which arm-none-eabi-gcc)
+  while [ -L $ARM_NONE_EABI_GCC_BIN ]; do
+    ARM_NONE_EABI_GCC_BIN=$(readlink $ARM_NONE_EABI_GCC_BIN)
+  done
+  toAbsolutePath "$(dirname $ARM_NONE_EABI_GCC_BIN)/../arm-none-eabi/include/" ARM_NONE_EABI_GCC_INCLUDE_PATH
 
-    # generate a file that specifies all files
-    echo -n "" > ${LIGHTRING_PROJECT_PREFIX}.files
-    for path in `cat ${LIGHTRING_PROJECT_PREFIX}.includes`; do
-       find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${LIGHTRING_PROJECT_PREFIX}.files
-    done
+  # a common path for all projects
+  COMMON_SOURCE_INCLUDE_PATH=${PROJECT_ROOT_PATH}Target/Source
 
-    # generate a default project configuration file if none exists so far
-    if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.config ]; then
-      echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${LIGHTRING_PROJECT_PREFIX}.config
-    fi
+  # the paths to the individual projects
+  POWERMANAGEMENT_PROJECT_ROOT_PATH=${PROJECT_ROOT_PATH}Target/Demo/ARMCM4_STM32F405_Power_Management_GCC/Boot
+  DIWHEELDRIVE_PROJECT_ROOT_PATH=${PROJECT_ROOT_PATH}Target/Demo/ARMCM3_STM32F103_DiWheelDrive_GCC/Boot
+  LIGHTRING_PROJECT_ROOT_PATH=${PROJECT_ROOT_PATH}Target/Demo/ARMCM3_STM32F103_LightRing_GCC/Boot
 
-    # generate a default .creator file if none exists so far
-    if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.creator ]; then
-      echo -e "[general]\n" > ${LIGHTRING_PROJECT_PREFIX}.creator
-    fi
+  # the prefix names for the projects to be generated
+  LIGHTRING_PROJECT_PREFIX="LightRing"
+  POWERMANAGEMENT_PROJECT_PREFIX="PowerManagement"
+  DIWHEELDRIVE_PROJECT_PREFIX="DiWheelDrive"
 
-    echo -e "\tdone"
+  printf "\n"
 
-    ;;
+  ##############################################################################
+  ###   SETUP                                                                ###
+  ##############################################################################
+
+  # move to the project root directory
+  cd $QTCREATOR_FILES_PATH
+
+  for ARG in ${ARG_LIST[@]}; do
+    case $ARG in
 
-  #############################################################################
-  ###   ERROR CASE                                                          ###
-  #############################################################################
-  *)
-    echo "ERROR: invalid argument!"
-    echo ""
-    printHelp
-    ;;
+      ##########################################################################
+      ###   CLEAN STEP                                                       ###
+      ##########################################################################
 
-esac
+      $CLEAN_FLAG)
+        printf "removing project files..."
 
-###############################################################################
-###   OUTRO                                                                 ###
-###############################################################################
+        # remove all files
+        rm ${LIGHTRING_PROJECT_PREFIX}.includes 2> /dev/null
+        rm ${LIGHTRING_PROJECT_PREFIX}.files 2> /dev/null
+        rm ${LIGHTRING_PROJECT_PREFIX}.config 2> /dev/null
+        rm ${LIGHTRING_PROJECT_PREFIX}.creator 2> /dev/null
+
+        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.includes 2> /dev/null
+        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.files 2> /dev/null
+        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.config 2> /dev/null
+        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator 2> /dev/null
+
+        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.includes 2> /dev/null
+        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.files 2> /dev/null
+        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.config 2> /dev/null
+        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator 2> /dev/null
+
+        printf "\tdone\n"
+        ;;
+
+      ##########################################################################
+      ###   WIPE STEP                                                        ###
+      ##########################################################################
+
+      $WIPE_FLAG)
+        printf "removing .user project files..."
+
+        # remove all user files
+        rm ${POWERMANAGEMENT_PROJECT_PREFIX}.creator.user 2> /dev/null
+        rm ${DIWHEELDRIVE_PROJECT_PREFIX}.creator.user 2> /dev/null
+        rm ${LIGHTRING_PROJECT_PREFIX}.creator.user 2> /dev/null
+
+        printf "\tdone\n"
+        ;;
+
+      ##########################################################################
+      ###   LIGHTRING SETUP                                                  ###
+      ##########################################################################
+
+      $LIGHTRING_FLAG)
+        printf "creating project files for ${LIGHTRING_PROJECT_PREFIX} (STM32F103RET6)..."
+
+        # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
+        find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${LIGHTRING_PROJECT_PREFIX}.includes
+        find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${LIGHTRING_PROJECT_PREFIX}.includes
+        find $LIGHTRING_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${LIGHTRING_PROJECT_PREFIX}.includes
+
+        # generate a file that specifies all files
+        echo -n "" > ${LIGHTRING_PROJECT_PREFIX}.files
+        for path in `cat ${LIGHTRING_PROJECT_PREFIX}.includes`; do
+          find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${LIGHTRING_PROJECT_PREFIX}.files
+        done
+
+        # generate a default project configuration file if none exists so far
+        if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.config ]; then
+          echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${LIGHTRING_PROJECT_PREFIX}.config
+        fi
+
+        # generate a default .creator file if none exists so far
+        if [ ! -f ${LIGHTRING_PROJECT_PREFIX}.creator ]; then
+          echo -e "[general]\n" > ${LIGHTRING_PROJECT_PREFIX}.creator
+        fi
+
+        printf "\tdone\n"
+        ;;
+
+      ##########################################################################
+      ###   POWERMANAGEMENT SETUP                                            ###
+      ##########################################################################
+
+      $POWERMANAGEMENT_FLAG)
+        printf "creating project files for ${POWERMANAGEMENT_PROJECT_PREFIX} (STM32F405RGT6)..."
+
+        # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
+        find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
+        find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM3_STM32" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
+        find $POWERMANAGEMENT_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.includes
+
+        # generate a file that specifies all files
+        echo -n "" > ${POWERMANAGEMENT_PROJECT_PREFIX}.files
+        for path in `cat ${POWERMANAGEMENT_PROJECT_PREFIX}.includes`; do
+          find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${POWERMANAGEMENT_PROJECT_PREFIX}.files
+        done
+
+        # generate a default project configuration file if none exists so far
+        if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.config ]; then
+          echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.config
+        fi
+
+        # generate a default .creator file if none exists so far
+        if [ ! -f ${POWERMANAGEMENT_PROJECT_PREFIX}.creator ]; then
+          echo -e "[general]\n" > ${POWERMANAGEMENT_PROJECT_PREFIX}.creator
+        fi
+
+        printf "\tdone\n"
+        ;;
+
+      ##########################################################################
+      ###   DIWHEELDRIVE SETUP                                               ###
+      ##########################################################################
+
+      $DIWHEELDRIVE_FLAG)
+        printf "creating project files for ${DIWHEELDRIVE_PROJECT_PREFIX} (STM32F103RET6)..."
+
+        # generate a file that contains all subdirectories as includes (but ignore hidden and documentation directories)
+        find $ARM_NONE_EABI_GCC_INCLUDE_PATH -type d > ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
+        find $COMMON_SOURCE_INCLUDE_PATH -type d | grep -v "ARMCM4_STM32" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
+        find $DIWHEELDRIVE_PROJECT_ROOT_PATH -type d | grep -v "uip\|fatfs\|ethernetlib\|cmd\|ide" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.includes
+
+        # generate a file that specifies all files
+        echo -n "" > ${DIWHEELDRIVE_PROJECT_PREFIX}.files
+        for path in `cat ${DIWHEELDRIVE_PROJECT_PREFIX}.includes`; do
+          find $path -maxdepth 1 -type f \( ! -iname ".*" \) | grep -v "/arm-none-eabi/" | grep -E ".*(\.h|\.c|\.x)$" >> ${DIWHEELDRIVE_PROJECT_PREFIX}.files
+        done
+
+        # generate a default project configuration file if none exists so far
+        if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.config ]; then
+          echo -e "// Add predefined macros for your project here. For example:\n// #define YOUR_CONFIGURATION belongs here\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.config
+        fi
+
+        # generate a default .creator file if none exists so far
+        if [ ! -f ${DIWHEELDRIVE_PROJECT_PREFIX}.creator ]; then
+          echo -e "[general]\n" > ${DIWHEELDRIVE_PROJECT_PREFIX}.creator
+        fi
+
+        printf "\tdone\n"
+        ;;
+
+    esac
+  done
+fi
 
-echo ""
-echo "-------------------------------------------------------------------------------"
+################################################################################
+###   OUTRO                                                                  ###
+################################################################################
 
diff --git a/setup.sh b/setup.sh
new file mode 100755
index 0000000..37c518e
--- /dev/null
+++ b/setup.sh
@@ -0,0 +1,152 @@
+################################################################################
+# AMiRo-BLT is an bootloader and toolchain designed for the Autonomous Mini    #
+# Robot (AMiRo) platform.                                                      #
+# Copyright (C) 2016..2017  Thomas Schöpping et al.                            #
+#                                                                              #
+# This program is free software: you can redistribute it and/or modify         #
+# it under the terms of the GNU General Public License as published by         #
+# the Free Software Foundation, either version 3 of the License, or            #
+# (at your option) any later version.                                          #
+#                                                                              #
+# This program is distributed in the hope that it will be useful,              #
+# but WITHOUT ANY WARRANTY; without even the implied warranty of               #
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                #
+# GNU General Public License for more details.                                 #
+#                                                                              #
+# You should have received a copy of the GNU General Public License            #
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.        #
+#                                                                              #
+# This research/work was supported by the Cluster of Excellence Cognitive      #
+# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is   #
+# funded by the German Research Foundation (DFG).                              #
+################################################################################
+
+#!/bin/bash
+
+# initial info text (can be disabled with 'no_info' as last argument)
+if [[ ! ${!#} = "no_info" ]]; then
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "#                  Welcome to the AMiRo-BLT setup!                   #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "#                                                                    #\n"
+  printf "# Copyright (c) 2016..2017  Thomas Schöpping                         #\n"
+  printf "#                                                                    #\n"
+  printf "# This is free software; see the source for copying conditions.      #\n"
+  printf "# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR  #\n"
+  printf "# A PARTICULAR PURPOSE. The development of this software was         #\n"
+  printf "# supported by the Excellence Cluster EXC 227 Cognitive Interaction  #\n"
+  printf "# Technology. The Excellence Cluster EXC 227 is a grant of the       #\n"
+  printf "# Deutsche Forschungsgemeinschaft (DFG) in the context of the German #\n"
+  printf "# Excellence Initiative.                                             #\n"
+  printf "#                                                                    #\n"
+  printf "######################################################################\n"
+  printf "\n"
+fi
+
+# initialization of variables
+ARG_IDX=1
+USER_INPUT=${!ARG_IDX}
+
+while [[ ! $USER_INPUT =~ ^[Ee]$ ]]; do
+
+  # main menu info prompt and selection
+  printf "AMiRo-BLT setup\n"
+  printf "===============\n"
+  printf "\n"
+  if [[ -z $USER_INPUT || $USER_INPUT == "no_info" ]]; then
+    printf "Please select one of the following actions:\n"
+    printf "    [S] - SerialBoot flashing tool setup\n"
+    printf "    [Q] - setup QtCreator projects\n"
+    printf "    [E] - exit this setup\n"
+
+    while [[ ! $USER_INPUT =~ ^[SsQqEe]$ ]]; do
+      read -p "your selection: " -n 1 -e USER_INPUT
+      if [[ ! $USER_INPUT =~ ^[SsQqEe]$ ]]; then
+        printf "[%s] is no valid action. \n" $USER_INPUT
+      fi
+    done
+
+    printf "\n"
+    printf "######################################################################\n"
+    printf "\n"
+  fi
+
+  # action selection
+  case $USER_INPUT in
+
+    # SerailBoot setup
+    S|s)
+      # print setup header
+      printf "SerialBoot setup\n"
+      printf "================\n"
+      printf "\n"
+
+      USER_DIR=${PWD}
+      cd $(dirname ${BASH_SOURCE[0]})/Host/Source/SerialBoot
+      BUILD_SERIALBOOT=true
+
+      # test for existing binary
+      if [ -f build/SerialBoot ]; then
+        printf "WARNING: SerialBoot binary already exists.\n"
+        read -p "Would you like to delete and rebuild it? [Y|n] " -n 1 -i "Y" -e USER_INPUT
+        if [[ $USER_INPUT =~ ^[Yy]$ ]]; then
+          BUILD_SERIALBOOT=true
+          rm -rf build/
+        elif [[ ! $USER_INPUT =~ ^[YyNn]$ ]]; then
+          BUILD_SERIALBOOT=false
+          printf "'%s' is no valid selection. Aborting setup.\n" $USER_INPUT
+        else
+          BUILD_SERIALBOOT=false
+        fi
+      fi
+
+      # build the tool, if requested
+      if [ $BUILD_SERIALBOOT = true ]; then
+        mkdir build
+        cd build
+        cmake ..
+        make
+      fi
+
+      cd $USER_DIR
+      ;;
+
+    # QtCreator setup
+    Q|q)
+      # calling the script with no arguments prints the help and returns
+      source $(dirname ${BASH_SOURCE[0]})/ide/QtCreator/QtCreatorSetup.sh "no_info"
+      printf "\n"
+      # set deafult arguments and call the script again
+      USER_INPUT="clean all"
+      read -p "select commands: " -i "$USER_INPUT" -e USER_INPUT
+      printf "\n"
+      source $(dirname ${BASH_SOURCE[0]})/ide/QtCreator/QtCreatorSetup.sh "no_info" $USER_INPUT
+      ;;
+
+    # exit
+    E|e)
+      break;
+      ;;
+
+    # sanity check
+    *)
+      printf "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+      printf "ERROR (${LINENO}): unexpected state; aborting script\n"
+      printf "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"
+      printf "\n"
+      exit
+      ;;
+
+  esac
+
+  printf "\n"
+  printf "######################################################################\n"
+  printf "\n"
+
+  let ARG_IDX++
+  USER_INPUT=${!ARG_IDX}
+
+done
+
