diff --git a/.gitignore b/.gitignore index ed2767d3..3eb5db99 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ buildroot/output/ buildroot/dl/ +*.qm \ No newline at end of file diff --git a/BUILDME.sh b/BUILDME.sh index db3ef1ea..5f78eed0 100755 --- a/BUILDME.sh +++ b/BUILDME.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # Bash script to rebuild recovery @@ -11,11 +11,21 @@ if [ -e output/build ]; then rm -rf output/build/recovery* || true fi -# Redownload firmware from raspberrypi/firmware master HEAD to update to latest -if [ $1 = "update-firmware" ]; then - rm -rf output/build/rpi-firmware-master - rm -rf dl/rpi-firmware-master.tar.gz -fi +for i in $*; do + # Redownload firmware from raspberrypi/firmware master HEAD to update to latest + if [ $i = "update-firmware" ]; then + rm -rf output/build/rpi-firmware-master + rm -rf dl/rpi-firmware-master.tar.gz + echo "rpi-firmware Git HEAD @ "`git ls-remote --heads https://github.com/raspberrypi/firmware | sed -n 2p` > rpi-firmware-head & + fi + + # Redownload userland from raspberrypi/userland master HEAD to update to latest + if [ $i = "update-userland" ]; then + rm -rf output/build/rpi-userland-master + rm -rf dl/rpi-userland-master.tar.gz + echo "rpi-userland Git HEAD @ "`git ls-remote --heads https://github.com/raspberrypi/firmware | sed -n 2p` > rpi-userland-head & + fi +done # Let buildroot build everything make @@ -28,12 +38,13 @@ cp output/images/rootfs.cpio.lzo ../output/recovery.rfs cp output/images/rpi-firmware/start_cd.elf ../output/recovery.elf cp output/images/rpi-firmware/bootcode.bin ../output -# Add build-date timestamp to files$ - -rm ../output/BUILT* || true -touch ../output/"BUILT-"$(date +"%Y-%m-%d") +# Create build-date timestamp file containing Git HEAD info for build +rm -f ../output/BUILT* || true +echo "NOOBS Git HEAD @ "`git rev-parse --verify HEAD` > "../output/"BUILT-"$(date +"%Y-%m-%d")" +cat rpi-userland-head >> "../output/"BUILT-"$(date +"%Y-%m-%d")" +cat rpi-firmware-head >> "../output/"BUILT-"$(date +"%Y-%m-%d")" cd .. clear -echo Build complete. Copy files in \'output\' directory onto a clean FAT formatted SD card to use. +echo "Build complete. Copy files in 'output' directory onto a clean FAT formatted SD card to use." diff --git a/README.md b/README.md index 9ab51386..50ad44a6 100644 --- a/README.md +++ b/README.md @@ -96,11 +96,11 @@ To add a new translation: - Add to recovery/recovery.pro `TRANSLATIONS += translation_.ts` - Run `lupdate recovery.pro` which extracts strings from the source code and generates/updates the .ts files. - The .ts can then be send to the translator, opened in Qt Linguist and filled in. -- Turn the .ts XML file into a binary .qm file by running `lrelease translation_code.ts` -- The .qm file needs to be added to "icons.qrc". This file contains a list with resource files that will be embedded into the - application's executable during build. - -Can add a flag icon to the "icons" folder and add that flag to "icons.qrc" as well. +- Add a line for the .ts file in to "icons.qrc", but substitute .ts extension with .qm. This file contains a list + of resource files that will be embedded into the application's executable during build. +- Add a flag icon for your language from http://www.famfamfam.com/lab/icons/flags/ flag icon collection or if it + doesn't have the one you need, you may use some other small png icon for it. Copy the icon file to the "icons" + folder and add a line for it into "icons.qrc" as well. ### Legal compliance diff --git a/buildroot/.config b/buildroot/.config index ec7c0ef1..7dc7cb8b 100644 --- a/buildroot/.config +++ b/buildroot/.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Buildroot 2013.05-git-gafb231e-dirty Configuration +# Buildroot 2013.05-git-00063-gbf7d7fb-dirty Configuration # BR2_HAVE_DOT_CONFIG=y BR2_arm=y @@ -368,7 +368,7 @@ BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y # BR2_PACKAGE_DIRECTFB is not set # BR2_PACKAGE_FBDUMP is not set # BR2_PACKAGE_FBGRAB is not set -# BR2_PACKAGE_FBSET is not set +BR2_PACKAGE_FBSET=y # # fbterm requires a toolchain with C++, WCHAR and locale support diff --git a/buildroot/kernelconfig-recovery b/buildroot/kernelconfig-recovery index c6ea069a..0d0673e0 100644 --- a/buildroot/kernelconfig-recovery +++ b/buildroot/kernelconfig-recovery @@ -1,5 +1,5 @@ CONFIG_EXPERIMENTAL=y -CONFIG_LOCALVERSION="rescue" +CONFIG_LOCALVERSION="-rescue" # CONFIG_LOCALVERSION_AUTO is not set CONFIG_SYSVIPC=y CONFIG_POSIX_MQUEUE=y @@ -105,7 +105,9 @@ CONFIG_THERMAL_BCM2835=y CONFIG_FB=y CONFIG_FB_BCM2708=y CONFIG_FRAMEBUFFER_CONSOLE=y -CONFIG_LOGO=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +# CONFIG_LOGO is not set # CONFIG_LOGO_LINUX_MONO is not set # CONFIG_LOGO_LINUX_VGA16 is not set CONFIG_HIDRAW=y @@ -120,6 +122,11 @@ CONFIG_MMC_SDHCI_PLTFM=y CONFIG_MMC_SDHCI_BCM2708=y CONFIG_MMC_SDHCI_BCM2708_DMA=y CONFIG_LEDS_GPIO=y +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y +CONFIG_LEDS_GPIO=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y # CONFIG_IOMMU_SUPPORT is not set CONFIG_EXT4_FS=y CONFIG_FANOTIFY=y diff --git a/buildroot/package/arora/arora.mk b/buildroot/package/arora/arora.mk index fea793a5..64a09d20 100644 --- a/buildroot/package/arora/arora.mk +++ b/buildroot/package/arora/arora.mk @@ -6,6 +6,8 @@ ARORA_SITE=git://github.com/Arora/arora.git ARORA_VERSION=master +ARORA_LICENSE = GPLv2 +ARORA_LICENSE_FILES = LICENSE.GPL2 ARORA_INSTALL_STAGING=NO ARORA_DEPENDENCIES=qt diff --git a/buildroot/package/directfb-examples/directfb-examples.mk b/buildroot/package/directfb-examples/directfb-examples.mk index 14e544c3..bcd3c1c4 100644 --- a/buildroot/package/directfb-examples/directfb-examples.mk +++ b/buildroot/package/directfb-examples/directfb-examples.mk @@ -8,7 +8,7 @@ DIRECTFB_EXAMPLES_VERSION = 1.6.0 DIRECTFB_EXAMPLES_SITE = http://www.directfb.org/downloads/Extras DIRECTFB_EXAMPLES_SOURCE = DirectFB-examples-$(DIRECTFB_EXAMPLES_VERSION).tar.gz DIRECTFB_EXAMPLES_LICENSE = MIT -DIRECTFB_EXAMPLES_LICENSE_FILE = COPYING +DIRECTFB_EXAMPLES_LICENSE_FILES = COPYING DIRECTFB_EXAMPLES_INSTALL_STAGING = YES DIRECTFB_EXAMPLES_DEPENDENCIES = directfb diff --git a/buildroot/package/divine/divine.mk b/buildroot/package/divine/divine.mk index 596debff..adbef37a 100644 --- a/buildroot/package/divine/divine.mk +++ b/buildroot/package/divine/divine.mk @@ -8,7 +8,7 @@ DIVINE_VERSION = 83cafc257a42b9465cd9d6185bf66b8c1b7ed704 DIVINE_SITE = git://git.directfb.org/git/directfb/extras/DiVine.git DIVINE_LICENSE = LGPLv2.1+ -DIVINE_LICENSE_FILE = COPYING +DIVINE_LICENSE_FILES = COPYING DIVINE_INSTALL_STAGING = YES DIVINE_DEPENDENCIES = directfb DIVINE_CONFIG_SCRIPTS = divine-config diff --git a/buildroot/package/dosfstools/dosfstools.mk b/buildroot/package/dosfstools/dosfstools.mk index 79d1c7ac..8be2ed8a 100644 --- a/buildroot/package/dosfstools/dosfstools.mk +++ b/buildroot/package/dosfstools/dosfstools.mk @@ -5,7 +5,7 @@ ############################################################# DOSFSTOOLS_VERSION = 3.0.16 -DOSFSTOOLS_SITE = http://fossies.org/linux/misc +DOSFSTOOLS_SITE = http://daniel-baumann.ch/files/software/dosfstools DOSFSTOOLS_LICENSE = GPLv3+ DOSFSTOOLS_LICENSE_FILES = COPYING DOSFSTOOLS_LDFLAGS = $(TARGET_LDFLAGS) diff --git a/buildroot/package/fb-test-app/fb-test-app.mk b/buildroot/package/fb-test-app/fb-test-app.mk index 35e210bd..7f175127 100644 --- a/buildroot/package/fb-test-app/fb-test-app.mk +++ b/buildroot/package/fb-test-app/fb-test-app.mk @@ -7,7 +7,7 @@ FB_TEST_APP_VERSION = v1.0.0 FB_TEST_APP_SITE = http://github.com/prpplague/fb-test-app/tarball/$(FB_TEST_APP_VERSION) FB_TEST_APP_LICENSE = GPLv2 -FB_TEST_APP_LICENSE_FILE = COPYING +FB_TEST_APP_LICENSE_FILES = COPYING define FB_TEST_APP_BUILD_CMDS $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all diff --git a/buildroot/package/fxload/fxload.mk b/buildroot/package/fxload/fxload.mk index 1b5e8c74..8508084e 100644 --- a/buildroot/package/fxload/fxload.mk +++ b/buildroot/package/fxload/fxload.mk @@ -6,7 +6,7 @@ FXLOAD_VERSION = 2008_10_13 FXLOAD_SITE = http://downloads.sourceforge.net/project/linux-hotplug/fxload/$(FXLOAD_VERSION) FXLOAD_LICENSE = GPLv2+ -FXLOAD_LICENSE_FILE = COPYING +FXLOAD_LICENSE_FILES = COPYING define FXLOAD_BUILD_CMDS $(TARGET_MAKE_ENV) $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all diff --git a/buildroot/package/jsmin/jsmin.mk b/buildroot/package/jsmin/jsmin.mk index 0e82008b..bb65c6c6 100644 --- a/buildroot/package/jsmin/jsmin.mk +++ b/buildroot/package/jsmin/jsmin.mk @@ -1,5 +1,5 @@ JSMIN_VERSION = a9b4755 -JSMIN_SITE = http://github.com/douglascrockford/JSMin/tarball/master +JSMIN_SITE = http://github.com/douglascrockford/JSMin/tarball/$(JSMIN_VERSION) define JSMIN_BUILD_CMDS $(TARGET_CONFIGURE_OPTS) $(MAKE) -C $(@D) jsmin diff --git a/buildroot/package/libatasmart/libatasmart.mk b/buildroot/package/libatasmart/libatasmart.mk index 5dbdcc45..1d96ac7d 100644 --- a/buildroot/package/libatasmart/libatasmart.mk +++ b/buildroot/package/libatasmart/libatasmart.mk @@ -7,7 +7,7 @@ LIBATASMART_VERSION = 0.19 LIBATASMART_SOURCE = libatasmart-$(LIBATASMART_VERSION).tar.xz LIBATASMART_SITE = http://0pointer.de/public LIBATASMART_LICENSE = LGPLv2.1 -LIBATASMART_LICENSE_FILE = LGPL +LIBATASMART_LICENSE_FILES = LGPL LIBATASMART_INSTALL_STAGING = YES # package doesn't include configure script diff --git a/buildroot/package/libcofi/libcofi.mk b/buildroot/package/libcofi/libcofi.mk index e2ce7024..7c0bc069 100644 --- a/buildroot/package/libcofi/libcofi.mk +++ b/buildroot/package/libcofi/libcofi.mk @@ -5,7 +5,7 @@ ############################################################# LIBCOFI_VERSION = 7313fbe12b0593034d0a1b606bf33c7cf4ababce -LIBCOFI_SITE = http://github.com/simonjhall/copies-and-fills/tarball/master +LIBCOFI_SITE = http://github.com/simonjhall/copies-and-fills/tarball/$(LIBCOFI_VERSION) LIBCOFI_LICENSE = LGPLv2.1 LIBCOFI_LICENSE_FILES = README.md diff --git a/buildroot/package/libxmlpp/libxmlpp.mk b/buildroot/package/libxmlpp/libxmlpp.mk index 1ed60de7..41ae7f09 100644 --- a/buildroot/package/libxmlpp/libxmlpp.mk +++ b/buildroot/package/libxmlpp/libxmlpp.mk @@ -8,7 +8,7 @@ LIBXMLPP_VERSION_MAJOR = 2.34 LIBXMLPP_VERSION_MINOR = 2 LIBXMLPP_VERSION = $(LIBXMLPP_VERSION_MAJOR).$(LIBXMLPP_VERSION_MINOR) LIBXMLPP_LICENSE = LGPLv2.1 (library), LGPLv2+ (examples) -LIBXMLPP_LICENSE_FILE = COPYING +LIBXMLPP_LICENSE_FILES = COPYING LIBXMLPP_SOURCE = libxml++-$(LIBXMLPP_VERSION).tar.xz LIBXMLPP_SITE = http://ftp.gnome.org/pub/GNOME/sources/libxml++/$(LIBXMLPP_VERSION_MAJOR) LIBXMLPP_INSTALL_STAGING = YES diff --git a/buildroot/package/linenoise/linenoise.mk b/buildroot/package/linenoise/linenoise.mk index fb739602..799b40cc 100644 --- a/buildroot/package/linenoise/linenoise.mk +++ b/buildroot/package/linenoise/linenoise.mk @@ -3,8 +3,8 @@ # linenoise # ############################################################# -LINENOISE_VERSION = g27a3b4d -LINENOISE_SITE = http://github.com/antirez/linenoise/tarball/master +LINENOISE_VERSION = 27a3b4d5 +LINENOISE_SITE = http://github.com/antirez/linenoise/tarball/$(LINENOISE_VERSION) LINENOISE_LICENSE = BSD-2c LINENOISE_INSTALL_STAGING = YES diff --git a/buildroot/package/lua-msgpack-native/lua-msgpack-native.mk b/buildroot/package/lua-msgpack-native/lua-msgpack-native.mk index 97ce83ce..b2958396 100644 --- a/buildroot/package/lua-msgpack-native/lua-msgpack-native.mk +++ b/buildroot/package/lua-msgpack-native/lua-msgpack-native.mk @@ -3,8 +3,8 @@ # lua-msgpack-native # ############################################################# -LUA_MSGPACK_NATIVE_VERSION = g41cce91 -LUA_MSGPACK_NATIVE_SITE = http://github.com/kengonakajima/lua-msgpack-native/tarball/master +LUA_MSGPACK_NATIVE_VERSION = 41cce91 +LUA_MSGPACK_NATIVE_SITE = http://github.com/kengonakajima/lua-msgpack-native/tarball/$(LUA_MSGPACK_NATIVE_VERSION) LUA_MSGPACK_NATIVE_DEPENDENCIES = lua LUA_MSGPACK_NATIVE_LICENSE = Apache-2.0 LUA_MSGPACK_NATIVE_LICENSE_FILES = LICENSE.txt diff --git a/buildroot/package/mtdev2tuio/mtdev2tuio.mk b/buildroot/package/mtdev2tuio/mtdev2tuio.mk index 93069469..6b61e2a9 100644 --- a/buildroot/package/mtdev2tuio/mtdev2tuio.mk +++ b/buildroot/package/mtdev2tuio/mtdev2tuio.mk @@ -4,7 +4,7 @@ # ############################################################# MTDEV2TUIO_VERSION = e1e7378 -MTDEV2TUIO_SITE = http://github.com/olivopaolo/mtdev2tuio/tarball/master +MTDEV2TUIO_SITE = http://github.com/olivopaolo/mtdev2tuio/tarball/$(MTDEV2TUIO_VERSION) MTDEV2TUIO_DEPENDENCIES = mtdev liblo MTDEV2TUIO_LICENSE = GPLv3+ MTDEV2TUIO_LICENSE_FILES = COPYING diff --git a/buildroot/package/ne10/ne10.mk b/buildroot/package/ne10/ne10.mk index 64cd1a93..27cf1bca 100644 --- a/buildroot/package/ne10/ne10.mk +++ b/buildroot/package/ne10/ne10.mk @@ -7,7 +7,7 @@ # We use a Git commit ID because the last tagged version is more than # one year old. NE10_VERSION = 88c18f0 -NE10_SITE = http://github.com/projectNe10/Ne10/tarball/master +NE10_SITE = http://github.com/projectNe10/Ne10/tarball/$(NE10_VERSION) NE10_LICENSE = BSD-3c or Apache 2.0 NE10_LICENSE_FILES = doc/LICENSE diff --git a/buildroot/package/omap-u-boot-utils/omap-u-boot-utils.mk b/buildroot/package/omap-u-boot-utils/omap-u-boot-utils.mk index bb894a5f..fc7bb295 100644 --- a/buildroot/package/omap-u-boot-utils/omap-u-boot-utils.mk +++ b/buildroot/package/omap-u-boot-utils/omap-u-boot-utils.mk @@ -5,7 +5,7 @@ ############################################################# OMAP_U_BOOT_UTILS_VERSION = 8aff852 -OMAP_U_BOOT_UTILS_SITE = http://github.com/nmenon/omap-u-boot-utils/tarball/master +OMAP_U_BOOT_UTILS_SITE = http://github.com/nmenon/omap-u-boot-utils/tarball/$(OMAP_U_BOOT_UTILS_VERSION) define HOST_OMAP_U_BOOT_UTILS_BUILD_CMDS $(MAKE) -C $(@D) diff --git a/buildroot/package/patch/patch.mk b/buildroot/package/patch/patch.mk index badc4310..5a421c75 100644 --- a/buildroot/package/patch/patch.mk +++ b/buildroot/package/patch/patch.mk @@ -7,6 +7,6 @@ PATCH_VERSION = 2.7.1 PATCH_SITE = $(BR2_GNU_MIRROR)/patch PATCH_LICENSE = GPLv3+ -PATCH_LICENSE_FILE = COPYING +PATCH_LICENSE_FILES = COPYING $(eval $(autotools-package)) diff --git a/buildroot/package/qt/qt.mk b/buildroot/package/qt/qt.mk index bd3dd338..0e53238a 100644 --- a/buildroot/package/qt/qt.mk +++ b/buildroot/package/qt/qt.mk @@ -17,6 +17,13 @@ QT_SITE = http://releases.qt-project.org/qt4/source QT_DEPENDENCIES = host-pkgconf QT_INSTALL_STAGING = YES +QT_LICENSE = LGPLv2.1 with exceptions or GPLv3 +ifneq ($(BR2_PACKAGE_QT_LICENSE_APPROVED),y) +QT_LICENSE += or Digia Qt Commercial license +endif +QT_LICENSE_FILES = LICENSE.LGPL LGPL_EXCEPTION.txt LICENSE.GPL3 + + ifeq ($(BR2_PACKAGE_QT_LICENSE_APPROVED),y) QT_CONFIGURE_OPTS += -opensource -confirm-license endif diff --git a/buildroot/package/recovery/init b/buildroot/package/recovery/init index d4ba5c84..97ed73a6 100755 --- a/buildroot/package/recovery/init +++ b/buildroot/package/recovery/init @@ -5,7 +5,7 @@ # Standard busybox init /bin/mount -t proc proc /proc -/bin/mount -o remount,rw,noatime / +/bin/mount -o remount,rw,noatime / /bin/mount -t sysfs sysfs /sys /bin/mount -t devtmpfs dev /dev /bin/hostname -F /etc/hostname @@ -13,6 +13,9 @@ # Load kbd driver /sbin/modprobe usbkbd +# Set up ACT LED to be triggered by mmc0 +echo mmc0 > /sys/class/leds/led0/trigger + # Rescue shell available on tty2 and tty3 echo 2 >/sys/module/vt/parameters/cur_default /sbin/getty -L tty2 0 vt100 & @@ -20,20 +23,20 @@ echo 2 >/sys/module/vt/parameters/cur_default /sbin/getty -L ttyAMA0 115200 vt100 & if grep -q vncinstall /proc/cmdline; then - # VNC server mode. Mainly useful for making screenshots - export QWS_DISPLAY="VNC:size=800x600:depth=32:0" - ifup eth0 + # VNC server mode. Mainly useful for making screenshots + export QWS_DISPLAY="VNC:size=800x600:depth=32:0" + ifup eth0 fi # Setup dropbear SSH server if specified on cmdline if grep -q SSH /proc/cmdline; then - + ifup eth0 - + if [ ! -d /etc/dropbear ] ; then mkdir -p /etc/dropbear fi - + if [ ! -f /etc/dropbear/dropbear_rsa_host_key ] ; then echo -n "generating rsa key... " /usr/bin/dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key > /dev/null 2>&1 @@ -45,7 +48,7 @@ if grep -q SSH /proc/cmdline; then fi umask 077 - + start-stop-daemon -S -q -p /var/run/dropbear.pid --exec /usr/sbin/dropbear fi @@ -53,16 +56,24 @@ fi #export QWS_MOUSE_PROTO=:accel=1 if grep -q rescueshell /proc/cmdline; then - sh -elif grep -q runinstaller /proc/cmdline; then - /usr/bin/recovery -runinstaller -qws 2>/tmp/debug + sh else - /usr/bin/recovery -qws 2>/tmp/debug + RUN_INSTALLER= + DEFAULT_LANG= + if grep -q runinstaller /proc/cmdline; then + RUN_INSTALLER=-runinstaller + fi + for p in `cat /proc/cmdline` ; do + if [ "${p%%=*}" == "lang" ] ; then + DEFAULT_LANG="-lang ${p#*=}"; + break; + fi + done + /usr/bin/recovery $RUN_INSTALLER $DEFAULT_LANG -qws 2>/tmp/debug fi # Recovery should have rebooted -echo Recovery application crashed +echo Recovery application crashed echo Starting shell sh - diff --git a/buildroot/package/recovery/recovery.mk b/buildroot/package/recovery/recovery.mk index 70c53a96..4b7b0854 100644 --- a/buildroot/package/recovery/recovery.mk +++ b/buildroot/package/recovery/recovery.mk @@ -8,6 +8,8 @@ RECOVERY_VERSION=1.0 RECOVERY_SITE=$(TOPDIR)/../recovery RECOVERY_SITE_METHOD=local +RECOVERY_LICENSE = BSD-3c +RECOVERY_LICENSE_FILES = LICENSE.txt RECOVERY_INSTALL_STAGING = NO RECOVERY_DEPENDENCIES=qt dropbear diff --git a/buildroot/package/rpi-firmware/rpi-firmware.mk b/buildroot/package/rpi-firmware/rpi-firmware.mk index 0c549c9f..110d28c6 100644 --- a/buildroot/package/rpi-firmware/rpi-firmware.mk +++ b/buildroot/package/rpi-firmware/rpi-firmware.mk @@ -4,11 +4,10 @@ # ############################################################# -#RPI_FIRMWARE_VERSION = 76d0ac38f16b6343c6155c80db1e4758b3a5838a RPI_FIRMWARE_VERSION = master -RPI_FIRMWARE_SITE = http://github.com/raspberrypi/firmware/tarball/master +RPI_FIRMWARE_SITE = http://github.com/raspberrypi/firmware/tarball/$(RPI_FIRMWARE_VERSION) RPI_FIRMWARE_LICENSE = BSD-3c -RPI_FIRMWARE_LICENSE_FILE = boot/LICENCE.broadcom +RPI_FIRMWARE_LICENSE_FILES = boot/LICENCE.broadcom define RPI_FIRMWARE_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin $(BINARIES_DIR)/rpi-firmware/bootcode.bin diff --git a/buildroot/package/rpi-userland/rpi-userland.mk b/buildroot/package/rpi-userland/rpi-userland.mk index 7618aec5..00b59369 100644 --- a/buildroot/package/rpi-userland/rpi-userland.mk +++ b/buildroot/package/rpi-userland/rpi-userland.mk @@ -4,10 +4,10 @@ # ############################################################# -RPI_USERLAND_VERSION = 5e9a740a88a889dfc8a18bb1b00c17e5dd9d0108 -RPI_USERLAND_SITE = http://github.com/raspberrypi/userland/tarball/master +RPI_USERLAND_VERSION = master +RPI_USERLAND_SITE = http://github.com/raspberrypi/userland/tarball/$(RPI_USERLAND_VERSION) RPI_USERLAND_LICENSE = BSD-3c -RPI_USERLAND_LICENSE_FILE = LICENCE +RPI_USERLAND_LICENSE_FILES = LICENCE RPI_USERLAND_INSTALL_STAGING = YES RPI_USERLAND_CONF_OPT = -DVMCS_INSTALL_PREFIX=/usr diff --git a/buildroot/package/socketcand/socketcand.mk b/buildroot/package/socketcand/socketcand.mk index efade319..43dc4141 100644 --- a/buildroot/package/socketcand/socketcand.mk +++ b/buildroot/package/socketcand/socketcand.mk @@ -4,7 +4,7 @@ # ############################################################# SOCKETCAND_VERSION = 7d06986 -SOCKETCAND_SITE = http://github.com/dschanoeh/socketcand/tarball/master +SOCKETCAND_SITE = http://github.com/dschanoeh/socketcand/tarball/$(SOCKETCAND_VERSION) SOCKETCAND_AUTORECONF = YES SOCKETCAND_DEPENDENCIES = libconfig diff --git a/buildroot/package/tcl/tcl.mk b/buildroot/package/tcl/tcl.mk index ec089eed..144fefe0 100644 --- a/buildroot/package/tcl/tcl.mk +++ b/buildroot/package/tcl/tcl.mk @@ -9,7 +9,7 @@ TCL_VERSION = $(TCL_VERSION_MAJOR).$(TCL_VERSION_MINOR) TCL_SOURCE = tcl$(TCL_VERSION)-src.tar.gz TCL_SITE = http://downloads.sourceforge.net/project/tcl/Tcl/$(TCL_VERSION_MAJOR).$(TCL_VERSION_MINOR) TCL_LICENSE = tcl license -TCL_LICENSE_FILE = license.terms +TCL_LICENSE_FILES = license.terms TCL_SUBDIR = unix TCL_CONF_OPT = \ --disable-symbols \ diff --git a/buildroot/package/ti-utils/ti-utils.mk b/buildroot/package/ti-utils/ti-utils.mk index 956daf45..24af3b39 100644 --- a/buildroot/package/ti-utils/ti-utils.mk +++ b/buildroot/package/ti-utils/ti-utils.mk @@ -5,7 +5,7 @@ ############################################################# TI_UTILS_VERSION = 06dbdb2 -TI_UTILS_SITE = http://github.com/gxk/ti-utils/tarball/master +TI_UTILS_SITE = http://github.com/gxk/ti-utils/tarball/$(TI_UTILS_VERSION) TI_UTILS_DEPENDENCIES = libnl define TI_UTILS_BUILD_CMDS diff --git a/buildroot/package/tslib/tslib.mk b/buildroot/package/tslib/tslib.mk index 2c072723..b6321e41 100644 --- a/buildroot/package/tslib/tslib.mk +++ b/buildroot/package/tslib/tslib.mk @@ -4,7 +4,7 @@ # ############################################################# TSLIB_VERSION = 158ee49b32f83cb7b02d5315f41c2e4cff38942d -TSLIB_SITE = http://github.com/kergoth/tslib/tarball/master +TSLIB_SITE = http://github.com/kergoth/tslib/tarball/$(TSLIB_VERSION) TSLIB_LICENSE = GPL, LGPL TSLIB_LICENSE_FILES = COPYING diff --git a/buildroot/rpi-firmware-head b/buildroot/rpi-firmware-head new file mode 100644 index 00000000..31e245d0 --- /dev/null +++ b/buildroot/rpi-firmware-head @@ -0,0 +1 @@ +rpi-firmware Git HEAD @ a0c98fa6bc0f93bad8cbfcf749f7be7dc2276192 refs/heads/master diff --git a/buildroot/rpi-userland-head b/buildroot/rpi-userland-head new file mode 100644 index 00000000..f678e0de --- /dev/null +++ b/buildroot/rpi-userland-head @@ -0,0 +1 @@ +rpi-userland Git HEAD @ a0c98fa6bc0f93bad8cbfcf749f7be7dc2276192 refs/heads/master diff --git a/output b/output index dcedcf6a..5c16a82f 160000 --- a/output +++ b/output @@ -1 +1 @@ -Subproject commit dcedcf6a5f1fde98ad8e59692334fd74322ae477 +Subproject commit 5c16a82fe9478e9f4d7b92aa9797fd5bac802c43 diff --git a/recovery/config.h b/recovery/config.h index 34e4a5c1..1e404e30 100644 --- a/recovery/config.h +++ b/recovery/config.h @@ -1,6 +1,9 @@ #ifndef CONFIG_H #define CONFIG_H +/* Version number displayed in the title bar */ +#define VERSION_NUMBER "1.2" + /* Color of the background */ // #define BACKGROUND_COLOR Qt::white #define BACKGROUND_COLOR QColor(0xde, 0xde, 0xde) diff --git a/recovery/icons.qrc b/recovery/icons.qrc index 19726ebb..665df409 100644 --- a/recovery/icons.qrc +++ b/recovery/icons.qrc @@ -1,25 +1,28 @@ - icons/nl.png - icons/gb.png icons/raspberry_icon.png icons/backups.png icons/door_in.png - translation_nl.qm icons/page_white_edit.png icons/setting_tools.png icons/add.png icons/delete.png wallpaper.png - icons/es.png - icons/fr.png - icons/de.png - icons/pt.png - icons/ja.png - translation_de.qm - translation_pt.qm - translation_ja.qm - translation_fr.qm icons/world.png + icons/gb.png + translation_nl.qm + icons/nl.png + translation_de.qm + icons/de.png + translation_pt.qm + icons/pt.png + translation_ja.qm + icons/ja.png + translation_fr.qm + icons/fr.png + translation_hu.qm + icons/hu.png + translation_fi.qm + icons/fi.png diff --git a/recovery/icons/fi.png b/recovery/icons/fi.png new file mode 100755 index 00000000..14ec091b Binary files /dev/null and b/recovery/icons/fi.png differ diff --git a/recovery/icons/hu.png b/recovery/icons/hu.png new file mode 100644 index 00000000..7baafe44 Binary files /dev/null and b/recovery/icons/hu.png differ diff --git a/recovery/imagewritethread.cpp b/recovery/imagewritethread.cpp index e76b4226..b98fa347 100644 --- a/recovery/imagewritethread.cpp +++ b/recovery/imagewritethread.cpp @@ -15,12 +15,12 @@ * - Extracts image file to extended partition * - enlarges the ext4 partition to span the disk * - patches /etc/fstab and cmdline.txt - * - * Initial author: Floris Bos - * Maintained by Raspberry Pi - * - * See LICENSE.txt for license details - * + * + * Initial author: Floris Bos + * Maintained by Raspberry Pi + * + * See LICENSE.txt for license details + * */ #define MB 1048576 @@ -312,10 +312,8 @@ void ImageWriteThread::replaceMMCBLKreferences(const QString &filename) return; #ifdef USE_EXTENDED_PARTITIONS + data.replace("mmcblk0p5", "mmcblk0p6"); data.replace("mmcblk0p1", "mmcblk0p5"); - data.replace("mmcblk0p2", "mmcblk0p6"); - data.replace("mmcblk0p3", "mmcblk0p7"); - data.replace("mmcblk0p4", "mmcblk0p8"); #else data.replace("mmcblk0p3", "mmcblk0p4"); data.replace("mmcblk0p2", "mmcblk0p3"); @@ -340,51 +338,81 @@ int ImageWriteThread::startOfSecondPartition() bool ImageWriteThread::resizePartition() { - mbr_table mbr; - int lastPartition = -1; + mbr_table ebr, lbr; QFile f("/dev/mmcblk0"); f.open(f.ReadWrite); f.seek(_offsetInBytes); - f.read((char *) &mbr, sizeof(mbr)); + f.read((char *) &ebr, sizeof(ebr)); #ifdef USE_EXTENDED_PARTITIONS - // Using MBR inside image as an extended partition table int sizeOfDisk = getFileContents("/sys/class/block/mmcblk0/size").trimmed().toULongLong(); int sizeOfExtended = sizeOfDisk-startOfSecondPartition(); + int sizeOfLogical = sizeOfExtended - ebr.part[1].starting_sector; - // We want to resize the last logical partition that is actually in use - for (int i=3; i>=0; i--) - { - if (mbr.part[i].starting_sector) - { - // Enlarge partition - mbr.part[i].nr_of_sectors = sizeOfExtended - mbr.part[i].starting_sector; - // Linux only cares about LBA, zeroing out obsolete head/sector/cylinder fields - mbr.part[i].begin_hsc[0] = mbr.part[i].begin_hsc[1] = mbr.part[i].begin_hsc[2] = 0; - mbr.part[i].end_hsc[0] = mbr.part[i].end_hsc[1] = mbr.part[i].end_hsc[2] = 0; - - lastPartition = i; - break; - } + if (!(ebr.signature[0] == 0x55 && ebr.signature[1] == 0xAA)){ + emit error(tr("Extended boot record (EBR) not found")); + return false; } - if (lastPartition == -1) + + if (ebr.part[1].starting_sector) { - emit error(tr("No partitions found inside image")); + // Enlarge partition + ebr.part[1].nr_of_sectors = sizeOfExtended - ebr.part[1].starting_sector; + // Linux only cares about LBA, zeroing out + // obsolete head/sector/cylinder fields + ebr.part[1].begin_hsc[0] = ebr.part[1].begin_hsc[1] = ebr.part[1].begin_hsc[2] = 0; + ebr.part[1].end_hsc[0] = ebr.part[1].end_hsc[1] = ebr.part[1].end_hsc[2] = 0; + } + else + { + emit error(tr("No partitions found inside image's extended boot record (EBR)")); return false; } // Write our modified extended MBR to disk f.seek(_offsetInBytes); - f.write((char *) &mbr, sizeof(mbr)); + f.write((char *) &ebr, sizeof(ebr)); + + int logicalOffsetinBytes = _offsetInBytes + ebr.part[1].starting_sector*512; + + // Handle logical partition + f.seek(logicalOffsetinBytes); + f.read((char *) &lbr, sizeof(lbr)); + + if (!(lbr.signature[0] == 0x55 && lbr.signature[1] == 0xAA)){ + emit error(tr("Logical boot record (LBR) not found")); + return false; + } + + if (lbr.part[0].starting_sector) + { + // Enlarge partition + lbr.part[0].nr_of_sectors = sizeOfLogical - lbr.part[0].starting_sector; + // Linux only cares about LBA, zeroing out + // obsolete head/sector/cylinder fields + lbr.part[0].begin_hsc[0] = lbr.part[0].begin_hsc[1] = lbr.part[0].begin_hsc[2] = 0; + lbr.part[0].end_hsc[0] = lbr.part[0].end_hsc[1] = lbr.part[0].end_hsc[2] = 0; + } + else + { + emit error(tr("No partitions found inside image's logical boot record (LBR)")); + return false; + } + + // Write our modified extended MBR to disk + f.seek(logicalOffsetinBytes); + f.write((char *) &lbr, sizeof(lbr)); f.flush(); + // Tell Linux to re-read the partition table ioctl(f.handle(), BLKRRPART); + f.close(); - QString lastPartStr = "/dev/mmcblk0p"+QString::number(lastPartition+5); + QString lastPartStr = "/dev/mmcblk0p6"; #else // Rewriting primary MBR diff --git a/recovery/initdrivethread.cpp b/recovery/initdrivethread.cpp index e2624fdf..0c243a4c 100644 --- a/recovery/initdrivethread.cpp +++ b/recovery/initdrivethread.cpp @@ -160,7 +160,7 @@ bool InitDriveThread::method_reformatDrive() emit statusUpdate(tr("Formatting boot partition (fat)")); if (!formatBootPartition()) { - emit error(tr("Error formatting boot partition (vfat)")); + emit error(tr("Error formatting boot partition (fat)")); return false; } diff --git a/recovery/keydetection.cpp b/recovery/keydetection.cpp index 064b0896..08f5e7f6 100644 --- a/recovery/keydetection.cpp +++ b/recovery/keydetection.cpp @@ -25,10 +25,7 @@ * */ -#define BITS_PER_LONG (sizeof(unsigned long) * 8) -#define LONG(x) ((x)/BITS_PER_LONG) -#define OFF(x) ((x)%BITS_PER_LONG) -#define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1) +#define test_bit(bit, array) (array[bit / 8] & (1 << (bit % 8))) bool KeyDetection::isF10pressed() @@ -93,7 +90,7 @@ bool KeyDetection::_isF10pressed(int fd) qDebug() << "Error getting global key state"; } - bool pressed = (keymap[KEY_F10/8] & (1<<(KEY_F10 % 8))) || (keymap[KEY_LEFTSHIFT/8] & (1<<(KEY_LEFTSHIFT % 8))) || (keymap[KEY_RIGHTSHIFT/8] & (1<<(KEY_RIGHTSHIFT % 8))); + bool pressed = test_bit(KEY_F10, keymap) || test_bit(KEY_LEFTSHIFT, keymap) || test_bit(KEY_RIGHTSHIFT, keymap); //qDebug() << "Key press detection:" << pressed; return pressed; diff --git a/recovery/languagedialog.cpp b/recovery/languagedialog.cpp index a8ee1db6..70e7ef0c 100644 --- a/recovery/languagedialog.cpp +++ b/recovery/languagedialog.cpp @@ -1,11 +1,11 @@ /* Language selection dialog * - * - * Initial author: Floris Bos - * Maintained by Raspberry Pi - * - * See LICENSE.txt for license details - * + * + * Initial author: Floris Bos + * Maintained by Raspberry Pi + * + * See LICENSE.txt for license details + * */ #include "languagedialog.h" @@ -16,6 +16,7 @@ #include #include #include +#include /* Extra strings for lupdate to detect and hand over to translator to translate */ #if 0 @@ -29,11 +30,14 @@ QT_TRANSLATE_NOOP("QDialogButtonBox","&Yes") QT_TRANSLATE_NOOP("QDialogButtonBox","&No") #endif -LanguageDialog::LanguageDialog(QWidget *parent) : +LanguageDialog::LanguageDialog(QString *currentLangCode, QWidget *parent) : QDialog(parent), ui(new Ui::LanguageDialog), - _trans(NULL), _qttrans(NULL) + _trans(NULL), _qttrans(NULL), _currentLang(currentLangCode) { + /* Need to make a temp copy becuase it gets modified by callbacks */ + QString startLang = *_currentLang; + ui->setupUi(this); setWindowFlags(Qt::Window | Qt::FramelessWindowHint); setAttribute(Qt::WA_QuitOnClose, false); @@ -44,19 +48,31 @@ LanguageDialog::LanguageDialog(QWidget *parent) : QDir dir(":/", "translation_*.qm"); QStringList translations = dir.entryList(); + bool validStartLang = false; foreach (QString langfile, translations) { QString langcode = langfile.mid(12); langcode.chop(3); QLocale loc(langcode); - QString languagename = QLocale::languageToString(loc.language()); + /* Display languagename in English, e.g. German, French */ + /* QString languagename = QLocale::languageToString(loc.language()); */ + /* should Display languagename in native language, e.g. Deutsch, Français */ + QString languagename = loc.nativeLanguageName(); QString iconfilename = ":/icons/"+langcode+".png"; if (QFile::exists(iconfilename)) ui->langCombo->addItem(QIcon(iconfilename), languagename, langcode); else ui->langCombo->addItem(languagename, langcode); + + if (langcode.compare(startLang, Qt::CaseInsensitive) == 0) + { + validStartLang = true; + startLang = langcode; + ui->langCombo->setCurrentIndex(ui->langCombo->count() - 1); + } } + *_currentLang = (validStartLang ? startLang : ""); } LanguageDialog::~LanguageDialog() @@ -66,7 +82,7 @@ LanguageDialog::~LanguageDialog() void LanguageDialog::changeLanguage(const QString &langcode) { - if (langcode == _currentLang) + if (langcode == *_currentLang) return; if (_trans) @@ -104,7 +120,7 @@ void LanguageDialog::changeLanguage(const QString &langcode) } } - _currentLang = langcode; + *_currentLang = langcode; } void LanguageDialog::on_langCombo_currentIndexChanged(int index) @@ -119,3 +135,8 @@ void LanguageDialog::changeEvent(QEvent* event) QDialog::changeEvent(event); } + +void LanguageDialog::on_actionOpenComboBox_triggered() +{ + ui->langCombo->showPopup(); +} diff --git a/recovery/languagedialog.h b/recovery/languagedialog.h index 982401c3..e26d2ba1 100644 --- a/recovery/languagedialog.h +++ b/recovery/languagedialog.h @@ -4,12 +4,12 @@ /* Language selection dialog * * Initial author: Floris Bos - * - * Initial author: Floris Bos - * Maintained by Raspberry Pi - * - * See LICENSE.txt for license details - * + * + * Initial author: Floris Bos + * Maintained by Raspberry Pi + * + * See LICENSE.txt for license details + * */ #include @@ -22,20 +22,22 @@ class QTranslator; class LanguageDialog : public QDialog { Q_OBJECT - + public: - explicit LanguageDialog(QWidget *parent = 0); + explicit LanguageDialog(QString *currentLangCode, QWidget *parent = 0); ~LanguageDialog(); void changeLanguage(const QString &langcode); - + protected: Ui::LanguageDialog *ui; QTranslator *_trans, *_qttrans; - QString _currentLang; + QString *_currentLang; virtual void changeEvent(QEvent *event); private slots: void on_langCombo_currentIndexChanged(int index); + void on_actionOpenComboBox_triggered(); + }; #endif // LANGUAGEDIALOG_H diff --git a/recovery/languagedialog.ui b/recovery/languagedialog.ui index e04fbda8..05417dd0 100644 --- a/recovery/languagedialog.ui +++ b/recovery/languagedialog.ui @@ -85,7 +85,7 @@ Dialog - + @@ -103,12 +103,16 @@ - Language: + Language (l): + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + 0 @@ -118,6 +122,17 @@ + + + openComboBox + + + L + + + Qt::ApplicationShortcut + + diff --git a/recovery/main.cpp b/recovery/main.cpp index e7235203..038a04cf 100644 --- a/recovery/main.cpp +++ b/recovery/main.cpp @@ -23,12 +23,12 @@ #endif /* - * - * Initial author: Floris Bos - * Maintained by Raspberry Pi - * - * See LICENSE.txt for license details - * + * + * Initial author: Floris Bos + * Maintained by Raspberry Pi + * + * See LICENSE.txt for license details + * */ void reboot_to_extended() @@ -46,6 +46,18 @@ int main(int argc, char *argv[]) GpioInput gpio(3); QApplication a(argc, argv); RightButtonFilter rbf; + QString currentLangCode; + bool runinstaller = false; + + // Process command-line arguments + for (int i=1; i i+1) + currentLangCode = argv[++i]; + } // Intercept right mouse clicks sent to the title bar a.installEventFilter(&rbf); @@ -57,28 +69,29 @@ int main(int argc, char *argv[]) if (QFile::exists(":/icons/raspberry_icon.png")) a.setWindowIcon(QIcon(":/icons/raspberry_icon.png")); - if (QFile::exists(":/wallpaper.png")) - { -#ifdef CENTER_BACKGROUND_IMAGE + //if (QFile::exists(":/wallpaper.png")) + // { +//#ifdef CENTER_BACKGROUND_IMAGE // Using QSplashScreen to get a centered background image QWSServer::setBackground(BACKGROUND_COLOR); QSplashScreen *splash = new QSplashScreen(QPixmap(":/wallpaper.png")); splash->show(); QApplication::processEvents(); -#else +//#else // Scale background image to fit screen - QRect dim = a.desktop()->availableGeometry(); - QWSServer::setBackground(QImage(":/wallpaper.png").scaled(dim.width(), dim.height())); -#endif - } - else - { - QWSServer::setBackground(BACKGROUND_COLOR); - } +// QRect dim = a.desktop()->availableGeometry(); + // QWSServer::setBackground(QImage(":/wallpaper.png").scaled(dim.width(), dim.height())); +//#endif +// } +// else +// { +// QWSServer::setBackground(BACKGROUND_COLOR); + // } +//#endif #endif // If -runinstaller is not specified, only continue if SHIFT is pressed, GPIO is triggered or no OS is installed (/dev/mmcblk0p6 does not exist) - bool bailout = (argc < 2 || strcmp(argv[1], "-runinstaller") != 0) + bool bailout = !runinstaller && gpio.value() != 0 && !KeyDetection::isF10pressed() && QFile::exists(FAT_PARTITION_OF_IMAGE); @@ -98,13 +111,13 @@ int main(int argc, char *argv[]) #ifdef ENABLE_LANGUAGE_CHOOSER // Language chooser at the bottom center - LanguageDialog ld; - ld.setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignHCenter | Qt::AlignBottom, ld.size(), a.desktop()->availableGeometry())); - ld.show(); + LanguageDialog* ld = new LanguageDialog(¤tLangCode); + ld->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignHCenter | Qt::AlignBottom, ld->size(), a.desktop()->availableGeometry())); + ld->show(); #endif // Main window in the middle of screen - MainWindow mw; + MainWindow mw(¤tLangCode, splash, ld); mw.setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, mw.size(), a.desktop()->availableGeometry())); mw.show(); diff --git a/recovery/mainwindow.cpp b/recovery/mainwindow.cpp index 0344c1c0..b28a18ec 100644 --- a/recovery/mainwindow.cpp +++ b/recovery/mainwindow.cpp @@ -5,6 +5,7 @@ #include "confeditdialog.h" #include "progressslideshowdialog.h" #include "config.h" +#include "languagedialog.h" #include #include #include @@ -16,11 +17,19 @@ #include #include #include +#include +#include +#include +#include + +#ifdef Q_WS_QWS +#include +#endif /* Main window * * Initial author: Floris Bos - * Maintained by Raspberry Pi + * Maintained by Raspberry Pi * * See LICENSE.txt for license details * @@ -29,19 +38,24 @@ /* Flag to keep track wheter or not we already repartitioned. */ bool MainWindow::_partInited = false; -MainWindow::MainWindow(QWidget *parent) : +/* Flag to keep track of current display mode. */ +int MainWindow::_currentMode = 0; + +/* Which ListItem (if any) points to the recommended image. */ +QListWidgetItem *recommendedItem = NULL; + +MainWindow::MainWindow(QString *currentLangCode, QSplashScreen *splash, LanguageDialog *ld, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), - _qpd(NULL), _kcpos(0), _silent(false), _allowSilent(true) + _qpd(NULL), _kcpos(0), _silent(false), _allowSilent(true), _currentLang(currentLangCode), _splash(splash), _ld(ld) { ui->setupUi(this); setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint); setContextMenuPolicy(Qt::NoContextMenu); - setWindowTitle(QString(tr("Pi Recovery - Built:%1")).arg(QString::fromLocal8Bit(__DATE__))); + update_window_title(); _kc << 0x01000013 << 0x01000013 << 0x01000015 << 0x01000015 << 0x01000012 << 0x01000014 << 0x01000012 << 0x01000014 << 0x42 << 0x41; ui->list->installEventFilter(this); - ui->advToolBar->setVisible(false); if (qApp->arguments().contains("-runinstaller") && !_partInited) @@ -52,7 +66,7 @@ MainWindow::MainWindow(QWidget *parent) : _qpd = new QProgressDialog( tr("Setting up SD card"), QString(), 0, 0, this); _qpd->setWindowModality(Qt::WindowModal); _qpd->setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint); - + InitDriveThread *idt = new InitDriveThread(this); connect(idt, SIGNAL(statusUpdate(QString)), _qpd, SLOT(setLabelText(QString))); connect(idt, SIGNAL(completed()), _qpd, SLOT(deleteLater())); @@ -101,8 +115,8 @@ void MainWindow::populate() if (!l.isEmpty()) { - QListWidgetItem *recommendedItem = l.first(); - recommendedItem->setText(recommendedItem->text()+" "+tr("[RECOMMENDED]")); + recommendedItem = l.first(); + update_recommended_label(); ui->list->setCurrentItem(recommendedItem); } else @@ -134,34 +148,35 @@ void MainWindow::repopulate() for (QMap::const_iterator iter = images.constBegin(); iter != images.constEnd(); iter++) { - if (iter.key().contains("risc", Qt::CaseInsensitive)) + if (iter.key().contains("risc", Qt::CaseInsensitive) && QFile::exists("/mnt/images/RiscOS.png")) iconFilename = "/mnt/images/RiscOS.png"; - else if (iter.key().contains("arch", Qt::CaseInsensitive)) + else if (iter.key().contains("arch", Qt::CaseInsensitive) && QFile::exists("/mnt/images/Archlinux.png")) iconFilename = "/mnt/images/Archlinux.png"; - else if (iter.key().contains("pidora", Qt::CaseInsensitive)) - iconFilename = "/mnt/images/Pidora.png"; - else if (iter.key().contains("wheezy", Qt::CaseInsensitive)) + else if (iter.key().contains("pidora", Qt::CaseInsensitive) && QFile::exists("/mnt/images/Pidora.png")) + iconFilename = "/mnt/images/Pidora.png"; + else if ((iter.key().contains("wheezy", Qt::CaseInsensitive) || iter.key().contains("raspbian", Qt::CaseInsensitive)) && QFile::exists("/mnt/images/Raspbian.png")) iconFilename = "/mnt/images/Raspbian.png"; - else if (iter.key().contains("OpenELEC", Qt::CaseInsensitive)) + else if (iter.key().contains("OpenELEC", Qt::CaseInsensitive) && QFile::exists("/mnt/images/OpenELEC.png")) iconFilename = "/mnt/images/OpenELEC.png"; - else if (iter.key().contains("raspbmc", Qt::CaseInsensitive)) + else if (iter.key().contains("raspbmc", Qt::CaseInsensitive) && QFile::exists("/mnt/images/RaspBMC.png")) iconFilename = "/mnt/images/RaspBMC.png"; else iconFilename = "/mnt/images/default.png"; QIcon icon; - - haveicons = true; - icon = QIcon(iconFilename); - QSize iconsize = icon.availableSizes().first(); - - if (iconsize.width() > currentsize.width() || iconsize.height() > currentsize.height()) + if (QFile::exists(iconFilename)) + { + haveicons = true; + icon = QIcon(iconFilename); + QSize iconsize = icon.availableSizes().first(); + + if (iconsize.width() > currentsize.width() || iconsize.height() > currentsize.height()) { /* Make all icons as large as the largest icon we have */ currentsize = QSize(qMax(iconsize.width(), currentsize.width()),qMax(iconsize.height(), currentsize.width())); ui->list->setIconSize(currentsize); } - + } QListWidgetItem *item = new QListWidgetItem(icon, iter.value(), ui->list); item->setData(Qt::UserRole, iter.key()); } @@ -227,32 +242,39 @@ void MainWindow::on_actionWrite_image_to_disk_triggered() setEnabled(false); QString imagefile = ui->list->currentItem()->data(Qt::UserRole).toString(); - + /* Optional file containing size of uncompressed image */ QString sizefile = "/mnt/images/"+basefile(imagefile)+".size"; QString slidesDirectory; /* Image specific slide directory */ - if (basefile(imagefile).contains("risc", Qt::CaseInsensitive)) + if (basefile(imagefile).contains("risc", Qt::CaseInsensitive) && QDir("/mnt/slides/RISCOS").exists()) slidesDirectory = "/mnt/slides/RISCOS"; - else if (basefile(imagefile).contains("arch", Qt::CaseInsensitive)) + else if (basefile(imagefile).contains("arch", Qt::CaseInsensitive) && QDir("/mnt/slides/Archlinux").exists()) slidesDirectory = "/mnt/slides/Archlinux"; - else if (basefile(imagefile).contains("pidora", Qt::CaseInsensitive)) + else if (basefile(imagefile).contains("pidora", Qt::CaseInsensitive) && QDir("/mnt/slides/Pidora").exists()) slidesDirectory = "/mnt/slides/Pidora"; - else if ((basefile(imagefile).contains("wheezy", Qt::CaseInsensitive)) || (basefile(imagefile).contains("raspbian", Qt::CaseInsensitive))) + else if (((basefile(imagefile).contains("wheezy", Qt::CaseInsensitive)) || (basefile(imagefile).contains("raspbian", Qt::CaseInsensitive))) && QDir("/mnt/slides/Raspbian").exists()) slidesDirectory = "/mnt/slides/Raspbian"; - else if (basefile(imagefile).contains("OpenELEC", Qt::CaseInsensitive)) + else if (basefile(imagefile).contains("OpenELEC", Qt::CaseInsensitive) && QDir("/mnt/slides/OpenELEC").exists()) slidesDirectory = "/mnt/slides/OpenELEC"; - else if (basefile(imagefile).contains("raspbmc", Qt::CaseInsensitive)) + else if (basefile(imagefile).contains("raspbmc", Qt::CaseInsensitive) && QDir("/mnt/slides/RaspBMC").exists()) slidesDirectory = "/mnt/slides/RaspBMC"; else slidesDirectory = "/mnt/slides/default"; + /* Check if a subdirectory of localised slides exists */ + QString localisedSlidesDirectory = slidesDirectory + "/" + *_currentLang; + if (QDir(localisedSlidesDirectory).exists()) + { + slidesDirectory = localisedSlidesDirectory; + } + ImageWriteThread *t = new ImageWriteThread(imagefile, this); ProgressSlideshowDialog *p = new ProgressSlideshowDialog(slidesDirectory, "", 20, this); connect(t, SIGNAL(parsedImagesize(uint)), p, SLOT(setMaximum(uint))); - + if (QFile::exists(sizefile)) { QFile f(sizefile); @@ -305,21 +327,114 @@ void MainWindow::on_list_currentRowChanged() ui->actionRemove_image->setEnabled(true); } +void MainWindow::update_window_title() +{ + setWindowTitle(QString(tr("NOOBS v%1 - Built: %2")).arg(VERSION_NUMBER, QString::fromLocal8Bit(__DATE__))); +} + +void MainWindow::update_recommended_label() +{ + if (recommendedItem) + { + recommendedItem->setText(imageFilenameToFriendlyName(recommendedItem->data(Qt::UserRole).toString())+QString(" [%1]").arg(tr("RECOMMENDED"))); + } +} + void MainWindow::changeEvent(QEvent* event) { if (event && event->type() == QEvent::LanguageChange) + { ui->retranslateUi(this); + update_window_title(); + update_recommended_label(); + } QMainWindow::changeEvent(event); } +void MainWindow::displayMode(QString cmd, QString mode) +{ + // Trigger framebuffer resize + QProcess *resize = new QProcess(this); + resize->start(QString("sh -c \"tvservice -o; tvservice %1;\"").arg(cmd)); + resize->waitForFinished(4000); + + // Update screen resolution with current value (even if we didn't + // get what we thought we'd get) + QProcess *update = new QProcess(this); + update->start(QString("sh -c \"tvservice -s | cut -d , -f 2 | cut -d \' \' -f 2 | cut -d x -f 1;tvservice -s | cut -d , -f 2 | cut -d \' \' -f 2 | cut -d x -f 2\"")); + update->waitForFinished(4000); + update->setProcessChannelMode(QProcess::MergedChannels); + + QTextStream stream(update); + QString xres = stream.readLine(); + QString yres = stream.readLine(); + + QScreen::instance()->setMode(xres.toInt(), yres.toInt(), 16); + + // Update UI item locations + _splash->setPixmap(QPixmap(":/wallpaper.png")); + _ld->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignHCenter | Qt::AlignBottom, _ld->size(), qApp->desktop()->availableGeometry())); + this->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, this->size(), qApp->desktop()->availableGeometry())); + + // Refresh screen + qApp->processEvents(); + QWSServer::instance()->refresh(); + + // TODO: Write choice to config.txt of installed OS + // during OS install and use this choice if present by default + + // Inform user of resolution change with message box. + QMessageBox *mbox = new QMessageBox; + mbox->setWindowTitle(tr("Display Mode Changed")); + mbox->setText(QString(tr("Display mode changed to %1")).arg(mode)); + mbox->setStandardButtons(0); + mbox->show(); + QTimer::singleShot(2000, mbox, SLOT(hide())); + + // In case they can't see the message box, inform that mode change + // is occuring by turning on the LED during the change + QProcess *led_blink = new QProcess(this); + led_blink->start("sh -c \"echo 1 > /sys/class/leds/led0/brightness; sleep 3; echo 0 > /sys/class/leds/led0/brightness\""); + } + bool MainWindow::eventFilter(QObject *, QEvent *event) { if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast(event); - if (_kc.at(_kcpos) == keyEvent->key()) + // Let user find the best display mode for their display + // experimentally by using keys 1-4. NOOBS will default to using HDMI preferred mode. + + // HDMI preferred mode + if (keyEvent->key() == Qt::Key_1 && _currentMode != 0) + { + displayMode("-p", tr("HDMI preferred mode")); + _currentMode = 0; + } + // HDMI safe mode + if (keyEvent->key() == Qt::Key_2 && _currentMode != 1) + { + displayMode("-e \'DMT 4 DVI\'", tr("HDMI safe mode")); + _currentMode = 1; + } + // Composite PAL + if (keyEvent->key() == Qt::Key_3 && _currentMode != 2) + { + displayMode("-c \'NTSC 4:3\'", tr("composite PAL mode")); + _currentMode = 2; + } + // Composite NTSC + if (keyEvent->key() == Qt::Key_4 && _currentMode != 3) + { + displayMode("-c \'PAL 4:3\'", tr("composite NTSC mode")); + _currentMode = 3; + } + // Catch Return key to trigger OS install + if (keyEvent->key() == Qt::Key_Return) + on_actionWrite_image_to_disk_triggered(); + else if (_kc.at(_kcpos) == keyEvent->key()) { _kcpos++; if (_kcpos == _kc.size()) @@ -329,9 +444,7 @@ bool MainWindow::eventFilter(QObject *, QEvent *event) } } else - { - _kcpos = 0; - } + _kcpos=0; } return false; diff --git a/recovery/mainwindow.h b/recovery/mainwindow.h index b47a8ad8..f58b035f 100644 --- a/recovery/mainwindow.h +++ b/recovery/mainwindow.h @@ -4,16 +4,17 @@ /* Main window * * Initial author: Floris Bos - * - * Initial author: Floris Bos - * Maintained by Raspberry Pi - * - * See LICENSE.txt for license details - * + * + * Initial author: Floris Bos + * Maintained by Raspberry Pi + * + * See LICENSE.txt for license details + * */ - +#include "languagedialog.h" #include #include +#include namespace Ui { class MainWindow; @@ -23,11 +24,11 @@ class QProgressDialog; class MainWindow : public QMainWindow { Q_OBJECT - + public: - explicit MainWindow(QWidget *parent = 0); + explicit MainWindow(QString *currentLangCode, QSplashScreen *splash, LanguageDialog *ld, QWidget *parent = 0); ~MainWindow(); - + protected: Ui::MainWindow *ui; QDialog *_qpd; @@ -35,6 +36,11 @@ protected: int _kcpos; bool _silent, _allowSilent; static bool _partInited; + static int _currentMode; + QString *_currentLang; + QSplashScreen *_splash; + LanguageDialog *_ld; + QMap listInstalledImages(); QString basefile(const QString &filename); @@ -43,6 +49,9 @@ protected: virtual bool eventFilter(QObject *obj, QEvent *event); void inputSequence(); void repopulate(); + void displayMode(QString cmd, QString mode); + void update_window_title(); + void update_recommended_label(); protected slots: void populate(); diff --git a/recovery/mainwindow.ui b/recovery/mainwindow.ui index cd7a6d79..744e161f 100644 --- a/recovery/mainwindow.ui +++ b/recovery/mainwindow.ui @@ -1,7 +1,7 @@ MainWindow - + 0 @@ -15,8 +15,14 @@ 11 - - + + Qt::NoFocus + + + + Qt::NoFocus + + 0 @@ -35,6 +41,12 @@ + + Qt::NoFocus + + + false + 22 @@ -83,10 +95,7 @@ Install OS - Install OS - - - Return + Installs the selected operating system image onto this SD card. @@ -95,10 +104,13 @@ :/icons/door_in.png:/icons/door_in.png - Exit + Exit (Esc) - - Esc + + Exits and boots the installed operating system. + + + Esc @@ -143,7 +155,13 @@ :/icons/page_white_edit.png:/icons/page_white_edit.png - Edit config + Edit config (e) + + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + + + e @@ -152,10 +170,13 @@ :/icons/world.png:/icons/world.png - Online help + Online help (h) - Online help + Opens a web browser displaying the Raspberry Pi Forum. + + + h diff --git a/recovery/progressslideshowdialog.cpp b/recovery/progressslideshowdialog.cpp index 3dc0e252..a8b390e9 100644 --- a/recovery/progressslideshowdialog.cpp +++ b/recovery/progressslideshowdialog.cpp @@ -24,28 +24,37 @@ ProgressSlideshowDialog::ProgressSlideshowDialog(const QString &slidesDirectory, _maxSectors(0), ui(new Ui::ProgressSlideshowDialog) { - QDir dir(slidesDirectory, "*.jpg *.jpeg *.png"); - ui->setupUi(this); setLabelText(statusMsg); setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint); - _slides = dir.entryList(); - _slides.sort(); + QDir dir(slidesDirectory, "*.jpg *.jpeg *.png"); + if (dir.exists()) + { + _slides = dir.entryList(); + _slides.sort(); + qDebug() << "Slides directory:" << _slidesDirectory << "Available slides" << _slides; + } - qDebug() << "Slides directory:" << _slidesDirectory << "Available slides" << _slides; if (_slides.isEmpty()) - return; + { + /* Resize window to just show progress bar */ + ui->imagespace->setMinimumSize(0, 0); + resize(this->width(), 50); - /* Resize window to size of first image in slide directory */ - QPixmap pixmap(_slidesDirectory+"/"+_slides.first()); - ui->imagespace->setMinimumSize(pixmap.width(), pixmap.height()); - resize(pixmap.width(), pixmap.height()+50); - - ui->imagespace->setPixmap(pixmap); - - connect(&_timer, SIGNAL(timeout()), this, SLOT(nextSlide())); - _timer.start(changeInterval * 1000); + } + else + { + /* Resize window to size of first image in slide directory */ + QPixmap pixmap(_slidesDirectory+"/"+_slides.first()); + ui->imagespace->setMinimumSize(pixmap.width(), pixmap.height()); + resize(pixmap.width(), pixmap.height()+50); + + ui->imagespace->setPixmap(pixmap); + + connect(&_timer, SIGNAL(timeout()), this, SLOT(nextSlide())); + _timer.start(changeInterval * 1000); + } connect(&_iotimer, SIGNAL(timeout()), this, SLOT(updateIOstats())); enableIOaccounting(); } diff --git a/recovery/recovery.pro b/recovery/recovery.pro index 634f617a..3fd5350c 100644 --- a/recovery/recovery.pro +++ b/recovery/recovery.pro @@ -11,6 +11,8 @@ greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = recovery TEMPLATE = app +system(sh updateqm.sh) + SOURCES += main.cpp\ mainwindow.cpp \ imagewritethread.cpp \ @@ -46,7 +48,9 @@ TRANSLATIONS += translation_nl.ts \ translation_de.ts \ translation_pt.ts \ translation_ja.ts \ - translation_fr.ts + translation_fr.ts \ + translation_hu.ts \ + translation_fi.ts OTHER_FILES += \ README.txt diff --git a/recovery/translation_de.qm b/recovery/translation_de.qm deleted file mode 100644 index 84a29be6..00000000 Binary files a/recovery/translation_de.qm and /dev/null differ diff --git a/recovery/translation_de.ts b/recovery/translation_de.ts index b6a244bb..ecb76e20 100644 --- a/recovery/translation_de.ts +++ b/recovery/translation_de.ts @@ -63,10 +63,6 @@ Unknown image format file extension. Expecting .lzo, .gz, .xz, .bz2 or .zip Die Dateierweiterung der Imagedatei ist unbekannt. Unterstüzt werden .lzo .gz, .xz, .bz2 und .zip - - Unknown image format file extension. Expecting .gz, .xz, .bz2 or .zip - Die Dateierweiterung der Imagedatei ist unbekannt. Unterstützt werden .gz, .xz, .bz2 und .zip - Error writing image to SD card @@ -150,8 +146,8 @@ - Error formatting boot partition (vfat) - Fehler beim Formatieren der Boot-Partition (vfat) + Error formatting boot partition (fat) + Fehler beim Formatieren der Boot-Partition @@ -243,131 +239,159 @@ - Language: - Sprache: + Language (l): + Sprache (l): MainWindow - - System recovery - System-Wiederherstellung - - - - + Install OS System installieren - - Return - Zurück + + Installs the selected operating system image onto this SD card. + - - Exit - Beenden + + Exit (Esc) + Beenden (Esc) - - Esc - Abbruch + + Exits and boots the installed operating system. + - + Advanced Erweitert - + Add image System hinzufügen - + Remove image System ertfernen - - Edit config - Einstellungen bearbeiten - - - - Online help - Online-Hilfe + Edit config (e) + Einstellungen bearbeiten (e) - - [RECOMMENDED] - [EMPFOHLEN] + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + - + + Online help (h) + Online-Hilfe (h) + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + RECOMMENDED + EMPFOHLEN + + + Confirm Bestätigung - - Pi Recovery - Built:%1 - Pi Installation - Erstelldatum: %1 + + NOOBS v%1 - Built: %2 + - + Setting up SD card Die SD-Karte wird eingerichtet - + No OS Images Found on SD Card Kein Betriebssystem auf der SD-Karte gefunden - + Please add at least one OS image to the /images directory in order to proceed Bitte fügen Sie mind. ein Betriebssystem dem Ordner /images hinzu um fortzufahren - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. Bist Du sicher, dass Du das Image schreiben möchtest? ALLE DATEN AUF DER SD-KARTE GEHEN VERLOREN! - - Starting image write - Das Image wird geschrieben - - - + Restore complete Wiederherstellung vollständing - + Image applied successfully Image erfolgreich wiederhergestellt - + Error Fehler - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface Die Netzwerkschnittstelle wird aktiviert - + No network access Kein Netzwerk gefunden - + Wired network access is required for this feature. Please insert a network cable into the network port. Hierfür ist eine kabelgebundene Netzwerkverbindung erforderlich. Bitte stecken Sie ein Netzwerkkabel ein. @@ -375,12 +399,12 @@ ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) %1 MB von %2 MB (%3 MB/Sek) - + %1 MB written (%2 MB/sec) %1 MB geschrieben (%2 MB/Sek) @@ -388,42 +412,42 @@ QDialogButtonBox - + OK OK - + Cancel Abbrechen - + &Cancel &Abbrechen - + Close Schließen - + &Close Schl&ießen - + &Yes &Ja - + &No &Nein - + &OK &OK diff --git a/recovery/translation_fi.ts b/recovery/translation_fi.ts new file mode 100644 index 00000000..bba6ad40 --- /dev/null +++ b/recovery/translation_fi.ts @@ -0,0 +1,456 @@ + + + + + ConfEditDialog + + + Config editor + Asetusten muokkain + + + + Error + Virhe + + + + Error mounting boot partition + Käynnistysosiota liitettäessä tapahtui virhe + + + + ImageWriteThread + + + + Writing image to SD card + Kirjoita levykuva SD muistikortille + + + + Resizing file system + Muutetaan tiedostojärjestelmän kokoa + + + + Patching /boot/cmdline.txt + Paikataan tiedostoa /boot/cmdline.txt + + + + Patching /etc/fstab + Paikataan tiedostoa /etc/fstab + + + + + Finish writing (sync) + Viimeistellään kirjoitusta (synkronointi) + + + + Creating FAT partition for RiscOS + Luodaan FAT osiota RiscOS:ia varten + + + + Unknown image format file extension. Expecting .lzo, .gz, .xz, .bz2 or .zip + En tunnista levykuvan tiedostopäätettä. Tunnetut päätteet ovat: lzo, .gz, .xz, .bz2 ja .zip + + + + Image file corrupt + Levykuva on vahingoittunut + + + + Error writing image to SD card + Virhe kirjoittettaessa levykuvaa SD muistikortille + + + + + Error mounting ext4 partition + Virhe liitettäessä ext4 osiota + + + + Error mounting FAT partition of image + Virhe liitettäessä FAT osiota + + + + No partitions found inside image + En löydä levykuvatiedostosta osioita + + + + Error resizing ext4 partition + Virhe muutettaessa ext4 osion kokoa + + + + InitDriveThread + + + SD card too small. Must be at least %1 MB + SD muistikortti on liian pieni. Muistikortilla tullee olla vähintään %1 Mt tilaa + + + + + Mounting FAT partition + Liitetään FAT osiota + + + + Editing cmdline.txt + Muokataan tiedostoa cmdline.txt + + + + Error opening %1 + Virhe avattaessa tiedostoa %1 + + + + Writing RiscOS blob + Kirjoitetaan RiscOS tiedostoa + + + + Error writing RiscOS blob + Virhe kirjoitettaessa RiscOS tiedostoa + + + + Unmounting boot partition + Irrotetaan käynnistysosiota + + + + Finish writing to disk (sync) + Viimeistellään kirjoitusta (synkronointi) + + + + Mounting boot partition again + Liitetään käynnistysosiota uudelleen + + + + SD card broken (writes do not persist) + SD muistikortti on viallinen (muutokset eivät tallennu sille) + + + + Saving boot files to memory + Tallennetaan käynnistystiedostoja muistiin + + + + Error saving boot files to memory. SD card may be damaged. + Virhe tallennettaessa käynnistystiedostoja muistiin. SD muistikortti saattaa olla viallinen. + + + + + Error unmounting system partition. + Virhe irrotettaessa järjestelmäosiota. + + + + Zeroing partition table + Nollataan osiotaulua + + + + Error zero'ing MBR/GPT. SD card may be broken or advertising wrong capacity. + Virhe MBR/GPT osiotaulua nollatessa. SD muistikortti saattaa olla viallinen tai se saattaa mainostaa väärää kapsiteettia. + + + + Creating partitions + Luodaan osioita + + + + Error partitioning + Virhe osioita luodessa + + + + Formatting boot partition (fat) + Alustetaan käynnistysosiota (fat) + + + + Error formatting boot partition (fat) + Virhe alustettaessa käynnistysosiota (FAT) + + + + Copying boot files to storage + Kopioidaan käynnistystiedostoja medialle + + + + SD card does not have a MBR. Cannot resize FAT partition. + SD muistikorttilla ei ole MBR osiotaulua. FAT osion kokoa ei voida muuttaa. + + + + Removing partitions 2,3,4 + Poistetaan osiot 2, 3 ja 4 + + + + Resizing FAT partition + Muutetaan FAT osion kokoa + + + + Error resizing existing FAT partition + Virhe muutettaessa FAT osion kokoa + + + + Creating extended partition + Luodaan 'extended' tyyppinen osio + + + + Error creating extended partition + Virhe luotaessa 'extended' tyyppistä osiota + + + + Error mounting system partition. + Virhe liitettäessä järjestelmäosiota. + + + + LanguageDialog + + + Dialog + Valikko + + + + Language (l): + Kieli (l): + + + + MainWindow + + + Install OS + Asenna järjestelmä + + + + Installs the selected operating system image onto this SD card. + + + + + Exit (Esc) + Lopeta (Esc) + + + + Exits and boots the installed operating system. + + + + + Advanced + Edistynyt + + + + Add image + Lisää levykuva + + + + Remove image + Poista levykuva + + + + Edit config (e) + Muokkaa asetuksia (e) + + + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + + + + + Online help (h) + Verkko ohje (h) + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + NOOBS v%1 - Built: %2 + + + + + Setting up SD card + Valmistellaan SD muistikorttia + + + + No OS Images Found on SD Card + SD muistikortilta ei löytynyt yhtään levykuvaa + + + + Please add at least one OS image to the /images directory in order to proceed + Lisää vähintään yksi levykuva /images kansioon jos haluat jatkaa + + + + RECOMMENDED + SUOSITELTU + + + + Confirm + Vahvista + + + + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. + Varoitus: tämä asentaa valityn käyttöjärjestelmän. Koko SD muistikortti tyhjennetään enne tätä. + + + + Restore complete + Palautus on valmis + + + + Image applied successfully + Levykuva kirjoitettu onnistuneesti + + + + Error + Virhe + + + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + + Enabling network interface + Avataan verkkoyhteyttä + + + + No network access + Ei verkkoyhteyttä + + + + Wired network access is required for this feature. Please insert a network cable into the network port. + Tämä ominausuus tarvitsee langallisen verkkoyhteyden toimiakseen. Liitä verkkokaapeli verkko porttiin. + + + + ProgressSlideshowDialog + + + %1 MB of %2 MB written (%3 MB/sec) + The format is bit different, but when it comes to finnish this will the most clear format in which this can be expressed + %1/%2 Mt kirjoittuna (%3 Mt/s) + + + + %1 MB written (%2 MB/sec) + %1 Mt kirjoitettuna (%2 Mt/s) + + + + QDialogButtonBox + + + OK + OK + + + + &OK + &OK + + + + Cancel + Peruuta + + + + &Cancel + &Peruuta + + + + Close + Sulje + + + + &Close + &Sulje + + + + &Yes + &Kyllä + + + + &No + &Ei + + + diff --git a/recovery/translation_fr.qm b/recovery/translation_fr.qm deleted file mode 100644 index a1951825..00000000 Binary files a/recovery/translation_fr.qm and /dev/null differ diff --git a/recovery/translation_fr.ts b/recovery/translation_fr.ts index 841aab1e..c3fe496b 100644 --- a/recovery/translation_fr.ts +++ b/recovery/translation_fr.ts @@ -146,8 +146,8 @@ - Error formatting boot partition (vfat) - Erreur pendant le formatage de la partition de démarrage (VFAT) + Error formatting boot partition (fat) + Erreur pendant le formatage de la partition de démarrage (FAT) @@ -239,131 +239,159 @@ - Language: - Langue: + Language (l): + Langue (l): MainWindow - - System recovery - Récupération Système - - - - + Install OS Restaurer image - - Return - Retour + + Installs the selected operating system image onto this SD card. + - - Exit - Sortie + + Exit (Esc) + Sortie (Esc) - - Esc - Échap + + Exits and boots the installed operating system. + - + Advanced - + Add image - + Remove image - - Edit config - - - - - Online help + Edit config (e) - - Pi Recovery - Built:%1 + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. - + + Online help (h) + + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + NOOBS v%1 - Built: %2 + + + + Setting up SD card - + No OS Images Found on SD Card - + Please add at least one OS image to the /images directory in order to proceed - - [RECOMMENDED] - [RECOMMANDÉ] + + RECOMMENDED + RECOMMANDÉ - + Confirm Confirmer - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. Êtes-vous sûr de vouloir écrire l'image? CELA EFFACERA TOUTES VOS DONNÉES EXISTANTES! - - Starting image write - Commencement de l’écriture de l’image - - - + Restore complete Restauration complète - + Image applied successfully Écriture de l’image réussite - + Error Erreur - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface Activation de l’interface réseau - + No network access - + Wired network access is required for this feature. Please insert a network cable into the network port. @@ -371,12 +399,12 @@ ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) %1 MB sur %2 MB écrite (%3 MB/sec) - + %1 MB written (%2 MB/sec) %1 MB écrite (%2 MB/sec) @@ -384,42 +412,42 @@ QDialogButtonBox - + OK OK - + Cancel Annuler - + &Cancel &Annuler - + Close Fermer - + &Close Fermer - + &Yes &Oui - + &No &Non - + &OK &OK diff --git a/recovery/translation_hu.qm b/recovery/translation_hu.qm deleted file mode 100644 index 1e9699d6..00000000 Binary files a/recovery/translation_hu.qm and /dev/null differ diff --git a/recovery/translation_hu.ts b/recovery/translation_hu.ts index 4056bdd6..f3b1f8d1 100644 --- a/recovery/translation_hu.ts +++ b/recovery/translation_hu.ts @@ -63,10 +63,6 @@ Unknown image format file extension. Expecting .lzo, .gz, .xz, .bz2 or .zip Ismeretlen lemezkép fájltípus. Elfogadott típusok: .lzo .gz, .xz, .bz2 és .zip - - Unknown image format file extension. Expecting .gz, .xz, .bz2 or .zip - Die Dateierweiterung der Imagedatei ist unbekannt. Es werden .gz, .xz, .bz2 und .zip unterstützt - Error writing image to SD card @@ -150,8 +146,8 @@ - Error formatting boot partition (vfat) - Hiba történt a boot partíció formázása közben (vfat) + Error formatting boot partition (fat) + Hiba történt a boot partíció formázása közben (fat) @@ -243,131 +239,159 @@ - Language: - Nyelv: + Language (l): + Nyelv (l): MainWindow - - System recovery - Rendszer helyreállító - - - - + Install OS OS telepítése - - Return - Vissza + + Installs the selected operating system image onto this SD card. + - - Exit - Kilépés + + Exit (Esc) + Kilépés (Esc) - - Esc - Esc + + Exits and boots the installed operating system. + - + Advanced Fejlett - + Add image Lemezkép hozzáadása - + Remove image Lemezkép eltávolítása - - Edit config - Konfiguráció szerkesztése - - - - Online help - Online segítség + Edit config (e) + Konfiguráció szerkesztése (e) - - [RECOMMENDED] - [AJÁNLOTT] + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + - + + Online help (h) + Online segítség (h) + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + RECOMMENDED + AJÁNLOTT + + + Confirm Megerősítés - - Pi Recovery - Built:%1 - Pi helyreállító - Csomagolva: %1 + + NOOBS v%1 - Built: %2 + - + Setting up SD card SD kártya összeállítása - + No OS Images Found on SD Card Nem található OS lemezképfájl a SD kártyán - + Please add at least one OS image to the /images directory in order to proceed Kérlek, hogy másolj legalább egy OS lemezképfájlt az /images mappába a folytatáshoz - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. Figyelem: a kiválasztott OS telepítésre kerül. Az SD kártyán lévő ÖSSZES ADAT FELÜL LESZ ÍRVA. - - Starting image write - Das Image wird geschrieben - - - + Restore complete Wiederherstellung vollständing - + Image applied successfully Lemezkép sikeresen telepítve - + Error Hiba - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface Hálózati interfész aktiválása - + No network access Nincs hálózati hozzáférés - + Wired network access is required for this feature. Please insert a network cable into the network port. Vezetékes hálózati hozzáférés szükséges ehhez a funkcióhoz. Kérlek, hogy dugj be egy hálózati kábelt a hálózati csatlakozóba. @@ -375,12 +399,12 @@ ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) %1 MB lett eddig kiírva a %2 MB-ból (%3 MB/mp) - + %1 MB written (%2 MB/sec) %1 MB lett eddig kiírva (%2 MB/mp) @@ -388,42 +412,42 @@ QDialogButtonBox - + OK OK - + Cancel Mégse - + &Cancel &Mégse - + Close Bezárás - + &Close &Bezárás - + &Yes &Igen - + &No &Nem - + &OK &OK diff --git a/recovery/translation_ja.qm b/recovery/translation_ja.qm deleted file mode 100644 index bd4d71ee..00000000 Binary files a/recovery/translation_ja.qm and /dev/null differ diff --git a/recovery/translation_ja.ts b/recovery/translation_ja.ts index d71b5fc7..e9b1f0a3 100644 --- a/recovery/translation_ja.ts +++ b/recovery/translation_ja.ts @@ -146,8 +146,8 @@ - Error formatting boot partition (vfat) - ブートパーティション(VFAT)のフォーマットエラー + Error formatting boot partition (fat) + ブートパーティション(FAT)のフォーマットエラー @@ -239,131 +239,159 @@ - Language: - 言語: + Language (l): + 言語 (l): MainWindow - - System recovery - システムの回復 - - - - + Install OS イメージの復元 - - Return - リターン + + Installs the selected operating system image onto this SD card. + - - Exit - 終了 + + Exit (Esc) + 終了(Esc) - - Esc - + + Exits and boots the installed operating system. + - + Advanced - + Add image - + Remove image - - Edit config - - - - - Online help + Edit config (e) - - [RECOMMENDED] + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. - + + Online help (h) + + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + RECOMMENDED + + + + Confirm 確認 - - Pi Recovery - Built:%1 + + NOOBS v%1 - Built: %2 - + Setting up SD card SDカードのセットアップ - + No OS Images Found on SD Card - + Please add at least one OS image to the /images directory in order to proceed - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. 本当にイメージを書き込んでもよいですか?この操作で既存のすべてのデータは削除されます! - - Starting image write - イメージの書込みを開始します - - - + Restore complete リストア完了 - + Image applied successfully イメージは正常に適用されました - + Error エラー - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface ネットワーク·インターフェースを有効にしています - + No network access - + Wired network access is required for this feature. Please insert a network cable into the network port. @@ -371,12 +399,12 @@ ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) - + %1 MB written (%2 MB/sec) @@ -384,42 +412,42 @@ QDialogButtonBox - + OK OK - + Cancel キャンセル - + &Cancel キャンセル(&C) - + Close 閉じる - + &Close 閉じる(&C) - + &Yes はい(&Y) - + &No いいえ(&N) - + &OK &OK diff --git a/recovery/translation_nl.qm b/recovery/translation_nl.qm deleted file mode 100644 index cd708f4e..00000000 Binary files a/recovery/translation_nl.qm and /dev/null differ diff --git a/recovery/translation_nl.ts b/recovery/translation_nl.ts index 35998a18..bc2127b1 100644 --- a/recovery/translation_nl.ts +++ b/recovery/translation_nl.ts @@ -103,10 +103,6 @@ Mounting FAT partition Mounten FAT partitie - - SD card contains extra files that do not belong to this distribution. Please copy them to another disk and delete them from card. - SD kaart bevat extra bestanden die niet bij deze software horen. Kopieer deze naar een andere schijf en verwijder deze. - Saving boot files to memory @@ -150,8 +146,8 @@ - Error formatting boot partition (vfat) - Fout bij formateren boot partitie (vfat) + Error formatting boot partition (fat) + Fout bij formateren boot partitie (fat) @@ -243,132 +239,160 @@ - Language: - Taal: + Language (l): + Taal (l): MainWindow - - System recovery - Systeem herstel - - - - + Install OS Installeer - - Return - + + Installs the selected operating system image onto this SD card. + - - Exit - Afsluiten + + Exit (Esc) + Afsluiten (Esc) - - Esc - + + Exits and boots the installed operating system. + - + Advanced Geavanceerd - + Add image Image toevoegen - + Remove image Image verwijderen - - Edit config - Wijzig config - - - - Online help - Online help + Edit config (e) + Wijzig config (e) - - [RECOMMENDED] - [AANBEVOLEN] + + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + - + + Online help (h) + Online help (h) + + + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + RECOMMENDED + AANBEVOLEN + + + Confirm Bevestigen - - Pi Recovery - Built:%1 + + NOOBS v%1 - Built: %2 - + Setting up SD card SD card voorbereiden - + No OS Images Found on SD Card - + Please add at least one OS image to the /images directory in order to proceed - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. Weet u zeker dat u de image wilt installeren? Hierbij worden alle bestaande bestanden verwijderd. - - Starting image write - Bezig met wegschrijven image - - - + Restore complete Klaar met herstellen - + Image applied successfully Image successvol weggeschreven - + Error Fout - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface Activeren netwerk verbinding - + No network access Geen netwerk verbinding - + Wired network access is required for this feature. Please insert a network cable into the network port. Een bekabelde netwerk verbinding is vereist voor deze functionaliteit. Controleer of de netwerk kabel aangesloten zit. @@ -376,12 +400,12 @@ Hierbij worden alle bestaande bestanden verwijderd. ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) %1 MB van %2 MB weggeschreven (%3 MB/sec) - + %1 MB written (%2 MB/sec) %1 MB weggeschreven (%2 MB/sec) @@ -389,45 +413,42 @@ Hierbij worden alle bestaande bestanden verwijderd. QDialogButtonBox - + OK OK - + &OK &OK - + Cancel Annuleren - + &Cancel - &amp;Cancel &Annuleren - + &Close - &amp;Close &Sluiten - + Close Sluiten - + &Yes - &amp;Yes &Ja - + &No &Nee diff --git a/recovery/translation_pt.qm b/recovery/translation_pt.qm deleted file mode 100644 index 390f00b5..00000000 Binary files a/recovery/translation_pt.qm and /dev/null differ diff --git a/recovery/translation_pt.ts b/recovery/translation_pt.ts index 14234874..06fc9999 100644 --- a/recovery/translation_pt.ts +++ b/recovery/translation_pt.ts @@ -146,8 +146,8 @@ - Error formatting boot partition (vfat) - Erro ao formatar partição de boot (VFAT) + Error formatting boot partition (fat) + Erro ao formatar partição de boot (FAT) @@ -239,40 +239,34 @@ - Language: - Língua: + Language (l): + Língua (l): MainWindow - - System recovery - Recuperação do sistema - - - - + Install OS Restaurar imagem - Return - Retorno - - - - Exit - Sair - - - - Esc - + Installs the selected operating system image onto this SD card. + + Exit (Esc) + Sair (Esc) + + + + Exits and boots the installed operating system. + + + + Advanced Avançado @@ -288,32 +282,41 @@ - Edit config - Editar Configuração + Edit config (e) + Editar Configuração (e) - - Online help - Ajuda Online + Opens the config.txt and cmdline.txt for the installed OS in a text editor. + - - [RECOMMENDED] - [RECOMENDADO] + + Online help (h) + Ajuda Online (h) - + + Opens a web browser displaying the Raspberry Pi Forum. + + + + + RECOMMENDED + RECOMENDADO + + + Confirm Confirmar - - Pi Recovery - Built:%1 - Restauração do Pi - Feita: %1 + + NOOBS v%1 - Built: %2 + - + Setting up SD card Configurando cartão SD @@ -328,17 +331,12 @@ Por favor adicione pelo menos uma imagem de SO ao diretório /images para proceder - + Warning: this will install the selected Operating System. All existing data on the SD card will be overwritten. Você tem certeza que deseja gravar a imagem? ISSO EXCLUIRÁ TODOS OS DADOS EXISTENTES! - - Starting image write - Iniciando gravação da imagem - - - + Restore complete Restauração concluída @@ -353,7 +351,37 @@ - + + Display Mode Changed + + + + + Display mode changed to %1 + + + + + HDMI preferred mode + + + + + HDMI safe mode + + + + + composite PAL mode + + + + + composite NTSC mode + + + + Enabling network interface Habilitando interface da rede @@ -371,7 +399,7 @@ ProgressSlideshowDialog - + %1 MB of %2 MB written (%3 MB/sec) %1 MB de %2 MB gravado(s) (%3 MB/s) @@ -384,7 +412,7 @@ QDialogButtonBox - + OK OK diff --git a/recovery/updateqm.sh b/recovery/updateqm.sh new file mode 100755 index 00000000..ed9d2081 --- /dev/null +++ b/recovery/updateqm.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +lupdate -no-obsolete recovery.pro +lrelease recovery.pro