summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuli Piippo <samuli.piippo@digia.com>2014-09-02 10:35:18 +0300
committerSamuli Piippo <samuli.piippo@digia.com>2014-09-02 10:35:34 +0300
commit3a4fb56b69957ada6e59a669ea38df948794dbd0 (patch)
tree8ae9a2bf9f20cd353245a40e37fe6801fe0cff14
parentd84c4a93309f45fc4372c80f3a402b29b95f07f0 (diff)
parent5bbd7f92e895d63439165fd0d3dfd5ee80bd6d7b (diff)
Merge remote-tracking branch 'origin/stable' into dev
* origin/stable: (42 commits) Doc: split up the docs into multiple files Doc: Bump version to 3.1.1 Doc: ChangeLog for QtEE 3.1.1 release Doc: Minor update to Toradex Apalis iMX6 boot instructions Get rid of the missing cmake tests error from qmake with Qt 5.4 Doc: Update URLs for external pages [Doc] Troubleshooting - add note about flashing BD's i.MX6 Doc: Mention the new templates in Building and Running topic Doc: ChangeLog for 3.1.0 release Doc: Android-specific instructions for Qt Creator Kit setup Doc: Add note about crash message when closing an application Fix #ifdef for Android detection Doc: Bump version to 3.1.0 Doc: Update the Supported Platforms page Doc: Fix path for sabre install doc: add documentation for Toradex Apalis iMX6 Doc: injection to eAndroid reference devices Fix Wifi issues on Android 4.4.2 Don't hardcode interface name in getIPAddress() Doc: Update the list of supported platforms ... Change-Id: I54e820d5c1a970ed4afb899ced453269bbc97002
-rw-r--r--.qmake.conf1
-rw-r--r--src/doc/config/b2qt.qdocconf4
-rw-r--r--src/doc/src/b2qt-external-pages.qdoc17
-rw-r--r--src/doc/src/b2qt-post-install-setup.qdocinc36
-rw-r--r--src/doc/src/b2qt.qdoc1552
-rw-r--r--src/doc/src/devices/qtee-bd-sl-imx6.qdoc110
-rw-r--r--src/doc/src/devices/qtee-beagleboard-xm.qdoc69
-rw-r--r--src/doc/src/devices/qtee-beaglebone-black.qdoc101
-rw-r--r--src/doc/src/devices/qtee-imx53.qdoc70
-rw-r--r--src/doc/src/devices/qtee-nexus-7.qdoc103
-rw-r--r--src/doc/src/devices/qtee-raspberry-pi.qdoc69
-rw-r--r--src/doc/src/devices/qtee-sabre-sd-imx6quad.qdoc69
-rw-r--r--src/doc/src/devices/qtee-supported-devices.qdoc106
-rw-r--r--src/doc/src/devices/qtee-toradex-apalis.qdoc80
-rw-r--r--src/doc/src/qtee-building-running.qdoc134
-rw-r--r--src/doc/src/qtee-changelog.qdoc239
-rw-r--r--src/doc/src/qtee-custom-embedded-linux.qdoc160
-rw-r--r--src/doc/src/qtee-customization.qdoc148
-rw-r--r--src/doc/src/qtee-index.qdoc166
-rw-r--r--src/doc/src/qtee-install-guide.qdoc149
-rw-r--r--src/doc/src/qtee-licenses.qdoc68
-rw-r--r--src/doc/src/qtee-qml-reference.qdoc34
-rw-r--r--src/doc/src/qtee-troubleshooting.qdoc255
-rw-r--r--src/doc/src/shared/b2qt-external-pages.qdoc63
-rw-r--r--src/doc/src/shared/b2qt-post-install-setup.qdocinc132
-rw-r--r--src/doc/src/shared/detect-sd-card-device-name.qdocinc45
-rw-r--r--src/doppelganger/doppelganger.pro8
-rw-r--r--src/doppelganger/main.cpp2
-rw-r--r--src/doppelganger/powermanager.cpp88
-rw-r--r--src/doppelganger/powermanager.h62
-rw-r--r--src/imports/imports.pro3
-rw-r--r--src/imports/wifi/pluginmain.cpp25
-rw-r--r--src/imports/wifi/plugins.qmltypes60
-rw-r--r--src/imports/wifi/qmldir1
-rw-r--r--src/imports/wifi/qwifi_elinux.cpp264
-rw-r--r--src/imports/wifi/qwifi_elinux.h34
-rw-r--r--src/imports/wifi/qwifimanager.cpp90
-rw-r--r--src/imports/wifi/qwifimanager.h30
-rw-r--r--src/imports/wifi/qwifinetworklistmodel.cpp13
-rw-r--r--src/imports/wifi/wifi.pro23
-rw-r--r--src/qconnectivity/main.cpp79
-rw-r--r--src/utils/qdroidutils.cpp20
42 files changed, 3154 insertions, 1628 deletions
diff --git a/.qmake.conf b/.qmake.conf
index d253d07..a21d90c 100644
--- a/.qmake.conf
+++ b/.qmake.conf
@@ -1,2 +1,3 @@
load(qt_build_config)
MODULE_VERSION=2.0.0
+CMAKE_MODULE_TESTS=-
diff --git a/src/doc/config/b2qt.qdocconf b/src/doc/config/b2qt.qdocconf
index 3f8f92a..9928640 100644
--- a/src/doc/config/b2qt.qdocconf
+++ b/src/doc/config/b2qt.qdocconf
@@ -6,7 +6,7 @@ sourceencoding = UTF-8
project = QtEnterpriseEmbedded
description = Qt Enterprise Embedded Documentation
-version = 2.1.0
+version = 3.1.1
sourcedirs = ../src \
../../imports/wifi
@@ -23,7 +23,7 @@ indexes = $QT_INSTALL_DOCS/qtquick/qtquick.index \
qhp.projects = B2Qt
qhp.B2Qt.file = b2qt.qhp
-qhp.B2Qt.namespace = com.digia.b2qt.210
+qhp.B2Qt.namespace = com.digia.b2qt.311
qhp.B2Qt.virtualFolder = b2qt
qhp.B2Qt.indexTitle = Qt Enterprise Embedded Documentation
qhp.B2Qt.indexRoot =
diff --git a/src/doc/src/b2qt-external-pages.qdoc b/src/doc/src/b2qt-external-pages.qdoc
index 694f349..d642fa2 100644
--- a/src/doc/src/b2qt-external-pages.qdoc
+++ b/src/doc/src/b2qt-external-pages.qdoc
@@ -18,12 +18,12 @@
****************************************************************************/
/*!
- \externalpage http://qt.digia.com/Product/Qt-for-Embedded-Development/Qt-Enterprise-Embedded/Supported-Modules-and-Known-Issues/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise-Embedded/Supported-Modules-and-Known-Issues/
\title Known Issues
*/
/*!
- \externalpage http://qt.digia.com/Product/Qt-for-Embedded-Development/Qt-Enterprise-Embedded/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise-Embedded/
\title product page
*/
@@ -33,26 +33,31 @@
*/
/*!
- \externalpage http://qt.digia.com/Product/Qt-Enterprise-Features/Advanced-Data-Visualization/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Advanced-Data-Visualization/
\title Qt Data Visualization
*/
/*!
- \externalpage http://qt.digia.com/Product/Qt-Enterprise-Features/Qt-Quick-Enterprise-Controls/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Quick-Enterprise-Controls/
\title Qt Quick Enterprise Controls
*/
/*!
- \externalpage http://qt.digia.com/Product/Qt-Enterprise-Features/Qt-Virtual-Keyboard/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Virtual-Keyboard/
\title Qt Virtual Keyboard
*/
/*!
- \externalpage http://qt.digia.com/Product/Qt-Enterprise-Features/Charts/
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Charts/
\title Qt Charts
*/
/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Quick-Compiler/
+ \title Qt Quick Compiler
+*/
+
+/*!
\externalpage https://www.yoctoproject.org/
\title Yocto Project
*/
diff --git a/src/doc/src/b2qt-post-install-setup.qdocinc b/src/doc/src/b2qt-post-install-setup.qdocinc
index ec293de..0bd96dd 100644
--- a/src/doc/src/b2qt-post-install-setup.qdocinc
+++ b/src/doc/src/b2qt-post-install-setup.qdocinc
@@ -56,12 +56,14 @@
//! [setting up usb access]
//! [configuring device kit]
+//! [common config device kit]
After you have prepared the hardware, you must perform one final step
to set up the development tools in Qt Creator for your device. That is,
you must configure the correct device to be used for each build and run
\e{kit}. Connect your device to the development host via USB and launch
Qt Creator. In Qt Creator:
+//! [common config device kit]
//! [steps for device kit]
\list 1
\li Select \b{Tools > Options > Build & Run > Kits}.
@@ -73,6 +75,25 @@
//! [steps for device kit]
//! [configuring device kit]
+//! [android steps for dev kit]
+ \list 1
+ \li Select \b{Tools > Options > Build & Run > Kits}.
+ \li Select the kit with the correct Android version
+ (for example, \e {generic-4.2}).
+ \li Select the correct device in the \b{Device} field.
+ \li Select \b{OK}.
+ \endlist
+
+ If you have more than one development device that use the same Android
+ version, clone the \e generic kit and rename it after the physical device:
+
+ \list 1
+ \li Select the generic Android kit and then \b Clone.
+ \li Select the correct device in the \b{Device} field.
+ \li Edit the name of the cloned kit and press \b OK.
+ \endlist
+//! [android steps for dev kit]
+
//! [configuring network device]
After you have prepared the hardware, you must set up the development tools
in Qt Creator for your device. Connect your device to the network via an
@@ -93,4 +114,19 @@
\include b2qt-post-install-setup.qdocinc steps for device kit
//! [configuring network device]
+
+//! [configuring device kit android]
+ \include b2qt-post-install-setup.qdocinc common config device kit
+ \include b2qt-post-install-setup.qdocinc android steps for dev kit
+//! [configuring device kit android]
+
+//! [configuring device kit android linux]
+ \include b2qt-post-install-setup.qdocinc common config device kit
+ \list
+ \li \b{\B2QL}
+ \include b2qt-post-install-setup.qdocinc steps for device kit
+ \li \b{\B2QA}
+ \include b2qt-post-install-setup.qdocinc android steps for dev kit
+ \endlist
+//! [configuring device kit android linux]
*/
diff --git a/src/doc/src/b2qt.qdoc b/src/doc/src/b2qt.qdoc
deleted file mode 100644
index 394eb44..0000000
--- a/src/doc/src/b2qt.qdoc
+++ /dev/null
@@ -1,1552 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use the contact form at
-** http://qt.digia.com/
-**
-** This file is part of Qt Enterprise Embedded.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** the contact form at http://qt.digia.com/
-**
-****************************************************************************/
-
-/*!
- \contentspage{index.html}{Qt Enterprise Embedded}
- \page index.html
- \nextpage qtee-overview.html
- \title Qt Enterprise Embedded
-
- \SDK provides a fully-integrated solution to get you started immediately
- with software development on your embedded device with a tailored user
- experience for embedded Linux and embedded Android. \SDK contains the tools
- you need for fast, easy, and fully-integrated embedded device application
- development. It comes with \B2Q, a light-weight UI stack for embedded
- systems, and the Qt Creator integrated development environment (IDE) with
- preconfigured build targets for hardware platforms, as well as an emulator
- for testing the applications.
-
- \e{\b{IMPORTANT:} Make sure to follow the \l{Installation Guide}
- closely!}
-
- \section1 Contents
-
- \list
- \li \l{About Qt Enterprise Embedded}
- \li \l{Installation Guide}
- \li \l{Supported Platforms}
- \li \l{Preparing Hardware}
- \list
- \li \l{Preparing Nexus 7}{Nexus 7 (2012) (embedded Android)}
- \li \l{Preparing Sabre Lite i.MX 6}{Sabre Lite i.MX 6 (embedded Android and Linux)}
- \li \l{Preparing BeagleBone Black}{BeagleBone Black (embedded Android and Linux)}
- \li \l{Preparing BeagleBoard-xM}{BeagleBoard-xM (embedded Linux)}
- \li \l{Preparing Raspberry Pi}{Raspberry Pi Model B (embedded Linux)}
- \endlist
- \li \l{Building and Running Embedded Applications}
- \list
- \li \l{Special Build & Run Options}
- \endlist
- \li \l{Customization}
- \li \l{Building Your Own Embedded Linux Image}
- \li \l{ChangeLog}
- \li \l{Troubleshooting}
- \li \l{License Information}
- \endlist
-
- \section1 Reference Documentation
-
- \list
- \li \l{Add-On QML Types}
- \endlist
-*/
-
-/*!
- \contentspage{index.html}{Qt Enterprise Embedded}
- \page qtee-overview.html
- \previouspage index.html
- \nextpage qtee-installation-guide.html
-
- \title About Qt Enterprise Embedded
-
- \SDK has two main parts:
-
- \list
- \li Development environment that is installed on a Linux development
- desktop by using an online installer
- \li \B2Q
- \endlist
-
- \section1 About the Development Environment
-
- The development is done with the Qt Enterprise libraries and device
- deployment can be done with one click directly from Qt Creator to a device
- connected via USB. Alternatively, you can deploy the application locally
- directly to the \B2Q Emulator that is running the full target software stack
- as in the device.
-
- As with any Qt based application, the same application can be deployed to
- desktop and mobile OS targets as well.
-
- \section1 About \B2Q
-
- \e{\b{\B2Q}} is a light-weight, Qt-optimized, full software stack for
- embedded systems that is installed into the actual target device. This is
- done by flashing the device's memory card or internal memory directly with a
- pre-built image that comes with the development environment.
-
- \B2Q supports two different operating systems:
-
- \list
- \li \b{\B2QA} where the software stack is based on the Android Kernel
- (version 4.1 or higher) and selected middleware. It includes a lean
- software stack where Qt/QML replaces the top Java graphical layer
- and removes the Zygote process layer as well the Android home screen
- enabling better and faster development where modern UIs are at the
- forefront.
-
- \li \b{\B2QL} where the software stack is using the traditional embedded
- Linux kernel built with the Yocto Poky reference system (Yocto 1.5
- \e Dora release). The Embedded Linux variant is designed for great
- customization possibilities. It contains only components required in
- the embedded device, resulting in smaller image sizes while keeping
- valuable development tools available.
- \endlist
-
- Both versions have been tested and verified on a number of different
- hardware configurations. \B2Q support is not limited to the devices used
- as reference platforms, it can be made to run on a variety of hardware.
-
- \section1 About Qt
-
- \l{http://qt.digia.com/}{Qt} is a full development framework with tools
- designed to streamline the creation of applications and user interfaces
- for desktop, embedded, and mobile platforms.
-
- \list
- \li \b{Qt Framework} - intuitive APIs for C++
- and CSS/JavaScript-like programming with
- \b{Qt Quick} for rapid UI
- creation
- \li \b{Qt Creator IDE} - powerful cross-platform integrated development
- environment, including UI designer tools and on-device debugging
- \li \b{Tools and toolchains} - internationalization support, embedded
- toolchains and more.
- \endlist
-
- With Qt, you can reuse code efficiently to target multiple platforms
- with one code base. The modular C++ class library and development tools
- enable developers to create applications for one platform and easily
- build and run to deploy also on other platforms.
-
-
- \section1 \B2Q vs Qt for Android
-
- \image b2qt-vs-qt-for-android.png
-
- \e{\b{Qt for Android}} is a port of the Qt Framework to be used for application
- development on the Android platform. Its purpose is to enable development
- of applications that can run on Android devices. For developers writing
- applications for the Android ecosystem, Qt for Android is the right choice.
-
- \b{\B2QA} tries to strip down the Android
- stack to the bare minimum, relying only on basic Linux
- features. The majority of the Android stack, such as
- \e{Dalvik virtual machine} is not running in \B2Q,
- resulting in faster startup times, lower memory consumption and
- overall better performance.
-*/
-
-/*!
- \page qtee-installation-guide.html
- \title Installation Guide
- \previouspage qtee-overview.html
- \nextpage qtee-supported-platforms.html
-
- To successfully set up \SDK, you must closely follow the instructions in
- this section and perform all the described tasks.
-
- In case of problems, see the \l{Troubleshooting} information and the
- \l {Known Issues} in \SDK \l {product page}.
-
- \target Requirements for Development Host
- \section1 Requirements for Development Host
-
- A 64-bit Linux system is required to install and use \SDK. Instructions
- in this documentation assume Ubuntu Linux 64-bit 12.04 LTS or later.
- Other Linux distributions may work, but have not been tested. C/C++ build
- essentials must be installed.
-
- \target Installing 32-bit Support Libraries
- \section1 1. Installing 32-bit Support Libraries
-
- Some of the build tools in \SDK are 32-bit programs, and on 64-bit
- systems they require support libraries for running 32-bit code. To
- install the required packages in recent versions of Ubuntu, use
- the following command in a terminal:
-
- \badcode
- sudo apt-get install g++-multilib zlib1g:i386
- \endcode
-
- For older Ubuntu versions such as 12.04, instead do:
-
- \badcode
- sudo apt-get install g++-multilib ia32-libs
- \endcode
-
- \target Installing VirtualBox
- \section1 2. Installing VirtualBox
-
- The \B2Q emulator in \SDK relies on VirtualBox virtualization software. You can
- download it from \l{https://www.virtualbox.org/wiki/Linux_Downloads} or
- install it via distribution tools.
-
- If you have older Ubuntu versions such as 12.04 you have to install a newer
- version of VirtualBox than your distribution does provide.
- You have to add a foreign package source:
-
- \badcode
- wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
- echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
- sudo apt-get update
- \endcode
-
- Now install VirtualBox on your computer
- \badcode
- sudo apt-get install virtualbox-4.3
- \endcode
-
- To configure VirtualBox:
-
- \list 1
- \li Start the VirtualBox user interface.
- \li Select \b{File > Preferences} > \b{Network} to open VirtualBox
- network settings.
- \li Create a new network named \e{vboxnet0} and edit its properties:
-
- \list 1
- \li Change the IPv4 address to \c{192.168.56.1} and the IPv4 network
- mask to \c{255.255.255.0}.
- \li In the \b{DCHP Server} tab, select the \b{Enable Server} check
- box.
- \li Change the server address to \c{192.168.56.1}.
- \li Change both the lower and upper address bounds to
- \c{192.168.56.101}.
- \endlist
- \endlist
-
- If a firewall is enabled on the development host, it needs to
- allow TCP and UDP packets between your host and the virtual
- machine.
-
- \section1 3. Installing \SDK
-
- \list 1
-
- \li Download the binary \SDK installer, and make sure it is executable
- by using one of the following methods:
-
- \list
- \li Enter the \c{chmod +x <filename>} command.
- \li Right-click the file, and select \b{Properties} >
- \b{Permissions} > \b{Allow executing file as program}.
- \endlist
-
- \li Run the installer and follow its instructions.
-
- \endlist
-
- \note Do not execute the installer as root user or with sudo.
-
- The installer will let you select a directory where \SDK will be
- installed. In this documentation, the installation directory is referred
- to as \b{\c{<INSTALL_DIR>}}. The default installation directory is
- \tt{~/Qt}.
-
- \target Installing Boot to Qt on Target Devices
- \section1 4. Install \B2Q on Target Devices
-
- \e{If you target only the emulator, you can skip this step.}
-
- Before you can deploy and test your Qt application on hardware, you must
- flash the target device with an image that contains the
- \B2Q stack. The steps vary from device to device. Follow the instructions
- specific to your device in \l {Preparing Hardware}.
-
- \section1 5. Setting up USB Access to Embedded Devices
-
- \e{If you target only the emulator, you can skip this step.}
-
- \include b2qt-post-install-setup.qdocinc setting up usb access
-
- \section1 6. Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring device kit
-
- You are now ready to start developing for your device.
- For more information, see \l{Building and Running an Example}.
-*/
-
-/*!
- \page qtee-preparing-hardware.html
- \title Preparing Hardware
- \previouspage qtee-supported-platforms.html
- \nextpage qtee-building-and-running.html
-
- Before you can deploy and test your Qt application on hardware, you must
- flash the target device with an image that contains the
- \B2Q stack. These steps vary from device to device:
-
- \list
- \li \l{Nexus 7 (2012) (embedded Android)}
- \li \l{Sabre Lite i.MX 6 (embedded Android and Linux)}
- \li \l{BeagleBone Black (embedded Android and Linux)}
- \li \l{BeagleBoard-xM (embedded Linux)}
- \li \l{Raspberry Pi Model B (embedded Linux)}
- \endlist
-
- If you use only the emulator, you can skip this step
- and continue straight to \l {Building and Running an Example}.
-*/
-
-/*!
- \target Nexus 7 (2012) (embedded Android)
- \page qtee-preparing-hardware-nexus-7.html
- \title Preparing Nexus 7
- \previouspage qtee-installation-guide.html
- \nextpage qtee-building-and-running.html
-
- Take the following steps to prepare a
- \l{http://www.google.com/nexus/7/specs/}{Nexus 7 (2012)} for
- \B2Q.
-
- \section1 Unlocking Nexus 7 Bootloader
-
- You must unlock the Nexus 7 Bootloader to be able to install custom
- software. You need to do this only once.
-
- \list 1
- \li Power off the device.
- \li Connect the device to the development host with a USB cable.
- \li To start the Nexus up in \e{fastboot} mode, press the power button
- for a second, and then keep the \b {Volume Down} key pressed down,
- until you see a screen with a green robot with its front panel open.
- \note If the ordinary startup screen appears instead, power off the
- device and try again.
- \li On the development host, enter the following command:
- \badcode
- sudo <INSTALL_DIR>/Tools/b2qt/fastboot oem unlock
- \endcode
- \li Press the power button to confirm that you want to unlock the
- bootloader when the prompt appears on the Nexus screen.
- \li Wait a few seconds, and check that the text line stating the \c{LOCK STATE} now says \c{UNLOCKED}.
- \endlist
-
- \section1 Updating a Nexus 7 with \B2Q Images
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- To update an unlocked Nexus 7 device with a \B2Q image:
-
- \list 1
- \li Make sure that the device is in \e{fastboot} mode and that it is
- connected to the development host via USB.
-
- \li Re-flash the \e{boot}, \e{system}, and \e{userdata} partitions on the
- device, by entering the following commands in the following order:
-
- \badcode
- cd <INSTALL_DIR>
- sudo ./Tools/b2qt/fastboot flash boot Boot2Qt-2.x/nexus7-eAndroid/images/boot.img
- sudo ./Tools/b2qt/fastboot flash system Boot2Qt-2.x/nexus7-eAndroid/images/system.img
- sudo ./Tools/b2qt/fastboot flash userdata Boot2Qt-2.x/nexus7-eAndroid/images/data.img
- \endcode
-
- \li Once the flashing is completed successfully, reboot the device:
-
- \badcode
- sudo ./Tools/b2qt/fastboot reboot
- \endcode
-
- \endlist
-
- \note You must install proprietary drivers for the Nexus 7 to boot
- correctly. Until then, the screen will briefly show the "Google" logo and then go black,
- instead of showing the \B2Q welcome screen or demo.
-
- \section1 Installing Proprietary Drivers
-
- Download the proprietary drivers for your Nexus 7. The following script downloads the third
- party drivers from \l{https://developers.google.com/android/nexus/drivers#grouperjdq39}
- {https://developers.google.com/android/nexus/drivers#grouperjdq39}
- \badcode
- cd <INSTALL_DIR>
- ./Boot2Qt-2.x/nexus7-eAndroid/images/download.sh
- \endcode
-
- \note Only the version "Android 4.2.2 (JDQ39 to JDQ39E)" works with the
- current \B2Q image.
-
- To install the drivers to Nexus 7:
-
- \list 1
- \li Power on the device and connect it to the development host via USB.
- Also check that the device is \e{not} in fastboot mode.
- \li Run the driver extractors:
- \badcode
- cd Boot2Qt-2.x/nexus7-eAndroid/images/drivers
- ./extract-nvidia-grouper.sh
- ./extract-asus-grouper.sh
- ./extract-invensense-grouper.sh
- cd -
- \endcode
- \note Carefully read the license terms enclosed in each individual
- extractor.
- \li Find out the serial number of the connected Nexus 7 device:
- \badcode
- ./Tools/b2qt/adb devices
- \endcode
- \li Deploy the drivers to your device:
- \badcode
- ./Boot2Qt-2.x/nexus7-eAndroid/images/deploy.sh <serial_number>
- \endcode
- \endlist
-
- After the installation is complete, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Setting up USB Access
-
- \include b2qt-post-install-setup.qdocinc setting up usb access
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring device kit
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \target BeagleBoard-xM (embedded Linux)
- \page qtee-preparing-hardware-beagleboard.html
- \title Preparing BeagleBoard-xM
- \previouspage qtee-installation-guide.html
- \nextpage qtee-building-and-running.html
-
- Take the following steps to prepare a \l{http://beagleboard.org/hardware-xM}
- {BeagleBoard-xM} for
- \B2Q.
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- The image containing \B2Q stack for BeagleBoard-xM are included in \SDK,
- ready to be copied to an SD card.
-
- \section1 Preparing an SD Card
-
- An SD card of at least 512 MB capacity is needed.
-
- \include detect-sd-card-device-name.qdocinc instructions
-
- \section1 Installing the \B2Q Image
-
- To write the image to the SD card, ensure that no partitions on the
- SD card are mounted:
-
- \include detect-sd-card-device-name.qdocinc unmount
-
- Then,
-
- \badcode
- cd <INSTALL_DIR>
- sudo Boot2Qt-2.x/beagleboard-eLinux/images/deploy.sh /dev/<device_name>
- \endcode
-
- After the image has been deployed, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Setting up USB Access
-
- \include b2qt-post-install-setup.qdocinc setting up usb access
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring device kit
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \target Sabre Lite i.MX 6 (embedded Android and Linux)
- \page qtee-preparing-hardware-imx6.html
- \title Preparing Sabre Lite i.MX 6
- \previouspage qtee-installation-guide.html
-
- Take the following steps to prepare a
- \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}{Sabre
- Lite i.MX 6} for \B2Q.
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- The images containing the \B2Q stack for Sabre Lite i.MX 6 are included
- in \SDK, ready to be copied to an SD card.
-
- \section1 Preparing an SD Card
-
- For \B2QA, an SD card of at least 4 GB capacity is needed. For \B2QL,
- a card of at least 512 MB capacity is sufficient.
-
- \include detect-sd-card-device-name.qdocinc instructions
-
- \section1 Installing the Android image
-
- \e{If installing} \B2QL, \e{you can skip this step and proceed to}
- \l{Installing the Boot to Qt Image}.
-
- Download the package \e{imx6-jb-20130628.tar.gz} from
- \l{http://boundarydevices.com/android-jellybean-on-i-mx6-with-no-disclaimers/}{Boundary
- Devices Android Jellybean i.MX6 images} (registration required).
-
- Use the following commands to create an SD card containing the
- downloaded image:
-
- \list 1
- \li Extract the downloaded package:
- \badcode
- ~/$ mkdir bd-android
- ~/$ cd bd-android
- ~/bd-android$ tar zxvf ~/Downloads/imx6-jb-20130628.tar.gz
- \endcode
- \li Run device/boundary/mksdcard.sh:
- \badcode
- ~/bd-android$ sudo device/boundary/mksdcard.sh /dev/<device_name>
- ~/bd-android$ sync
- \endcode
- \endlist
-
- \section1 Installing the \B2Q Image
-
- Make sure you have the required tools installed in your development machine:
-
- \badcode
- sudo apt-get install u-boot-tools
- \endcode
-
- Then, upgrade the SD card with \B2Q. First, ensure that no partitions on the
- SD card are mounted:
-
- \include detect-sd-card-device-name.qdocinc unmount
-
- Then, use one of the commands below, depending on whether you are developing
- for embedded Android or Linux:
-
- \list
- \li \b{\B2QA}
- \badcode
- cd <INSTALL_DIR>
- ./Boot2Qt-2.x/iMX6-eAndroid/images/deploy.sh /dev/<device_name>
- \endcode
- \li \b{\B2QL}
- \badcode
- cd <INSTALL_DIR>
- sudo ./Boot2Qt-2.x/iMX6-eLinux/images/deploy.sh /dev/<device_name>
- \endcode
- \endlist
-
- After the installation is complete, insert the SD card, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Setting up USB Access
-
- \include b2qt-post-install-setup.qdocinc setting up usb access
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring device kit
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \target Raspberry Pi Model B (embedded Linux)
- \page qtee-preparing-hardware-rasberrypi.html
- \title Preparing Raspberry Pi
- \previouspage qtee-installation-guide.html
- \nextpage qtee-building-and-running.html
-
- Take the following steps to prepare a \l{http://www.raspberrypi.org/}
- {Raspberry Pi} for
- \B2Q.
-
- \note Ethernet networking is required to connect the device to Qt Creator.
- This means that the support is currently limited to Raspberry Pi Model B, which
- includes an Ethernet port.
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- The image containing \B2Q stack for Raspberry Pi is included in the SDK,
- ready to be copied to an SD card.
-
- \section1 Preparing an SD Card
-
- An SD card of at least 512 MB capacity is sufficient.
-
- \include detect-sd-card-device-name.qdocinc instructions
-
- \section1 Installing the \B2Q Image
-
- To write the image to the SD card, ensure that no partitions on the
- SD card are mounted:
-
- \include detect-sd-card-device-name.qdocinc unmount
-
- Then,
-
- \badcode
- cd <INSTALL_DIR>
- sudo Boot2Qt-2.x/raspberrypi-eLinux/images/deploy.sh /dev/<device_name>
- \endcode
-
- After the image has been deployed, insert the SD card, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring network device
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \target BeagleBone Black (embedded Android and Linux)
- \page qtee-preparing-hardware-beaglebone.html
- \title Preparing BeagleBone Black
- \previouspage qtee-installation-guide.html
-
- Take the following steps to prepare a
- \l{http://beagleboard.org/products/beaglebone%20black}{BeagleBone Black} for \B2Q.
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- The images containing the \B2Q stack for BeagleBone Black are included
- in \SDK, ready to be copied to an SD card.
-
- \section1 Preparing an SD Card
-
- For \B2QA, an SD card of at least 2 GB capacity is needed. For \B2QL,
- a card of at least 512 MB capacity is sufficient.
-
- \include detect-sd-card-device-name.qdocinc instructions
-
- \section1 Installing the Android image
-
- \e{If installing} \B2QL, \e{you can skip this step and proceed to}
- \l{Installing the Boot to Qt Image}.
-
- Download the package \e{TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz} from
- \l{http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html}
- {Texas Instruments} (search for \e {BeagleBone Black} in the list of download packages).
-
- Use the following commands to create an SD card containing the
- downloaded image:
-
- \list 1
- \li Extract the downloaded package:
- \badcode
- ~$ tar zxvf ~/Downloads/TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz
- \endcode
- \li Run beagleboneblack/mkmmc-android.sh:
- \badcode
- ~$ cd beagleboneblack
- ~/beagleboneblack$ sudo ./mkmmc-android.sh /dev/<device_name>
- \endcode
- \endlist
-
- \section1 Installing the \B2Q Image
-
- Then, upgrade the SD card with \B2Q. First, ensure that no partitions on the
- SD card are mounted:
-
- \include detect-sd-card-device-name.qdocinc unmount
-
- Then, use one of the commands below, depending on whether you are developing
- for embedded Android or Linux:
-
- \list
- \li \b{\B2QA}
- \badcode
- cd <INSTALL_DIR>
- ./Boot2Qt-2.x/beaglebone-eAndroid/images/deploy.sh /dev/<device_name>
- \endcode
- \li \b{\B2QL}
- \badcode
- cd <INSTALL_DIR>
- sudo ./Boot2Qt-2.x/beaglebone-eLinux/images/deploy.sh /dev/<device_name>
- \endcode
- \endlist
-
- After the installation is complete, insert the SD card, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Setting up USB Access
-
- \include b2qt-post-install-setup.qdocinc setting up usb access
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring device kit
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \target i.MX53 Quick Start Board (embedded Linux)
- \page qtee-preparing-hardware-imx53qsb.html
- \title Preparing i.MX53 Quick Start Board
- \previouspage qtee-installation-guide.html
- \nextpage qtee-building-and-running.html
-
- Take the following steps to prepare a
- \l{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB} {i.MX53 Quick Start Board}
- for \B2Q.
-
- \note Ethernet networking is required to connect the device to Qt Creator.
-
- \note It is important that you repeat the steps in this section after you
- update \SDK.
-
- As i.MX53 Quick Start Board is not a \SDK reference board, there is no ready-made
- image containing a \B2Q stack available. Instead, you must build it yourself using
- the Yocto recipes and build scripts from the \B2Q source packages.
- For more information, see \l{Building Your Own Embedded Linux Image}.
-
- \section1 Preparing an SD Card
-
- An SD card of at least 512 MB capacity is sufficient.
-
- \include detect-sd-card-device-name.qdocinc instructions
-
- \section1 Installing the \B2Q Image
-
- To write the image to the SD card, ensure that no partitions on the
- SD card are mounted:
-
- \include detect-sd-card-device-name.qdocinc unmount
-
- Then,
-
- \badcode
- cd <QtBuildDir>
- sudo deploy.sh /dev/<device_name>
- \endcode
-
- After the image has been deployed, insert the SD card, power on the device and check that
- the \B2Q welcome screen and/or demo appear.
-
- \section1 Configuring a Device Kit in Qt Creator
-
- \include b2qt-post-install-setup.qdocinc configuring network device
-
- You are now ready to start developing for your device. For more information,
- see \l{Building and Running an Example}.
-*/
-
-/*!
- \page qtee-building-and-running.html
- \title Building and Running Embedded Applications
- \previouspage qtee-preparing-hardware.html
- \nextpage qtee-custom-build-steps.html
-
- \section1 Building and Running an Example
-
- After you complete the installation and configuration steps for \SDK and the
- target devices, you can test the setup by creating a simple \l{Qt Quick}
- application and running it on the device:
-
- \list 1
- \li Make sure that your device is powered on and connected to the
- development host.
- \li In Qt Creator, select \b File > \b {New File or Project} >
- \b Applications > \b{Qt Quick Application} > \b{Choose}.
- \li Choose a location for your new project.
- \li In the \b{Qt Quick Component Set} dialog, select \b{Qt Quick 2.0}.
- \li In the \b{Kit Selection} dialog, select the kits for your
- devices. You can also select the emulator kit to test running the
- project in the emulator.
- \li Click \b{Next} and finish the wizard.
- \li In \b Projects > \b {Build & Run}, select the correct kit for your
- connected device.
- \li To build and run the project, click \inlineimage qtcreator-run.png
- \endlist
-
- \section1 Building and Running \B2Q Demos
-
- You can find the \B2Q demo applications in Qt Creator.
-
- \list 1
- \li Go to \b Welcome > \b Examples.
- \li Select a \e Boot2Qt Qt version from the drop-down list.
- \li Select a demo you want to build.
- \li In \b Projects > \b {Build & Run}, select the correct kit for your
- connected device or emulator.
- \li To build and run the project, click \inlineimage qtcreator-run.png
- \endlist
-
- \section1 Setting Up an Already Existing Project for Deployment
-
- New Qt Quick application projects generated by Qt Creator always have the correct
- settings for deployment on the device or emulator. However, other projects need
- some changes. This includes projects created using the
- \b File > \b {New File or Project} > \b Applications > \b{Qt Widget Application}
- template.
-
- As a general rule, application binaries and resources are deployed to the
- \c {/data/user/qt/<APPLICATION_NAME>} directory. Therefore, the \c path variable for
- the \c INSTALLS targets needs to be adjusted accordingly in .pro files.
-
- Open the .pro file and define the \c target.path and \c INSTALLS variables as follows:
-
- \badcode
- target.path = /data/user/qt/$$TARGET
- INSTALLS += target
- \endcode
-
- Above, \c {$$TARGET} expands to the application target (executable) name.
-
- \section2 Deploying Application Resources
-
- If the application depends on additional resources (such as QML files and
- images), you need to deploy them as well. For example:
-
- \badcode
- appFiles.files = *.png qml
- appFiles.path = /data/user/qt/$$TARGET
- INSTALLS += appFiles
- \endcode
-
- Above, all PNG images from the application source directory, and the entire
- \e qml subdirectory are included in the deployment.
-
- Alternatively, the files used by the application can be stored into the application
- executable using the \l{The Qt Resource System}{Qt resource system}. This way, simply
- deploying the application binary is all that's required.
-*/
-
-/*!
- \page qtee-custom-build-steps.html
- \title Special Build & Run Options
- \previouspage qtee-building-and-running.html
- \nextpage qtee-customization.html
-
- Qt Creator allows you to execute custom commands on the embedded device connected
- to the development host, both during the build process and during deployment of your
- application.
-
- \section1 Custom Build Steps
-
- To add a custom step to be executed during the build:
-
- \list 1
- \li In Qt Creator, go to \b Projects > \b {Build Settings}
- \li Select \b Build configuration for the \e {\B2Q} version you want to customize.
- \li Click \b {Add Build Step} and select \b {Custom Remote Command (via adb shell)}.
- \li Enter the command to be executed.
- \endlist
-
- \section1 Custom Deployment Steps
-
- To add a custom step to be executed during deployment:
-
- \list 1
- \li In Qt Creator, go to \b Projects > \b {Run Settings}
- \li Select \b Run configuration for the \e {\B2Q} version you want to customize.
- \li Click \b {Add Deploy Step} and select \b {Custom Remote Command (via adb shell)}.
- \li Enter the command to be executed.
- \endlist
-
- \sa {Booting to a Custom Application}
-*/
-
-/*!
- \page qtee-customization.html
- \title Customization
- \previouspage qtee-building-and-running.html
- \nextpage qtee-custom-embedded-linux-image.html
-
- \section1 Environment and Input
-
- By default, the basic environment variables and startup options of
- \B2Q applications are set in the file \c
- {/system/bin/appcontroller.conf} in embedded Android devices and
- in \c{/etc/appcontroller.conf} in embedded Linux devices.
-
- You can customize this file if you target a hardware device that
- has other input devices than the ones that the \B2Q stack is configured
- for by default.
-
- On some devices, the root file system (where this file
- resides) is mounted read-only at boot time. To allow modification,
- remount it read-write by entering the following command:
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb remount
- \endcode
-
- In the \c{appcontroller.conf} file, the input devices are
- specified by the lines similar to these:
- \badcode
- env=QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event0
- \endcode
-
- Usually, you do not need to change this setting. USB input devices, such as
- keyboards and mice, are automatically recognized. The mouse pointer is shown
- automatically if a mouse is connected.
-
- However, hotplugging may not work, which means that the input
- devices, such as a keyboard and mouse, have to be connected at boot
- time.
-
- On some devices, for example the i.MX6 Sabre Lite, the touchscreen device is
- specified explicitly in \c QT_QPA_GENERIC_PLUGINS. This is necessary because
- the automatic device discovery would fail to find the touchscreen.
-
- \section1 Booting to a Custom Application
-
- After you have deployed your own application to the device, it will be
- launched on boot, instead of the \B2Q demo launcher. To prevent this
- behavior, remove or disable the \b {Make this application the default one}
- step from the \b{Run Settings} for your project in the Qt Creator \b Projects
- mode.
-
- To remove your application from the default startup, use the following
- command:
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb shell appcontroller --remove-default
- \endcode
-
- \section1 Switching Between Portrait and Landscape Views
-
- Depending on device screen dimensions and application requirements, it might
- be desirable
- to change the default view orientation. The following example shows how to rotate your
- application in QML.
-
- \qml
- import QtQuick 2.0
-
- Item {
- id: root
- width: 800
- height: 1280
- // Container element for rotating
- Rectangle {
- id: main
- // Swap the width and height of the root item
- width: root.height
- height: root.width
- anchors.centerIn: parent
- // Rotate 90 degrees clockwise around transformOrigin
- rotation: 90
- // The rotated content
- Text {
- text: qsTr("Hello World")
- anchors.centerIn: parent
- }
- MouseArea {
- anchors.fill: parent
- onClicked: {
- Qt.quit();
- }
- }
- }
- }
- \endqml
-
- \section1 Disabling Screen Composer on Embedded Android
-
- By default, the \B2Q stack uses Android's screen composer, \e
- Surfaceflinger. It is required for Qt Multimedia functionality,
- i.e. video playback and camera. If that functionality is not
- required, Surfaceflinger may be disabled. This can in some
- situations improve performance.
-
- \list 1
- \li Edit \c {/system/bin/appcontroller.conf} to set the value of
- the environment variable \c QT_QPA_EGLFS_NO_SURFACEFLINGER to \c
- 1 instead of \c 0.
- \li Disable the startup of \c surfaceflinger at boot-up. Either
- change \c /init.rc, or simply rename the \c
- {/system/bin/surfaceflinger} executable.
- \endlist
-*/
-
-/*!
- \page qtee-custom-embedded-linux-image.html
- \title Building Your Own Embedded Linux Image
- \previouspage qtee-customization.html
- \nextpage qtee-changelog.html
-
- \B2QL is built using the tools and resources from the \l {Yocto Project},
- and is based on Yocto's reference distribution (\e Poky). You can
- use the same tools to build custom \B2Q images, and have control over
- which packages are included in the build and how the software stack
- is configured.
-
- \section2 Note About Support Services for Yocto Tools
-
- By default, Digia will only provide customer support for the Yocto
- recipes on the reference platforms, as delivered with \SDK, and
- setting up the development environment for them. Receiving support
- for any other configuration requires a separate service agreement
- between a customer and Digia.
-
- \section1 Requirements
-
- You should be familiar with the Yocto tools and the concept of
- \e {recipes}. For more information, see Yocto Project
- \l{https://www.yoctoproject.org/documentation/current}{documentation}.
-
- To get started, you need the following:
-
- \list
- \li Install the \B2Q \e source packages. You can
- find these by running the \e MaintenanceTool application
- located in the \SDK installation directory and selecting
- \e {Package Manager}. The \e {Yocto meta layer} package
- contains the additional recipes required to make the image
- compatible with \B2Q.
- \li Install the dependencies for the Yocto tools. In Ubuntu,
- the following packages are required:
- \badcode
- sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath libsdl1.2-dev xterm
- \endcode
- \endlist
-
- \section1 Setting Up Yocto Build Environment
-
- Run the setup script that initializes the Yocto environment:
-
- \badcode
- cd <BuildDir>
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-yocto-meta/b2qt-init-build-env .
- \endcode
-
- \section1 Building the Image and Toolchain
-
- After the Yocto environment is set up, you need to configure the
- build environment for your target device. Using Raspberry Pi as
- an example:
-
- \badcode
- export TEMPLATECONF=meta-b2qt/conf
- export MACHINE=raspberrypi
- source poky/oe-init-build-env build-raspberrypi
- \endcode
-
- Yocto recipes for \B2QL have two main targets to build: The target image,
- and the external toolchain that is used for building the Qt framework and
- applications.
-
- \badcode
- bitbake b2qt-embedded-image
- bitbake meta-toolchain-b2qt-embedded-sdk
- \endcode
-
- The target rootfs image is located in the \c <YoctoBuildDir>/tmp/deploy/images/<target>/b2qt-embedded-image-<target>.tar.gz,
- and the new toolchain is in \c <YoctoBuildDir>/tmp/deploy/sdk/b2qt-eglibc-x86_64-meta-toolchain-b2qt-embedded-sdk-<target-architecture>-toolchain-1.5.sh
-
- \note The generated target image does not yet include Qt libraries,
- you need to build Qt and add it into the image yourself.
-
- \section1 Building Qt and Addons
-
- \e {Build scripts} source package contains scripts that can be used to
- build Qt and all additional Qt addons that are part of \B2QL image.
- To setup build environment for your target hardware, run the initialization
- script. Using Raspberry Pi as an example:
-
- \badcode
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-common/init_build_env.sh <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/config.raspberrypi
- \endcode
-
- \note You can use the same build directory for Qt and the Yocto image.
- The toolchain and the target image are then used from the Yocto build directory.
-
- You can use following scripts to build different parts of the \B2Q stack.
-
- \badcode
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_qt.sh
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_extras.sh
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-linux/build_image.sh
- \endcode
-
- After \e {embedded-linux/build_image.sh} has finished, you can flash the device with
- the updated image located in the build folder.
-
- \section1 Configuring Qt Creator
-
- After you have built the \B2Q stack, you must also set up Qt Creator in order to start
- developing for your device. The following script does this for you.
-
- \badcode
- <INSTALL_DIR>/Boot2Qt-2.x/sources/b2qt-build-scripts/embedded-common/setup_qtcreator.sh
- \endcode
-
- This will set up a new kit in Qt Creator, using the toolchain and Qt from
- your build directory. The new kit is visible under \b Tools > \b Options
- > \b {Build & Run} > \b Kits.
-
- \section1 Using Network Connection for ADB
-
- By default, \B2Q uses USB cable for communication between device and Qt Creator.
- On \B2QL, you can change the device to use ethernet network connection for the
- communication. To enable network connection, you need to modify file
- \c /etc/default/adbd located on the devices, and change value of \c USE_ETHERNET
- to \c 'yes'. This can also be done with \c adb, while the device is still
- connected via USB.
-
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb shell sed -i -e 's/USE_ETHERNET=no/USE_ETHERNET=yes/' /etc/default/adbd
- \endcode
-
- \note You need to restart the device for this change to take effect.
-
- \include b2qt-post-install-setup.qdocinc configuring network device
-*/
-
-/*!
- \page qtee-supported-platforms.html
- \title Supported Platforms
- \previouspage qtee-installation-guide.html
- \nextpage qtee-preparing-hardware.html
-
- \section1 Supported Target Devices
-
- The \B2Q stack can be made to run on a variety of hardware. \B2QA
- requires hardware that has support for the Android operating system,
- version 4.0 or later.
-
- Approximate minimal hardware requirements for running \B2Q are:
- \list
- \li 256 MB of RAM
- \li 500 MHz CPU, 1 GHz preferred for 60-FPS velvet-smooth UI
- \li OpenGL ES 2.0 support
- \li Android 4.0+ compatible hardware
- \endlist
-
- \B2Q has been tested to work on the following reference devices:
- \list
- \li \l{http://www.google.com/nexus/7/specs/}{Google/Asus Nexus 7 (2012)}
- \li \l{http://beagleboard.org/hardware-xM}{BeagleBoard-xM}
- \li \l{http://beagleboard.org/products/beaglebone%20black}{BeagleBone Black}
- \li \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}{Freescale i.MX6 Sabre Lite board (Boundary Devices)}
- \li \l{http://www.raspberrypi.org/faqs}{Raspberry Pi Model B}
- \endlist
-
- \section1 Supported Development Environment
-
- The development environment supported by \SDK is Ubuntu Linux 64-bit (12.04 LTS or 12.10).
-
- \sa {Requirements for Development Host}
-
-*/
-
-/*!
- \page qtee-licenses.html
- \title License Information
- \previouspage qtee-troubleshooting.html
- \nextpage qtee-qml-reference.html
-
- \section1 Licensing
-
- \SDK is licensed under the Qt Enterprise commercial license. For more information,
- see \l {http://qt.digia.com/licensing}. Evaluation licenses are also available,
- see \l {product page}{\SDK} on qt.digia.com.
-
- \section1 3rd Party Software Licenses
-
- The third-party licenses used in \SDK are listed in the file
- \c {<INSTALL_DIR>/Licenses/ThirdPartySoftware_Listing.txt}.
-
- \section1 Embedded Android Images
-
- The embedded Android platform is built from the \e {Android Open Source Project},
- source code available at \l {http://android.googlesource.com/}. The open
- source licenses and notices are collected into the file
- \c {/etc/NOTICE.html.gz} in the target images.
-
- \section1 Embedded Linux Images
-
- The embedded Linux platform is built using tools from the \l {Yocto Project}.
- The open source licenses and notices are located in
- \list
- \li \c /usr/share/common-licenses/license.manifest
- \li \c /usr/share/licenses/*
- \endlist
-
- \section1 Android GNU C++ Run-time Licensing
-
- The Android platform does not provide a full implementation of the C++ run-time. Instead,
- apps that depend on features such as STL, exceptions, or RTTI, must include an additional
- native run-time library that provides the features they need.
-
- \B2QA uses the GNU libstdc++ library distributed as part of the \e {Android Open Source Project}.
- This library is included in the images for \B2QA, and will be loaded by the application
- on start-up to meet the run-time requirements of Qt.
-
- The GNU C++ run-time is licensed under the
- \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/appendix_gpl.html}{GNU General Public License version 3} with
- an exception which grants permission for run-time linking and usage of the library by an application which
- would otherwise violate the terms of the main license. For more information about this exception, see
- \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html}{the official license page}.
-*/
-
-/*!
- \page qtee-changelog.html
- \title ChangeLog
- \previouspage qtee-customization.html
- \nextpage qtee-troubleshooting.html
-
- \section1 \B2Q 2.1.0
-
- \list
- \li Release date: Apr. 15, 2014
- \endlist
-
- \section2 Changes
- \b {New Features}:
- \list
- \li \l {Qt Data Visualization} version 1.0 was added to the \B2Q stack
- \li \l {Enginio Data Storage} version 1.0 was added to the \B2Q stack
- \li \l {Qt Quick Enterprise Controls} was updated to version 1.1
- \li \l {Qt Serial Port} support was added to the \B2Q stack
- \li Bluetooth on \B2QL: Support for bluez was added
- \li Added support for building \B2QL for i.MX53 from sources
- \endlist
-
- \b {Improvements}:
- \list
- \li Qt Creator plugin for \B2Q now supports incremental deployment, custom adb commands
- \li Adb now easily usable over IP on all devices on \B2QL
- \li Update new content to device without erasing it first on \B2QL
- \li All images now contain generally used CA certificates
- \li Toolchains updated to support Qt WebEngine
- \li Documentation was added for QML types provided by the \l {WiFi Module}
- \li Emulator: Debug logging functionality was added
- \li Various documentation improvements
- \li \SDK installer error handling was improved
- \li 3rd party license information was updated
- \li Launcher Settings application UI was improved
- \endlist
-
- \b {Fixed Bugs}:
- \list
- \li \B2QL: OpenSSL Heartbleed bug was fixed
- \li \B2QA: Qt debug symbols were missing
- \li QEglFSCompositor::render() using incorrect vertices for full-screen quad, resulting in bad texture sampling
- \li Use damaged rect instead of full texture upload for raster windows
- \li Emulator: Crash when launching multiple instances
- \li Emulator: State transitions were not working properly
- \li \B2QA emulator: C++ debugging was fixed
- \li Emulators: Qt Quick applications don't exit on Qt.quit()
- \li Banding was visible on Raspberry Pi
- \li Qt Creator: adb failed to connect
- \li QtCreator: Different Virtual Machiness with the same OS were not handled properly
- \li Qt Creator: Tabstop order in device wizard was incorrect
- \li Qt 5 Everywhere demo: not all internet radio station were working
- \endlist
-
- \b {Fixed Known Issues}:
- \list
- \li Embedded Android: Arabic Numbers Not Always Rendered Correctly
- \endlist
-
- \section1 \B2Q 2.0.0
-
- \list
- \li Release date: Feb. 25, 2014
- \endlist
-
- \section2 Changes
- \b {New Features}:
- \list
- \li \B2Q stack was updated to use Qt 5.2.1 on embedded Android and Linux
- \li Building your own \B2Q embedded Linux stack was enabled
- \li Emulator graphics performance and quality was improved (GL-streaming)
- \li BeagleBone Black was added as a reference device
- \li \l {Qt Virtual Keyboard} was integrated into \B2Q
- \li \l {Qt Quick Enterprise Controls} was added to the \B2Q stack
- \li \l {Qt Charts} was added to the \B2Q stack
- \li \B2Q source code was made available via online installer
- \li WiFi networking support/configuration were implemented on embedded Android
- \li Ethernet connectivity was enabled on embedded Android
- \endlist
-
- \b {Improvements}:
- \list
- \li Updated GDB for embedded Android toolchain
- \li Enterprise demos (Charts, Enterprise Controls) were added
- \li Embedded Linux: Moved to use Yocto 1.5 (Dora)
- \li Demos available as examples in Qt Creator
- \li Embedded Android emulator updated to Android 4.2.2
- \endlist
-
- \b {Fixed Bugs}:
- \list
- \li Embedded Android emulator: Missing Mesa headers
- \li Embedded Linux emulator: Black screen in camera demo
- \li Emulator tries to load host plugins
- \li Sensors not working in emulators
- \li Empty \c HOME environment variable in processes launched by appcontroller
- \li Embedded Android emulator: C++ debugging fails
- \li Qt add-ons not installed to host
- \endlist
-
- \b {Fixed Known Issues}:
- \list
- \li Qt SQL: QML LocalStorage Fails to Connect to Database on Embedded Android
- \li Qt XML Patterns: Module not Available on embedded Android
- \li Qt Multimedia: Audio is Muted on Nexus 7
- \li Unnecessary Warnings Displayed by the Installer
- \li Virtual Keyboard: Backspace Removes Two Characters
- \endlist
-
- \section1 \B2Q 1.0.1
-
- \list
- \li Release date: Dec. 5, 2013
- \endlist
-
- \section2 Changes
- \list
- \li Emulator: Remote control widget version shown together with emulator version
- \li Emulator: Mouse events are sent instead of touch events
- \li Emulator: Raster window support added
- \li Emulator: emulatorproxyd shows its version on startup
- \li Emulator: Detect some network problems
- \li Emulator: Fixed issues related to startup
- \li Emulator: Updated source code license headers
- \li Emulator: Show all VirtualBox errors
- \li Emulator: Video playback support on embedded Linux
- \endlist
-*/
-
-/*!
- \page qtee-troubleshooting.html
- \title Troubleshooting
- \previouspage qtee-changelog.html
- \nextpage qtee-licenses.html
-
- \note An updated version of this information may be available in Digia customer portal,
- see \l {Known Issues} in \SDK \l {product page}.
-
- \section1 General Issues
-
- \section2 I have problems deploying/launching the application in Qt Creator
-
- Check that the device is properly connected to the development host via USB
- or Ethernet (depending on the device).
- See \l{Connectivity Issues}.
-
- If using the emulator, see \l{Installing VirtualBox}.
-
- \section2 I have problems deploying/launching a Qt or Qt Quick example application
-
- Because of a technical peculiarity in \c{qmake}, it is not
- possible to get correct deployment setup for any application that
- is placed inside a Qt source code tree.
-
- The workaround is to copy the example sources to a location
- outside the Qt source tree, and open this copy of the example
- application instead.
-
- \section2 I have problems launching or running applications on hardware after updating the SDK
-
- Remember to repeat the process of updating also your device with the latest
- version of \B2Q. See \l{Installing Boot to Qt on Target Devices}.
-
- \section2 Booting Sabre Lite i.MX 6 stops with \e {6x_bootscript not found} error
-
- Check the U-Boot version number. It should start with either \c{2012} or \c{2013}.
- If it is \c{2009.xx}, an upgrade of the bootloader is required. For more
- information, see:
-
- \list
- \li \l http://boundarydevices.com/6q_bootscript/
- \li \l http://boundarydevices.com/switching-u-boot-versions-on-i-mx6/
- \endlist
-
- \section2 How do I restore my Nexus 7 to factory settings?
-
- Go to \l{https://developers.google.com/android/nexus/images} and
- download the correct file for your device. Unpack it, and then enter the
- following commands:
-
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb reboot bootloader
- <INSTALL_DIR>/Tools/b2qt/fastboot -w update <image-file>.zip
- \endcode
-
- \section2 How do I shut down the Nexus 7?
-
- If the \B2Q demo launcher is running, start the \b {Launcher
- Settings} app, and select \b {Shut Down} to power off the device.
-
- Otherwise, make sure the Nexus 7 is connected to the development host, and run
- the following command in a terminal:
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb shell reboot -p
- \endcode
-
- If the device is in the fastboot mode, use the volume button to display the
- \b {Power off} option and press the power button to power off the device.
-
- Alternatively, press and hold the power button for 10
- seconds. This will force a reboot.
-
- \section2 How do I get HDMI output working properly on BeagleBone Black?
-
- Depending on the HDMI monitor, the cable, and the build variant of
- the BeagleBone Black device, it may not be able to drive an HDMI display in a
- stable way; the image may disappear or stutter. These issues are not caused by
- the \B2Q stack.
-
- More details and possible solutions can be found
- \l {http://www.elinux.org/Beagleboard:BeagleBoneBlack_HDMI}{here}.
-
- \section2 Trying to build for the emulator target fails with error message \e{make: i686-android-linux-g++: Command not found}
-
- You need to install support libraries in order to run 32-bit programs in a
- 64-bit Linux operating system.
-
- See \l{Installing 32-bit Support Libraries}.
-
- \section2 Something crashed!
-
- The following command shows the system log:
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb logcat
- \endcode
-
- \section2 Mouse or touch input does not work
-
- See \l{Customization}.
-
- \note Hotplugging does not currently work, and therefore, any input device
- must be present at boot time to be recognized.
-
- \section2 Application stops with \e{EGLFS: OpenGL windows cannot be mixed with others.}
-
- OpenGL and Qt Quick 2 applications can only have one
- fullscreen window existing at a time. Trying to create another
- OpenGL window, or trying to mix an OpenGL window with a raster one
- will display the above message and abort the application.
-
- \note For raster windows (software rendered content based on QWidget or
- QPainter), there is no such limitation.
-
- \section2 I cannot edit the contents of appcontroller.conf on the device
-
- The file system where this file is located may be mounted as read-only.
-
- See \l{Customization}.
-
- \section2 C++11 features do not work on Android
-
- To enable C++11 features in the compiler, add \e{CONFIG += c++11} to the .pro file.
- On Embedded Linux this will be enough because there the toolchain contains a more
- recent version of gcc (4.8.x). On Embedded Android however the toolchain is based on
- gcc 4.6. This offers limited support for C++11 and Qt's own C++11 support is disabled,
- meaning that adding \e{c++11} to \e{CONFIG} will have no effect. There is still a
- possibility however to manually enable some level of C++11 support just for the
- application, by adding \e{QMAKE_CXXFLAGS += -std=c++11} to the .pro file.
-
- \section1 Connectivity Issues
- \section2 I cannot connect to my hardware device via USB
-
- See \l{5. Setting up USB Access to Embedded Devices}.
-
- \section2 adb fails with "error: more than one device and emulator"
-
- You have to specify which Android device you want \c{adb} to talk
- to, using adb's \c{-s <serial-number>} option. Use the following
- command to find to see the serial number of the connected
- devices:
-
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb devices
- \endcode
-
- \section2 The emulator cannot connect to the Internet
-
- By default, the VirtualBox is configured to use a host-only network, so external
- connections do not work in the emulator.
-
- You may be able to enable Internet connectivity with another
- virtual network adapter in NAT mode by adapting
- \l{http://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in}{these}
- instructions.
-
- \section2 The emulator is stuck in \e{Waiting for display data} or fails to start properly
-
- Check the output of the following command:
-
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb devices
- \endcode
-
- If the emulator (192.168.56.101) is not listed there, try connecting to it:
-
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb connect 192.168.56.101
- \endcode
-
- If the emulator is already listed, try disconnecting it:
- \badcode
- <INSTALL_DIR>/Tools/b2qt/adb disconnect 192.168.56.101
- \endcode
-
- And then close the emulator and retry.
-
- \section2 What are the user and password to access my embedded Linux device?
-
- Embedded Linux devices can be accessed using user \c{root} and an empty password.
-
- \section2 No sound on Embedded Android devices
-
- When connecting a headphone or speakers while the device is running, the
- audio may not be properly routed to the correct output. As a workaround,
- connect the headphone or speakers before turning on the device.
-
-*/
-
-/*!
- \page qtee-qml-reference.html
- \title Add-On QML Types
- \previouspage qtee-licenses.html
-
- The following QML modules are included in the \B2Q stack and provide
- additional QML types that are useful in an embedded application:
-
- \annotatedlist qtee-qmlmodules
-
- \section1 WiFi Module
-
- \annotatedlist wifi-qmltypes
-*/
diff --git a/src/doc/src/devices/qtee-bd-sl-imx6.qdoc b/src/doc/src/devices/qtee-bd-sl-imx6.qdoc
new file mode 100644
index 0000000..700375c
--- /dev/null
+++ b/src/doc/src/devices/qtee-bd-sl-imx6.qdoc
@@ -0,0 +1,110 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target BD-SL-i.MX6 (embedded Android and Linux)
+ \page qtee-preparing-hardware-imx6.html
+ \title Preparing BD-SL-i.MX6
+ \previouspage qtee-installation-guide.html
+
+ Take the following steps to prepare a
+ \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}
+ {Boundary Devices BD-SL-i.MX6} (SABRE Lite) for \B2Q.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ The images containing the \B2Q stack for BD-SL-i.MX6 are included
+ in \SDK, ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ For \B2QA, an SD card of at least 4 GB capacity is needed. For \B2QL,
+ a card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the Android image
+
+ \e{If installing} \B2QL, \e{you can skip this step and proceed to}
+ \l{Installing the Boot to Qt Image}.
+
+ Download the package \e{imx6-jb-20130628.tar.gz} from
+ \l{http://boundarydevices.com/android-jellybean-on-i-mx6-with-no-disclaimers/}{Boundary
+ Devices Android Jellybean i.MX6 images} (registration required).
+
+ Use the following commands to create an SD card containing the
+ downloaded image:
+
+ \list 1
+ \li Extract the downloaded package:
+ \badcode
+ ~/$ mkdir bd-android
+ ~/$ cd bd-android
+ ~/bd-android$ tar zxvf ~/Downloads/imx6-jb-20130628.tar.gz
+ \endcode
+ \li Run device/boundary/mksdcard.sh:
+ \badcode
+ ~/bd-android$ sudo device/boundary/mksdcard.sh /dev/<device_name>
+ ~/bd-android$ sync
+ \endcode
+ \endlist
+
+ \section1 Installing the \B2Q Image
+
+ Make sure you have the required tools installed in your development machine:
+
+ \badcode
+ sudo apt-get install u-boot-tools
+ \endcode
+
+ Then, upgrade the SD card with \B2Q. First, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then, use one of the commands below, depending on whether you are developing
+ for embedded Android or Linux:
+
+ \list
+ \li \b{\B2QA}
+ \badcode
+ cd <INSTALL_DIR>
+ ./Boot2Qt-3.x/generic-4.2-eAndroid/images/iMX6/deploy.sh /dev/<device_name>
+ \endcode
+ \li \b{\B2QL}
+ \badcode
+ cd <INSTALL_DIR>
+ sudo ./Boot2Qt-3.x/iMX6-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+ \endlist
+
+ After the installation is complete, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Setting up USB Access
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit android linux
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/devices/qtee-beagleboard-xm.qdoc b/src/doc/src/devices/qtee-beagleboard-xm.qdoc
new file mode 100644
index 0000000..fae5725
--- /dev/null
+++ b/src/doc/src/devices/qtee-beagleboard-xm.qdoc
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target BeagleBoard-xM (embedded Linux)
+ \page qtee-preparing-hardware-beagleboard.html
+ \title Preparing BeagleBoard-xM
+ \previouspage qtee-installation-guide.html
+ \nextpage qtee-building-and-running.html
+
+ Take the following steps to prepare a \l{http://beagleboard.org/hardware-xM}
+ {BeagleBoard-xM} for
+ \B2Q.
+
+ \note BeagleBoard-xM is no longer supported in \SDK 3.0. It is still,
+ however, supported and tested under the previous 2.x versions.
+
+ The image containing \B2Q stack for BeagleBoard-xM are included in \SDK,
+ ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ An SD card of at least 512 MB capacity is needed.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the \B2Q Image
+
+ To write the image to the SD card, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then,
+
+ \badcode
+ cd <INSTALL_DIR>
+ sudo Boot2Qt-3.x/beagleboard-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+
+ After the image has been deployed, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Setting up USB Access
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/devices/qtee-beaglebone-black.qdoc b/src/doc/src/devices/qtee-beaglebone-black.qdoc
new file mode 100644
index 0000000..360eb6d
--- /dev/null
+++ b/src/doc/src/devices/qtee-beaglebone-black.qdoc
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target BeagleBone Black (embedded Android and Linux)
+ \page qtee-preparing-hardware-beaglebone.html
+ \title Preparing BeagleBone Black
+ \previouspage qtee-installation-guide.html
+
+ Take the following steps to prepare a
+ \l{http://beagleboard.org/products/beaglebone%20black}{BeagleBone Black} for \B2Q.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ The images containing the \B2Q stack for BeagleBone Black are included
+ in \SDK, ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ For \B2QA, an SD card of at least 2 GB capacity is needed. For \B2QL,
+ a card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the Android image
+
+ \e{If installing} \B2QL, \e{you can skip this step and proceed to}
+ \l{Installing the Boot to Qt Image}.
+
+ Download the package \e{TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz} from
+ \l{http://downloads.ti.com/sitara_android/esd/TI_Android_DevKit/TI_Android_JB_4_2_2_DevKit_4_1_1/index_FDS.html}
+ {Texas Instruments} (search for \e {BeagleBone Black} in the list of download packages).
+
+ Use the following commands to create an SD card containing the
+ downloaded image:
+
+ \list 1
+ \li Extract the downloaded package:
+ \badcode
+ ~$ tar zxvf ~/Downloads/TI_Android_JB_4.2.2_DevKit_4.1.1_beagleboneblack.tar.gz
+ \endcode
+ \li Run beagleboneblack/mkmmc-android.sh:
+ \badcode
+ ~$ cd beagleboneblack
+ ~/beagleboneblack$ sudo ./mkmmc-android.sh /dev/<device_name>
+ \endcode
+ \endlist
+
+ \section1 Installing the \B2Q Image
+
+ Then, upgrade the SD card with \B2Q. First, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then, use one of the commands below, depending on whether you are developing
+ for embedded Android or Linux:
+
+ \list
+ \li \b{\B2QA}
+ \badcode
+ cd <INSTALL_DIR>
+ ./Boot2Qt-3.x/generic-4.2-eAndroid/images/beaglebone/deploy.sh
+ \endcode
+ \li \b{\B2QL}
+ \badcode
+ cd <INSTALL_DIR>
+ sudo ./Boot2Qt-3.x/beaglebone-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+ \endlist
+
+ After the installation is complete, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Setting up USB Access
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit android linux
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/devices/qtee-imx53.qdoc b/src/doc/src/devices/qtee-imx53.qdoc
new file mode 100644
index 0000000..96dcbea
--- /dev/null
+++ b/src/doc/src/devices/qtee-imx53.qdoc
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target i.MX53 Quick Start Board (embedded Linux)
+ \page qtee-preparing-hardware-imx53qsb.html
+ \title Preparing i.MX53 Quick Start Board
+ \previouspage qtee-installation-guide.html
+ \nextpage qtee-building-and-running.html
+
+ Take the following steps to prepare a
+ \l{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=IMX53QSB} {i.MX53 Quick Start Board}
+ for \B2Q.
+
+ \note Ethernet networking is required to connect the device to Qt Creator.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ As i.MX53 Quick Start Board is not a \SDK reference board, there is no ready-made
+ image containing a \B2Q stack available. Instead, you must build it yourself using
+ the Yocto recipes and build scripts from the \B2Q source packages.
+ For more information, see \l{Building Your Own Embedded Linux Image}.
+
+ \section1 Preparing an SD Card
+
+ An SD card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the \B2Q Image
+
+ To write the image to the SD card, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then,
+
+ \badcode
+ cd <QtBuildDir>
+ sudo deploy.sh /dev/<device_name>
+ \endcode
+
+ After the image has been deployed, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring network device
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
+
diff --git a/src/doc/src/devices/qtee-nexus-7.qdoc b/src/doc/src/devices/qtee-nexus-7.qdoc
new file mode 100644
index 0000000..c461fb6
--- /dev/null
+++ b/src/doc/src/devices/qtee-nexus-7.qdoc
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target Nexus 7 (2012/2013) (embedded Android)
+ \page qtee-preparing-hardware-nexus-7.html
+ \title Preparing Nexus 7 (2012/2013)
+ \previouspage qtee-installation-guide.html
+ \nextpage qtee-building-and-running.html
+
+ Take the following steps to prepare a
+ \l{http://www.google.com/nexus/7/specs/}{Nexus 7 (2012/2013)} for
+ \B2Q.
+
+ \note The installation process will wipe the device. Make sure to
+ backup any personal data. The device can later be restored to
+ factory state, see \l{nexus-factory-reset}{Troubleshooting}.
+
+ The Nexus 7 must have the same Android main version (e.g. \c{4.2}
+ or \c{4.4}) as the generic \B2Q eAndroid stack that is to be
+ installed. If needed, you can update the Android version either by
+ using Android's upgrading tool, or by flashing a factory image of
+ the right version. See \l{nexus-factory-reset}{Troubleshooting}.
+
+ \section1 Enabling Developer Mode
+
+ In order to install the \B2Q stack into the Nexus 7, you need to
+ enable developer mode and USB debugging. This is only needed for
+ the first time install.
+
+ \note If for some reason the device does not boot up normally, it
+ is also possible to install to a Nexus 7 started up in
+ \c{fastboot} (bootloader) mode (see
+ \l{nexus-factory-reset}{Troubleshooting}). Just skip this section
+ and add the \c{-fastboot} argument to the \c{deploy.sh} command
+ below.
+
+ \list 1
+ \li Power up the device.
+ \li Open the \b{Settings} app and select the \b{About tablet} item.
+ \li Press the \b{Build number} item seven times, until the message "You are now a developer!" appears.
+
+ \li Back in the \b{Settings} menu, select \b{Developer options}.
+ \li Press the \b{USB debugging} item and confirm that you allow USB debugging.
+ \endlist
+
+ You should now be able to establish USB connection to the device as follows.
+
+ \section1 Setting up USB Access
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 Deploying the \B2Q Stack
+
+ Depending on the edition of your Nexus 7 device, use one of the
+ commands below to install the \B2Q stack. Replace \c{X.Y} with the
+ device's Android version number, for example \c{4.2} or \c{4.4}.
+
+ \note The deploy script will check that the connected Nexus device
+ is of the expected type and Android version, and abort the
+ installation if it is not.
+
+ \list
+ \li \b{Nexus 7 (2013):}
+ \badcode
+ cd <INSTALL_DIR>
+ ./Boot2Qt-3.x/generic-X.Y-eAndroid/images/nexus7v2/deploy.sh
+ \endcode
+ \li \b{Nexus 7 (2012):}
+ \badcode
+ cd <INSTALL_DIR>
+ ./Boot2Qt-3.x/generic-X.Y-eAndroid/images/nexus7/deploy.sh
+ \endcode
+ \endlist
+
+ During the installation, the device may ask for confirmation to be
+ unlocked. Press the power button once to confirm.
+
+ The device will reboot during the process. Do not interact with it
+ or unplug it until the process is fully completed.
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit android
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/devices/qtee-raspberry-pi.qdoc b/src/doc/src/devices/qtee-raspberry-pi.qdoc
new file mode 100644
index 0000000..9a30dce
--- /dev/null
+++ b/src/doc/src/devices/qtee-raspberry-pi.qdoc
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target Raspberry Pi Model B (embedded Linux)
+ \page qtee-preparing-hardware-rasberrypi.html
+ \title Preparing Raspberry Pi
+ \previouspage qtee-installation-guide.html
+ \nextpage qtee-building-and-running.html
+
+ Take the following steps to prepare a \l{http://www.raspberrypi.org/}
+ {Raspberry Pi} for
+ \B2Q.
+
+ \note Ethernet networking is required to connect the device to Qt Creator.
+ This means that the support is currently limited to Raspberry Pi Model B, which
+ includes an Ethernet port.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ The image containing \B2Q stack for Raspberry Pi is included in the SDK,
+ ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ An SD card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the \B2Q Image
+
+ To write the image to the SD card, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then,
+
+ \badcode
+ cd <INSTALL_DIR>
+ sudo Boot2Qt-3.x/raspberrypi-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+
+ After the image has been deployed, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring network device
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/devices/qtee-sabre-sd-imx6quad.qdoc b/src/doc/src/devices/qtee-sabre-sd-imx6quad.qdoc
new file mode 100644
index 0000000..15898c7
--- /dev/null
+++ b/src/doc/src/devices/qtee-sabre-sd-imx6quad.qdoc
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target SABRE SD i.MX6Quad (embedded Linux)
+ \page qtee-preparing-hardware-imx6sabresd.html
+ \title Preparing SABRE SD i.MX6Quad
+ \previouspage qtee-installation-guide.html
+
+ Take the following steps to prepare a
+ \l{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREBRD}
+ {Freescale SABRE SD i.MX6Quad} for \B2Q.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ The images containing the \B2Q stack for SABRE SD i.MX6Quad are included
+ in \SDK, ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ An SD card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the \B2Q Image
+
+ To write the image to the SD card, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then,
+
+ \badcode
+ cd <INSTALL_DIR>
+ sudo Boot2Qt-3.x/imx6qsabresd-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+
+ After the image has been deployed, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Setting up USB Access
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
+
diff --git a/src/doc/src/devices/qtee-supported-devices.qdoc b/src/doc/src/devices/qtee-supported-devices.qdoc
new file mode 100644
index 0000000..ad33aa9
--- /dev/null
+++ b/src/doc/src/devices/qtee-supported-devices.qdoc
@@ -0,0 +1,106 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-preparing-hardware.html
+ \title Preparing Hardware
+ \previouspage qtee-supported-platforms.html
+ \nextpage qtee-building-and-running.html
+
+ Before you can deploy and test your Qt application on hardware, you must
+ flash the target device with an image that contains the
+ \B2Q stack. These steps vary from device to device:
+
+ \list
+ \li \l{Nexus 7 (2012/2013) (embedded Android)}
+ \li \l{BD-SL-i.MX6 (embedded Android and Linux)}
+ \li \l{SABRE SD i.MX6Quad (embedded Linux)}
+ \li \l{Toradex Apalis iMX6 (embedded Linux)}
+ \li \l{BeagleBone Black (embedded Android and Linux)}
+ \li \l{BeagleBoard-xM (embedded Linux)}
+ \li \l{Raspberry Pi Model B (embedded Linux)}
+ \endlist
+
+ If you use only the emulator, you can skip this step
+ and continue straight to \l {Building and Running an Example}.
+*/
+
+/*!
+ \page qtee-supported-platforms.html
+ \title Supported Platforms
+ \previouspage qtee-installation-guide.html
+ \nextpage qtee-preparing-hardware.html
+
+ \section1 Supported Reference Devices
+
+ The \B2Q stack can be made to run on a variety of hardware. For \SDK license
+ holders, tooling is provided to customize the contents of the stack as well
+ as to take it into desired production hardware. For more information on how
+ to customize the stack for embedded Linux, see
+ \l {Building Your Own Embedded Linux Image}.
+
+ Approximate minimal hardware requirements for running \B2Q are:
+ \list
+ \li 256 MB of RAM
+ \li 500 MHz CPU, 1 GHz preferred for 60-FPS velvet-smooth UI
+ \li OpenGL ES 2.0 support
+ \endlist
+
+ \B2QA requires hardware that has support for the Android operating
+ system, version 4.2 or later.
+
+ \B2Q software stack is provided pre-built, tested and supported for the
+ following hardware:
+ \list
+ \li \l{http://www.google.com/nexus/7/specs/}
+ {Google/Asus Nexus 7 (2012 and 2013 models)}
+ \li \l{http://beagleboard.org/products/beaglebone%20black}
+ {BeagleBone Black}
+ \li \l{http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=RDIMX6SABREBRD}
+ {Freescale SABRE SD i.MX6Quad}
+ \li \l{http://boundarydevices.com/products/sabre-lite-imx6-sbc/}
+ {BD-SL-i.MX6}
+ \li \l{http://www.toradex.com/products/apalis-arm-computer-modules/freescale-imx-6-computer-module}
+ {Toradex Apalis iMX6}
+ \li \l{http://www.raspberrypi.org/faqs}
+ {Raspberry Pi Model B}
+ \endlist
+
+ \section2 Legacy Reference Devices
+
+ The following devices are no longer tested or supported by the latest
+ release of \SDK.
+
+ \list
+ \li \l{http://beagleboard.org/hardware-xM}
+ {BeagleBoard-xM}
+ \list
+ \li Starting from \SDK 3.0 release, BeagleBoard-xM is no longer
+ tested and supported. It is, however, still tested and supported
+ in the earlier 2.x releases.
+ \endlist
+ \endlist
+
+ \section1 Supported Development Environment
+
+ The development environment supported by \SDK is Ubuntu Linux 64-bit (12.04 LTS or later).
+
+ \sa {Requirements for Development Host}
+
+*/
diff --git a/src/doc/src/devices/qtee-toradex-apalis.qdoc b/src/doc/src/devices/qtee-toradex-apalis.qdoc
new file mode 100644
index 0000000..4af35c3
--- /dev/null
+++ b/src/doc/src/devices/qtee-toradex-apalis.qdoc
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \target Toradex Apalis iMX6 (embedded Linux)
+ \page qtee-preparing-hardware-apalis-imx6.html
+ \title Preparing Toradex Apalis iMX6
+ \previouspage qtee-installation-guide.html
+
+ Take the following steps to prepare a
+ \l{http://www.toradex.com/products/apalis-arm-computer-modules/freescale-imx-6-computer-module}
+ {Toradex Apalis iMX6} for \B2Q.
+
+ \note It is important that you repeat the steps in this section after you
+ update \SDK.
+
+ The images containing the \B2Q stack for Toradex Apalis iMX6 are included
+ in \SDK, ready to be copied to an SD card.
+
+ \section1 Preparing an SD Card
+
+ An SD card of at least 512 MB capacity is sufficient.
+
+ \include detect-sd-card-device-name.qdocinc instructions
+
+ \section1 Installing the \B2Q Image
+
+ To write the image to the SD card, ensure that no partitions on the
+ SD card are mounted:
+
+ \include detect-sd-card-device-name.qdocinc unmount
+
+ Then,
+
+ \badcode
+ cd <INSTALL_DIR>
+ sudo Boot2Qt-3.x/apalis-imx6-eLinux/images/deploy.sh /dev/<device_name>
+ \endcode
+
+ By default, the Toradex Apalis iMX6 boots from its internal eMMC. In order to boot from
+ the external SD card, the U-Boot environment needs to be updated. Connect a serial cable
+ to the device and enter into the U-Boot environment by pressing any key before the autoboot.
+ Enter following lines into U-Boot:
+
+ \badcode
+ setenv bootcmd 'run sdboot ; echo sdboot failed ; run emmcboot ; echo ; echo emmcboot failed ; run nfsboot ; echo ; echo nfsboot failed ; usb start ;setenv stdout serial,vga ; setenv stdin serial,usbkbd'
+ setenv sdboot 'run setup; setenv bootargs ${defargs} ${sdargs} ${setupargs} ${vidargs};echo Booting from SD card in 4bit slot...; fatload mmc 2:1 10800000 uImage && bootm 10800000'
+ setenv sdargs 'ip=off root=/dev/mmcblk1p2 rw,noatime rootfstype=ext3 rootwait'
+ saveenv
+ \endcode
+
+ New U-Boot command are now stored into the device, and you can start \B2Q. For more information
+ about the boot process on Toredex Apalis iMX6, see
+ \l{http://developer.toradex.com/software-resources/arm-family/linux/linux-booting}{Toradex Linux Booting}
+
+ After the image has been deployed, insert the SD card, power on the device and check that
+ the \B2Q welcome screen and/or demo appear.
+
+ \section1 Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring network device
+
+ You are now ready to start developing for your device. For more information,
+ see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/qtee-building-running.qdoc b/src/doc/src/qtee-building-running.qdoc
new file mode 100644
index 0000000..7dbcb04
--- /dev/null
+++ b/src/doc/src/qtee-building-running.qdoc
@@ -0,0 +1,134 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \page qtee-building-and-running.html
+ \title Building and Running Embedded Applications
+ \previouspage qtee-preparing-hardware.html
+ \nextpage qtee-custom-build-steps.html
+
+ \section1 Building and Running an Example
+
+ After you complete the installation and configuration steps for \SDK and the
+ target devices, you can test the setup by creating a simple \l{Qt Quick}
+ application and running it on the device:
+
+ \list 1
+ \li Make sure that your device is powered on and connected to the
+ development host.
+ \li In Qt Creator, select \b File > \b {New File or Project} >
+ \b Applications > \b{Qt Quick Application} > \b{Choose}.
+ \li Choose a location for your new project.
+ \li In the \b{Qt Quick Component Set} dialog, select \b{Qt Quick 2.2}
+ or \b{Qt Quick 2.2 Boot2Qt}.
+ \li In the \b{Kit Selection} dialog, select the kits for your
+ devices. You can also select the emulator kit to test running the
+ project in the emulator.
+ \li Click \b{Next} and finish the wizard.
+ \li In \b Projects > \b {Build & Run}, select the correct kit for your
+ connected device.
+ \li To build and run the project, click \inlineimage qtcreator-run.png
+ \endlist
+
+ \section1 Building and Running \B2Q Demos
+
+ You can find the \B2Q demo applications in Qt Creator.
+
+ \list 1
+ \li Go to \b Welcome > \b Examples.
+ \li Select a \e Boot2Qt Qt version from the drop-down list.
+ \li Select a demo you want to build.
+ \li In \b Projects > \b {Build & Run}, select the correct kit for your
+ connected device or emulator.
+ \li To build and run the project, click \inlineimage qtcreator-run.png
+ \endlist
+
+ \section1 Setting Up an Already Existing Project for Deployment
+
+ New Qt Quick application projects generated by Qt Creator always have the correct
+ settings for deployment on the device or emulator. However, other projects need
+ some changes. This includes projects created using the
+ \b File > \b {New File or Project} > \b Applications > \b{Qt Widget Application}
+ template.
+
+ As a general rule, application binaries and resources are deployed to the
+ \c {/data/user/qt/<APPLICATION_NAME>} directory. Therefore, the \c path variable for
+ the \c INSTALLS targets needs to be adjusted accordingly in .pro files.
+
+ Open the .pro file and define the \c target.path and \c INSTALLS variables as follows:
+
+ \badcode
+ target.path = /data/user/qt/$$TARGET
+ INSTALLS += target
+ \endcode
+
+ Above, \c {$$TARGET} expands to the application target (executable) name.
+
+ \section2 Deploying Application Resources
+
+ If the application depends on additional resources (such as QML files and
+ images), you need to deploy them as well. For example:
+
+ \badcode
+ appFiles.files = *.png qml
+ appFiles.path = /data/user/qt/$$TARGET
+ INSTALLS += appFiles
+ \endcode
+
+ Above, all PNG images from the application source directory, and the entire
+ \e qml subdirectory are included in the deployment.
+
+ Alternatively, the files used by the application can be stored into the application
+ executable using the \l{The Qt Resource System}{Qt resource system}. This way, simply
+ deploying the application binary is all that's required.
+*/
+
+/*!
+ \page qtee-custom-build-steps.html
+ \title Special Build & Run Options
+ \previouspage qtee-building-and-running.html
+ \nextpage qtee-customization.html
+
+ Qt Creator allows you to execute custom commands on the embedded device connected
+ to the development host, both during the build process and during deployment of your
+ application.
+
+ \section1 Custom Build Steps
+
+ To add a custom step to be executed during the build:
+
+ \list 1
+ \li In Qt Creator, go to \b Projects > \b {Build Settings}
+ \li Select \b Build configuration for the \e {\B2Q} version you want to customize.
+ \li Click \b {Add Build Step} and select \b {Custom Remote Command (via adb shell)}.
+ \li Enter the command to be executed.
+ \endlist
+
+ \section1 Custom Deployment Steps
+
+ To add a custom step to be executed during deployment:
+
+ \list 1
+ \li In Qt Creator, go to \b Projects > \b {Run Settings}
+ \li Select \b Run configuration for the \e {\B2Q} version you want to customize.
+ \li Click \b {Add Deploy Step} and select \b {Custom Remote Command (via adb shell)}.
+ \li Enter the command to be executed.
+ \endlist
+
+ \sa {Booting to a Custom Application}
+*/
diff --git a/src/doc/src/qtee-changelog.qdoc b/src/doc/src/qtee-changelog.qdoc
new file mode 100644
index 0000000..494c285
--- /dev/null
+++ b/src/doc/src/qtee-changelog.qdoc
@@ -0,0 +1,239 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-changelog.html
+ \title ChangeLog
+ \previouspage qtee-customization.html
+ \nextpage qtee-troubleshooting.html
+
+ \section1 \B2Q 3.1.1
+
+ \list
+ \li Release date: Aug 20, 2014
+ \endlist
+
+ \section2 Changes
+ \b {Fixed Bugs}:
+ \list
+ \li \l {Building Your Own Embedded Linux Image}:
+ fixed issues that caused the Yocto build process to fail.
+ \endlist
+
+ \section1 \B2Q 3.1.0
+
+ \list
+ \li Release date: July 3, 2014
+ \endlist
+
+ \section2 Changes
+ \b {New Features}:
+ \list
+ \li Boot to Qt stack was updated to use Qt 5.3.1 on embedded Android
+ and Linux.
+ \li Added a generic solution for injecting \B2QA stack into devices
+ running Android version 4.2.2 or later.
+ \li \l {Preparing Toradex Apalis iMX6}{Toradex Apalis iMX6} was added
+ as a reference device.
+ \li \l {Qt Data Visualization} was updated to version 1.1.
+ \li \l {Qt Charts} was updated to version 1.4.
+ \li \l {Qt Virtual Keyboard} was update to version 1.1.
+ \endlist
+
+ \b {Improvements}:
+ \list
+ \li Added translucent widget windows support to eglfs.
+ \li Changed \e appcontroller to print status messages to stdout.
+ \li Switched to use symbolic links for GL-streaming library, instead
+ of having multiple copies.
+ \li Fixed C++ debugging issues and improved performance on embedded
+ Android.
+ \li Updated the content of \e About \e {\SDK} demo.
+ \li Improved Sensors and Media Player examples.
+ \endlist
+
+ \b {Fixed Bugs}:
+ \list
+ \li Fixed WiFi not working on Nexus 7 (2013).
+ \li BeagleBone Black: Fixed C++ debugging failing on embedded Android.
+ \li BeagleBone Black: embedded Linux did not include USB serial drivers.
+ \li Fixed JavaScript crash on ARM (QTBUG-39289).
+ \li Removed useless warnings about setMask when using Qt Widgets.
+ \endlist
+
+ \section1 \B2Q 3.0.0
+
+ \list
+ \li Release date: May 22, 2014
+ \endlist
+
+ \section2 Changes
+ \b {New Features}:
+ \list
+ \li \B2Q stack was updated to use Qt 5.3 on embedded Android and Linux
+ \li \l {Qt Virtual Keyboard} was updated to version 1.0
+ \li \l {Qt Data Visualization} demo was added
+ \li Qt WebEngine 0.9 support (including WebEngine demo) was added for
+ embedded Android and Linux. However, the Emulator target is
+ currently not supported
+ \li \l {Qt Quick Compiler} (Technology Preview) was added to the \B2Q stack
+ \li \l{Preparing Nexus 7 (2012/2013)}{Nexus 7 (2013)} was added as a
+ reference device for embedded Android
+ \li \l{Preparing SABRE SD i.MX6Quad}{Freescale SABRE SD i.MX6Quad} was
+ added as a reference device for embedded Linux
+ \li WiFi networking support and configuration were implemented on
+ embedded Linux
+ \endlist
+
+ \b {Improvements}:
+ \list
+ \li Emulator warnings were improved
+ \li Embedded Linux: Moved to use Yocto 1.6 (Daisy)
+ \li Debug symbols were moved to a separately installable package
+ \li Presentation of \B2Q demos in Qt Creator was improved
+ \endlist
+
+ \b {Fixed Bugs}:
+ \list
+ \li Build scripts: Incorrect path was fixed
+ \endlist
+
+\section1 \B2Q 2.1.0
+
+ \list
+ \li Release date: Apr. 15, 2014
+ \endlist
+
+ \section2 Changes
+ \b {New Features}:
+ \list
+ \li \l {Qt Data Visualization} version 1.0 was added to the \B2Q stack
+ \li \l {Enginio Data Storage} version 1.0 was added to the \B2Q stack
+ \li \l {Qt Quick Enterprise Controls} was updated to version 1.1
+ \li \l {Qt Serial Port} support was added to the \B2Q stack
+ \li Bluetooth on \B2QL: Support for bluez was added
+ \li Added support for building \B2QL for i.MX53 from sources
+ \endlist
+
+ \b {Improvements}:
+ \list
+ \li Qt Creator plugin for \B2Q now supports incremental deployment, custom adb commands
+ \li Adb now easily usable over IP on all devices on \B2QL
+ \li Update new content to device without erasing it first on \B2QL
+ \li All images now contain generally used CA certificates
+ \li Toolchains updated to support Qt WebEngine
+ \li Documentation was added for QML types provided by the \l {WiFi Module}
+ \li Emulator: Debug logging functionality was added
+ \li Various documentation improvements
+ \li \SDK installer error handling was improved
+ \li 3rd party license information was updated
+ \li Launcher Settings application UI was improved
+ \endlist
+
+ \b {Fixed Bugs}:
+ \list
+ \li \B2QL: OpenSSL Heartbleed bug was fixed
+ \li \B2QA: Qt debug symbols were missing
+ \li QEglFSCompositor::render() using incorrect vertices for full-screen quad, resulting in bad texture sampling
+ \li Use damaged rect instead of full texture upload for raster windows
+ \li Emulator: Crash when launching multiple instances
+ \li Emulator: State transitions were not working properly
+ \li \B2QA emulator: C++ debugging was fixed
+ \li Emulators: Qt Quick applications don't exit on Qt.quit()
+ \li Banding was visible on Raspberry Pi
+ \li Qt Creator: adb failed to connect
+ \li QtCreator: Different Virtual Machiness with the same OS were not handled properly
+ \li Qt Creator: Tabstop order in device wizard was incorrect
+ \li Qt 5 Everywhere demo: not all internet radio station were working
+ \endlist
+
+ \b {Fixed Known Issues}:
+ \list
+ \li Embedded Android: Arabic Numbers Not Always Rendered Correctly
+ \endlist
+
+ \section1 \B2Q 2.0.0
+
+ \list
+ \li Release date: Feb. 25, 2014
+ \endlist
+
+ \section2 Changes
+ \b {New Features}:
+ \list
+ \li \B2Q stack was updated to use Qt 5.2.1 on embedded Android and Linux
+ \li Building your own \B2Q embedded Linux stack was enabled
+ \li Emulator graphics performance and quality was improved (GL-streaming)
+ \li BeagleBone Black was added as a reference device
+ \li \l {Qt Virtual Keyboard} was integrated into \B2Q
+ \li \l {Qt Quick Enterprise Controls} was added to the \B2Q stack
+ \li \l {Qt Charts} was added to the \B2Q stack
+ \li \B2Q source code was made available via online installer
+ \li WiFi networking support/configuration were implemented on embedded Android
+ \li Ethernet connectivity was enabled on embedded Android
+ \endlist
+
+ \b {Improvements}:
+ \list
+ \li Updated GDB for embedded Android toolchain
+ \li Enterprise demos (Charts, Enterprise Controls) were added
+ \li Embedded Linux: Moved to use Yocto 1.5 (Dora)
+ \li Demos available as examples in Qt Creator
+ \li Embedded Android emulator updated to Android 4.2.2
+ \endlist
+
+ \b {Fixed Bugs}:
+ \list
+ \li Embedded Android emulator: Missing Mesa headers
+ \li Embedded Linux emulator: Black screen in camera demo
+ \li Emulator tries to load host plugins
+ \li Sensors not working in emulators
+ \li Empty \c HOME environment variable in processes launched by appcontroller
+ \li Embedded Android emulator: C++ debugging fails
+ \li Qt add-ons not installed to host
+ \endlist
+
+ \b {Fixed Known Issues}:
+ \list
+ \li Qt SQL: QML LocalStorage Fails to Connect to Database on Embedded Android
+ \li Qt XML Patterns: Module not Available on embedded Android
+ \li Qt Multimedia: Audio is Muted on Nexus 7
+ \li Unnecessary Warnings Displayed by the Installer
+ \li Virtual Keyboard: Backspace Removes Two Characters
+ \endlist
+
+ \section1 \B2Q 1.0.1
+
+ \list
+ \li Release date: Dec. 5, 2013
+ \endlist
+
+ \section2 Changes
+ \list
+ \li Emulator: Remote control widget version shown together with emulator version
+ \li Emulator: Mouse events are sent instead of touch events
+ \li Emulator: Raster window support added
+ \li Emulator: emulatorproxyd shows its version on startup
+ \li Emulator: Detect some network problems
+ \li Emulator: Fixed issues related to startup
+ \li Emulator: Updated source code license headers
+ \li Emulator: Show all VirtualBox errors
+ \li Emulator: Video playback support on embedded Linux
+ \endlist
+*/
diff --git a/src/doc/src/qtee-custom-embedded-linux.qdoc b/src/doc/src/qtee-custom-embedded-linux.qdoc
new file mode 100644
index 0000000..36484d2
--- /dev/null
+++ b/src/doc/src/qtee-custom-embedded-linux.qdoc
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+ \page qtee-custom-embedded-linux-image.html
+ \title Building Your Own Embedded Linux Image
+ \previouspage qtee-customization.html
+ \nextpage qtee-changelog.html
+
+ \B2QL is built using the tools and resources from the \l {Yocto Project},
+ and is based on Yocto's reference distribution (\e Poky). You can
+ use the same tools to build custom \B2Q images, and have control over
+ which packages are included in the build and how the software stack
+ is configured.
+
+ \section2 Note About Support Services for Yocto Tools
+
+ By default, Digia will only provide customer support for the Yocto
+ recipes on the reference platforms, as delivered with \SDK, and
+ setting up the development environment for them. Receiving support
+ for any other configuration requires a separate service agreement
+ between a customer and Digia.
+
+ \section1 Requirements
+
+ You should be familiar with the Yocto tools and the concept of
+ \e {recipes}. For more information, see Yocto Project
+ \l{https://www.yoctoproject.org/documentation/current}{documentation}.
+
+ To get started, you need the following:
+
+ \list
+ \li Install the \B2Q \e source packages. You can
+ find these by running the \e MaintenanceTool application
+ located in the \SDK installation directory and selecting
+ \e {Package Manager}. The \e {Yocto meta layer} package
+ contains the additional recipes required to make the image
+ compatible with \B2Q.
+ \li Install the dependencies for the Yocto tools. In Ubuntu,
+ the following packages are required:
+ \badcode
+ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath libsdl1.2-dev xterm
+ \endcode
+ \endlist
+
+ \section1 Setting Up Yocto Build Environment
+
+ Run the setup script that initializes the Yocto environment:
+
+ \badcode
+ cd <BuildDir>
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-yocto-meta/b2qt-init-build-env .
+ \endcode
+
+ \section1 Building the Image and Toolchain
+
+ After the Yocto environment is set up, you need to configure the
+ build environment for your target device. Using Raspberry Pi as
+ an example:
+
+ \badcode
+ export TEMPLATECONF=meta-b2qt/conf
+ export MACHINE=raspberrypi
+ source poky/oe-init-build-env build-raspberrypi
+ \endcode
+
+ The following table lists the \c MACHINE values for our reference platforms:
+
+ \table
+ \header
+ \li Board
+ \li MACHINE value
+ \row
+ \li Raspberry Pi
+ \li raspberrypi
+ \row
+ \li BeagleBone Black
+ \li beaglebone
+ \row
+ \li Boundary Devices BD-SL-i.MX6
+ \li nitrogen6x
+ \row
+ \li Freescale SABRE SD i.MX6Quad
+ \li imx6qsabresd
+ \row
+ \li Toradex Apalis iMX6
+ \li apalis-imx6
+ \row
+ \li Emulator
+ \li emulator
+ \endtable
+
+ Yocto recipes for \B2QL have two main targets to build: The target image,
+ and the external toolchain that is used for building the Qt framework and
+ applications.
+
+ \badcode
+ bitbake b2qt-embedded-image
+ bitbake meta-toolchain-b2qt-embedded-sdk
+ \endcode
+
+ The target rootfs image is located in the \c <YoctoBuildDir>/tmp/deploy/images/<target>/b2qt-embedded-image-<target>.tar.gz,
+ and the new toolchain is in \c <YoctoBuildDir>/tmp/deploy/sdk/b2qt-eglibc-x86_64-meta-toolchain-b2qt-embedded-sdk-<target-architecture>-toolchain-1.6.sh
+
+ \note The generated target image does not yet include Qt libraries,
+ you need to build Qt and add it into the image yourself.
+
+ \section1 Building Qt and Addons
+
+ \e {Build scripts} source package contains scripts that can be used to
+ build Qt and all additional Qt addons that are part of \B2QL image.
+ To setup build environment for your target hardware, run the initialization
+ script. Using Raspberry Pi as an example:
+
+ \badcode
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-common/init_build_env.sh <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-linux/config.raspberrypi
+ \endcode
+
+ \note You can use the same build directory for Qt and the Yocto image.
+ The toolchain and the target image are then used from the Yocto build directory.
+
+ You can use following scripts to build different parts of the \B2Q stack.
+
+ \badcode
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-linux/build_qt.sh
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-linux/build_extras.sh
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-linux/build_image.sh
+ \endcode
+
+ After \e {embedded-linux/build_image.sh} has finished, you can flash the device with
+ the updated image located in the build folder.
+
+ \section1 Configuring Qt Creator
+
+ After you have built the \B2Q stack, you must also set up Qt Creator in order to start
+ developing for your device. The following script does this for you.
+
+ \badcode
+ <INSTALL_DIR>/Boot2Qt-3.x/sources/b2qt-build-scripts/embedded-common/setup_qtcreator.sh
+ \endcode
+
+ This will set up a new kit in Qt Creator, using the toolchain and Qt from
+ your build directory. The new kit is visible under \b Tools > \b Options
+ > \b {Build & Run} > \b Kits.
+*/
diff --git a/src/doc/src/qtee-customization.qdoc b/src/doc/src/qtee-customization.qdoc
new file mode 100644
index 0000000..ec6e7c8
--- /dev/null
+++ b/src/doc/src/qtee-customization.qdoc
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-customization.html
+ \title Customization
+ \previouspage qtee-building-and-running.html
+ \nextpage qtee-custom-embedded-linux-image.html
+
+ \section1 Environment and Input
+
+ By default, the basic environment variables and startup options of
+ \B2Q applications are set in the file \c
+ {/system/bin/appcontroller.conf} in embedded Android devices and
+ in \c{/etc/appcontroller.conf} in embedded Linux devices.
+
+ You can customize this file if you target a hardware device that
+ has other input devices than the ones that the \B2Q stack is configured
+ for by default.
+
+ On some devices, the root file system (where this file
+ resides) is mounted read-only at boot time. To allow modification,
+ remount it read-write by entering the following command:
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb remount
+ \endcode
+
+ In the \c{appcontroller.conf} file, the input devices are
+ specified by the lines similar to these:
+ \badcode
+ env=QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0
+ \endcode
+
+ Usually, you do not need to change this setting. USB input devices, such as
+ keyboards and mice, are automatically recognized. The mouse pointer is shown
+ automatically if a mouse is connected.
+
+ However, hotplugging may not work, which means that the input
+ devices, such as a keyboard and mouse, have to be connected at boot
+ time.
+
+ On some devices, for example the BD-SL-i.MX6, the touchscreen device is
+ specified explicitly with \c QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS. This is
+ necessary because the automatic device discovery would fail to find the
+ touchscreen.
+
+ \section1 Booting to a Custom Application
+
+ After you have deployed your own application to the device, it will be
+ launched on boot, instead of the \B2Q demo launcher. To prevent this
+ behavior, remove or disable the \b {Make this application the default one}
+ step from the \b{Run Settings} for your project in the Qt Creator \b Projects
+ mode.
+
+ To remove your application from the default startup, use the following
+ command:
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb shell appcontroller --remove-default
+ \endcode
+
+ \section1 Switching Between Portrait and Landscape Views
+
+ Depending on device screen dimensions and application requirements, it might
+ be desirable
+ to change the default view orientation. The following example shows how to rotate your
+ application in QML.
+
+ \qml
+ import QtQuick 2.2
+
+ Item {
+ id: root
+ width: 800
+ height: 1280
+ // Container element for rotating
+ Rectangle {
+ id: main
+ // Swap the width and height of the root item
+ width: root.height
+ height: root.width
+ anchors.centerIn: parent
+ // Rotate 90 degrees clockwise around transformOrigin
+ rotation: 90
+ // The rotated content
+ Text {
+ text: qsTr("Hello World")
+ anchors.centerIn: parent
+ }
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ Qt.quit();
+ }
+ }
+ }
+ }
+ \endqml
+
+ \section1 Disabling Screen Composer on Embedded Android
+
+ By default, the \B2Q stack uses Android's screen composer, \e
+ Surfaceflinger. It is required for Qt Multimedia functionality,
+ i.e. video playback and camera. If that functionality is not
+ required, Surfaceflinger may be disabled. This can in some
+ situations improve performance.
+
+ \list 1
+ \li Edit \c {/system/bin/appcontroller.conf} to set the value of
+ the environment variable \c QT_QPA_EGLFS_NO_SURFACEFLINGER to \c
+ 1 instead of \c 0.
+ \li Disable the startup of \c surfaceflinger at boot-up. Either
+ change \c /init.rc, or simply rename the \c
+ {/system/bin/surfaceflinger} executable.
+ \endlist
+
+ \section1 Using Network Connection for ADB
+
+ By default, \B2Q uses USB cable for communication between device and Qt Creator.
+ On \B2QL, you can change the device to use ethernet network connection for the
+ communication. To enable network connection, you need to modify file
+ \c /etc/default/adbd located on the devices, and change value of \c USE_ETHERNET
+ to \c 'yes'. This can also be done with \c adb, while the device is still
+ connected via USB.
+
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb shell sed -i -e 's/USE_ETHERNET=no/USE_ETHERNET=yes/' /etc/default/adbd
+ \endcode
+
+ \note You need to restart the device for this change to take effect.
+
+ \include b2qt-post-install-setup.qdocinc configuring network device
+*/
diff --git a/src/doc/src/qtee-index.qdoc b/src/doc/src/qtee-index.qdoc
new file mode 100644
index 0000000..c881296
--- /dev/null
+++ b/src/doc/src/qtee-index.qdoc
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \contentspage{index.html}{Qt Enterprise Embedded}
+ \page index.html
+ \nextpage qtee-overview.html
+ \title Qt Enterprise Embedded
+
+ \SDK provides a fully-integrated solution to get you started immediately
+ with software development on your embedded device with a tailored user
+ experience for embedded Linux and embedded Android. \SDK contains the tools
+ you need for fast, easy, and fully-integrated embedded device application
+ development. It comes with \B2Q, a light-weight UI stack for embedded
+ systems, and the Qt Creator integrated development environment (IDE) with
+ preconfigured build targets for hardware platforms, as well as an emulator
+ for testing the applications.
+
+ \e{\b{IMPORTANT:} Make sure to follow the \l{Installation Guide}
+ closely!}
+
+ \section1 Contents
+
+ \list
+ \li \l{About Qt Enterprise Embedded}
+ \li \l{Installation Guide}
+ \li \l{Supported Platforms}
+ \li \l{Preparing Hardware}
+ \list
+ \li \l{Preparing Nexus 7 (2012/2013)}{Nexus 7 (2012/2013) (embedded Android)}
+ \li \l{Preparing BD-SL-i.MX6}{BD-SL-i.MX6 (embedded Android and Linux)}
+ \li \l{Preparing SABRE SD i.MX6Quad}{SABRE SD i.MX6Quad (embedded Linux)}
+ \li \l{Preparing Toradex Apalis iMX6}{Toradex Apalis iMX6 (embedded Linux)}
+ \li \l{Preparing BeagleBone Black}{BeagleBone Black (embedded Android and Linux)}
+ \li \l{Preparing BeagleBoard-xM}{BeagleBoard-xM (embedded Linux)}
+ \li \l{Preparing Raspberry Pi}{Raspberry Pi Model B (embedded Linux)}
+ \endlist
+ \li \l{Building and Running Embedded Applications}
+ \list
+ \li \l{Special Build & Run Options}
+ \endlist
+ \li \l{Customization}
+ \li \l{Building Your Own Embedded Linux Image}
+ \li \l{ChangeLog}
+ \li \l{Troubleshooting}
+ \li \l{License Information}
+ \endlist
+
+ \section1 Reference Documentation
+
+ \list
+ \li \l{Add-On QML Types}
+ \endlist
+*/
+
+/*!
+ \contentspage{index.html}{Qt Enterprise Embedded}
+ \page qtee-overview.html
+ \previouspage index.html
+ \nextpage qtee-installation-guide.html
+
+ \title About Qt Enterprise Embedded
+
+ \SDK has two main parts:
+
+ \list
+ \li Development environment that is installed on a Linux development
+ desktop by using an online installer
+ \li \B2Q
+ \endlist
+
+ \section1 About the Development Environment
+
+ The development is done with the Qt Enterprise libraries and device
+ deployment can be done with one click directly from Qt Creator to a device
+ connected via USB. Alternatively, you can deploy the application locally
+ directly to the \B2Q Emulator that is running the full target software stack
+ as in the device.
+
+ As with any Qt based application, the same application can be deployed to
+ desktop and mobile OS targets as well.
+
+ \section1 About \B2Q
+
+ \e{\b{\B2Q}} is a light-weight, Qt-optimized, full software stack for
+ embedded systems that is installed into the actual target device. This is
+ done by flashing the device's memory card or internal memory directly with a
+ pre-built image that comes with the development environment.
+
+ \B2Q supports two different operating systems:
+
+ \list
+ \li \b{\B2QA} where the software stack is based on the Android Kernel
+ (version 4.1 or higher) and selected middleware. It includes a lean
+ software stack where Qt/QML replaces the top Java graphical layer
+ and removes the Zygote process layer as well the Android home screen
+ enabling better and faster development where modern UIs are at the
+ forefront.
+
+ \li \b{\B2QL} where the software stack is using the traditional embedded
+ Linux kernel built with the Yocto Poky reference system (Yocto 1.6
+ \e Daisy release). The Embedded Linux variant is designed for great
+ customization possibilities. It contains only components required in
+ the embedded device, resulting in smaller image sizes while keeping
+ valuable development tools available.
+ \endlist
+
+ Both versions have been tested and verified on a number of different
+ hardware configurations. \B2Q support is not limited to the devices used
+ as reference platforms, it can be made to run on a variety of hardware.
+
+ \section1 About Qt
+
+ \l{http://qt.digia.com/}{Qt} is a full development framework with tools
+ designed to streamline the creation of applications and user interfaces
+ for desktop, embedded, and mobile platforms.
+
+ \list
+ \li \b{Qt Framework} - intuitive APIs for C++
+ and CSS/JavaScript-like programming with
+ \b{Qt Quick} for rapid UI
+ creation
+ \li \b{Qt Creator IDE} - powerful cross-platform integrated development
+ environment, including UI designer tools and on-device debugging
+ \li \b{Tools and toolchains} - internationalization support, embedded
+ toolchains and more.
+ \endlist
+
+ With Qt, you can reuse code efficiently to target multiple platforms
+ with one code base. The modular C++ class library and development tools
+ enable developers to create applications for one platform and easily
+ build and run to deploy also on other platforms.
+
+
+ \section1 \B2Q vs Qt for Android
+
+ \image b2qt-vs-qt-for-android.png
+
+ \e{\b{Qt for Android}} is a port of the Qt Framework to be used for application
+ development on the Android platform. Its purpose is to enable development
+ of applications that can run on Android devices. For developers writing
+ applications for the Android ecosystem, Qt for Android is the right choice.
+
+ \b{\B2QA} tries to strip down the Android
+ stack to the bare minimum, relying only on basic Linux
+ features. The majority of the Android stack, such as
+ \e{Dalvik virtual machine} is not running in \B2Q,
+ resulting in faster startup times, lower memory consumption and
+ overall better performance.
+*/
diff --git a/src/doc/src/qtee-install-guide.qdoc b/src/doc/src/qtee-install-guide.qdoc
new file mode 100644
index 0000000..558bd61
--- /dev/null
+++ b/src/doc/src/qtee-install-guide.qdoc
@@ -0,0 +1,149 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-installation-guide.html
+ \title Installation Guide
+ \previouspage qtee-overview.html
+ \nextpage qtee-supported-platforms.html
+
+ To successfully set up \SDK, you must closely follow the instructions in
+ this section and perform all the described tasks.
+
+ In case of problems, see the \l{Troubleshooting} information and the
+ \l {Known Issues} in \SDK \l {product page}.
+
+ \target Requirements for Development Host
+ \section1 Requirements for Development Host
+
+ A 64-bit Linux system is required to install and use \SDK. Instructions
+ in this documentation assume Ubuntu Linux 64-bit 12.04 LTS or later.
+ Other Linux distributions may work, but have not been tested. C/C++ build
+ essentials must be installed.
+
+ \target Installing 32-bit Support Libraries
+ \section1 1. Installing 32-bit Support Libraries
+
+ Some of the build tools in \SDK are 32-bit programs, and on 64-bit
+ systems they require support libraries for running 32-bit code. To
+ install the required packages in recent versions of Ubuntu, use
+ the following command in a terminal:
+
+ \badcode
+ sudo apt-get install g++-multilib zlib1g:i386
+ \endcode
+
+ For older Ubuntu versions such as 12.04, instead do:
+
+ \badcode
+ sudo apt-get install g++-multilib ia32-libs
+ \endcode
+
+ \target Installing VirtualBox
+ \section1 2. Installing VirtualBox
+
+ The \B2Q emulator in \SDK relies on VirtualBox virtualization software. You can
+ download it from \l{https://www.virtualbox.org/wiki/Linux_Downloads} or
+ install it via distribution tools.
+
+ If you have older Ubuntu versions such as 12.04 you have to install a newer
+ version of VirtualBox than your distribution does provide.
+ You have to add a foreign package source:
+
+ \badcode
+ wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
+ echo "deb http://download.virtualbox.org/virtualbox/debian $(lsb_release -sc) contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
+ sudo apt-get update
+ \endcode
+
+ Now install VirtualBox on your computer
+ \badcode
+ sudo apt-get install virtualbox-4.3
+ \endcode
+
+ To configure VirtualBox:
+
+ \list 1
+ \li Start the VirtualBox user interface.
+ \li Select \b{File > Preferences} > \b{Network} to open VirtualBox
+ network settings.
+ \li Create a new network named \e{vboxnet0} and edit its properties:
+
+ \list 1
+ \li Change the IPv4 address to \c{192.168.56.1} and the IPv4 network
+ mask to \c{255.255.255.0}.
+ \li In the \b{DCHP Server} tab, select the \b{Enable Server} check
+ box.
+ \li Change the server address to \c{192.168.56.1}.
+ \li Change both the lower and upper address bounds to
+ \c{192.168.56.101}.
+ \endlist
+ \endlist
+
+ If a firewall is enabled on the development host, it needs to
+ allow TCP and UDP packets between your host and the virtual
+ machine.
+
+ \section1 3. Installing \SDK
+
+ \list 1
+
+ \li Download the binary \SDK installer, and make sure it is executable
+ by using one of the following methods:
+
+ \list
+ \li Enter the \c{chmod +x <filename>} command.
+ \li Right-click the file, and select \b{Properties} >
+ \b{Permissions} > \b{Allow executing file as program}.
+ \endlist
+
+ \li Run the installer and follow its instructions.
+
+ \endlist
+
+ \note Do not execute the installer as root user or with sudo.
+
+ The installer will let you select a directory where \SDK will be
+ installed. In this documentation, the installation directory is referred
+ to as \b{\c{<INSTALL_DIR>}}. The default installation directory is
+ \tt{~/Qt}.
+
+ \target Installing Boot to Qt on Target Devices
+ \section1 4. Install \B2Q on Target Devices
+
+ \e{If you target only the emulator, you can skip this step.}
+
+ Before you can deploy and test your Qt application on hardware, you must
+ flash the target device with an image that contains the
+ \B2Q stack. The steps vary from device to device. Follow the instructions
+ specific to your device in \l {Preparing Hardware}.
+
+ \section1 5. Setting up USB Access to Embedded Devices
+
+ \e{If you target only the emulator, you can skip this step.}
+
+ \include b2qt-post-install-setup.qdocinc setting up usb access
+
+ \section1 6. Configuring a Device Kit in Qt Creator
+
+ \include b2qt-post-install-setup.qdocinc configuring device kit android linux
+
+ You are now ready to start developing for your device.
+ For more information, see \l{Building and Running an Example}.
+*/
diff --git a/src/doc/src/qtee-licenses.qdoc b/src/doc/src/qtee-licenses.qdoc
new file mode 100644
index 0000000..6728712
--- /dev/null
+++ b/src/doc/src/qtee-licenses.qdoc
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-licenses.html
+ \title License Information
+ \previouspage qtee-troubleshooting.html
+ \nextpage qtee-qml-reference.html
+
+ \section1 Licensing
+
+ \SDK is licensed under the Qt Enterprise commercial license. For more information,
+ see \l {http://qt.digia.com/licensing}. Evaluation licenses are also available,
+ see \l {product page}{\SDK} on qt.digia.com.
+
+ \section1 3rd Party Software Licenses
+
+ The third-party licenses used in \SDK are listed in the file
+ \c {<INSTALL_DIR>/Licenses/ThirdPartySoftware_Listing.txt}.
+
+ \section1 Embedded Android Images
+
+ The embedded Android platform is built from the \e {Android Open Source Project},
+ source code available at \l {http://android.googlesource.com/}. The open
+ source licenses and notices are collected into the file
+ \c {/etc/NOTICE.html.gz} in the target images.
+
+ \section1 Embedded Linux Images
+
+ The embedded Linux platform is built using tools from the \l {Yocto Project}.
+ The open source licenses and notices are located in
+ \list
+ \li \c /usr/share/common-licenses/license.manifest
+ \li \c /usr/share/licenses/*
+ \endlist
+
+ \section1 Android GNU C++ Run-time Licensing
+
+ The Android platform does not provide a full implementation of the C++ run-time. Instead,
+ apps that depend on features such as STL, exceptions, or RTTI, must include an additional
+ native run-time library that provides the features they need.
+
+ \B2QA uses the GNU libstdc++ library distributed as part of the \e {Android Open Source Project}.
+ This library is included in the images for \B2QA, and will be loaded by the application
+ on start-up to meet the run-time requirements of Qt.
+
+ The GNU C++ run-time is licensed under the
+ \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/appendix_gpl.html}{GNU General Public License version 3} with
+ an exception which grants permission for run-time linking and usage of the library by an application which
+ would otherwise violate the terms of the main license. For more information about this exception, see
+ \l{http://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html}{the official license page}.
+*/
diff --git a/src/doc/src/qtee-qml-reference.qdoc b/src/doc/src/qtee-qml-reference.qdoc
new file mode 100644
index 0000000..a1f4e4f
--- /dev/null
+++ b/src/doc/src/qtee-qml-reference.qdoc
@@ -0,0 +1,34 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-qml-reference.html
+ \title Add-On QML Types
+ \previouspage qtee-licenses.html
+
+ The following QML modules are included in the \B2Q stack and provide
+ additional QML types that are useful in an embedded application:
+
+ \annotatedlist qtee-qmlmodules
+
+ \section1 WiFi Module
+
+ \annotatedlist wifi-qmltypes
+*/
+
diff --git a/src/doc/src/qtee-troubleshooting.qdoc b/src/doc/src/qtee-troubleshooting.qdoc
new file mode 100644
index 0000000..0e730c6
--- /dev/null
+++ b/src/doc/src/qtee-troubleshooting.qdoc
@@ -0,0 +1,255 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \page qtee-troubleshooting.html
+ \title Troubleshooting
+ \previouspage qtee-changelog.html
+ \nextpage qtee-licenses.html
+
+ \note An updated version of this information may be available in Digia customer portal,
+ see \l {Known Issues} in \SDK \l {product page}.
+
+ \section1 General Issues
+
+ \section2 I have problems deploying/launching the application in Qt Creator
+
+ Check that the device is properly connected to the development host via USB
+ or Ethernet (depending on the device).
+ See \l{Connectivity Issues}.
+
+ If using the emulator, see \l{Installing VirtualBox}.
+
+ \section2 I have problems deploying/launching a Qt or Qt Quick example application
+
+ Because of a technical peculiarity in \c{qmake}, it is not
+ possible to get correct deployment setup for any application that
+ is placed inside a Qt source code tree.
+
+ The workaround is to copy the example sources to a location
+ outside the Qt source tree, and open this copy of the example
+ application instead.
+
+ \section2 I have problems launching or running applications on hardware after updating the SDK
+
+ Remember to repeat the process of updating also your device with the latest
+ version of \B2Q. See \l{Installing Boot to Qt on Target Devices}.
+
+ \section2 Booting BD-SL-i.MX6 stops with \e {6x_bootscript not found} error
+
+ Check the U-Boot version number. It should start with either \c{2012} or \c{2013}.
+ If it is \c{2009.xx}, an upgrade of the bootloader is required. For more
+ information, see:
+
+ \list
+ \li \l http://boundarydevices.com/6q_bootscript/
+ \li \l http://boundarydevices.com/switching-u-boot-versions-on-i-mx6/
+ \endlist
+
+ \target nexus-factory-reset
+ \section2 How do I restore my Nexus 7 to factory settings?
+
+ Go to \l{https://developers.google.com/android/nexus/images} and
+ download the correct file for your device. Unpack it, and then enter the
+ following commands:
+
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb reboot bootloader
+ <INSTALL_DIR>/Tools/b2qt/fastboot -w update <image-file>.zip
+ \endcode
+
+ \section2 How do I shut down the Nexus 7?
+
+ If the \B2Q demo launcher is running, start the \b {Launcher
+ Settings} app, and select \b {Shut Down} to power off the device.
+
+ Otherwise, make sure the Nexus 7 is connected to the development host, and run
+ the following command in a terminal:
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb shell reboot -p
+ \endcode
+
+ If the device is in the fastboot mode, use the volume button to display the
+ \b {Power off} option and press the power button to power off the device.
+
+ Alternatively, press and hold the power button for 10
+ seconds. This will force a reboot.
+
+ \section2 How do I get HDMI output working properly on BeagleBone Black?
+
+ Depending on the HDMI monitor, the cable, and the build variant of
+ the BeagleBone Black device, it may not be able to drive an HDMI display in a
+ stable way; the image may disappear or stutter. These issues are not caused by
+ the \B2Q stack.
+
+ More details and possible solutions can be found
+ \l {http://www.elinux.org/Beagleboard:BeagleBoneBlack_HDMI}{here}.
+
+ \section2 Trying to build for the emulator target fails with error message \e{make: i686-android-linux-g++: Command not found}
+
+ You need to install support libraries in order to run 32-bit programs in a
+ 64-bit Linux operating system.
+
+ See \l{Installing 32-bit Support Libraries}.
+
+ \section2 Something crashed!
+
+ The following command shows the system log:
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb logcat
+ \endcode
+
+ \note When terminating an application from Qt Creator, you may see the
+ message \e {Terminating application. Error running process: Process crashed}.
+ This is normal and does not indicate a problem in your code; a SIGTERM
+ signal is sent to the application, and Qt interprets it as a crash.
+
+ \section2 Mouse or touch input does not work
+
+ See \l{Customization}.
+
+ \note Hotplugging does not currently work, and therefore, any input device
+ must be present at boot time to be recognized.
+
+ \section2 Application stops with \e{EGLFS: OpenGL windows cannot be mixed with others.}
+
+ OpenGL and Qt Quick 2 applications can only have one
+ fullscreen window existing at a time. Trying to create another
+ OpenGL window, or trying to mix an OpenGL window with a raster one
+ will display the above message and abort the application.
+
+ \note For raster windows (software rendered content based on QWidget or
+ QPainter), there is no such limitation.
+
+ \section2 I cannot edit the contents of appcontroller.conf on the device
+
+ The file system where this file is located may be mounted as read-only.
+
+ See \l{Customization}.
+
+ \section2 C++11 features do not work on Android
+
+ To enable C++11 features in the compiler, add \e{CONFIG += c++11} to the .pro file.
+ On Embedded Linux this will be enough because there the toolchain contains a more
+ recent version of gcc (4.8.x). On Embedded Android however the toolchain is based on
+ gcc 4.6. This offers limited support for C++11 and Qt's own C++11 support is disabled,
+ meaning that adding \e{c++11} to \e{CONFIG} will have no effect. There is still a
+ possibility however to manually enable some level of C++11 support just for the
+ application, by adding \e{QMAKE_CXXFLAGS += -std=c++11} to the .pro file.
+
+ \section1 Connectivity Issues
+ \section2 I cannot connect to my hardware device via USB
+
+ See \l{5. Setting up USB Access to Embedded Devices}.
+
+ \section2 adb fails with "error: more than one device and emulator"
+
+ You have to specify which Android device you want \c{adb} to talk
+ to, using adb's \c{-s <serial-number>} option. Use the following
+ command to find to see the serial number of the connected
+ devices:
+
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb devices
+ \endcode
+
+ \section2 The emulator cannot connect to the Internet
+
+ By default, the VirtualBox is configured to use a host-only network, so external
+ connections do not work in the emulator.
+
+ You may be able to enable Internet connectivity with another
+ virtual network adapter in NAT mode by adapting
+ \l{http://askubuntu.com/questions/293816/in-virtualbox-how-do-i-set-up-host-only-virtual-machines-that-can-access-the-in}{these}
+ instructions.
+
+ \section2 The emulator is stuck in \e{Waiting for display data} or fails to start properly
+
+ Check the output of the following command:
+
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb devices
+ \endcode
+
+ If the emulator (192.168.56.101) is not listed there, try connecting to it:
+
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb connect 192.168.56.101
+ \endcode
+
+ If the emulator is already listed, try disconnecting it:
+ \badcode
+ <INSTALL_DIR>/Tools/b2qt/adb disconnect 192.168.56.101
+ \endcode
+
+ And then close the emulator and retry.
+
+ \section2 What are the user and password to access my embedded Linux device?
+
+ Embedded Linux devices can be accessed using user \c{root} and an empty password.
+
+ \section2 No sound on Embedded Android devices
+
+ When connecting a headphone or speakers while the device is running, the
+ audio may not be properly routed to the correct output. As a workaround,
+ connect the headphone or speakers before turning on the device.
+
+ \section2 Qt WebEngine libraries cannot be found when targeting the emulator
+
+ Qt WebEngine is not currently available for the emulators, neither eLinux
+ nor eAndroid. This is planned to be addressed in a later release.
+
+ \section2 Widget-based web view is not available
+
+ The Qt WebEngine APIs are available only for Qt Quick 2 based applications at the moment.
+ The QWidget-based equivalents, like QWebEngineView, will become supported in future releases.
+ For the time being, use the WebEngineView QML element.
+
+ \section2 Qt Quick Compiler fails on the emulators
+
+ The Qt Quick Compiler is not yet functional in the emulator environments, and projects
+ are likely fail to build or run with compilation enabled. Support for the emulators
+ will be added in a later release.
+
+ \section2 QML debugging not functional when using Qt Quick Compiler
+
+ QML debugging is not fully functional when the Qt Quick Compiler is enabled. Support
+ for this will be added in a later release.
+
+
+ \section2 Boundary Devices Android Jellybean i.MX6 image deploying issues
+
+ On some hosts running the mksdcard.sh script results in the following failure messages:
+
+ \badcode
+ Cannot find device with major:minor 8:20: No such device
+ cp: target ‘/media/BOOT/’ is not a directory
+ \endcode
+
+ This means that flashing an sdcard has failed, even if the scripts seemingly runs to the end.
+ The issue can be worked around by adding "sleep" call before "udisks --mount" loop (search at
+ the end of the script):
+
+ \badcode
+ sleep 2
+ for n in 1 2 4 ; do
+ udisks --mount ${diskname}${prefix}${n}
+ done
+ \endcode
+*/
diff --git a/src/doc/src/shared/b2qt-external-pages.qdoc b/src/doc/src/shared/b2qt-external-pages.qdoc
new file mode 100644
index 0000000..d642fa2
--- /dev/null
+++ b/src/doc/src/shared/b2qt-external-pages.qdoc
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise-Embedded/Supported-Modules-and-Known-Issues/
+ \title Known Issues
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise-Embedded/
+ \title product page
+*/
+
+/*!
+ \externalpage https://qtcloudservices.com/products/enginio-data-storage/
+ \title Enginio Data Storage
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Advanced-Data-Visualization/
+ \title Qt Data Visualization
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Quick-Enterprise-Controls/
+ \title Qt Quick Enterprise Controls
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Virtual-Keyboard/
+ \title Qt Virtual Keyboard
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Charts/
+ \title Qt Charts
+*/
+
+/*!
+ \externalpage http://qt.digia.com/Product/Qt-Enterprise/Qt-Quick-Compiler/
+ \title Qt Quick Compiler
+*/
+
+/*!
+ \externalpage https://www.yoctoproject.org/
+ \title Yocto Project
+*/
diff --git a/src/doc/src/shared/b2qt-post-install-setup.qdocinc b/src/doc/src/shared/b2qt-post-install-setup.qdocinc
new file mode 100644
index 0000000..0bd96dd
--- /dev/null
+++ b/src/doc/src/shared/b2qt-post-install-setup.qdocinc
@@ -0,0 +1,132 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+//! [setting up usb access]
+ On Ubuntu Linux, the development user account must have access to plugged in
+ devices. To allow the development user access to the device via USB, create
+ a new \e{udev} rule:
+
+ \list 1
+
+ \li Run the following command in a shell:
+
+ \badcode
+ echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", TAG+="udev-acl", TAG+="uaccess"' | sudo tee -a /etc/udev/rules.d/70-boot2qt.rules
+ \endcode
+
+ \li Connect the running device to the development host with a USB
+ cable. If the device is already connected, disconnect and reconnect the USB
+ cable after running the command above.
+
+ \li On \B2QA, you can confirm that the connection is working by running
+ the following shell command:
+
+ \code
+ <INSTALL_DIR>/Tools/b2qt/adb devices
+ \endcode
+
+ The output should be a list of connected Android devices,
+ identified with a serial number and a name. If your device is missing from
+ the list, or the serial number is \c{??????}, the connection is
+ not working properly. Check that the device is powered on, and disconnect
+ and reconnect the USB cable.
+
+ The emulator may be listed as well. Its serial number is its IP and the port
+ number: \c{192.168.56.101:5555}.
+ \endlist
+
+ The system log files \c{/var/log/udev} and \c{/var/log/syslog} may
+ provide relevant information in case of connection problems.
+//! [setting up usb access]
+
+//! [configuring device kit]
+//! [common config device kit]
+ After you have prepared the hardware, you must perform one final step
+ to set up the development tools in Qt Creator for your device. That is,
+ you must configure the correct device to be used for each build and run
+ \e{kit}. Connect your device to the development host via USB and launch
+ Qt Creator. In Qt Creator:
+
+//! [common config device kit]
+//! [steps for device kit]
+ \list 1
+ \li Select \b{Tools > Options > Build & Run > Kits}.
+ \li Select one of the predefined kits starting with \e{Boot to Qt...}
+ that matches the type of your device.
+ \li Select the correct device in the \b{Device} field.
+ \li Select \b{OK}.
+ \endlist
+//! [steps for device kit]
+//! [configuring device kit]
+
+//! [android steps for dev kit]
+ \list 1
+ \li Select \b{Tools > Options > Build & Run > Kits}.
+ \li Select the kit with the correct Android version
+ (for example, \e {generic-4.2}).
+ \li Select the correct device in the \b{Device} field.
+ \li Select \b{OK}.
+ \endlist
+
+ If you have more than one development device that use the same Android
+ version, clone the \e generic kit and rename it after the physical device:
+
+ \list 1
+ \li Select the generic Android kit and then \b Clone.
+ \li Select the correct device in the \b{Device} field.
+ \li Edit the name of the cloned kit and press \b OK.
+ \endlist
+//! [android steps for dev kit]
+
+//! [configuring network device]
+ After you have prepared the hardware, you must set up the development tools
+ in Qt Creator for your device. Connect your device to the network via an
+ Ethernet cable and launch Qt Creator. In Qt Creator:
+
+ \list 1
+ \li Select \b{Tools > Options > Devices > Add}.
+ \li Select \b{Boot2Qt Device} > \b{Start Wizard}.
+ \li Enter the device name and network address. You can check the device
+ address in the \e{Launcher Settings} when the device is running the
+ \B2Q demo.
+ \li Select \b{Finish}.
+ \endlist
+
+ You also have to configure the correct device to be used for each build and
+ run \e{kit}:
+
+ \include b2qt-post-install-setup.qdocinc steps for device kit
+
+//! [configuring network device]
+
+//! [configuring device kit android]
+ \include b2qt-post-install-setup.qdocinc common config device kit
+ \include b2qt-post-install-setup.qdocinc android steps for dev kit
+//! [configuring device kit android]
+
+//! [configuring device kit android linux]
+ \include b2qt-post-install-setup.qdocinc common config device kit
+ \list
+ \li \b{\B2QL}
+ \include b2qt-post-install-setup.qdocinc steps for device kit
+ \li \b{\B2QA}
+ \include b2qt-post-install-setup.qdocinc android steps for dev kit
+ \endlist
+//! [configuring device kit android linux]
+*/
diff --git a/src/doc/src/shared/detect-sd-card-device-name.qdocinc b/src/doc/src/shared/detect-sd-card-device-name.qdocinc
new file mode 100644
index 0000000..b74947d
--- /dev/null
+++ b/src/doc/src/shared/detect-sd-card-device-name.qdocinc
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+/*!
+//! [instructions]
+ Plug in the SD card or reader to the development host,
+ and use the following command to find out its device name:
+
+ \badcode
+ lsblk -d
+ \endcode
+
+ Removable devices such as SD cards have the value '1' in
+ the \e RM column.
+
+ \warning Make sure to select the correct device, because selecting
+ the wrong one can result in a wiped hard drive.
+
+ Typical device names for SD cards include \c {sdb} and
+ \c {mmcblk0}. The full device path is \c {/dev/} followed by
+ the name.
+//! [instructions]
+
+//! [unmount]
+ \badcode
+ umount /dev/<device_name>
+ \endcode
+//! [unmount]
+
+*/
diff --git a/src/doppelganger/doppelganger.pro b/src/doppelganger/doppelganger.pro
index fc337df..40c7650 100644
--- a/src/doppelganger/doppelganger.pro
+++ b/src/doppelganger/doppelganger.pro
@@ -3,16 +3,18 @@ QT -= core gui
TARGET = doppelganger
LIBS += -lutils -lbinder -lcutils \
- -L$${ANDROID_PRODUCT_OUT}/obj/STATIC_LIBRARIES/libscheduling_policy_intermediates -lscheduling_policy
+ -L$${ANDROID_PRODUCT_OUT}/obj/STATIC_LIBRARIES/libscheduling_policy_intermediates -lscheduling_policy -lpowermanager
TEMPLATE = app
SOURCES += main.cpp \
permissioncontroller.cpp \
- schedulingpolicyservice.cpp
+ schedulingpolicyservice.cpp \
+ powermanager.cpp
HEADERS += \
permissioncontroller.h \
- schedulingpolicyservice.h
+ schedulingpolicyservice.h \
+ powermanager.h
load(qt_tool)
diff --git a/src/doppelganger/main.cpp b/src/doppelganger/main.cpp
index e4a06c8..6d81991 100644
--- a/src/doppelganger/main.cpp
+++ b/src/doppelganger/main.cpp
@@ -20,6 +20,7 @@
#include "permissioncontroller.h"
#include "schedulingpolicyservice.h"
+#include "powermanager.h"
using namespace android;
@@ -28,5 +29,6 @@ int main(int, char *[])
sp<ProcessState> proc(ProcessState::self());
SchedulingPolicyService::instantiate();
PermissionController::instantiate();
+ PowerManager::instantiate();
IPCThreadState::self()->joinThreadPool();
}
diff --git a/src/doppelganger/powermanager.cpp b/src/doppelganger/powermanager.cpp
new file mode 100644
index 0000000..47ab02f
--- /dev/null
+++ b/src/doppelganger/powermanager.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+#include "powermanager.h"
+
+#include <binder/IServiceManager.h>
+
+using namespace android;
+
+enum {
+ ACQUIRE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION,
+ ACQUIRE_WAKE_LOCK_UID = IBinder::FIRST_CALL_TRANSACTION + 1,
+ RELEASE_WAKE_LOCK = IBinder::FIRST_CALL_TRANSACTION + 2,
+ UPDATE_WAKE_LOCK_UIDS = IBinder::FIRST_CALL_TRANSACTION + 3,
+};
+
+void PowerManager::instantiate()
+{
+ defaultServiceManager()->addService(String16("power"), new PowerManager());
+}
+
+status_t PowerManager::onTransact(uint32_t code,
+ const Parcel &,
+ Parcel *,
+ uint32_t)
+{
+ switch (code) {
+ case ACQUIRE_WAKE_LOCK:
+ case ACQUIRE_WAKE_LOCK_UID:
+ case RELEASE_WAKE_LOCK:
+ case UPDATE_WAKE_LOCK_UIDS:
+ return NO_ERROR;
+ default:
+ break;
+ }
+}
+
+#if Q_ANDROID_VERSION_MAJOR > 4 || (Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR >= 4)
+status_t PowerManager::acquireWakeLock(int,
+ const sp<IBinder> &,
+ const String16 &,
+ const String16 &)
+{
+ return OK;
+}
+
+status_t PowerManager::acquireWakeLockWithUid(int,
+ const sp<IBinder> &,
+ const String16 &,
+ const String16 &,
+ int)
+{
+ return OK;
+}
+
+status_t PowerManager::updateWakeLockUids(const sp<IBinder> &,
+ int,
+ const int *)
+{
+ return OK;
+}
+#else // < 4.4
+status_t PowerManager::acquireWakeLock(int, const sp<android::IBinder> &, const String16 &)
+{
+ return OK;
+}
+#endif
+
+status_t PowerManager::releaseWakeLock(const sp<IBinder> &, int)
+{
+ return OK;
+}
diff --git a/src/doppelganger/powermanager.h b/src/doppelganger/powermanager.h
new file mode 100644
index 0000000..f934b31
--- /dev/null
+++ b/src/doppelganger/powermanager.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+
+#ifndef POWERMANAGER_H
+#define POWERMANAGER_H
+
+#include <powermanager/IPowerManager.h>
+
+namespace android {
+
+typedef BnInterface<IPowerManager> BnPowerManagerService;
+
+} // namespace android
+
+class PowerManager : public android::BnPowerManagerService
+{
+public:
+ static void instantiate();
+ android::status_t onTransact(uint32_t code,
+ const android::Parcel &data,
+ android::Parcel *reply,
+ uint32_t flags);
+
+#if Q_ANDROID_VERSION_MAJOR > 4 || (Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR >= 4)
+ virtual android::status_t acquireWakeLock(int flags,
+ const android::sp<android::IBinder>& lock,
+ const android::String16& tag,
+ const android::String16& packageName);
+ virtual android::status_t acquireWakeLockWithUid(int flags,
+ const android::sp<android::IBinder>& lock,
+ const android::String16& tag,
+ const android::String16& packageName,
+ int uid);
+ virtual android::status_t updateWakeLockUids(const android::sp<android::IBinder>& lock,
+ int len,
+ const int *uids);
+#else // < 4.4
+ virtual android::status_t acquireWakeLock(int flags,
+ const android::sp<android::IBinder>& lock,
+ const android::String16& tag);
+#endif
+
+ virtual android::status_t releaseWakeLock(const android::sp<android::IBinder>& lock, int flags);
+};
+
+#endif // POWERMANAGER_H
diff --git a/src/imports/imports.pro b/src/imports/imports.pro
index 0a5ccf5..0b5a551 100644
--- a/src/imports/imports.pro
+++ b/src/imports/imports.pro
@@ -1,3 +1,2 @@
TEMPLATE = subdirs
-SUBDIRS = utils
-android:SUBDIRS += wifi
+SUBDIRS += utils wifi
diff --git a/src/imports/wifi/pluginmain.cpp b/src/imports/wifi/pluginmain.cpp
index fdf07e9..51a2e7c 100644
--- a/src/imports/wifi/pluginmain.cpp
+++ b/src/imports/wifi/pluginmain.cpp
@@ -19,12 +19,14 @@
#include "qwifimanager.h"
#include <QtCore/QDir>
+#include <QtCore/QDebug>
#include <QtCore/QByteArray>
#include <QtQml/QQmlExtensionPlugin>
#include <QtQml/qqml.h>
+#ifdef Q_OS_ANDROID
#include <hardware_legacy/wifi.h>
-
+#endif
/*!
\qmltype Interface
\inqmlmodule Qt.labs.wifi
@@ -64,20 +66,19 @@ public:
Q_INVOKABLE bool wifiSupported() const
{
- bool supported = false;
- if (wifi_load_driver() == 0 && wifi_start_supplicant(0) == 0) {
- char interface[PROPERTY_VALUE_MAX];
- property_get("wifi.interface", interface, NULL);
- // standard linux kernel path
- QByteArray path;
- path.append("/sys/class/net/").append(interface);
- supported = QDir().exists(path.constData());
- if (!supported)
- qWarning() << "QWifiGlobal: could not find wifi interface in " << path;
+ bool hasInterface = QDir().exists(QStringLiteral("/sys/class/net/wlan0"));
+ if (!hasInterface)
+ qWarning() << "QWifiGlobal: could not find wifi interface in /sys/class/net/";
+#ifdef Q_OS_ANDROID
+ if (hasInterface && wifi_load_driver() == 0 && wifi_start_supplicant(0) == 0) {
+ return true;
} else {
qWarning() << "QWifiGlobal: wifi driver is not available";
+ return false;
}
- return supported;
+#else
+ return hasInterface;
+#endif
}
};
diff --git a/src/imports/wifi/plugins.qmltypes b/src/imports/wifi/plugins.qmltypes
new file mode 100644
index 0000000..6667fcb
--- /dev/null
+++ b/src/imports/wifi/plugins.qmltypes
@@ -0,0 +1,60 @@
+import QtQuick.tooling 1.1
+
+// This file describes the plugin-supplied types contained in the library.
+// It is used for QML tooling purposes only.
+//
+// This file was auto-generated by:
+// 'qmlplugindump -nonrelocatable Qt.labs.wifi 0.1 /system/qml/Qt/labs/wifi/'
+
+Module {
+ Component {
+ name: "QWifiGlobal"
+ prototype: "QObject"
+ exports: ["Qt.labs.wifi/Interface 0.1"]
+ exportMetaObjectRevisions: [0]
+ Method { name: "wifiSupported"; type: "bool" }
+ }
+ Component {
+ name: "QWifiManager"
+ prototype: "QObject"
+ exports: ["Qt.labs.wifi/WifiManager 0.1"]
+ exportMetaObjectRevisions: [0]
+ Enum {
+ name: "NetworkState"
+ values: {
+ "Disconnected": 0,
+ "Authenticating": 1,
+ "HandshakeFailed": 2,
+ "ObtainingIPAddress": 3,
+ "DhcpRequestFailed": 4,
+ "Connected": 5
+ }
+ }
+ Property { name: "networkState"; type: "NetworkState"; isReadonly: true }
+ Property { name: "backendReady"; type: "bool"; isReadonly: true }
+ Property { name: "scanning"; type: "bool" }
+ Property { name: "connectedSSID"; type: "string"; isReadonly: true }
+ Property { name: "networks"; type: "QWifiNetworkListModel"; isReadonly: true; isPointer: true }
+ Signal {
+ name: "scanningChanged"
+ Parameter { name: "scanning"; type: "bool" }
+ }
+ Signal {
+ name: "networkStateChanged"
+ Parameter { name: "network"; type: "QWifiNetwork"; isPointer: true }
+ }
+ Signal {
+ name: "connectedSSIDChanged"
+ Parameter { name: "ssid"; type: "string" }
+ }
+ Method { name: "start" }
+ Method { name: "stop" }
+ Method {
+ name: "connect"
+ Parameter { name: "network"; type: "QWifiNetwork"; isPointer: true }
+ Parameter { name: "passphrase"; type: "string" }
+ }
+ Method { name: "disconnect" }
+ }
+ Component { name: "QWifiNetworkListModel"; prototype: "QAbstractListModel" }
+}
diff --git a/src/imports/wifi/qmldir b/src/imports/wifi/qmldir
index 4c36784..d4f65d9 100644
--- a/src/imports/wifi/qmldir
+++ b/src/imports/wifi/qmldir
@@ -1,2 +1,3 @@
module Qt.labs.wifi
plugin qwifimodule
+typeinfo plugins.qmltypes
diff --git a/src/imports/wifi/qwifi_elinux.cpp b/src/imports/wifi/qwifi_elinux.cpp
new file mode 100644
index 0000000..551d887
--- /dev/null
+++ b/src/imports/wifi/qwifi_elinux.cpp
@@ -0,0 +1,264 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+#include "qwifi_elinux.h"
+
+#include <QtCore/QDebug>
+
+#include "wpa-supplicant/wpa_ctrl.h"
+
+#include <poll.h>
+#include <unistd.h>
+#include <sys/socket.h>
+
+static const char SUPP_CONFIG_FILE[] = "/etc/wpa_supplicant.conf";
+static const char IFACE_DIR[] = "/var/run/wpa_supplicant/";
+static const char WIFI[] = "wlan0";
+
+static struct wpa_ctrl *ctrl_conn;
+static struct wpa_ctrl *monitor_conn;
+// socket pair used to exit from a blocking read
+static int exit_sockets[2];
+
+static const char IFNAME[] = "IFNAME=";
+#define IFNAMELEN (sizeof(IFNAME) - 1)
+static const char WPA_EVENT_IGNORE[] = "CTRL-EVENT-IGNORE ";
+
+int wifi_connect_on_socket_path(const char *path);
+int wifi_ctrl_recv(char *reply, size_t *reply_len);
+int wifi_wait_on_socket(char *buf, size_t buflen);
+int wifi_send_command(const char *cmd, char *reply, size_t *reply_len);
+void wifi_close_sockets();
+
+int q_wifi_start_supplicant()
+{
+ // NOTE: supplicant started when bringing up the wifi interface in
+ // QWifiManager::connectToBackend() by:
+ // QProcess::execute(QStringLiteral("ifup")
+
+ /* Clear out any stale socket files that might be left over. */
+ //wpa_ctrl_cleanup();
+ /* Reset sockets used for exiting from hung state */
+ exit_sockets[0] = exit_sockets[1] = -1;
+ return 0;
+}
+
+int q_wifi_stop_supplicant()
+{
+ // NOTE: supplicant stopped when bringing down the wifi
+ // interface in QWifiManager::disconnectFromBackend() by:
+ // QProcess::execute(QStringLiteral("ifdown")
+ return 0;
+}
+
+int q_wifi_connect_to_supplicant(const char *ifname)
+{
+ Q_UNUSED(ifname);
+ static char path[4096];
+ snprintf(path, sizeof(path), "%s/%s", IFACE_DIR, WIFI);
+ return wifi_connect_on_socket_path(path);
+}
+
+int wifi_connect_on_socket_path(const char *path)
+{
+ // establishes the control and monitor socket connections on the interface
+ ctrl_conn = wpa_ctrl_open(path);
+ if (ctrl_conn == NULL) {
+ qWarning("Unable to open connection to supplicant on \"%s\": %s",
+ path, strerror(errno));
+ return -1;
+ }
+ monitor_conn = wpa_ctrl_open(path);
+ if (monitor_conn == NULL) {
+ wpa_ctrl_close(ctrl_conn);
+ ctrl_conn = NULL;
+ return -1;
+ }
+ if (wpa_ctrl_attach(monitor_conn) != 0) {
+ wpa_ctrl_close(monitor_conn);
+ wpa_ctrl_close(ctrl_conn);
+ ctrl_conn = monitor_conn = NULL;
+ return -1;
+ }
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, exit_sockets) == -1) {
+ wpa_ctrl_close(monitor_conn);
+ wpa_ctrl_close(ctrl_conn);
+ ctrl_conn = monitor_conn = NULL;
+ return -1;
+ }
+
+ return 0;
+}
+
+int q_wifi_wait_for_event(const char *ifname, char *buf, size_t buflen)
+{
+ Q_UNUSED(ifname);
+ return wifi_wait_on_socket(buf, buflen);
+}
+
+int wifi_wait_on_socket(char *buf, size_t buflen)
+{
+ size_t nread = buflen - 1;
+ int result;
+ char *match, *match2;
+
+ if (monitor_conn == NULL) {
+ return snprintf(buf, buflen, WPA_EVENT_TERMINATING " - connection closed");
+ }
+
+ result = wifi_ctrl_recv(buf, &nread);
+
+ /* Terminate reception on exit socket */
+ if (result == -2) {
+ return snprintf(buf, buflen, WPA_EVENT_TERMINATING " - connection closed");
+ }
+
+ if (result < 0) {
+ qWarning("wifi_ctrl_recv failed: %s\n", strerror(errno));
+ return snprintf(buf, buflen, WPA_EVENT_TERMINATING " - recv error");
+ }
+ buf[nread] = '\0';
+ /* Check for EOF on the socket */
+ if (result == 0 && nread == 0) {
+ /* Fabricate an event to pass up */
+ qWarning("Received EOF on supplicant socket\n");
+ return snprintf(buf, buflen, WPA_EVENT_TERMINATING " - signal 0 received");
+ }
+ /*
+ * Events strings are in the format
+ *
+ * IFNAME=iface <N>CTRL-EVENT-XXX
+ * or
+ * <N>CTRL-EVENT-XXX
+ *
+ * where N is the message level in numerical form (0=VERBOSE, 1=DEBUG,
+ * etc.) and XXX is the event name. The level information is not useful
+ * to us, so strip it off.
+ */
+
+ if (strncmp(buf, IFNAME, IFNAMELEN) == 0) {
+ match = strchr(buf, ' ');
+ if (match != NULL) {
+ if (match[1] == '<') {
+ match2 = strchr(match + 2, '>');
+ if (match2 != NULL) {
+ nread -= (match2 - match);
+ memmove(match + 1, match2 + 1, nread - (match - buf) + 1);
+ }
+ }
+ } else {
+ return snprintf(buf, buflen, "%s", WPA_EVENT_IGNORE);
+ }
+ } else if (buf[0] == '<') {
+ match = strchr(buf, '>');
+ if (match != NULL) {
+ nread -= (match + 1 - buf);
+ memmove(buf, match + 1, nread + 1);
+ //qWarning("supplicant generated event without interface - %s\n", buf);
+ }
+ } else {
+ /* let the event go as is! */
+ qWarning("supplicant generated event without interface and without message level - %s\n", buf);
+ }
+
+ return nread;
+}
+
+int wifi_ctrl_recv(char *reply, size_t *reply_len)
+{
+ int res = 0;
+ int ctrlfd = wpa_ctrl_get_fd(monitor_conn);
+ struct pollfd rfds[2];
+
+ memset(rfds, 0, 2 * sizeof(struct pollfd));
+ rfds[0].fd = ctrlfd;
+ rfds[0].events |= POLLIN;
+ rfds[1].fd = exit_sockets[1];
+ rfds[1].events |= POLLIN;
+ res = TEMP_FAILURE_RETRY(poll(rfds, 2, -1));
+ if (res < 0) {
+ qWarning("Error poll = %d", res);
+ return res;
+ }
+ if (rfds[0].revents & POLLIN) {
+ return wpa_ctrl_recv(monitor_conn, reply, reply_len);
+ }
+
+ /* it is not rfds[0], then it must be rfts[1] (i.e. the exit socket)
+ * or we timed out. In either case, this call has failed ..
+ */
+ return -2;
+}
+
+int wifi_send_command(const char *cmd, char *reply, size_t *reply_len)
+{
+ int ret;
+ if (ctrl_conn == NULL) {
+ qWarning("Not connected to wpa_supplicant - \"%s\" command dropped.\n", cmd);
+ return -1;
+ }
+ ret = wpa_ctrl_request(ctrl_conn, cmd, strlen(cmd), reply, reply_len, NULL);
+ if (ret == -2) {
+ qWarning("'%s' command timed out.\n", cmd);
+ /* unblocks the monitor receive socket for termination */
+ TEMP_FAILURE_RETRY(write(exit_sockets[0], "T", 1));
+ return -2;
+ } else if (ret < 0 || strncmp(reply, "FAIL", 4) == 0) {
+ return -1;
+ }
+ if (strncmp(cmd, "PING", 4) == 0) {
+ reply[*reply_len] = '\0';
+ }
+ return 0;
+}
+
+int q_wifi_command(const char *ifname, const char *command, char *reply, size_t *reply_len)
+{
+ Q_UNUSED(ifname);
+ return wifi_send_command(command, reply, reply_len);
+}
+
+void q_wifi_close_supplicant_connection(const char *ifname)
+{
+ Q_UNUSED(ifname)
+ wifi_close_sockets();
+}
+
+void wifi_close_sockets()
+{
+ if (ctrl_conn != NULL) {
+ wpa_ctrl_close(ctrl_conn);
+ ctrl_conn = NULL;
+ }
+
+ if (monitor_conn != NULL) {
+ wpa_ctrl_close(monitor_conn);
+ monitor_conn = NULL;
+ }
+
+ if (exit_sockets[0] >= 0) {
+ close(exit_sockets[0]);
+ exit_sockets[0] = -1;
+ }
+
+ if (exit_sockets[1] >= 0) {
+ close(exit_sockets[1]);
+ exit_sockets[1] = -1;
+ }
+}
diff --git a/src/imports/wifi/qwifi_elinux.h b/src/imports/wifi/qwifi_elinux.h
new file mode 100644
index 0000000..92a04f8
--- /dev/null
+++ b/src/imports/wifi/qwifi_elinux.h
@@ -0,0 +1,34 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use the contact form at
+** http://qt.digia.com/
+**
+** This file is part of Qt Enterprise Embedded.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** the contact form at http://qt.digia.com/
+**
+****************************************************************************/
+#ifndef LOCAL_WIFI_H
+#define LOCAL_WIFI_H
+
+#include <string.h>
+
+// This API mirrors Android's Wi-Fi libraries interface [1] and implementation, excluding Android OS specific parts.
+// [1] http://androidxref.com/4.4.2_r2/xref/hardware/libhardware_legacy/include/hardware_legacy/wifi.h
+
+int q_wifi_command(const char *ifname, const char *command, char *reply, size_t *reply_len);
+int q_wifi_wait_for_event(const char *ifname, char *buf, size_t buflen);
+int q_wifi_connect_to_supplicant(const char *ifname);
+void q_wifi_close_supplicant_connection(const char *ifname);
+int q_wifi_start_supplicant();
+int q_wifi_stop_supplicant();
+
+#endif // LOCAL_WIFI_H
diff --git a/src/imports/wifi/qwifimanager.cpp b/src/imports/wifi/qwifimanager.cpp
index 7615f70..8eec3e0 100644
--- a/src/imports/wifi/qwifimanager.cpp
+++ b/src/imports/wifi/qwifimanager.cpp
@@ -19,10 +19,13 @@
#include "qwifimanager.h"
#include <QtCore>
-
+#ifdef Q_OS_ANDROID
#include <hardware_legacy/wifi.h>
#include <cutils/sockets.h>
#include <unistd.h>
+#else
+#include <qwifi_elinux.h>
+#endif
static const char SUPPLICANT_SVC[] = "init.svc.wpa_supplicant";
static const char WIFI_INTERFACE[] = "wifi.interface";
@@ -34,6 +37,7 @@ const QEvent::Type WIFI_SCAN_RESULTS = (QEvent::Type) (QEvent::User + 2001);
const QEvent::Type WIFI_CONNECTED = (QEvent::Type) (QEvent::User + 2002);
const QEvent::Type WIFI_HANDSHAKE_FAILED = (QEvent::Type) (QEvent::User + 2003);
+#ifdef Q_OS_ANDROID
/*
* Work around API differences between Android versions
*/
@@ -125,6 +129,7 @@ static int wait_for_property(const char *name, const char *desired_value, int ma
}
return -1; /* failure */
}
+#endif
class QWifiManagerEvent : public QEvent
{
@@ -410,17 +415,25 @@ QWifiManager::QWifiManager()
, m_eventThread(0)
, m_scanTimer(0)
, m_scanning(false)
+#ifdef Q_OS_ANDROID
, m_daemonClientSocket(0)
+#endif
, m_exitingEventThread(false)
, m_startingUp(true)
, m_network(0)
{
+#ifdef Q_OS_ANDROID
char interface[PROPERTY_VALUE_MAX];
property_get(WIFI_INTERFACE, interface, NULL);
m_interface = interface;
- if (QT_WIFI_DEBUG) qDebug("QWifiManager: using wifi interface: %s", m_interface.constData());
+#else
+ m_interface = "wlan0"; // use envvar for the interface name?
+ m_dhcpRunner = new ProcessRunner(m_interface);
+ QObject::connect(m_dhcpRunner, &ProcessRunner::processFinished, this, &QWifiManager::handleDhcpFinished);
+#endif
+ qDebug("QWifiManager: using wifi interface: %s", m_interface.constData());
m_eventThread = new QWifiManagerEventThread(this, m_interface);
-
+#ifdef Q_OS_ANDROID
m_daemonClientSocket = new QLocalSocket;
int qconnFd = socket_local_client("qconnectivity", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
if (qconnFd != -1) {
@@ -443,16 +456,25 @@ QWifiManager::QWifiManager()
// same here, cleans up the state
disconnectFromBackend();
}
+ } else {
+#endif
+ m_backendReady = false;
+ emit backendReadyChanged();
+#ifdef Q_OS_ANDROID
}
+#endif
}
QWifiManager::~QWifiManager()
{
exitEventThread();
delete m_eventThread;
+#ifdef Q_OS_ANDROID
delete m_daemonClientSocket;
+#endif
}
+#ifdef Q_OS_ANDROID
void QWifiManager::handleDhcpReply()
{
if (m_daemonClientSocket->canReadLine()) {
@@ -487,6 +509,14 @@ void QWifiManager::connectedToDaemon()
m_daemonClientSocket->write(m_request.constData(), m_request.length());
m_daemonClientSocket->flush();
}
+#endif
+
+void QWifiManager::handleDhcpFinished()
+{
+ // ### TODO - could be that dhcp request fails, how to determine?
+ updateNetworkState(Connected);
+ call("SAVE_CONFIG");
+}
void QWifiManager::start()
{
@@ -506,22 +536,31 @@ void QWifiManager::stop()
void QWifiManager::connectToBackend()
{
+ // ### TODO: maybe it makes sense to move this functions in non-gui thread
+#ifdef Q_OS_ANDROID
if (!(is_wifi_driver_loaded() || wifi_load_driver() == 0)) {
qWarning("QWifiManager: failed to load a driver");
return;
}
+#else
+ QProcess::execute(QStringLiteral("ifup"), QStringList() << m_interface.constData());
+#endif
if (q_wifi_start_supplicant() != 0) {
qWarning("QWifiManager: failed to start a supplicant");
return;
}
+#ifdef Q_OS_ANDROID
if (wait_for_property(SUPPLICANT_SVC, "running", 5) < 0) {
qWarning("QWifiManager: Timed out waiting for supplicant to start");
return;
}
+#endif
if (q_wifi_connect_to_supplicant(m_interface.constData()) == 0) {
m_backendReady = true;
emit backendReadyChanged();
+#ifdef Q_OS_ANDROID
property_set(QT_WIFI_BACKEND, "running");
+#endif
} else {
qWarning("QWifiManager: failed to connect to a supplicant");
return;
@@ -538,7 +577,12 @@ void QWifiManager::disconnectFromBackend()
if (q_wifi_stop_supplicant() < 0)
qWarning("QWifiManager: failed to stop supplicant");
q_wifi_close_supplicant_connection(m_interface.constData());
+ setScanning(false);
+#ifdef Q_OS_ANDROID
property_set(QT_WIFI_BACKEND, "stopped");
+#else
+ QProcess::execute(QStringLiteral("ifdown"), QStringList() << m_interface.constData());
+#endif
m_backendReady = false;
emit backendReadyChanged();
}
@@ -574,14 +618,21 @@ QByteArray QWifiManager::call(const char *command) const
{
char data[2048];
size_t len = sizeof(data) - 1; // -1: room to add a 0-terminator
- if (q_wifi_command(m_interface.constData(), command, data, &len) < 0) {
- qWarning("QWifiManager: call failed: %s", command);
+ QByteArray cmd;
+#ifdef Q_OS_ANDROID
+#if !(Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 4)
+ cmd.append("IFNAME=").append(m_interface).append(" ");
+#endif
+#endif
+ cmd.append(command);
+ if (q_wifi_command(m_interface.constData(), cmd.constData(), data, &len) < 0) {
+ qWarning("QWifiManager: call failed: %s", cmd.constData());
return QByteArray();
}
if (len < sizeof(data))
data[len] = 0;
QByteArray result = QByteArray::fromRawData(data, len);
- if (QT_WIFI_DEBUG) qDebug("QWifiManager::call: %s ==>\n%s", command, result.constData());
+ if (QT_WIFI_DEBUG) qDebug("QWifiManager::call: %s ==>\n%s", cmd.constData(), result.constData());
return result;
}
@@ -633,7 +684,6 @@ void QWifiManager::connect(QWifiNetwork *network, const QString &passphrase)
return;
}
updateNetworkState(Authenticating);
-
call("DISABLE_NETWORK all");
if (!m_connectedSSID.isEmpty()) {
m_connectedSSID.clear();
@@ -695,13 +745,35 @@ void QWifiManager::connect(QWifiNetwork *network, const QString &passphrase)
void QWifiManager::disconnect()
{
call("DISCONNECT");
+#ifdef Q_OS_ANDROID
QByteArray req = m_interface;
sendDhcpRequest(req.append(" disconnect"));
+#endif
m_connectedSSID.clear();
updateNetworkState(Disconnected);
emit connectedSSIDChanged(m_connectedSSID);
}
+void ProcessRunner::run()
+{
+ // kill existing udhcpc instance
+ QString filePath = QString("/var/run/udhcpc.").append(m_ifc).append(".pid");
+ QFile pidFile(filePath);
+ if (pidFile.open(QIODevice::ReadOnly)) {
+ QByteArray pid = pidFile.readAll();
+ pidFile.close();
+ QProcess::execute(QStringLiteral("kill"), QStringList() << pid.trimmed().constData());
+ } else {
+ qWarning() << "QWifiManager - Failed to read" << filePath;
+ }
+ QStringList args;
+ args << QStringLiteral("-R") << QStringLiteral("-n") << QStringLiteral("-p")
+ << filePath << QStringLiteral("-i") << m_ifc;
+ // start DHCP client
+ QProcess::execute(QStringLiteral("udhcpc"), args);
+ emit processFinished();
+}
+
void QWifiManager::handleConnected()
{
QList<QByteArray> lists = call("LIST_NETWORKS").split('\n');
@@ -732,6 +804,10 @@ void QWifiManager::handleConnected()
}
updateNetworkState(ObtainingIPAddress);
+#ifdef Q_OS_ANDROID
QByteArray req = m_interface;
sendDhcpRequest(req.append(" connect"));
+#else
+ m_dhcpRunner->start();
+#endif
}
diff --git a/src/imports/wifi/qwifimanager.h b/src/imports/wifi/qwifimanager.h
index 162190e..3af123f 100644
--- a/src/imports/wifi/qwifimanager.h
+++ b/src/imports/wifi/qwifimanager.h
@@ -20,15 +20,32 @@
#define QWIFIMANAGER_H
#include <QtCore/QObject>
+#include <QtCore/QThread>
#include <QtCore/QByteArray>
-#include <QtNetwork/QLocalSocket>
+#ifdef Q_OS_ANDROID
+#include <QtNetwork/QLocalSocket>
#include <cutils/properties.h>
+#endif
#include "qwifinetworklistmodel.h"
class QWifiManagerEventThread;
+class ProcessRunner : public QThread
+{
+ Q_OBJECT
+public:
+ ProcessRunner(const QByteArray &ifc) : m_ifc(ifc) {}
+ void run();
+
+signals:
+ void processFinished();
+
+private:
+ QByteArray m_ifc;
+};
+
class QWifiManager : public QObject
{
Q_OBJECT
@@ -74,21 +91,26 @@ signals:
protected:
bool event(QEvent *);
- void sendDhcpRequest(const QByteArray &request);
void handleConnected();
void connectToBackend();
void disconnectFromBackend();
void exitEventThread();
+
QByteArray call(const char *command) const;
bool checkedCall(const char *command) const;
void updateNetworkState(NetworkState state);
protected slots:
+#if defined(FORCE_MOC)
+ void sendDhcpRequest(const QByteArray &request);
void connectedToDaemon();
void handleDhcpReply();
+#endif
+ void handleDhcpFinished();
private:
friend class QWifiManagerEventThread;
+ friend class ProcessRunner;
QString m_connectedSSID;
QWifiNetworkListModel m_networkListModel;
@@ -100,7 +122,11 @@ private:
QByteArray m_interface;
NetworkState m_state;
+#ifdef Q_OS_ANDROID
QLocalSocket *m_daemonClientSocket;
+#else
+ ProcessRunner *m_dhcpRunner;
+#endif
QByteArray m_request;
bool m_exitingEventThread;
bool m_startingUp;
diff --git a/src/imports/wifi/qwifinetworklistmodel.cpp b/src/imports/wifi/qwifinetworklistmodel.cpp
index 4fbf25f..f95af36 100644
--- a/src/imports/wifi/qwifinetworklistmodel.cpp
+++ b/src/imports/wifi/qwifinetworklistmodel.cpp
@@ -88,14 +88,15 @@ void QWifiNetworkListModel::parseScanResults(const QByteArray &results)
QWifiNetwork *knownNetwork = networkForSSID(info.at(4), &pos);
if (!knownNetwork)
knownNetwork = outOfRangeListContains(info.at(4));
-
+ // signal strength is in dBm. Deprecated, but still widely used "wext"
+ // wifi driver reports positive values for signal strength, we workaround that.
+ int signalStrength = qAbs(info.at(2).trimmed().toInt()) * -1;
if (!knownNetwork) {
QWifiNetwork *network = new QWifiNetwork();
network->setOutOfRange(false);
network->setBssid(info.at(0));
network->setFlags(info.at(3));
- // signal strength is in dBm
- network->setSignalStrength(info.at(2).toInt());
+ network->setSignalStrength(signalStrength);
network->setSsid(info.at(4));
beginInsertRows(QModelIndex(), m_networks.size(), m_networks.size());
m_networks << network;
@@ -112,15 +113,15 @@ void QWifiNetworkListModel::parseScanResults(const QByteArray &results)
// ssids are the same, compare bssids..
if (knownNetwork->bssid() == info.at(0)) {
// same access point, simply update the signal strength
- knownNetwork->setSignalStrength(info.at(2).toInt());
+ knownNetwork->setSignalStrength(signalStrength);
knownNetwork->setOutOfRange(false);
dataChanged(createIndex(pos, 0), createIndex(pos, 0));
- } else if (knownNetwork->signalStrength() < info.at(2).toInt()) {
+ } else if (knownNetwork->signalStrength() < signalStrength) {
// replace with a stronger access point within the same network
m_networks.at(pos)->setOutOfRange(false);
m_networks.at(pos)->setBssid(info.at(0));
m_networks.at(pos)->setFlags(info.at(3));
- m_networks.at(pos)->setSignalStrength(info.at(2).toInt());
+ m_networks.at(pos)->setSignalStrength(signalStrength);
m_networks.at(pos)->setSsid(info.at(4));
dataChanged(createIndex(pos, 0), createIndex(pos, 0));
}
diff --git a/src/imports/wifi/wifi.pro b/src/imports/wifi/wifi.pro
index b920978..fcb6cdd 100644
--- a/src/imports/wifi/wifi.pro
+++ b/src/imports/wifi/wifi.pro
@@ -4,18 +4,29 @@ TARGET = qwifimodule
TARGETPATH = Qt/labs/wifi
IMPORT_VERSION = 0.1
+HEADERS += \
+ qwifimanager.h \
+ qwifinetwork.h \
+ qwifinetworklistmodel.h
+
SOURCES += \
pluginmain.cpp \
qwifimanager.cpp \
qwifinetwork.cpp \
qwifinetworklistmodel.cpp
-HEADERS += \
- qwifimanager.h \
- qwifinetwork.h \
- qwifinetworklistmodel.h
+android: {
+ LIBS += -lhardware_legacy -lcutils
+ DEFINES += FORCE_MOC
+} else {
+ DEFINES += CONFIG_CTRL_IFACE \
+ CONFIG_CTRL_IFACE_UNIX
-LIBS += -lhardware_legacy -lcutils
+ HEADERS += qwifi_elinux.h
+ SOURCES += \
+ qwifi_elinux.cpp \
+ $$[QT_SYSROOT]/usr/include/wpa-supplicant/wpa_ctrl.c \
+ $$[QT_SYSROOT]/usr/include/wpa-supplicant/os_unix.c
+}
load(qml_plugin)
-
diff --git a/src/qconnectivity/main.cpp b/src/qconnectivity/main.cpp
index 6f01021..97f9582 100644
--- a/src/qconnectivity/main.cpp
+++ b/src/qconnectivity/main.cpp
@@ -65,7 +65,8 @@ static int q_dhcp_do_request(bool renew,
char *dns2,
char *server,
uint32_t *lease,
- char *vendorInfo)
+ char *vendorInfo,
+ char *domain)
{
#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 3
if (!renew)
@@ -73,7 +74,6 @@ static int q_dhcp_do_request(bool renew,
return dhcp_do_request_renew(ifname, ipaddr, gateway, prefixLength, dns1, dns2, server, lease, vendorInfo);
#else
char *dns[3] = {dns1, dns2, 0};
- char domain[PROPERTY_VALUE_MAX];
char mtu[PROPERTY_VALUE_MAX];
#if Q_ANDROID_VERSION_MAJOR == 4 && Q_ANDROID_VERSION_MINOR < 4
if (!renew)
@@ -123,6 +123,11 @@ private:
LeaseTimer *m_leaseTimer;
bool m_isEmulator;
QByteArray m_ethInterface;
+ // android initializes services in a separate threads, therefore it is
+ // not guaranteed that the netd socket will be ready at the time when qconnectivity
+ // is starting up - we try to reconnect again after 2 second intervals. This
+ // variable holds the maximum attempt count (chosen arbitrarily).
+ int m_attemptCount;
};
class LeaseTimer : public QTimer
@@ -153,7 +158,12 @@ private:
};
QConnectivityDaemon::QConnectivityDaemon()
- : m_netdSocket(0), m_serverSocket(0), m_linkUp(false), m_leaseTimer(0), m_isEmulator(isEmulator())
+ : m_netdSocket(0),
+ m_serverSocket(0),
+ m_linkUp(false),
+ m_leaseTimer(0),
+ m_isEmulator(isEmulator()),
+ m_attemptCount(12)
{
qDebug() << "starting QConnectivityDaemon...";
if (!m_isEmulator) {
@@ -194,26 +204,34 @@ bool QConnectivityDaemon::isEmulator() const
void QConnectivityDaemon::initNetdConnection()
{
+ int netdFd = socket_local_client("netd", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
+ if (netdFd != -1) {
+ qDebug() << "QConnectivityDaemon: connected to netd socket";
+ m_netdSocket = new QLocalSocket(this);
+ m_netdSocket->setSocketDescriptor(netdFd);
+ connect(m_netdSocket, SIGNAL(readyRead()), this, SLOT(handleNetdEvent()));
+ connect(m_netdSocket, SIGNAL(error(QLocalSocket::LocalSocketError)),
+ this, SLOT(handleError(QLocalSocket::LocalSocketError)));
+ } else {
+ qWarning() << "QConnectivityDaemon: failed to connect to netd socket";
+ if (--m_attemptCount != 0)
+ QTimer::singleShot(2000, this, SLOT(initNetdConnection()));
+ return;
+ }
if (ethernetSupported()) {
- static int attemptCount = 12;
- int netdFd = socket_local_client("netd", ANDROID_SOCKET_NAMESPACE_RESERVED, SOCK_STREAM);
- if (netdFd != -1) {
- qDebug() << "QConnectivityDaemon: connected to netd socket";
- m_netdSocket = new QLocalSocket(this);
- m_netdSocket->setSocketDescriptor(netdFd);
- connect(m_netdSocket, SIGNAL(readyRead()), this, SLOT(handleNetdEvent()));
- connect(m_netdSocket, SIGNAL(error(QLocalSocket::LocalSocketError)),
- this, SLOT(handleError(QLocalSocket::LocalSocketError)));
- // down-up sequence generates "linkstate" events, which we can use to setup
- // our daemon on initial startup or on daemon restarts
- sendCommand(QByteArray("0 interface setcfg ").append(m_ethInterface).append(" down").constData());
- sendCommand(QByteArray("0 interface setcfg ").append(m_ethInterface).append(" up").constData());
- } else {
- qWarning() << "QConnectivityDaemon: failed to connect to netd socket";
- if (--attemptCount != 0)
- QTimer::singleShot(2000, this, SLOT(initNetdConnection()));
- }
+ // down-up sequence generates "linkstate" events, which we can use to setup
+ // our daemon on initial startup (device boot) or on daemon restarts
+ sendCommand(QByteArray("0 interface setcfg ").append(m_ethInterface).append(" down").constData());
+ sendCommand(QByteArray("0 interface setcfg ").append(m_ethInterface).append(" up").constData());
}
+ char wifiInterface[PROPERTY_VALUE_MAX];
+ property_get("wifi.interface", wifiInterface, NULL);
+ if (wifiInterface)
+ // reload wifi firmware
+ sendCommand(QByteArray("0 softap fwreload ").append(wifiInterface).append(" STA").constData());
+ // disable firewall - this setting seems to be enabled only when using "Always-on VPN"
+ // mode on Android phones, see setLockdownTracker() in ConnectivityService.java
+ sendCommand("0 firewall disable");
}
void QConnectivityDaemon::setHostnamePropery(const char *interface) const
@@ -240,6 +258,10 @@ void QConnectivityDaemon::setHostnamePropery(const char *interface) const
void QConnectivityDaemon::sendCommand(const char *command) const
{
+ if (!m_netdSocket) {
+ qDebug() << "QConnectivityDaemon: netd socket is not ready!";
+ return;
+ }
qDebug() << "QConnectivityDaemon: sending command - " << command;
// netd expects "\0" terminated commands...
m_netdSocket->write(command, qstrlen(command) + 1);
@@ -286,10 +308,11 @@ bool QConnectivityDaemon::startDhcp(bool renew, const char *interface)
char server[PROPERTY_VALUE_MAX];
quint32 lease = 0;
char vendorInfo[PROPERTY_VALUE_MAX];
+ char domain[PROPERTY_VALUE_MAX] = {0};
if (renew) {
result = q_dhcp_do_request(true, interface, ipaddr, gateway, &prefixLength,
- dns1, dns2, server, &lease, vendorInfo);
+ dns1, dns2, server, &lease, vendorInfo, domain);
} else {
// stop any existing DHCP daemon before starting new
dhcp_stop(interface);
@@ -298,7 +321,7 @@ bool QConnectivityDaemon::startDhcp(bool renew, const char *interface)
// we are responsible for renewing a lease before it expires
ifc_clear_addresses(interface);
result = q_dhcp_do_request(false, interface, ipaddr, gateway, &prefixLength,
- dns1, dns2, server, &lease, vendorInfo);
+ dns1, dns2, server, &lease, vendorInfo, domain);
}
bool success = (result == 0) ? true : false;
@@ -316,6 +339,16 @@ bool QConnectivityDaemon::startDhcp(bool renew, const char *interface)
ifc_configure(interface, _ipaddr.s_addr, prefixLength,
_gateway.s_addr, _dns1.s_addr, _dns2.s_addr);
+ // set DNS servers for interface - see NetworkManagementService.java
+ if (domain[0]) {
+ QByteArray dnsForInterface("0 resolver setifdns ");
+ dnsForInterface.append(interface).append(" ").append(domain).append(" ");
+ dnsForInterface.append(dns1).append(" ").append(dns2);
+ sendCommand(dnsForInterface.constData());
+ }
+ // set default interface for DNS - see NetworkManagementService.java
+ sendCommand(QByteArray("0 resolver setdefaultif ").append(interface).constData());
+
property_set("net.dns1", dns1);
property_set("net.dns2", dns2);
}
diff --git a/src/utils/qdroidutils.cpp b/src/utils/qdroidutils.cpp
index d880de9..379fc20 100644
--- a/src/utils/qdroidutils.cpp
+++ b/src/utils/qdroidutils.cpp
@@ -225,14 +225,20 @@ bool QDroidUtils::setDisplayBrightness(quint8 value)
*/
QString QDroidUtils::getIPAddress()
{
- QStringList addresses;
- QNetworkInterface interface = QNetworkInterface::interfaceFromName(QStringLiteral("eth0"));
- QList<QNetworkAddressEntry> entries;
- entries = interface.addressEntries();
- foreach (const QNetworkAddressEntry &entry, entries) {
- addresses.append(entry.ip().toString().split('%').first());
+ QList<QNetworkInterface> availableInterfaces = QNetworkInterface::allInterfaces();
+ if (availableInterfaces.length() > 0) {
+ foreach (const QNetworkInterface &interface, availableInterfaces) {
+ if (interface.flags() & QNetworkInterface::IsRunning
+ && (interface.flags() & QNetworkInterface::IsLoopBack) == 0) {
+ QList<QNetworkAddressEntry> entries = interface.addressEntries();
+ QStringList addresses;
+ foreach (const QNetworkAddressEntry &entry, entries)
+ addresses.append(entry.ip().toString().split('%').first());
+ return addresses.join(QStringLiteral(", "));
+ }
+ }
}
- return addresses.join(QStringLiteral(", "));
+ return QString();
}
/*!