├── .github └── ISSUE_TEMPLATE │ ├── bug-report.yml │ ├── config.yml │ └── feature-request.yml ├── .gitignore ├── .qmllint.ini ├── README.md ├── build-qt.sh ├── create-appimage.sh ├── create-embedded.sh ├── debian ├── changelog ├── compat ├── control ├── copyright ├── org.raspberrypi.rpi-imager-embedded.desktop ├── org.raspberrypi.rpi-imager.desktop ├── org.raspberrypi.rpi-imager.metainfo.xml ├── postinst ├── rpi-imager-amd64.install ├── rpi-imager-embedded.install ├── rpi-imager-embedded.postinst ├── rpi-imager-embedded.rpi-imager-eglfs.service ├── rpi-imager.install ├── rpi-imager.manpages ├── rpi-imager.png ├── rules └── source │ ├── format │ └── options ├── doc ├── json-schema │ ├── os-list-schema.html │ ├── os-list-schema.json │ ├── schema_doc.css │ └── schema_doc.min.js ├── man │ └── rpi-imager.1 └── os-sublist-example.json ├── embedded ├── .gitignore ├── build.sh ├── buildroot-2024.02.3.tar.gz ├── buildroot-mesa3d.patch ├── imager │ ├── Config.in │ ├── board │ │ ├── bcm2711_defconfig_minus_modules │ │ ├── kernel_config_fragment_imager │ │ ├── overlay │ │ │ ├── etc │ │ │ │ └── init.d │ │ │ │ │ └── S99rpi-imager │ │ │ ├── init │ │ │ └── usr │ │ │ │ ├── lib │ │ │ │ └── fonts │ │ │ │ └── share │ │ │ │ ├── fonts │ │ │ │ └── truetype │ │ │ │ │ └── droid │ │ │ │ │ └── DroidSansFallback.ttf │ │ │ │ └── qmaps │ │ │ │ ├── af.qmap │ │ │ │ ├── al.qmap │ │ │ │ ├── am.qmap │ │ │ │ ├── ara.qmap │ │ │ │ ├── at.qmap │ │ │ │ ├── au.qmap │ │ │ │ ├── az.qmap │ │ │ │ ├── ba.qmap │ │ │ │ ├── bd.qmap │ │ │ │ ├── be.qmap │ │ │ │ ├── bg.qmap │ │ │ │ ├── br.qmap │ │ │ │ ├── brai.qmap │ │ │ │ ├── bt.qmap │ │ │ │ ├── bw.qmap │ │ │ │ ├── by.qmap │ │ │ │ ├── ca.qmap │ │ │ │ ├── cd.qmap │ │ │ │ ├── ch.qmap │ │ │ │ ├── cm.qmap │ │ │ │ ├── cn.qmap │ │ │ │ ├── cz.qmap │ │ │ │ ├── de.qmap │ │ │ │ ├── dk.qmap │ │ │ │ ├── dz.qmap │ │ │ │ ├── ee.qmap │ │ │ │ ├── epo.qmap │ │ │ │ ├── es.qmap │ │ │ │ ├── et.qmap │ │ │ │ ├── fi.qmap │ │ │ │ ├── fo.qmap │ │ │ │ ├── fr.qmap │ │ │ │ ├── gb.qmap │ │ │ │ ├── ge.qmap │ │ │ │ ├── gh.qmap │ │ │ │ ├── gn.qmap │ │ │ │ ├── gr.qmap │ │ │ │ ├── hr.qmap │ │ │ │ ├── hu.qmap │ │ │ │ ├── id.qmap │ │ │ │ ├── ie.qmap │ │ │ │ ├── il.qmap │ │ │ │ ├── in.qmap │ │ │ │ ├── iq.qmap │ │ │ │ ├── ir.qmap │ │ │ │ ├── is.qmap │ │ │ │ ├── it.qmap │ │ │ │ ├── jp.qmap │ │ │ │ ├── jv.qmap │ │ │ │ ├── ke.qmap │ │ │ │ ├── kg.qmap │ │ │ │ ├── kh.qmap │ │ │ │ ├── kr.qmap │ │ │ │ ├── kz.qmap │ │ │ │ ├── la.qmap │ │ │ │ ├── latam.qmap │ │ │ │ ├── lk.qmap │ │ │ │ ├── lt.qmap │ │ │ │ ├── lv.qmap │ │ │ │ ├── ma.qmap │ │ │ │ ├── mao.qmap │ │ │ │ ├── md.qmap │ │ │ │ ├── me.qmap │ │ │ │ ├── mk.qmap │ │ │ │ ├── ml.qmap │ │ │ │ ├── mm.qmap │ │ │ │ ├── mn.qmap │ │ │ │ ├── mt.qmap │ │ │ │ ├── mv.qmap │ │ │ │ ├── my.qmap │ │ │ │ ├── ng.qmap │ │ │ │ ├── nl.qmap │ │ │ │ ├── no.qmap │ │ │ │ ├── np.qmap │ │ │ │ ├── ph.qmap │ │ │ │ ├── pk.qmap │ │ │ │ ├── pl.qmap │ │ │ │ ├── pt.qmap │ │ │ │ ├── ro.qmap │ │ │ │ ├── rs.qmap │ │ │ │ ├── ru.qmap │ │ │ │ ├── se.qmap │ │ │ │ ├── si.qmap │ │ │ │ ├── sk.qmap │ │ │ │ ├── sn.qmap │ │ │ │ ├── sy.qmap │ │ │ │ ├── tg.qmap │ │ │ │ ├── th.qmap │ │ │ │ ├── tj.qmap │ │ │ │ ├── tm.qmap │ │ │ │ ├── tr.qmap │ │ │ │ ├── tw.qmap │ │ │ │ ├── tz.qmap │ │ │ │ ├── ua.qmap │ │ │ │ ├── us.qmap │ │ │ │ ├── uz.qmap │ │ │ │ ├── vn.qmap │ │ │ │ └── za.qmap │ │ └── post-build.sh │ ├── configs │ │ └── rpi-imager_defconfig │ ├── external.desc │ ├── external.mk │ └── package │ │ ├── rpi-firmware-custom │ │ ├── Config.in │ │ └── rpi-firmware-custom.mk │ │ └── rpi-imager │ │ ├── 0001-embedded-OptionsWindow-becomes-a-Popup.patch │ │ ├── Config.in │ │ └── rpi-imager.mk ├── legal-info │ ├── host-licenses │ │ ├── acl-2.3.1 │ │ │ └── doc │ │ │ │ ├── COPYING │ │ │ │ └── COPYING.LGPL │ │ ├── attr-2.5.1 │ │ │ └── doc │ │ │ │ ├── COPYING │ │ │ │ └── COPYING.LGPL │ │ ├── autoconf-2.71 │ │ │ ├── COPYING.EXCEPTION │ │ │ └── COPYINGv3 │ │ ├── autoconf-archive-2021.02.19 │ │ │ ├── COPYING │ │ │ └── COPYING.EXCEPTION │ │ ├── automake-1.16.5 │ │ │ └── COPYING │ │ ├── binutils-2.36.1 │ │ │ ├── COPYING.LIB │ │ │ └── COPYING3 │ │ ├── bison-3.8.2 │ │ │ └── COPYING │ │ ├── expat-2.4.1 │ │ │ └── COPYING │ │ ├── fakeroot-1.26 │ │ │ └── COPYING │ │ ├── flex-2.6.4 │ │ │ └── COPYING │ │ ├── gawk-5.1.1 │ │ │ └── COPYING │ │ ├── gettext-tiny-0.3.2 │ │ │ ├── LICENSE │ │ │ └── extra │ │ │ │ └── COPYING │ │ ├── gmp-6.2.1 │ │ │ ├── COPYING.LESSERv3 │ │ │ └── COPYINGv2 │ │ ├── gperf-3.1 │ │ │ └── COPYING │ │ ├── kmod-29 │ │ │ └── libkmod │ │ │ │ └── COPYING │ │ ├── libffi-3.4.2 │ │ │ └── LICENSE │ │ ├── libopenssl-1.1.1m │ │ │ └── LICENSE │ │ ├── libtool-2.4.6 │ │ │ ├── COPYING │ │ │ └── libltdl │ │ │ │ └── COPYING.LIB │ │ ├── libzlib-1.2.11 │ │ │ └── README │ │ ├── m4-1.4.19 │ │ │ └── COPYING │ │ ├── meson-0.61.0 │ │ │ └── COPYING │ │ ├── mpc-1.2.1 │ │ │ └── COPYING.LESSER │ │ ├── mpfr-4.1.0 │ │ │ └── COPYING.LESSER │ │ ├── ninja-1.10.2 │ │ │ └── COPYING │ │ ├── patchelf-0.9 │ │ │ └── COPYING │ │ ├── pkgconf-1.6.3 │ │ │ └── COPYING │ │ ├── python-mako-1.1.5 │ │ │ └── LICENSE │ │ ├── python-markupsafe-2.0.1 │ │ │ └── LICENSE.rst │ │ ├── python3-3.10.1 │ │ │ └── LICENSE │ │ ├── python3-setuptools-59.8.0 │ │ │ └── LICENSE │ │ └── zstd-1.5.1 │ │ │ ├── COPYING │ │ │ └── LICENSE │ ├── host-manifest.csv │ ├── licenses.csv │ └── licenses │ │ ├── busybox-1.34.1 │ │ ├── LICENSE │ │ └── archival │ │ │ └── libarchive │ │ │ └── bz │ │ │ └── LICENSE │ │ ├── ca-certificates-20211016 │ │ └── debian │ │ │ └── copyright │ │ ├── dhcpcd-9.4.1 │ │ └── LICENSE │ │ ├── dosfstools-4.2 │ │ └── COPYING │ │ ├── eudev-3.2.11 │ │ └── COPYING │ │ ├── expat-2.4.1 │ │ └── COPYING │ │ ├── freetype-2.11.1 │ │ ├── LICENSE.TXT │ │ └── docs │ │ │ ├── FTL.TXT │ │ │ └── GPLv2.TXT │ │ ├── glibc-2.34-9-g9acab0bba6a5a57323b1f94bf95b21618a9e5aa4 │ │ ├── COPYING │ │ ├── COPYING.LIB │ │ └── LICENSES │ │ ├── jpeg-turbo-2.1.2 │ │ ├── LICENSE.md │ │ └── README.ijg │ │ ├── kmod-29 │ │ └── libkmod │ │ │ └── COPYING │ │ ├── libarchive-3.5.2 │ │ └── COPYING │ │ ├── libcurl-7.81.0 │ │ └── COPYING │ │ ├── libdrm-2.4.109 │ │ └── data │ │ │ └── meson.build │ │ ├── libopenssl-1.1.1m │ │ └── LICENSE │ │ ├── libpng-1.6.37 │ │ └── LICENSE │ │ ├── libpthread-stubs-0.4 │ │ └── COPYING │ │ ├── libzlib-1.2.11 │ │ └── README │ │ ├── mesa3d-21.3.3 │ │ └── docs │ │ │ └── license.rst │ │ ├── pcre2-10.39 │ │ └── LICENCE │ │ ├── qt5base-5.15.2 │ │ ├── LICENSE.FDL │ │ ├── LICENSE.GPL2 │ │ ├── LICENSE.GPL3 │ │ ├── LICENSE.GPL3-EXCEPT │ │ └── LICENSE.LGPLv3 │ │ ├── qt5declarative-5.15.2 │ │ ├── LICENSE.FDL │ │ ├── LICENSE.GPL2 │ │ ├── LICENSE.GPL3 │ │ ├── LICENSE.GPL3-EXCEPT │ │ └── LICENSE.LGPL3 │ │ ├── qt5quickcontrols2-5.15.2 │ │ ├── LICENSE.FDL │ │ ├── LICENSE.GPLv3 │ │ └── LICENSE.LGPLv3 │ │ ├── qt5svg-5.15.2 │ │ ├── LICENSE.FDL │ │ ├── LICENSE.GPL2 │ │ ├── LICENSE.GPLv3 │ │ └── LICENSE.LGPLv3 │ │ ├── qt5tools-5.15.2 │ │ ├── LICENSE.FDL │ │ ├── LICENSE.GPL2 │ │ ├── LICENSE.GPL3 │ │ ├── LICENSE.GPL3-EXCEPT │ │ └── LICENSE.LGPL3 │ │ ├── rpi-firmware-custom-827fdd073638fa7b7292d1148fe0af7465111eae │ │ └── boot │ │ │ └── LICENCE.broadcom │ │ ├── util-linux-2.37.2 │ │ ├── Documentation │ │ │ └── licenses │ │ │ │ ├── COPYING.BSD-3-Clause │ │ │ │ ├── COPYING.BSD-4-Clause-UC │ │ │ │ ├── COPYING.GPL-2.0-or-later │ │ │ │ ├── COPYING.ISC │ │ │ │ └── COPYING.LGPL-2.1-or-later │ │ └── README.licensing │ │ ├── util-linux-libs-2.37.2 │ │ ├── Documentation │ │ │ └── licenses │ │ │ │ ├── COPYING.BSD-3-Clause │ │ │ │ └── COPYING.LGPL-2.1-or-later │ │ └── README.licensing │ │ ├── xz-5.2.5 │ │ ├── COPYING │ │ ├── COPYING.GPLv2 │ │ ├── COPYING.GPLv3 │ │ └── COPYING.LGPLv2.1 │ │ └── zstd-1.5.1 │ │ ├── COPYING │ │ └── LICENSE └── output │ ├── cmdline.txt │ └── config.txt ├── license.txt ├── qt-build-README.md ├── src ├── .gitignore ├── CMakeLists.txt ├── DstPopup.qml ├── HwPopup.qml ├── MainPopupBase.qml ├── MainPopupListViewBase.qml ├── MsgPopup.qml ├── OSPopup.qml ├── OptionsGeneralTab.qml ├── OptionsMiscTab.qml ├── OptionsPopup.qml ├── OptionsServicesTab.qml ├── OptionsTabBase.qml ├── Style.qml ├── UseSavedSettingsPopup.qml ├── acceleratedcryptographichash.h ├── cli.cpp ├── cli.h ├── config.h ├── countries.txt ├── dependencies │ ├── drivelist │ │ ├── .editorconfig │ │ ├── .eslintrc.yml │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .resinci.yml │ │ ├── .travis.yml │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── appveyor.yml │ │ ├── binding.gyp │ │ ├── ci │ │ │ ├── prebuild-publish.bat │ │ │ └── prebuild-publish.sh │ │ ├── doc │ │ │ └── README.hbs │ │ ├── example │ │ │ └── index.ts │ │ ├── lib │ │ │ ├── index.ts │ │ │ └── lsblk │ │ │ │ ├── index.ts │ │ │ │ ├── json.ts │ │ │ │ └── pairs.ts │ │ ├── requirements.txt │ │ ├── src │ │ │ ├── darwin │ │ │ │ ├── REDiskList.h │ │ │ │ ├── REDiskList.m │ │ │ │ └── list.mm │ │ │ ├── device-descriptor.cpp │ │ │ ├── drivelist.cpp │ │ │ ├── drivelist.hpp │ │ │ ├── linux │ │ │ │ └── list.cpp │ │ │ └── windows │ │ │ │ ├── list.cpp │ │ │ │ └── list.hpp │ │ ├── tests │ │ │ ├── data │ │ │ │ └── lsblk │ │ │ │ │ ├── no-children-mountpoints.json │ │ │ │ │ ├── no-partition-table.txt │ │ │ │ │ ├── ubuntu-14.04-1.txt │ │ │ │ │ ├── ubuntu-14.04-2.txt │ │ │ │ │ └── ubuntu-14.04-3.txt │ │ │ ├── drivelist.spec.ts │ │ │ └── lsblk.spec.ts │ │ └── tsconfig.json │ ├── fat32format │ │ ├── .gitignore │ │ ├── CMakeLists.txt │ │ ├── LICENSE │ │ ├── Makefile │ │ ├── README.md │ │ ├── fat32format.cpp │ │ ├── fat32format.sln │ │ ├── fat32format.vcxproj │ │ └── fat32format.vcxproj.filters │ ├── mountutils │ │ ├── .editorconfig │ │ ├── .eslintrc.yml │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .travis.yml │ │ ├── CHANGELOG.md │ │ ├── MANUAL_TESTS.md │ │ ├── README.md │ │ ├── appveyor.yml │ │ ├── binding.gyp │ │ ├── docs │ │ │ └── README.hbs │ │ ├── index.js │ │ ├── requirements.txt │ │ ├── scripts │ │ │ ├── prebuild-publish.bat │ │ │ └── prebuild-publish.sh │ │ └── src │ │ │ ├── darwin │ │ │ └── functions.cpp │ │ │ ├── linux │ │ │ └── functions.cpp │ │ │ ├── mountutils.cpp │ │ │ ├── mountutils.hpp │ │ │ ├── windows │ │ │ └── functions.cpp │ │ │ ├── worker-eject.cpp │ │ │ └── worker-unmount.cpp │ └── sha256crypt │ │ ├── sha256crypt.c │ │ └── sha256crypt.h ├── devicewrapper.cpp ├── devicewrapper.h ├── devicewrapperblockcacheentry.cpp ├── devicewrapperblockcacheentry.h ├── devicewrapperfatpartition.cpp ├── devicewrapperfatpartition.h ├── devicewrapperpartition.cpp ├── devicewrapperpartition.h ├── devicewrapperstructs.h ├── disk_formatter.cpp ├── disk_formatter.h ├── disk_formatter_test.cpp ├── downloadextractthread.cpp ├── downloadextractthread.h ├── downloadstatstelemetry.cpp ├── downloadstatstelemetry.h ├── downloadthread.cpp ├── downloadthread.h ├── driveformatthread.cpp ├── driveformatthread.h ├── drivelistitem.cpp ├── drivelistitem.h ├── drivelistmodel.cpp ├── drivelistmodel.h ├── drivelistmodelpollthread.cpp ├── drivelistmodelpollthread.h ├── fonts │ ├── Roboto-Bold.ttf │ ├── Roboto-Light.ttf │ └── Roboto-Regular.ttf ├── hwlistmodel.cpp ├── hwlistmodel.h ├── i18n │ ├── rpi-imager_ca.ts │ ├── rpi-imager_de.ts │ ├── rpi-imager_en.ts │ ├── rpi-imager_es.ts │ ├── rpi-imager_fr.ts │ ├── rpi-imager_he.ts │ ├── rpi-imager_it.ts │ ├── rpi-imager_ja.ts │ ├── rpi-imager_ka.ts │ ├── rpi-imager_ko.ts │ ├── rpi-imager_nl.ts │ ├── rpi-imager_pl.ts │ ├── rpi-imager_pt.ts │ ├── rpi-imager_ru.ts │ ├── rpi-imager_sk.ts │ ├── rpi-imager_sl.ts │ ├── rpi-imager_tr.ts │ ├── rpi-imager_uk.ts │ ├── rpi-imager_zh-TW.ts │ ├── rpi-imager_zh.ts │ └── translations.qrc ├── icons │ ├── cat_3d_printing.png │ ├── cat_digital_signage.png │ ├── cat_emulation_and_games.png │ ├── cat_home_automation.png │ ├── cat_language_specific_operating_systems.png │ ├── cat_media_players.png │ ├── cat_misc_utility_images.png │ ├── cat_other_general_purpose_operating_systems.png │ ├── cat_other_specific_purpose_operating_systems.png │ ├── cat_raspberry_pi_os.png │ ├── erase.png │ ├── ic_chevron_left_40px.svg │ ├── ic_chevron_right_40px.svg │ ├── ic_cog_red.svg │ ├── ic_delete_40px.svg │ ├── ic_info_12px.png │ ├── ic_info_16px.png │ ├── ic_sd_storage_40px.svg │ ├── ic_storage_40px.svg │ ├── ic_usb_40px.svg │ ├── logo_stacked_imager.png │ ├── logo_sxs_imager.png │ ├── rpi-imager.icns │ ├── rpi-imager.ico │ └── use_custom.png ├── imagewriter.cpp ├── imagewriter.h ├── keymap-layouts.txt ├── linux │ ├── acceleratedcryptographichash_gnutls.cpp │ ├── linuxdrivelist.cpp │ ├── networkmanagerapi.cpp │ ├── networkmanagerapi.h │ ├── stpanalyzer.cpp │ ├── stpanalyzer.h │ ├── udisks2api.cpp │ └── udisks2api.h ├── localfileextractthread.cpp ├── localfileextractthread.h ├── mac │ ├── Info.plist.in │ ├── acceleratedcryptographichash_commoncrypto.cpp │ ├── macfile.cpp │ ├── macfile.h │ ├── macos_post_build.sh.in │ ├── macwlancredentials.cpp │ └── macwlancredentials.h ├── main.cpp ├── main.qml ├── nan.h ├── networkaccessmanagerfactory.cpp ├── networkaccessmanagerfactory.h ├── oslistmodel.cpp ├── oslistmodel.h ├── powersaveblocker.cpp ├── powersaveblocker.h ├── qml.qrc ├── qmlcomponents │ ├── ImButton.qml │ ├── ImButtonRed.qml │ ├── ImCheckBox.qml │ ├── ImCloseButton.qml │ ├── ImPopup.qml │ └── ImRadioButton.qml ├── qtquickcontrols2.conf ├── test_formatter.cmake ├── timezones.txt ├── windows │ ├── acceleratedcryptographichash_cng.cpp │ ├── inno_setup_readme.md │ ├── rpi-imager-cli.cmd │ ├── rpi-imager.iss.in │ ├── rpi-imager.manifest │ ├── rpi-imager.nsi.in │ ├── rpi-imager.rc │ ├── winfile.cpp │ ├── winfile.h │ ├── winwlancredentials.cpp │ ├── winwlancredentials.h │ └── wlanapi.def ├── wlancredentials.cpp └── wlancredentials.h └── tests ├── README.md ├── cache └── .gitignore ├── conftest.py ├── test_firstrun.txt ├── test_schema.py ├── test_urls.py └── test_write_images.py /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- 1 | name: Feature Request 2 | description: What would you like to see from rpi-imager? 3 | title: "[FEATURE]: " 4 | labels: ["enhancement", "triage"] 5 | projects: [] 6 | assignees: [] 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to fill out this feature request! 12 | - type: textarea 13 | id: what-could-be-better 14 | attributes: 15 | label: Is your feature request related to a problem? Please describe. 16 | description: A description of the issue you're facing that requires this feature. 17 | placeholder: Ex. I never notice when OS writing has finished... 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: what-do-you-want-to-see 22 | attributes: 23 | label: Describe the solution you would like to see implemented 24 | description: A clear and concise description of what you want to happen. 25 | placeholder: Ex. rpi-imager should initiate a confetti shower when writing is finished 26 | validations: 27 | required: true 28 | - type: textarea 29 | id: what-else-did-you-consider 30 | attributes: 31 | label: Describe alternatives you've considered 32 | description: A clear and concise description of any alternative solutions or features you've considered. 33 | placeholder: Ex. Alert sirens, SMS notifications, hiring a sky writer 34 | validations: 35 | required: true 36 | - type: textarea 37 | id: anything-else 38 | attributes: 39 | label: Additional context 40 | description: Add any other context or screenshots about the feature request here. 41 | placeholder: Ex. Must be large confetti to make it easier to clean up 42 | validations: 43 | required: true 44 | - type: dropdown 45 | id: version 46 | attributes: 47 | label: Version 48 | description: What version of our software did you last run? 49 | options: 50 | - 1.9.4 (Default) 51 | - 1.9.0 52 | - 1.8.5 53 | - 1.8.4 54 | - 1.8.3 55 | - 1.8.2 56 | - 1.8.1 57 | - < 1.8.0 58 | default: 0 59 | validations: 60 | required: true 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build** 2 | src/build/* 3 | src/build/** 4 | compile_commands.json 5 | src/.cache/clangd 6 | obj-** 7 | 8 | # IDE Configurations 9 | .vscode 10 | .zed 11 | 12 | # Debian packaging 13 | debian/rpi-imager/** 14 | debian/rpi-imager-amd64/** 15 | debian/rpi-imager-embedded/** 16 | debian/.debhelper** 17 | debian/*.debhelper** 18 | debian/files 19 | debian/*.substvars 20 | debian/debhelper** 21 | debian/tmp 22 | 23 | # macOS 24 | .DS_Store 25 | *.DS_Store 26 | # editor backups 27 | *.*swp* 28 | 29 | # AppImage related 30 | *.AppImage* 31 | *.appimagecraft* 32 | AppDir-* 33 | appimage-* 34 | 35 | # Qt related 36 | qt-build 37 | qt-src 38 | build 39 | build-aarch64 40 | build-x86_64 41 | -------------------------------------------------------------------------------- /.qmllint.ini: -------------------------------------------------------------------------------- 1 | [General] 2 | AdditionalQmlImportPaths= 3 | DisableDefaultImports=false 4 | MaxWarnings=0 5 | OverwriteImportTypes= 6 | ResourcePath= 7 | 8 | [Warnings] 9 | AccessSingletonViaObject=warning 10 | Anchors=warning 11 | AttachedPropertyReuse=warning 12 | AttachedPropertyType=warning 13 | BadSignalHandler=warning 14 | BadSignalHandlerParameters=warning 15 | CompilerWarnings=disable 16 | ControlsAttachedPropertyReuse=warning 17 | ControlsNativeCustomize=warning 18 | Deprecated=warning 19 | DuplicatePropertyBinding=warning 20 | DuplicatedName=warning 21 | ImportFailure=warning 22 | IncompatibleType=warning 23 | InheritanceCycle=warning 24 | InvalidLintDirective=warning 25 | LayoutsPositioning=warning 26 | LintPluginWarnings=warning 27 | MissingProperty=warning 28 | MissingType=warning 29 | MultilineStrings=warning 30 | NonListProperty=warning 31 | PrefixedImportType=warning 32 | PropertyAlias=warning 33 | PropertyAliasCycles=warning 34 | PropertyChangesParsed=warning 35 | ReadOnlyProperty=warning 36 | RequiredProperty=warning 37 | RestrictedType=warning 38 | TopLevelComponent=warning 39 | TypeError=warning 40 | UncreatableType=warning 41 | UnexpectedVarType=warning 42 | UnknownProperty=warning 43 | UnqualifiedAccess=warning 44 | UnresolvedType=warning 45 | UnusedImports=warning 46 | UseProperFunction=warning 47 | VarUsedBeforeDeclaration=warning 48 | WithStatement=warning 49 | -------------------------------------------------------------------------------- /debian/compat: -------------------------------------------------------------------------------- 1 | 13 2 | -------------------------------------------------------------------------------- /debian/control: -------------------------------------------------------------------------------- 1 | Source: rpi-imager 2 | Section: admin 3 | Priority: optional 4 | Maintainer: Tom Dewey 5 | Build-Depends: debhelper (>= 13), cmake, libgnutls28-dev, dh-exec 6 | Standards-Version: 4.1.2 7 | Homepage: https://www.raspberrypi.com/software 8 | 9 | Package: rpi-imager 10 | Build-Profiles: 11 | Architecture: arm64 12 | Depends: ${shlibs:Depends}, ${misc:Depends}, dosfstools, fdisk, fuse, libfuse2, util-linux (>= 2.37) 13 | Recommends: udisks2 14 | Conflicts: rpi-imager-embedded, rpi-imager-amd64 15 | Description: Raspberry Pi Imaging utility 16 | A user-friendly tool for creating bootable media for Raspberry Pi Devices. 17 | 18 | Package: rpi-imager-amd64 19 | Build-Profiles: 20 | Architecture: amd64 21 | Depends: ${shlibs:Depends}, ${misc:Depends}, dosfstools, fdisk, fuse, libfuse2, util-linux (>= 2.37) 22 | Recommends: udisks2 23 | Conflicts: rpi-imager-embedded, rpi-imager 24 | Description: Raspberry Pi Imaging utility (x86_64) 25 | A user-friendly tool for creating bootable media for Raspberry Pi Devices. 26 | . 27 | This is the x86_64/amd64 version. 28 | 29 | Package: rpi-imager-embedded 30 | Build-Profiles: 31 | Architecture: arm64 32 | Depends: ${shlibs:Depends}, ${misc:Depends}, 33 | dosfstools, fdisk, fuse, libfuse2, util-linux (>= 2.37), 34 | libegl1-mesa, libgles2-mesa, libgbm1, libdrm2, 35 | libinput10, libudev1, libraspberrypi0 | mesa-utils 36 | Recommends: udisks2, gpu-mem-256 | raspi-config 37 | Suggests: rpi-eeprom, firmware-brcm80211 38 | Conflicts: rpi-imager, rpi-imager-amd64 39 | Description: Raspberry Pi Imaging utility for embedded systems 40 | A user-friendly tool for creating bootable media for Raspberry Pi devices, 41 | optimized for embedded systems. 42 | . 43 | This version is specifically designed for Raspberry Pi embedded systems: 44 | - Uses EGLFS for direct rendering (no desktop environment required) 45 | - Optimized for network-based installation 46 | - Includes proper OpenGL ES dependencies for Raspberry Pi 47 | - Smaller memory footprint for embedded applications 48 | - Supports both framebuffer and DRM/KMS rendering 49 | -------------------------------------------------------------------------------- /debian/copyright: -------------------------------------------------------------------------------- 1 | Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ 2 | Upstream-Name: rpi-imager 3 | Source: 4 | 5 | Files: * 6 | Copyright: 2020 Raspberry Pi Ltd 7 | License: Apache-2.0 8 | 9 | Files: src/dependencies/mountutils/* src/dependencies/drivelist/* 10 | Copyright: 2017 Balena.io 11 | License: Apache-2.0 12 | 13 | Files: src/dependencies/sha256crypt/* 14 | Copyright: Released into the Public Domain by Ulrich Drepper 15 | License: public-domain 16 | 17 | Files-Excluded: src/dependencies/cmcurl/* src/dependencies/cmliblzma/* src/dependencies/fat32format/* src/dependencies/libarchive-3.4.1/* src/dependencies/zlib-1.2.11/* 18 | Comment: Not used in Linux build (depending on the official packages instead) 19 | 20 | License: Apache-2.0 21 | Licensed under the Apache License, Version 2.0 (the "License"); 22 | you may not use this file except in compliance with the License. 23 | You may obtain a copy of the License at 24 | . 25 | https://www.apache.org/licenses/LICENSE-2.0 26 | . 27 | Unless required by applicable law or agreed to in writing, software 28 | distributed under the License is distributed on an "AS IS" BASIS, 29 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 30 | See the License for the specific language governing permissions and 31 | limitations under the License. 32 | . 33 | On Debian systems, the complete text of the Apache version 2.0 license 34 | can be found in "/usr/share/common-licenses/Apache-2.0". 35 | 36 | License: public-domain 37 | SHA256-based Unix crypt implementation. 38 | Released into the Public Domain by Ulrich Drepper 39 | 40 | -------------------------------------------------------------------------------- /debian/org.raspberrypi.rpi-imager-embedded.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Version=1.0 3 | Type=Application 4 | Name=Raspberry Pi Imager (Embedded) 5 | Comment=Raspberry Pi Imager for embedded systems (EGLFS) 6 | Exec=rpi-imager-embedded 7 | Icon=rpi-imager 8 | Terminal=false 9 | Categories=System;Utility;Embedded; 10 | Keywords=raspberry;pi;imager;embedded;eglfs;headless; 11 | X-GNOME-SingleWindow=true 12 | StartupNotify=false -------------------------------------------------------------------------------- /debian/org.raspberrypi.rpi-imager.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Version=1.5 4 | Name=Raspberry Pi Imager 5 | Name[zh_CN]=树莓派启动盘制作工具 6 | Comment=Tool for writing images to SD cards for Raspberry Pi 7 | Comment[zh_CN]=将镜像写入SD卡的树莓派工具 8 | Icon=rpi-imager 9 | Exec=/usr/bin/rpi-imager %F 10 | Categories=Utility; 11 | StartupNotify=false 12 | -------------------------------------------------------------------------------- /debian/postinst: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | if [ ! -x /usr/bin/rpi-imager ]; then 6 | chmod +x /usr/bin/rpi-imager 7 | fi 8 | 9 | #DEBHELPER# 10 | -------------------------------------------------------------------------------- /debian/rpi-imager-amd64.install: -------------------------------------------------------------------------------- 1 | #!/usr/bin/dh-exec 2 | 3 | rpi-imager-x86_64.AppImage => /usr/bin/rpi-imager 4 | 5 | debian/rpi-imager.png /usr/share/icons/hicolor/128x128/apps/ 6 | 7 | debian/org.raspberrypi.rpi-imager.desktop /usr/share/applications/ 8 | debian/org.raspberrypi.rpi-imager.metainfo.xml /usr/share/metainfo/ -------------------------------------------------------------------------------- /debian/rpi-imager-embedded.install: -------------------------------------------------------------------------------- 1 | #!/usr/bin/dh-exec 2 | 3 | rpi-imager-embedded.AppImage => /usr/bin/rpi-imager-embedded 4 | 5 | debian/rpi-imager.png /usr/share/icons/hicolor/128x128/apps/ 6 | 7 | debian/org.raspberrypi.rpi-imager-embedded.desktop /usr/share/applications/ -------------------------------------------------------------------------------- /debian/rpi-imager-embedded.postinst: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Configure system for optimal embedded operation 5 | if [ "$1" = "configure" ]; then 6 | # Add a launcher script for EGLFS mode 7 | cat > /usr/bin/rpi-imager-eglfs << 'EGLFS_EOF' 8 | #!/bin/bash 9 | # Launcher script for EGLFS mode 10 | export QT_QPA_PLATFORM=eglfs 11 | export QT_QPA_EGLFS_INTEGRATION=eglfs_kms 12 | export QT_QPA_EGLFS_ALWAYS_SET_MODE=1 13 | export QT_QUICK_CONTROLS_STYLE=Material 14 | export QT_OPENGL=es2 15 | 16 | # Check for available devices 17 | if [ -c /dev/dri/card0 ]; then 18 | export QT_QPA_EGLFS_KMS_DEVICE=/dev/dri/card0 19 | fi 20 | 21 | exec /usr/bin/rpi-imager-embedded "$@" 22 | EGLFS_EOF 23 | 24 | chmod +x /usr/bin/rpi-imager-eglfs 25 | 26 | echo "Raspberry Pi Imager (Embedded) installed successfully." 27 | echo "Run with: rpi-imager-embedded (requires display)" 28 | echo "Or for direct EGLFS: rpi-imager-eglfs (EGLFS mode)" 29 | fi 30 | 31 | #DEBHELPER# -------------------------------------------------------------------------------- /debian/rpi-imager-embedded.rpi-imager-eglfs.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Raspberry Pi Imager (Embedded EGLFS Mode) 3 | Documentation=https://github.com/raspberrypi/rpi-imager 4 | After=network-online.target 5 | Wants=network-online.target 6 | 7 | [Service] 8 | Type=simple 9 | ExecStart=/usr/bin/rpi-imager-embedded 10 | Restart=on-failure 11 | RestartSec=5 12 | User=root 13 | Group=root 14 | Environment=HOME=/root 15 | Environment=XDG_RUNTIME_DIR=/run/user/0 16 | 17 | # EGLFS specific environment 18 | Environment=QT_QPA_PLATFORM=eglfs 19 | Environment=QT_QPA_EGLFS_INTEGRATION=eglfs_kms 20 | Environment=QT_QPA_EGLFS_KMS_DEVICE=/dev/dri/card0 21 | Environment=QT_QPA_EGLFS_ALWAYS_SET_MODE=1 22 | Environment=QT_QUICK_CONTROLS_STYLE=Material 23 | Environment=QT_OPENGL=es2 24 | 25 | [Install] 26 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /debian/rpi-imager.install: -------------------------------------------------------------------------------- 1 | #!/usr/bin/dh-exec 2 | 3 | rpi-imager-aarch64.AppImage => /usr/bin/rpi-imager 4 | 5 | debian/rpi-imager.png /usr/share/icons/hicolor/128x128/apps/ 6 | 7 | debian/org.raspberrypi.rpi-imager.desktop /usr/share/applications/ 8 | debian/org.raspberrypi.rpi-imager.metainfo.xml /usr/share/metainfo/ -------------------------------------------------------------------------------- /debian/rpi-imager.manpages: -------------------------------------------------------------------------------- 1 | doc/man/rpi-imager.1 2 | -------------------------------------------------------------------------------- /debian/rpi-imager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/debian/rpi-imager.png -------------------------------------------------------------------------------- /debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | # See debhelper(7) (uncomment to enable) 3 | # output every command that modifies files on the build system. 4 | export DH_VERBOSE = 1 5 | 6 | # Get the list of packages that should be built based on build profiles 7 | PACKAGES := $(shell dh_listpackages) 8 | 9 | %: 10 | dh $@ 11 | 12 | # Override the build step to create version-independent symlinks 13 | override_dh_auto_build: 14 | dh_auto_build 15 | # Create version-independent symlinks for the packages that will be built 16 | ifneq (,$(filter rpi-imager,$(PACKAGES))) 17 | # Regular arm64 package - find and link the aarch64 AppImage (excluding embedded) 18 | if ls Raspberry_Pi_Imager-*-aarch64.AppImage 2>/dev/null | grep -v embedded | head -1 | xargs -I{} ln -sf {} rpi-imager-aarch64.AppImage; then :; fi 19 | endif 20 | ifneq (,$(filter rpi-imager-amd64,$(PACKAGES))) 21 | # AMD64 package - find and link the x86_64 AppImage 22 | if ls Raspberry_Pi_Imager-*-x86_64.AppImage 2>/dev/null | head -1 | xargs -I{} ln -sf {} rpi-imager-x86_64.AppImage; then :; fi 23 | endif 24 | ifneq (,$(filter rpi-imager-embedded,$(PACKAGES))) 25 | # Embedded package - find and link the embedded AppImage 26 | if ls Raspberry_Pi_Imager-*-embedded-aarch64.AppImage 2>/dev/null | head -1 | xargs -I{} ln -sf {} rpi-imager-embedded.AppImage; then :; fi 27 | endif 28 | 29 | .PHONY: override_dh_strip 30 | override_dh_strip: 31 | dh_strip --exclude=AppImage --exclude=rpi-imager 32 | -------------------------------------------------------------------------------- /debian/source/format: -------------------------------------------------------------------------------- 1 | 3.0 (native) 2 | -------------------------------------------------------------------------------- /debian/source/options: -------------------------------------------------------------------------------- 1 | tar-ignore = "release.appimagecraft.yml" 2 | tar-ignore = "*.AppImage" 3 | tar-ignore = "ci" 4 | tar-ignore = ".git" 5 | tar-ignore = "build" 6 | tar-ignore = "squashfs-root" 7 | tar-ignore = "AppDir-*" 8 | tar-ignore = "appdir-tools" 9 | tar-ignore = "build-*" 10 | tar-ignore = "qt-build" 11 | tar-ignore = "qt-src" 12 | -------------------------------------------------------------------------------- /doc/json-schema/schema_doc.min.js: -------------------------------------------------------------------------------- 1 | function flashElement(t){myElement=document.getElementById(t),myElement.classList.add("jsfh-animated-property"),setTimeout(function(){myElement.classList.remove("jsfh-animated-property")},1e3)}function setAnchor(t){history.pushState({},"",t)}function anchorOnLoad(){let t=window.location.hash.split("?")[0].split("&")[0];"#"===t[0]&&(t=t.substr(1)),t.length>0&&anchorLink(t)}function anchorLink(t){$("#"+t).parents().addBack().filter(".collapse:not(.show), .tab-pane, [role='tab']").each(function(t){if($(this).hasClass("collapse"))$(this).collapse("show");else if($(this).hasClass("tab-pane")){const t=$("a[href='#"+$(this).attr("id")+"']");t&&t.tab("show")}else"tab"===$(this).attr("role")&&$(this).tab("show")}),setTimeout(function(){let e=document.getElementById(t);e&&(e.scrollIntoView({block:"center",behavior:"smooth"}),setTimeout(function(){flashElement(t)},500))},1e3)}$(document).on("click",'a[href^="#"]',function(t){t.preventDefault(),history.pushState({},"",this.href)}); -------------------------------------------------------------------------------- /doc/os-sublist-example.json: -------------------------------------------------------------------------------- 1 | { 2 | "os_list": [ 3 | { 4 | "name": "Your Operating System Name", 5 | "description": "What your operating system does!", 6 | "url": "https://path.to/your/compressed/os.img.xz", 7 | "icon": "https://path.to/your/logo-as-svg-or-png-40x40.svg", 8 | "website": "https://path.to/your-website", 9 | "release_date": "2023-11-10", 10 | "extract_size": 4294967296, 11 | "extract_sha256": "ef1c726f03b91d81d432646c304b52d546814dec2acf173b2d218db259e8e52f", 12 | "image_download_size": 1073741824, 13 | "image_download_sha256": "863848ed058779d4603009e63d221b532549df1c58290c6a035bb5217922dac1", 14 | "devices": [ 15 | "pi4-32bit", 16 | "pi3-32bit", 17 | "pi2-32bit" 18 | ], 19 | "init_format": "systemd" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /embedded/.gitignore: -------------------------------------------------------------------------------- 1 | buildroot 2 | -------------------------------------------------------------------------------- /embedded/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | BUILDROOT=buildroot-2024.02.3 6 | BUILDROOT_TAR=buildroot-2024.02.3.tar.gz 7 | 8 | if [ ! -e "${BUILDROOT}" ]; then 9 | tar xvf "${BUILDROOT_TAR}" 10 | cd "${BUILDROOT}" && patch -p1 < "${OLDPWD}/buildroot-mesa3d.patch" && cd - 11 | fi 12 | 13 | if [ ! -e "${BUILDROOT}/.config" ]; then 14 | make -C "${BUILDROOT}" BR2_EXTERNAL="${PWD}/imager" rpi-imager_defconfig 15 | fi 16 | 17 | # 18 | # Build everything 19 | # 20 | make -C "${BUILDROOT}" BR2_EXTERNAL="$PWD/imager" 21 | 22 | # 23 | # Copy the files we are interested in from buildroot's "output/images" directory 24 | # to our "output" directory in top level directory 25 | # 26 | 27 | # Copy Linux kernel and initramfs 28 | cp "${BUILDROOT}/output/images/rootfs.cpio.zst" "${BUILDROOT}/output/images/Image.gz" output 29 | # Raspberry Pi firmware files 30 | cp "${BUILDROOT}/output/images/rpi-firmware/start4.elf" output 31 | cp "${BUILDROOT}/output/images/rpi-firmware/fixup4.dat" output 32 | 33 | # Not used by Pi 4, but need to be present to make usbboot think it is a valid directory 34 | touch output/bootcode.bin 35 | 36 | cp ${BUILDROOT}/output/images/bcm2711*.dtb output/ 37 | cp ${BUILDROOT}/output/images/bcm2712*.dtb output/ 38 | 39 | mkdir -p output/overlays 40 | 41 | cp ${BUILDROOT}/output/images/dwc2-overlay.dtb output/overlays/dwc2.dtbo 42 | cp ${BUILDROOT}/output/images/bcm2712d0-overlay.dtb output/overlays/bcm2712d0.dtbo 43 | cp ${BUILDROOT}/output/images/vc4-kms-v3d-pi5-overlay.dtb output/overlays/vc4-kms-v3d-pi5.dtbo 44 | cp ${BUILDROOT}/output/images/vc4-kms-v3d-pi4-overlay.dtb output/overlays/vc4-kms-v3d-pi4.dtbo 45 | cp ${BUILDROOT}/output/images/disable-bt-overlay.dtb output/overlays/disable-bt.dtbo 46 | cp ${BUILDROOT}/output/images/disable-wifi-overlay.dtb output/overlays/disable-wifi.dtbo 47 | cp ${BUILDROOT}/output/images/disable-bt-pi5-overlay.dtb output/overlays/disable-bt-pi5.dtbo 48 | cp ${BUILDROOT}/output/images/disable-wifi-pi5-overlay.dtb output/overlays/disable-wifi-pi5.dtbo 49 | cp ${BUILDROOT}/output/images/overlay_map.dtb output/overlays/overlay_map.dtb 50 | 51 | echo 52 | echo Build complete. Files are in output folder. 53 | echo 54 | -------------------------------------------------------------------------------- /embedded/buildroot-2024.02.3.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/buildroot-2024.02.3.tar.gz -------------------------------------------------------------------------------- /embedded/imager/Config.in: -------------------------------------------------------------------------------- 1 | source "$BR2_EXTERNAL_IMAGER_PATH/package/rpi-imager/Config.in" 2 | source "$BR2_EXTERNAL_IMAGER_PATH/package/rpi-firmware-custom/Config.in" 3 | -------------------------------------------------------------------------------- /embedded/imager/board/overlay/etc/init.d/S99rpi-imager: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Script executed at start 5 | # 6 | 7 | # Bail out on any error 8 | set -e 9 | 10 | case "$1" in 11 | start) 12 | #udevd --daemon 13 | #udevadm trigger 14 | if [ ! -e /dev/input/event0 ]; then 15 | echo "" 16 | echo "No input device detected" 17 | echo "Remove micro-USB cable and attach mouse to continue" 18 | echo "" 19 | until [ -e /dev/input/event0 ] 20 | do 21 | sleep 0.1 22 | done 23 | clear 24 | fi 25 | 26 | echo Starting rpi-imager 27 | export QT_QPA_EGLFS_ALWAYS_SET_MODE=1 28 | PATH=/bin:/sbin:/usr/bin:/usr/sbin rpi-imager 2>/tmp/debug 29 | sync 30 | reboot -f 31 | ;; 32 | 33 | stop) 34 | ;; 35 | 36 | *) 37 | echo "Usage: $0 {start|stop}" 38 | exit 1 39 | ;; 40 | esac 41 | 42 | exit $? 43 | -------------------------------------------------------------------------------- /embedded/imager/board/overlay/init: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Shorter startup sequence 4 | 5 | # Standard busybox init 6 | /bin/mount -t proc proc /proc 7 | /bin/mount -o remount,rw,noatime / 8 | /bin/mount -t sysfs sysfs /sys 9 | /bin/mount -t devtmpfs dev /dev 10 | /bin/hostname -F /etc/hostname 11 | 12 | # udev 13 | /sbin/udevd -d 14 | udevadm trigger 15 | udevadm settle --timeout=2 16 | 17 | # Seed urandom with something 18 | cat /proc/cpuinfo /sys/class/drm/*/edid > /dev/urandom 19 | 20 | # dhcpcd 21 | mkdir -p /var/run 22 | dhcpcd -f /etc/dhcpcd.conf --noarp 2>/dev/null & 23 | 24 | if grep -q debugconsole /proc/cmdline; then 25 | /sbin/getty -L console 0 vt100 & 26 | fi 27 | 28 | if grep -q blockingconsole /proc/cmdline; then 29 | /sbin/getty -L console 0 vt100 30 | fi 31 | 32 | /etc/init.d/S99rpi-imager start 33 | -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/lib/fonts: -------------------------------------------------------------------------------- 1 | /usr/share/fonts/truetype/droid -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/fonts/truetype/droid/DroidSansFallback.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/fonts/truetype/droid/DroidSansFallback.ttf -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/af.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/af.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/al.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/al.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/am.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/am.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ara.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ara.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/at.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/at.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/au.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/au.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/az.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/az.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ba.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ba.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/bd.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/bd.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/be.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/be.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/bg.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/bg.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/br.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/br.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/brai.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/brai.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/bt.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/bt.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/bw.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/bw.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/by.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/by.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ca.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ca.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/cd.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/cd.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ch.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ch.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/cm.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/cm.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/cn.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/cn.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/cz.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/cz.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/de.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/de.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/dk.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/dk.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/dz.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/dz.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ee.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ee.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/epo.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/epo.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/es.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/es.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/et.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/et.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/fi.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/fi.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/fo.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/fo.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/fr.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/fr.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/gb.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/gb.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ge.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ge.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/gh.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/gh.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/gn.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/gn.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/gr.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/gr.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/hr.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/hr.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/hu.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/hu.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/id.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/id.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ie.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ie.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/il.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/il.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/in.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/in.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/iq.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/iq.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ir.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ir.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/is.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/is.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/it.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/it.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/jp.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/jp.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/jv.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/jv.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ke.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ke.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/kg.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/kg.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/kh.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/kh.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/kr.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/kr.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/kz.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/kz.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/la.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/la.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/latam.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/latam.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/lk.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/lk.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/lt.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/lt.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/lv.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/lv.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ma.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ma.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mao.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mao.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/md.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/md.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/me.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/me.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mk.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mk.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ml.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ml.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mm.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mm.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mn.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mn.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mt.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mt.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/mv.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/mv.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/my.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/my.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ng.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ng.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/nl.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/nl.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/no.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/no.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/np.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/np.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ph.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ph.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/pk.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/pk.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/pl.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/pl.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/pt.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/pt.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ro.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ro.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/rs.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/rs.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ru.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ru.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/se.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/se.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/si.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/si.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/sk.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/sk.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/sn.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/sn.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/sy.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/sy.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tg.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tg.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/th.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/th.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tj.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tj.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tm.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tm.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tr.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tr.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tw.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tw.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/tz.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/tz.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/ua.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/ua.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/us.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/us.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/uz.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/uz.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/vn.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/vn.qmap -------------------------------------------------------------------------------- /embedded/imager/board/overlay/usr/share/qmaps/za.qmap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/embedded/imager/board/overlay/usr/share/qmaps/za.qmap -------------------------------------------------------------------------------- /embedded/imager/board/post-build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # 4 | # Trim down images by removing some files we do not need 5 | # 6 | 7 | (cd ${TARGET_DIR}/bin 8 | 9 | rm -f choom col colcrt colrm column fincore findmnt flock \ 10 | getopt hexdump ipcmk isosize look lscpu lsipc lsirq lslocks \ 11 | lsns mcookie namei pcre2grep pcre2test prlimit qml qmlpreview \ 12 | qmlscene qmltestrunner renice rev script scriptlive scriptreplay \ 13 | setarch setsid uuidgen uuidparse whereis xmlwf zstd zstdgrep zstdless \ 14 | zstdmt zstdcat linux32 linux64 lzmadec lzmainfo uname26 unzstd unxz xz \ 15 | xzcat xzcmp xzdev xzdiff xzegrep xzfgrep xzgrep xzless xzmore) 16 | 17 | (cd ${TARGET_DIR}/usr/sbin 18 | 19 | rm -f blkdiscard blkid blkzone blockdev chcpu ctrlaltdel fdisk findfs \ 20 | fsfreeze fstrim ldattach mkswap readprofile rtcwake swaplabel \ 21 | swapoff swapon) 22 | 23 | rm -rf ${TARGET_DIR}/usr/lib/metatypes ${TARGET_DIR}/usr/lib/qt/plugins/qmltooling 24 | rm -f ${TARGET_DIR}/usr/lib/qt/plugins/platforms/libqvnc.so ${TARGET_DIR}/usr/lib/libQt5QuickTest.so* ${TARGET_DIR}/usr/lib/libQt5Test.so* 25 | -------------------------------------------------------------------------------- /embedded/imager/external.desc: -------------------------------------------------------------------------------- 1 | name: IMAGER 2 | -------------------------------------------------------------------------------- /embedded/imager/external.mk: -------------------------------------------------------------------------------- 1 | include $(sort $(wildcard $(BR2_EXTERNAL_IMAGER_PATH)/package/*/*.mk)) 2 | -------------------------------------------------------------------------------- /embedded/imager/package/rpi-firmware-custom/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM 2 | bool "rpi-firmware" 3 | depends on BR2_arm || BR2_aarch64 4 | help 5 | RaspberryPi Firmware 6 | Pre-compiled binaries of the current bootloader and GPU firmware 7 | 8 | https://github.com/raspberrypi/firmware 9 | 10 | if BR2_PACKAGE_RPI_FIRMWARE_CUSTOM 11 | 12 | choice 13 | bool "Firmware to boot" 14 | default BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_DEFAULT 15 | help 16 | There are three different firmware files: 17 | - the default firmware, that enables standard GPU features; 18 | - the extended firmware, that enables additional GPU features 19 | (eg. more audio/video codecs); 20 | - the cut-down firmware, for emergency situations, with only 21 | features required to boot a Linux kernel. 22 | 23 | config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_DEFAULT 24 | bool "default" 25 | help 26 | The default firmware, that enables standard GPU features. 27 | 28 | config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_X 29 | bool "extended ('x', more codecs)" 30 | help 31 | The extended firmware, that enables additional GPU features 32 | (eg. more audio/video codecs). 33 | 34 | config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_CD 35 | bool "cut-down ('cd', emergency)" 36 | help 37 | The cut-down firmware, for emergency situations, with only 38 | features required to boot a Linux kernel. 39 | 40 | endchoice 41 | 42 | config BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_BOOT 43 | string 44 | default "" if BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_DEFAULT 45 | default "_x" if BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_X 46 | default "_cd" if BR2_PACKAGE_RPI_FIRMWARE_CUSTOM_CD 47 | 48 | endif # BR2_PACKAGE_RPI_FIRMWARE_CUSTOM 49 | -------------------------------------------------------------------------------- /embedded/imager/package/rpi-firmware-custom/rpi-firmware-custom.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # rpi-firmware 4 | # 5 | ################################################################################ 6 | 7 | RPI_FIRMWARE_CUSTOM_VERSION = 40eb78a3876379d78d7d3188940f86a39111f73c 8 | RPI_FIRMWARE_CUSTOM_SITE = $(call github,raspberrypi,firmware,$(RPI_FIRMWARE_CUSTOM_VERSION)) 9 | RPI_FIRMWARE_CUSTOM_LICENSE = BSD-3c 10 | RPI_FIRMWARE_CUSTOM_LICENSE_FILES = boot/LICENCE.broadcom 11 | RPI_FIRMWARE_CUSTOM_INSTALL_IMAGES = YES 12 | 13 | define RPI_FIRMWARE_CUSTOM_INSTALL_IMAGES_CMDS 14 | $(INSTALL) -D -m 0644 $(@D)/boot/bootcode.bin $(BINARIES_DIR)/rpi-firmware/bootcode.bin 15 | $(INSTALL) -D -m 0644 $(@D)/boot/start.elf $(BINARIES_DIR)/rpi-firmware/start.elf 16 | $(INSTALL) -D -m 0644 $(@D)/boot/fixup.dat $(BINARIES_DIR)/rpi-firmware/fixup.dat 17 | $(INSTALL) -D -m 0644 $(@D)/boot/start4.elf $(BINARIES_DIR)/rpi-firmware/start4.elf 18 | $(INSTALL) -D -m 0644 $(@D)/boot/fixup4.dat $(BINARIES_DIR)/rpi-firmware/fixup4.dat 19 | endef 20 | 21 | $(eval $(generic-package)) 22 | -------------------------------------------------------------------------------- /embedded/imager/package/rpi-imager/0001-embedded-OptionsWindow-becomes-a-Popup.patch: -------------------------------------------------------------------------------- 1 | From f6bd285e468069aa953c1672a2d9e276c604d487 Mon Sep 17 00:00:00 2001 2 | From: Tom Dewey 3 | Date: Thu, 16 Jan 2025 13:45:19 +0000 4 | Subject: [PATCH] embedded: OptionsWindow becomes a Popup 5 | 6 | --- 7 | src/OptionsPopup.qml | 12 +++++++++++- 8 | src/main.qml | 11 +++++++++++ 9 | 2 files changed, 22 insertions(+), 1 deletion(-) 10 | 11 | diff --git a/src/OptionsPopup.qml b/src/OptionsPopup.qml 12 | index 0ba94b0a..e5c20769 100644 13 | --- a/src/OptionsPopup.qml 14 | +++ b/src/OptionsPopup.qml 15 | @@ -11,7 +11,7 @@ import QtQuick.Window 2.15 16 | import QtQml.Models 17 | import "qmlcomponents" 18 | 19 | -Window { 20 | +Popup { 21 | id: popup 22 | width: 550 23 | height: 420 24 | @@ -38,6 +38,16 @@ Window { 25 | 26 | signal saveSettingsSignal(var settings) 27 | 28 | + /* Only in embedded version */ 29 | + x: (parent.width-width)/2, 30 | + y: 10 31 | + height: parent.height-20 32 | + property string title 33 | + 34 | + function show() { open() } 35 | + function raise() { } 36 | + /* */ 37 | + 38 | Keys.onEscapePressed: { 39 | popup.close() 40 | } 41 | diff --git a/src/main.qml b/src/main.qml 42 | index 63dd21a9..cee44a84 100644 43 | --- a/src/main.qml 44 | +++ b/src/main.qml 45 | @@ -1235,6 +1235,17 @@ ApplicationWindow { 46 | imageWriter.setSavedCustomizationSettings(settings) 47 | usesavedsettingspopup.hasSavedSettings = true 48 | } 49 | + 50 | + onClosed: { 51 | + // When the options popup closes on embedded focus doesn't 52 | + // automatically return to the usesavedsettings msgpopup, so 53 | + // set the focus manually (but only if this msgpopup is actually 54 | + // open. It might not be, e.g. if the user opened settings via 55 | + // the keyboard shortcut). 56 | + if (usesavedsettingspopup.opened) { 57 | + usesavedsettingspopup.forceActiveFocus() 58 | + } 59 | + } 60 | } 61 | 62 | UseSavedSettingsPopup { 63 | -- 64 | 2.39.5 (Apple Git-154) 65 | 66 | -------------------------------------------------------------------------------- /embedded/imager/package/rpi-imager/Config.in: -------------------------------------------------------------------------------- 1 | config BR2_PACKAGE_RPI_IMAGER 2 | bool "rpi-imager" 3 | select BR2_PACKAGE_QT5 4 | select BR2_PACKAGE_QT5BASE_GUI 5 | select BR2_PACKAGE_QT5BASE_CONCURRENT 6 | select BR2_PACKAGE_QT5BASE_JPEG 7 | select BR2_PACKAGE_QT5BASE_PNG 8 | select BR2_PACKAGE_QT5SVG 9 | select BR2_PACKAGE_QT5QUICKCONTROLS2 10 | select BR2_PACKAGE_LIBCURL 11 | select BR2_PACKAGE_LIBARCHIVE 12 | select BR2_PACKAGE_ZSTD 13 | select BR2_PACKAGE_DOSFSTOOLS 14 | select BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT 15 | select BR2_PACKAGE_OPENSSL 16 | select BR2_PACKAGE_CA_CERTIFICATES 17 | select BR2_PACKAGE_QT5TOOLS 18 | select BR2_PACKAGE_QT5TOOLS_LINGUIST_TOOLS 19 | 20 | help 21 | Raspberry Pi Imager 22 | -------------------------------------------------------------------------------- /embedded/imager/package/rpi-imager/rpi-imager.mk: -------------------------------------------------------------------------------- 1 | ################################################################################ 2 | # 3 | # rpi-imager 4 | # 5 | ################################################################################ 6 | 7 | RPI_IMAGER_VERSION = qml 8 | #RPI_IMAGER_SITE = $(call github,raspberrypi,rpi-imager,$(RPI_IMAGER_VERSION)) 9 | RPI_IMAGER_SITE = $(TOPDIR)/../../src 10 | RPI_IMAGER_SITE_METHOD = local 11 | RPI_IMAGER_LICENSE = Apache-2.0 12 | 13 | RPI_IMAGER_DEPENDENCIES = qt5base qt5declarative qt5quickcontrols2 qt5svg qt5tools libarchive libcurl openssl 14 | 15 | # Patches are automatically applied after download and extract, but when using 16 | # a local site there is no download-extract so the patches don't get applied. 17 | # Add a hook to do it manually when using the local site. 18 | define RPI_IMAGER_APPLY_PATCHES 19 | $(APPLY_PATCHES) $(@D) $(RPI_IMAGER_PKGDIR) *.patch 20 | endef 21 | RPI_IMAGER_POST_RSYNC_HOOKS += RPI_IMAGER_APPLY_PATCHES 22 | 23 | $(eval $(cmake-package)) 24 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/autoconf-2.71/COPYING.EXCEPTION: -------------------------------------------------------------------------------- 1 | AUTOCONF CONFIGURE SCRIPT EXCEPTION 2 | Version 3.0, 18 August 2009 3 | 4 | Copyright (C) 2009 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | This Exception is an additional permission under section 7 of the GNU 9 | General Public License, version 3 ("GPLv3"). It applies to a given 10 | file that bears a notice placed by the copyright holder of the file 11 | stating that the file is governed by GPLv3 along with this Exception. 12 | 13 | The purpose of this Exception is to allow distribution of Autoconf's 14 | typical output under terms of the recipient's choice (including 15 | proprietary). 16 | 17 | 0. Definitions 18 | 19 | "Covered Code" is the source or object code of a version of Autoconf 20 | that is a covered work under this License. 21 | 22 | "Normally Copied Code" for a version of Autoconf means all parts of 23 | its Covered Code which that version can copy from its code (i.e., not 24 | from its input file) into its minimally verbose, non-debugging and 25 | non-tracing output. 26 | 27 | "Ineligible Code" is Covered Code that is not Normally Copied Code. 28 | 29 | 1. Grant of Additional Permission. 30 | 31 | You have permission to propagate output of Autoconf, even if such 32 | propagation would otherwise violate the terms of GPLv3. However, if 33 | by modifying Autoconf you cause any Ineligible Code of the version you 34 | received to become Normally Copied Code of your modified version, then 35 | you void this Exception for the resulting covered work. If you convey 36 | that resulting covered work, you must remove this Exception in accordance 37 | with the second paragraph of Section 7 of GPLv3. 38 | 39 | 2. No Weakening of Autoconf Copyleft. 40 | 41 | The availability of this Exception does not imply any general presumption 42 | that third-party software is unaffected by the copyleft requirements of 43 | the license of Autoconf. 44 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/autoconf-archive-2021.02.19/COPYING.EXCEPTION: -------------------------------------------------------------------------------- 1 | AUTOCONF CONFIGURE SCRIPT EXCEPTION 2 | Version 3.0, 18 August 2009 3 | 4 | Copyright (C) 2009 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | This Exception is an additional permission under section 7 of the GNU 9 | General Public License, version 3 ("GPLv3"). It applies to a given 10 | file that bears a notice placed by the copyright holder of the file 11 | stating that the file is governed by GPLv3 along with this Exception. 12 | 13 | The purpose of this Exception is to allow distribution of Autoconf's 14 | typical output under terms of the recipient's choice (including 15 | proprietary). 16 | 17 | 0. Definitions 18 | 19 | "Covered Code" is the source or object code of a version of Autoconf 20 | that is a covered work under this License. 21 | 22 | "Normally Copied Code" for a version of Autoconf means all parts of 23 | its Covered Code which that version can copy from its code (i.e., not 24 | from its input file) into its minimally verbose, non-debugging and 25 | non-tracing output. 26 | 27 | "Ineligible Code" is Covered Code that is not Normally Copied Code. 28 | 29 | 1. Grant of Additional Permission. 30 | 31 | You have permission to propagate output of Autoconf, even if such 32 | propagation would otherwise violate the terms of GPLv3. However, if 33 | by modifying Autoconf you cause any Ineligible Code of the version you 34 | received to become Normally Copied Code of your modified version, then 35 | you void this Exception for the resulting covered work. If you convey 36 | that resulting covered work, you must remove this Exception in accordance 37 | with the second paragraph of Section 7 of GPLv3. 38 | 39 | 2. No Weakening of Autoconf Copyleft. 40 | 41 | The availability of this Exception does not imply any general presumption 42 | that third-party software is unaffected by the copyleft requirements of 43 | the license of Autoconf. 44 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/expat-2.4.1/COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper 2 | Copyright (c) 2001-2019 Expat maintainers 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included 13 | in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/flex-2.6.4/COPYING: -------------------------------------------------------------------------------- 1 | Flex carries the copyright used for BSD software, slightly modified 2 | because it originated at the Lawrence Berkeley (not Livermore!) Laboratory, 3 | which operates under a contract with the Department of Energy: 4 | 5 | Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007 The Flex Project. 6 | 7 | Copyright (c) 1990, 1997 The Regents of the University of California. 8 | All rights reserved. 9 | 10 | This code is derived from software contributed to Berkeley by 11 | Vern Paxson. 12 | 13 | The United States Government has rights in this work pursuant 14 | to contract no. DE-AC03-76SF00098 between the United States 15 | Department of Energy and the University of California. 16 | 17 | Redistribution and use in source and binary forms, with or without 18 | modification, are permitted provided that the following conditions 19 | are met: 20 | 21 | 1. Redistributions of source code must retain the above copyright 22 | notice, this list of conditions and the following disclaimer. 23 | 2. Redistributions in binary form must reproduce the above copyright 24 | notice, this list of conditions and the following disclaimer in the 25 | documentation and/or other materials provided with the distribution. 26 | 27 | Neither the name of the University nor the names of its contributors 28 | may be used to endorse or promote products derived from this software 29 | without specific prior written permission. 30 | 31 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 32 | IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 33 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 34 | PURPOSE. 35 | 36 | This basically says "do whatever you please with this software except 37 | remove this notice or take advantage of the University's (or the flex 38 | authors') name". 39 | 40 | Note that the "flex.skl" scanner skeleton carries no copyright notice. 41 | You are free to do whatever you please with scanners generated using flex; 42 | for them, you are not even bound by the above copyright. 43 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/gettext-tiny-0.3.2/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2012 rofl0r 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | ------------------------------------------------------------------------------- 23 | 24 | Files contained in the doc/ directory may be licensed under different terms. 25 | If so, it is noted there in the respective file. 26 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/libffi-3.4.2/LICENSE: -------------------------------------------------------------------------------- 1 | libffi - Copyright (c) 1996-2021 Anthony Green, Red Hat, Inc and others. 2 | See source files for details. 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | ``Software''), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/pkgconf-1.6.3/COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 2 | pkgconf authors (see AUTHORS file in source directory). 3 | 4 | Permission to use, copy, modify, and/or distribute this software for any 5 | purpose with or without fee is hereby granted, provided that the above 6 | copyright notice and this permission notice appear in all copies. 7 | 8 | This software is provided 'as is' and without any warranty, express or 9 | implied. In no event shall the authors be liable for any damages arising 10 | from the use of this software. 11 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/python-mako-1.1.5/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2006-2020 the Mako authors and contributors . 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of 4 | this software and associated documentation files (the "Software"), to deal in 5 | the Software without restriction, including without limitation the rights to 6 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 7 | of the Software, and to permit persons to whom the Software is furnished to do 8 | so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/python-markupsafe-2.0.1/LICENSE.rst: -------------------------------------------------------------------------------- 1 | Copyright 2010 Pallets 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are 5 | met: 6 | 7 | 1. Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 10 | 2. Redistributions in binary form must reproduce the above copyright 11 | notice, this list of conditions and the following disclaimer in the 12 | documentation and/or other materials provided with the distribution. 13 | 14 | 3. Neither the name of the copyright holder nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 21 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 24 | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 25 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 26 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 27 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/python3-setuptools-59.8.0/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright Jason R. Coombs 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to 5 | deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7 | sell copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19 | IN THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /embedded/legal-info/host-licenses/zstd-1.5.1/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For Zstandard software 4 | 5 | Copyright (c) 2016-present, Facebook, Inc. All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, 8 | are permitted provided that the following conditions are met: 9 | 10 | * Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | * Neither the name Facebook nor the names of its contributors may be used to 18 | endorse or promote products derived from this software without specific 19 | prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/busybox-1.34.1/archival/libarchive/bz/LICENSE: -------------------------------------------------------------------------------- 1 | bzip2 applet in busybox is based on lightly-modified source 2 | of bzip2 version 1.0.4. bzip2 source is distributed 3 | under the following conditions (copied verbatim from LICENSE file) 4 | =========================================================== 5 | 6 | 7 | This program, "bzip2", the associated library "libbzip2", and all 8 | documentation, are copyright (C) 1996-2006 Julian R Seward. All 9 | rights reserved. 10 | 11 | Redistribution and use in source and binary forms, with or without 12 | modification, are permitted provided that the following conditions 13 | are met: 14 | 15 | 1. Redistributions of source code must retain the above copyright 16 | notice, this list of conditions and the following disclaimer. 17 | 18 | 2. The origin of this software must not be misrepresented; you must 19 | not claim that you wrote the original software. If you use this 20 | software in a product, an acknowledgment in the product 21 | documentation would be appreciated but is not required. 22 | 23 | 3. Altered source versions must be plainly marked as such, and must 24 | not be misrepresented as being the original software. 25 | 26 | 4. The name of the author may not be used to endorse or promote 27 | products derived from this software without specific prior written 28 | permission. 29 | 30 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 31 | OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 32 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 33 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 34 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 35 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 36 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 37 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 38 | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 39 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 40 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 41 | 42 | Julian Seward, Cambridge, UK. 43 | jseward@bzip.org 44 | bzip2/libbzip2 version 1.0.4 of 20 December 2006 45 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/dhcpcd-9.4.1/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006-2021 Roy Marples 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions 6 | are met: 7 | 1. Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 2. Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | 13 | THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16 | ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19 | OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 | HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 | SUCH DAMAGE. 24 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/expat-2.4.1/COPYING: -------------------------------------------------------------------------------- 1 | Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper 2 | Copyright (c) 2001-2019 Expat maintainers 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included 13 | in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/freetype-2.11.1/LICENSE.TXT: -------------------------------------------------------------------------------- 1 | FREETYPE LICENSES 2 | ----------------- 3 | 4 | The FreeType 2 font engine is copyrighted work and cannot be used 5 | legally without a software license. In order to make this project 6 | usable to a vast majority of developers, we distribute it under two 7 | mutually exclusive open-source licenses. 8 | 9 | This means that *you* must choose *one* of the two licenses described 10 | below, then obey all its terms and conditions when using FreeType 2 in 11 | any of your projects or products. 12 | 13 | - The FreeType License, found in the file `docs/FTL.TXT`, which is 14 | similar to the original BSD license *with* an advertising clause 15 | that forces you to explicitly cite the FreeType project in your 16 | product's documentation. All details are in the license file. 17 | This license is suited to products which don't use the GNU General 18 | Public License. 19 | 20 | Note that this license is compatible to the GNU General Public 21 | License version 3, but not version 2. 22 | 23 | - The GNU General Public License version 2, found in 24 | `docs/GPLv2.TXT` (any later version can be used also), for 25 | programs which already use the GPL. Note that the FTL is 26 | incompatible with GPLv2 due to its advertisement clause. 27 | 28 | The contributed BDF and PCF drivers come with a license similar to 29 | that of the X Window System. It is compatible to the above two 30 | licenses (see files `src/bdf/README` and `src/pcf/README`). The same 31 | holds for the source code files `src/base/fthash.c` and 32 | `include/freetype/internal/fthash.h`; they wer part of the BDF driver 33 | in earlier FreeType versions. 34 | 35 | The gzip module uses the zlib license (see `src/gzip/zlib.h`) which 36 | too is compatible to the above two licenses. 37 | 38 | The MD5 checksum support (only used for debugging in development 39 | builds) is in the public domain. 40 | 41 | 42 | --- end of LICENSE.TXT --- 43 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/libcurl-7.81.0/COPYING: -------------------------------------------------------------------------------- 1 | COPYRIGHT AND PERMISSION NOTICE 2 | 3 | Copyright (c) 1996 - 2021, Daniel Stenberg, , and many 4 | contributors, see the THANKS file. 5 | 6 | All rights reserved. 7 | 8 | Permission to use, copy, modify, and distribute this software for any purpose 9 | with or without fee is hereby granted, provided that the above copyright 10 | notice and this permission notice appear in all copies. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 13 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 14 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN 15 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 16 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 17 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 18 | OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | Except as contained in this notice, the name of a copyright holder shall not 21 | be used in advertising or otherwise to promote the sale, use or other dealings 22 | in this Software without prior written authorization of the copyright holder. 23 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/libdrm-2.4.109/data/meson.build: -------------------------------------------------------------------------------- 1 | # Copyright © 2017-2018 Intel Corporation 2 | 3 | # Permission is hereby granted, free of charge, to any person obtaining a copy 4 | # of this software and associated documentation files (the "Software"), to deal 5 | # in the Software without restriction, including without limitation the rights 6 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | # copies of the Software, and to permit persons to whom the Software is 8 | # furnished to do so, subject to the following conditions: 9 | 10 | # The above copyright notice and this permission notice shall be included in 11 | # all copies or substantial portions of the Software. 12 | 13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | # SOFTWARE. 20 | 21 | if with_amdgpu 22 | install_data( 23 | 'amdgpu.ids', 24 | install_mode : 'rw-r--r--', 25 | install_dir : datadir_amdgpu, 26 | ) 27 | endif 28 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/libpthread-stubs-0.4/COPYING: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a 2 | copy of this software and associated documentation files (the "Software"), 3 | to deal in the Software without restriction, including without limitation 4 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 5 | and/or sell copies of the Software, and to permit persons to whom the 6 | Software is furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in 9 | all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 15 | ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 16 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 17 | 18 | Except as contained in this notice, the names of the authors or their 19 | institutions shall not be used in advertising or otherwise to promote the 20 | sale, use or other dealings in this Software without prior written 21 | authorization from the authors. 22 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/rpi-firmware-custom-827fdd073638fa7b7292d1148fe0af7465111eae/boot/LICENCE.broadcom: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006, Broadcom Corporation. 2 | Copyright (c) 2015, Raspberry Pi (Trading) Ltd 3 | All rights reserved. 4 | 5 | Redistribution. Redistribution and use in binary form, without 6 | modification, are permitted provided that the following conditions are 7 | met: 8 | 9 | * This software may only be used for the purposes of developing for, 10 | running or using a Raspberry Pi device, or authorised derivative 11 | device manufactured via the element14 Raspberry Pi Customization Service 12 | * Redistributions must reproduce the above copyright notice and the 13 | following disclaimer in the documentation and/or other materials 14 | provided with the distribution. 15 | * Neither the name of Broadcom Corporation nor the names of its suppliers 16 | may be used to endorse or promote products derived from this software 17 | without specific prior written permission. 18 | 19 | DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 20 | CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 21 | BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 22 | FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23 | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 25 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 26 | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 27 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 28 | TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 29 | USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 30 | DAMAGE. 31 | 32 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-2.37.2/Documentation/licenses/COPYING.BSD-3-Clause: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions 3 | are met: 4 | 1. Redistributions of source code must retain the above copyright 5 | notice, and the entire permission notice in its entirety, 6 | including the disclaimer of warranties. 7 | 2. Redistributions in binary form must reproduce the above copyright 8 | notice, this list of conditions and the following disclaimer in the 9 | documentation and/or other materials provided with the distribution. 10 | 3. The name of the author may not be used to endorse or promote 11 | products derived from this software without specific prior 12 | written permission. 13 | 14 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 15 | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF 17 | WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE 18 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 20 | OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 21 | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 22 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 24 | USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH 25 | DAMAGE. 26 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-2.37.2/Documentation/licenses/COPYING.BSD-4-Clause-UC: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 1989 The Regents of the University of California. 3 | * All rights reserved. 4 | * 5 | * Redistribution and use in source and binary forms, with or without 6 | * modification, are permitted provided that the following conditions 7 | * are met: 8 | * 1. Redistributions of source code must retain the above copyright 9 | * notice, this list of conditions and the following disclaimer. 10 | * 2. Redistributions in binary form must reproduce the above copyright 11 | * notice, this list of conditions and the following disclaimer in the 12 | * documentation and/or other materials provided with the distribution. 13 | * 3. All advertising materials mentioning features or use of this software 14 | * must display the following acknowledgement: 15 | * This product includes software developed by the University of 16 | * California, Berkeley and its contributors. 17 | * 4. Neither the name of the University nor the names of its contributors 18 | * may be used to endorse or promote products derived from this software 19 | * without specific prior written permission. 20 | * 21 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31 | * SUCH DAMAGE. 32 | */ 33 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-2.37.2/Documentation/licenses/COPYING.ISC: -------------------------------------------------------------------------------- 1 | Permission to use, copy, modify, and/or distribute this software for any 2 | purpose with or without fee is hereby granted, provided that the above 3 | copyright notice and this permission notice appear in all copies. 4 | 5 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 6 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 7 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 8 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 9 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 10 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 11 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 12 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-2.37.2/README.licensing: -------------------------------------------------------------------------------- 1 | 2 | The project util-linux doesn't use the same license for all of the code. 3 | There is code under: 4 | 5 | * GPL-3.0-or-later - GNU General Public License version 3, or any later version 6 | 7 | * GPL-2.0-or-later - GNU General Public License version 2, or any later version 8 | 9 | * GPL-2.0 - GNU General Public License version 2 10 | 11 | * LGPL-2.1-or-later - GNU Lesser General Public License 2.1 or any later version 12 | 13 | * BSD-3-Clause - BSD 3-Clause "New" or "Revised" License 14 | 15 | * BSD-4-Clause-UC - BSD 4-Clause University of California-Specific 16 | 17 | * Public Domain 18 | 19 | Please, check the source code for more details. A license is usually at the start 20 | of each source file. 21 | 22 | The ./COPYING file (GPL-2.0-or-later) is the default license for code without 23 | an explicitly defined license. 24 | 25 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-libs-2.37.2/Documentation/licenses/COPYING.BSD-3-Clause: -------------------------------------------------------------------------------- 1 | Redistribution and use in source and binary forms, with or without 2 | modification, are permitted provided that the following conditions 3 | are met: 4 | 1. Redistributions of source code must retain the above copyright 5 | notice, and the entire permission notice in its entirety, 6 | including the disclaimer of warranties. 7 | 2. Redistributions in binary form must reproduce the above copyright 8 | notice, this list of conditions and the following disclaimer in the 9 | documentation and/or other materials provided with the distribution. 10 | 3. The name of the author may not be used to endorse or promote 11 | products derived from this software without specific prior 12 | written permission. 13 | 14 | THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED 15 | WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF 17 | WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE 18 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 20 | OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 21 | BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 22 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 24 | USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH 25 | DAMAGE. 26 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/util-linux-libs-2.37.2/README.licensing: -------------------------------------------------------------------------------- 1 | 2 | The project util-linux doesn't use the same license for all of the code. 3 | There is code under: 4 | 5 | * GPL-3.0-or-later - GNU General Public License version 3, or any later version 6 | 7 | * GPL-2.0-or-later - GNU General Public License version 2, or any later version 8 | 9 | * GPL-2.0 - GNU General Public License version 2 10 | 11 | * LGPL-2.1-or-later - GNU Lesser General Public License 2.1 or any later version 12 | 13 | * BSD-3-Clause - BSD 3-Clause "New" or "Revised" License 14 | 15 | * BSD-4-Clause-UC - BSD 4-Clause University of California-Specific 16 | 17 | * Public Domain 18 | 19 | Please, check the source code for more details. A license is usually at the start 20 | of each source file. 21 | 22 | The ./COPYING file (GPL-2.0-or-later) is the default license for code without 23 | an explicitly defined license. 24 | 25 | -------------------------------------------------------------------------------- /embedded/legal-info/licenses/zstd-1.5.1/LICENSE: -------------------------------------------------------------------------------- 1 | BSD License 2 | 3 | For Zstandard software 4 | 5 | Copyright (c) 2016-present, Facebook, Inc. All rights reserved. 6 | 7 | Redistribution and use in source and binary forms, with or without modification, 8 | are permitted provided that the following conditions are met: 9 | 10 | * Redistributions of source code must retain the above copyright notice, this 11 | list of conditions and the following disclaimer. 12 | 13 | * Redistributions in binary form must reproduce the above copyright notice, 14 | this list of conditions and the following disclaimer in the documentation 15 | and/or other materials provided with the distribution. 16 | 17 | * Neither the name Facebook nor the names of its contributors may be used to 18 | endorse or promote products derived from this software without specific 19 | prior written permission. 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 22 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 24 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 25 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 27 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 28 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /embedded/output/cmdline.txt: -------------------------------------------------------------------------------- 1 | quiet console=tty1 console=serial0,115200 debugconsole 2 | -------------------------------------------------------------------------------- /embedded/output/config.txt: -------------------------------------------------------------------------------- 1 | [all] 2 | kernel=Image.gz 3 | initramfs rootfs.cpio.zst 4 | disable_overscan=1 5 | enable_uart=1 6 | dtoverlay=vc4-kms-v3d 7 | dtoverlay=disable-bt 8 | dtoverlay=disable-wifi 9 | arm_boost=1 10 | arm_64bit=1 11 | 12 | [cm4] 13 | dtoverlay=dwc2,dr_mode=host 14 | 15 | -------------------------------------------------------------------------------- /src/.gitignore: -------------------------------------------------------------------------------- 1 | dependencies/libarchive-3.4.2/build/pkgconfig/libarchive.pc 2 | CMakeLists.txt.user 3 | /build-* 4 | .qmlls.ini 5 | 6 | -------------------------------------------------------------------------------- /src/MainPopupBase.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2025 Raspberry Pi Ltd 4 | */ 5 | import QtQuick 6 | import QtQuick.Controls 7 | import QtQuick.Controls.Material 8 | 9 | import RpiImager 10 | 11 | Popup { 12 | id: root 13 | x: 50 14 | y: 25 15 | width: parent.width-100 16 | height: parent.height-50 17 | padding: 0 18 | closePolicy: Popup.CloseOnEscape 19 | 20 | required property int windowWidth 21 | required property string title 22 | property alias title_separator: title_separator 23 | 24 | // background of title 25 | Rectangle { 26 | id: title_background 27 | color: Style.titleBackgroundColor 28 | anchors.left: parent.left 29 | anchors.top: parent.top 30 | height: 35 31 | width: parent.width 32 | 33 | Text { 34 | text: root.title 35 | horizontalAlignment: Text.AlignHCenter 36 | anchors.fill: parent 37 | anchors.topMargin: 10 38 | font.family: Style.fontFamily 39 | font.bold: true 40 | } 41 | 42 | ImCloseButton { 43 | onClicked: { 44 | root.close() 45 | } 46 | } 47 | } 48 | // line under title 49 | Rectangle { 50 | id: title_separator 51 | color: Style.titleSeparatorColor 52 | width: parent.width 53 | anchors.top: title_background.bottom 54 | height: 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/MainPopupListViewBase.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2021 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 7 | import QtQuick.Controls 8 | 9 | import RpiImager 10 | 11 | ListView { 12 | id: root 13 | clip: true 14 | 15 | anchors.left: parent.left 16 | anchors.bottom: parent.bottom 17 | boundsBehavior: Flickable.StopAtBounds 18 | highlight: Rectangle { color: Style.listViewHighlightColor; radius: 5 } 19 | 20 | ScrollBar.vertical: ScrollBar { 21 | width: 10 22 | policy: root.contentHeight > root.height ? ScrollBar.AlwaysOn : ScrollBar.AsNeeded 23 | } 24 | 25 | Keys.onEnterPressed: (event) => { Keys.spacePressed(event) } 26 | Keys.onReturnPressed: (event) => { Keys.spacePressed(event) } 27 | } 28 | -------------------------------------------------------------------------------- /src/OptionsMiscTab.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2021 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.15 7 | import QtQuick.Layouts 1.15 8 | import QtQuick.Window 2.15 9 | import "qmlcomponents" 10 | 11 | import RpiImager 12 | 13 | OptionsTabBase { 14 | id: root 15 | 16 | property alias beepEnabled: chkBeep.checked 17 | property alias telemetryEnabled: chkTelemtry.checked 18 | property alias ejectEnabled: chkEject.checked 19 | 20 | ColumnLayout { 21 | ImCheckBox { 22 | id: chkBeep 23 | text: qsTr("Play sound when finished") 24 | } 25 | ImCheckBox { 26 | id: chkEject 27 | text: qsTr("Eject media when finished") 28 | } 29 | ImCheckBox { 30 | id: chkTelemtry 31 | text: qsTr("Enable telemetry") 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/OptionsTabBase.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2021 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.15 7 | import QtQuick.Controls 2.2 8 | import QtQuick.Layouts 1.15 9 | 10 | import RpiImager 11 | 12 | ScrollView { 13 | id: root 14 | 15 | property double scrollPosition 16 | 17 | font.family: Style.fontFamily 18 | Layout.fillWidth: true 19 | Layout.fillHeight: true 20 | 21 | // clip: true 22 | ScrollBar.vertical.policy: ScrollBar.AsNeeded 23 | ScrollBar.vertical.position: scrollPosition 24 | scrollPosition: scrollPosition 25 | } 26 | -------------------------------------------------------------------------------- /src/acceleratedcryptographichash.h: -------------------------------------------------------------------------------- 1 | #ifndef ACCELERATEDCRYPTOGRAPHICHASH_H 2 | #define ACCELERATEDCRYPTOGRAPHICHASH_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | struct AcceleratedCryptographicHash 13 | { 14 | private: 15 | struct impl; 16 | std::unique_ptr p_Impl; 17 | 18 | public: 19 | explicit AcceleratedCryptographicHash(QCryptographicHash::Algorithm method); 20 | ~AcceleratedCryptographicHash(); 21 | void addData(const char *data, int length); 22 | void addData(const QByteArray &data); 23 | QByteArray result(); 24 | }; 25 | 26 | #endif // ACCELERATEDCRYPTOGRAPHICHASH_H 27 | -------------------------------------------------------------------------------- /src/cli.h: -------------------------------------------------------------------------------- 1 | #ifndef CLI_H 2 | #define CLI_H 3 | 4 | #include 5 | #include 6 | 7 | class ImageWriter; 8 | class QCoreApplication; 9 | 10 | class Cli : public QObject 11 | { 12 | Q_OBJECT 13 | public: 14 | explicit Cli(int &argc, char *argv[]); 15 | virtual ~Cli(); 16 | int run(); 17 | 18 | protected: 19 | QCoreApplication *_app; 20 | ImageWriter *_imageWriter; 21 | int _lastPercent; 22 | QByteArray _lastMsg; 23 | bool _quiet; 24 | 25 | void _printProgress(const QByteArray &msg, QVariant now, QVariant total); 26 | void _clearLine(); 27 | 28 | protected slots: 29 | void onSuccess(); 30 | void onError(QVariant msg); 31 | void onDownloadProgress(QVariant dlnow, QVariant dltotal); 32 | void onVerifyProgress(QVariant now, QVariant total); 33 | void onPreparationStatusUpdate(QVariant msg); 34 | 35 | signals: 36 | 37 | }; 38 | 39 | #endif // CLI_H 40 | -------------------------------------------------------------------------------- /src/config.h: -------------------------------------------------------------------------------- 1 | #ifndef CONFIG_H 2 | #define CONFIG_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | 10 | /* Repository URL */ 11 | #define OSLIST_URL "https://downloads.raspberrypi.org/os_list_imagingutility_v4.json" 12 | 13 | /* Time synchronization URL (only used on eglfs QPA platform, URL must be HTTP) */ 14 | #define TIME_URL "http://downloads.raspberrypi.org/os_list_imagingutility_v4.json?time_synchronization" 15 | 16 | /* Phone home the name of images downloaded for image popularity ranking */ 17 | #define TELEMETRY_URL "https://rpi-imager-stats.raspberrypi.com/downloads" 18 | 19 | /* Hash algorithm for verifying (uncompressed image) checksum */ 20 | #define OSLIST_HASH_ALGORITHM QCryptographicHash::Sha256 21 | 22 | /* Update progressbar every 0.1 second */ 23 | #define PROGRESS_UPDATE_INTERVAL 100 24 | 25 | /* Default block size for buffer allocation (dynamically adjusted at runtime) */ 26 | #define IMAGEWRITER_BLOCKSIZE 1*1024*1024 27 | 28 | /* Block size used with uncompressed images */ 29 | #define IMAGEWRITER_UNCOMPRESSED_BLOCKSIZE 128*1024 30 | 31 | /* Block size used when reading during verify stage */ 32 | #define IMAGEWRITER_VERIFY_BLOCKSIZE 128*1024 33 | 34 | /* Enable caching */ 35 | #define IMAGEWRITER_ENABLE_CACHE_DEFAULT true 36 | 37 | /* Do not cache if it would bring free disk space under 5 GB */ 38 | #define IMAGEWRITER_MINIMAL_SPACE_FOR_CACHING 5*1024*1024*1024ll 39 | 40 | #endif // CONFIG_H 41 | -------------------------------------------------------------------------------- /src/countries.txt: -------------------------------------------------------------------------------- 1 | AD 2 | AE 3 | AF 4 | AG 5 | AI 6 | AL 7 | AM 8 | AO 9 | AQ 10 | AR 11 | AS 12 | AT 13 | AU 14 | AW 15 | AX 16 | AZ 17 | BA 18 | BB 19 | BD 20 | BE 21 | BF 22 | BG 23 | BH 24 | BI 25 | BJ 26 | BL 27 | BM 28 | BN 29 | BO 30 | BQ 31 | BR 32 | BS 33 | BT 34 | BV 35 | BW 36 | BY 37 | BZ 38 | CA 39 | CC 40 | CD 41 | CF 42 | CG 43 | CH 44 | CI 45 | CK 46 | CL 47 | CM 48 | CN 49 | CO 50 | CR 51 | CU 52 | CV 53 | CW 54 | CX 55 | CY 56 | CZ 57 | DE 58 | DJ 59 | DK 60 | DM 61 | DO 62 | DZ 63 | EC 64 | EE 65 | EG 66 | EH 67 | ER 68 | ES 69 | ET 70 | FI 71 | FJ 72 | FK 73 | FM 74 | FO 75 | FR 76 | GA 77 | GB 78 | GD 79 | GE 80 | GF 81 | GG 82 | GH 83 | GI 84 | GL 85 | GM 86 | GN 87 | GP 88 | GQ 89 | GR 90 | GS 91 | GT 92 | GU 93 | GW 94 | GY 95 | HK 96 | HM 97 | HN 98 | HR 99 | HT 100 | HU 101 | ID 102 | IE 103 | IL 104 | IM 105 | IN 106 | IO 107 | IQ 108 | IR 109 | IS 110 | IT 111 | JE 112 | JM 113 | JO 114 | JP 115 | KE 116 | KG 117 | KH 118 | KI 119 | KM 120 | KN 121 | KP 122 | KR 123 | KW 124 | KY 125 | KZ 126 | LA 127 | LB 128 | LC 129 | LI 130 | LK 131 | LR 132 | LS 133 | LT 134 | LU 135 | LV 136 | LY 137 | MA 138 | MC 139 | MD 140 | ME 141 | MF 142 | MG 143 | MH 144 | MK 145 | ML 146 | MM 147 | MN 148 | MO 149 | MP 150 | MQ 151 | MR 152 | MS 153 | MT 154 | MU 155 | MV 156 | MW 157 | MX 158 | MY 159 | MZ 160 | NA 161 | NC 162 | NE 163 | NF 164 | NG 165 | NI 166 | NL 167 | NO 168 | NP 169 | NR 170 | NU 171 | NZ 172 | OM 173 | PA 174 | PE 175 | PF 176 | PG 177 | PH 178 | PK 179 | PL 180 | PM 181 | PN 182 | PR 183 | PS 184 | PT 185 | PW 186 | PY 187 | QA 188 | RE 189 | RO 190 | RS 191 | RU 192 | RW 193 | SA 194 | SB 195 | SC 196 | SD 197 | SE 198 | SG 199 | SH 200 | SI 201 | SJ 202 | SK 203 | SL 204 | SM 205 | SN 206 | SO 207 | SR 208 | SS 209 | ST 210 | SV 211 | SX 212 | SY 213 | SZ 214 | TC 215 | TD 216 | TF 217 | TG 218 | TH 219 | TJ 220 | TK 221 | TL 222 | TM 223 | TN 224 | TO 225 | TR 226 | TT 227 | TV 228 | TW 229 | TZ 230 | UA 231 | UG 232 | UM 233 | US 234 | UY 235 | UZ 236 | VA 237 | VC 238 | VE 239 | VG 240 | VI 241 | VN 242 | VU 243 | WF 244 | WS 245 | YE 246 | YT 247 | ZA 248 | ZM 249 | ZW 250 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | 15 | [*.plist] 16 | indent_style = tab 17 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 18 | .grunt 19 | 20 | # node-waf configuration 21 | .lock-wscript 22 | 23 | # Compiled binary addons (http://nodejs.org/api/addons.html) 24 | build 25 | 26 | # Dependency directory 27 | # https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git 28 | node_modules 29 | prebuilds 30 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/.npmignore: -------------------------------------------------------------------------------- 1 | .* 2 | *.yml 3 | 4 | build 5 | doc 6 | example 7 | tests 8 | prebuilds 9 | ci 10 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/.resinci.yml: -------------------------------------------------------------------------------- 1 | --- 2 | npm: 3 | environment: 4 | - name: CCACHE_TEMPDIR 5 | value: /tmp/.ccache-temp 6 | - name: CCACHE_COMPRESS 7 | value: 1 8 | - name: CC 9 | value: clang 10 | - name: CXX 11 | value: clang++ 12 | platforms: 13 | - name: linux 14 | os: ubuntu 15 | architecture: x86_64 16 | node_versions: 17 | - "10" 18 | - "8" 19 | - "6" 20 | - name: linux 21 | os: ubuntu 22 | architecture: x86 23 | node_versions: 24 | - "8" 25 | - "6" 26 | - name: darwin 27 | os: macos 28 | architecture: x86_64 29 | node_versions: 30 | - "6" 31 | - name: windows 32 | os: windows 33 | architecture: x86_64 34 | node_versions: 35 | - "6" 36 | - name: windows 37 | os: windows 38 | architecture: x86 39 | node_versions: 40 | - "6" 41 | 42 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 10 4 | - 8 5 | - 6 6 | os: 7 | - linux 8 | - osx 9 | before_install: 10 | - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then 11 | pip install --user -r requirements.txt; 12 | else 13 | pip2 install -r requirements.txt; 14 | fi 15 | script: 16 | - npm test 17 | compiler: clang-4.0 18 | env: 19 | global: 20 | - CCACHE_TEMPDIR=/tmp/.ccache-temp 21 | - CCACHE_COMPRESS=1 22 | - CC="clang" 23 | - CXX="clang++" 24 | addons: 25 | apt: 26 | sources: 27 | - ubuntu-toolchain-r-test 28 | packages: 29 | - libstdc++-5-dev 30 | notifications: 31 | email: false 32 | deploy: 33 | skip_cleanup: true 34 | provider: script 35 | script: ./ci/prebuild-publish.sh 36 | on: 37 | node: 10 38 | tags: true 39 | branch: master 40 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/appveyor.yml: -------------------------------------------------------------------------------- 1 | # appveyor file 2 | # http://www.appveyor.com/docs/appveyor-yml 3 | image: 4 | - Visual Studio 2015 5 | 6 | init: 7 | - git config --global core.autocrlf input 8 | 9 | cache: 10 | - C:\Users\appveyor\.node-gyp 11 | - '%AppData%\npm-cache' 12 | 13 | # what combinations to test 14 | environment: 15 | matrix: 16 | - nodejs_version: 10 17 | - nodejs_version: 8 18 | - nodejs_version: 6 19 | - nodejs_version: 4 20 | 21 | platform: 22 | - x86 23 | - x64 24 | 25 | install: 26 | - pip install -r requirements.txt 27 | - ps: Install-Product node $env:nodejs_version x64 28 | - npm install 29 | 30 | build: off 31 | 32 | test_script: 33 | - node --version 34 | - npm --version 35 | - cmd: npm test 36 | 37 | deploy_script: 38 | - ci\prebuild-publish.bat %nodejs_version% 39 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "drivelist", 5 | "include_dirs" : [ 6 | " 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | #ifndef SRC_DARWIN_REDISKLIST_H_ 19 | #define SRC_DARWIN_REDISKLIST_H_ 20 | 21 | #import 22 | 23 | /** 24 | * Class to return a list of disks synchronously 25 | * To use the class, just init an instance of it and 26 | * it will populate the disks property with NSStrings 27 | * 28 | * @author Robin Andersson 29 | */ 30 | @interface REDiskList : NSObject 31 | 32 | /** 33 | * NSArray of disks and partitions 34 | * Disks are in the format disk0, disk1 etc 35 | * Partitions are in the format disk0s1, disk1s1 etc 36 | */ 37 | @property(readonly) NSArray *disks; 38 | 39 | @end 40 | 41 | #endif // SRC_DARWIN_REDISKLIST_H_ 42 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/src/darwin/REDiskList.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 balena.io 3 | * Copyright 2018 Robin Andersson 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | #import "REDiskList.h" 19 | #import 20 | 21 | @implementation REDiskList 22 | 23 | - (id)init { 24 | self = [super init]; 25 | 26 | if (self) { 27 | _disks = [[NSMutableArray alloc] init]; 28 | [self populateDisksBlocking]; 29 | [(NSMutableArray *)_disks sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; 30 | } 31 | 32 | return self; 33 | } 34 | 35 | -(void)dealloc { 36 | [_disks release]; 37 | [super dealloc]; 38 | } 39 | 40 | void appendDisk(DADiskRef disk, void *context) { 41 | NSMutableArray *_disks = (__bridge NSMutableArray*)context; 42 | const char *bsdName = DADiskGetBSDName(disk); 43 | if (bsdName != nil) { 44 | [_disks addObject:[NSString stringWithUTF8String:bsdName]]; 45 | } 46 | } 47 | 48 | - (void)populateDisksBlocking { 49 | DASessionRef session = DASessionCreate(kCFAllocatorDefault); 50 | if (session) { 51 | DARegisterDiskAppearedCallback(session, NULL, appendDisk, (void*)_disks); 52 | CFRunLoopRef runLoop = [[NSRunLoop currentRunLoop] getCFRunLoop]; 53 | DASessionScheduleWithRunLoop(session, runLoop, kCFRunLoopDefaultMode); 54 | CFRunLoopStop(runLoop); 55 | CFRunLoopRunInMode((CFStringRef)NSDefaultRunLoopMode, 0.05, NO); 56 | DAUnregisterCallback(session, appendDisk, (void*)_disks); 57 | CFRelease(session); 58 | } 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/src/drivelist.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 balena.io 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include 19 | #include "drivelist.hpp" 20 | 21 | class DriveListWorker : public Nan::AsyncWorker { 22 | public: 23 | explicit DriveListWorker(Nan::Callback *callback) 24 | : Nan::AsyncWorker(callback), devices() {} 25 | 26 | ~DriveListWorker() {} 27 | 28 | void Execute() { 29 | devices = Drivelist::ListStorageDevices(); 30 | } 31 | 32 | void HandleOKCallback() { 33 | Nan::HandleScope scope; 34 | v8::Local drives = Nan::New(); 35 | 36 | uint32_t i; 37 | uint32_t size = (uint32_t) devices.size(); 38 | 39 | for (i = 0; i < size; i++) { 40 | Nan::Set(drives, i, Drivelist::PackDriveDescriptor(&devices[i])); 41 | } 42 | 43 | v8::Local argv[] = { Nan::Null(), drives }; 44 | callback->Call(2, argv, async_resource); 45 | } 46 | 47 | private: 48 | std::vector devices; 49 | }; 50 | 51 | NAN_METHOD(list) { 52 | if (!info[0]->IsFunction()) { 53 | return Nan::ThrowTypeError("Callback must be a function"); 54 | } 55 | 56 | Nan::Callback *callback = new Nan::Callback(info[0].As()); 57 | Nan::AsyncQueueWorker(new DriveListWorker(callback)); 58 | 59 | info.GetReturnValue().SetUndefined(); 60 | } 61 | 62 | NAN_MODULE_INIT(InitAll) { 63 | NAN_EXPORT(target, list); 64 | } 65 | 66 | NODE_MODULE(DriveList, InitAll); 67 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/src/drivelist.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 balena.io 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SRC_DRIVELIST_HPP_ 18 | #define SRC_DRIVELIST_HPP_ 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | namespace Drivelist { 26 | 27 | struct MountPoint { 28 | std::string path; 29 | }; 30 | 31 | struct DeviceDescriptor { 32 | std::string enumerator; 33 | std::string busType; 34 | std::string busVersion; 35 | bool busVersionNull; 36 | std::string device; 37 | std::string devicePath; 38 | bool devicePathNull; 39 | std::string raw; 40 | std::string description; 41 | std::string error; 42 | std::string parentDevice; 43 | uint64_t size; 44 | uint32_t blockSize = 512; 45 | uint32_t logicalBlockSize = 512; 46 | std::vector mountpoints; 47 | std::vector mountpointLabels; 48 | std::vector childDevices; 49 | bool isReadOnly; // Device is read-only 50 | bool isSystem; // Device is a system drive 51 | bool isVirtual; // Device is a virtual storage device 52 | bool isRemovable; // Device is removable from the running system 53 | bool isCard; // Device is an SD-card 54 | bool isSCSI; // Connected via the Small Computer System Interface (SCSI) 55 | bool isUSB; // Connected via Universal Serial Bus (USB) 56 | bool isUAS; // Connected via the USB Attached SCSI (UAS) 57 | bool isUASNull; 58 | }; 59 | 60 | std::vector ListStorageDevices(); 61 | v8::Local PackDriveDescriptor(const DeviceDescriptor *instance); 62 | 63 | } // namespace Drivelist 64 | 65 | NAN_METHOD(list); 66 | 67 | #endif // SRC_DRIVELIST_HPP_ 68 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/src/linux/list.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 balena.io 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include "../drivelist.hpp" 19 | 20 | namespace Drivelist { 21 | 22 | // TODO(jhermsmeier): Implement 23 | std::vector ListStorageDevices() { 24 | std::vector drivelist; 25 | return drivelist; 26 | } 27 | 28 | } // namespace Drivelist 29 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/tests/data/lsblk/no-children-mountpoints.json: -------------------------------------------------------------------------------- 1 | { 2 | "blockdevices": [{ 3 | "name": "sda", 4 | "maj:min": "8:0", 5 | "rm": "1", 6 | "size": "14.3G", 7 | "ro": "0", 8 | "type": "disk", 9 | "mountpoint": "/media/jwentz/Temp" 10 | }, { 11 | "name": "nvme0n1", 12 | "maj:min": "259:0", 13 | "rm": "0", 14 | "size": "477G", 15 | "ro": "0", 16 | "type": "disk", 17 | "mountpoint": null, 18 | "children": [{ 19 | "name": "nvme0n1p3", 20 | "maj:min": "259:3", 21 | "rm": "0", 22 | "size": "15.8G", 23 | "ro": "0", 24 | "type": "part", 25 | "mountpoint": "[SWAP]" 26 | }, { 27 | "name": "nvme0n1p1", 28 | "maj:min": "259:1", 29 | "rm": "0", 30 | "size": "512M", 31 | "ro": "0", 32 | "type": "part", 33 | "mountpoint": "/boot/efi" 34 | }, { 35 | "name": "nvme0n1p2", 36 | "maj:min": "259:2", 37 | "rm": "0", 38 | "size": "460.7G", 39 | "ro": "0", 40 | "type": "part", 41 | "mountpoint": "/" 42 | }] 43 | }] 44 | } 45 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/tests/data/lsblk/no-partition-table.txt: -------------------------------------------------------------------------------- 1 | NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="240065183744" RO="0" TYPE="disk" MOUNTPOINT="" 2 | NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="209715200" RO="0" TYPE="part" MOUNTPOINT="/boot/efi" 3 | NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="1073741824" RO="0" TYPE="part" MOUNTPOINT="/boot" 4 | NAME="sda3" MAJ:MIN="8:3" RM="0" SIZE="115835142144" RO="0" TYPE="part" MOUNTPOINT="" 5 | NAME="centos-root" MAJ:MIN="253:0" RM="0" SIZE="53687091200" RO="0" TYPE="lvm" MOUNTPOINT="/" 6 | NAME="centos-swap" MAJ:MIN="253:1" RM="0" SIZE="8455716864" RO="0" TYPE="lvm" MOUNTPOINT="[SWAP]" 7 | NAME="centos-home" MAJ:MIN="253:2" RM="0" SIZE="53687091200" RO="0" TYPE="lvm" MOUNTPOINT="/home" 8 | NAME="sdb" MAJ:MIN="8:16" RM="1" SIZE="" RO="0" TYPE="disk" MOUNTPOINT="" 9 | NAME="sdc" MAJ:MIN="8:32" RM="1" SIZE="31457280000" RO="0" TYPE="disk" MOUNTPOINT="/run/media/DA2E4172/BUILD" 10 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/tests/data/lsblk/ubuntu-14.04-3.txt: -------------------------------------------------------------------------------- 1 | NAME="sda" MAJ:MIN="8:0" RM="0" SIZE="931.5G" RO="0" TYPE="disk" MOUNTPOINT="" 2 | NAME="sda1" MAJ:MIN="8:1" RM="0" SIZE="1K" RO="0" TYPE="part" MOUNTPOINT="" 3 | NAME="sda2" MAJ:MIN="8:2" RM="0" SIZE="488.3G" RO="0" TYPE="part" MOUNTPOINT="" 4 | NAME="sda5" MAJ:MIN="8:5" RM="0" SIZE="14.9G" RO="0" TYPE="part" MOUNTPOINT="" 5 | NAME="sda6" MAJ:MIN="8:6" RM="0" SIZE="335.2G" RO="0" TYPE="part" MOUNTPOINT="" 6 | NAME="sdb" MAJ:MIN="8:16" RM="1" SIZE="" RO="0" TYPE="disk" MOUNTPOINT="" 7 | NAME="sdc" MAJ:MIN="8:32" RM="1" SIZE="" RO="0" TYPE="disk" MOUNTPOINT="" 8 | NAME="sdd" MAJ:MIN="8:48" RM="1" SIZE="7.4G" RO="0" TYPE="disk" MOUNTPOINT="" 9 | NAME="sdd1" MAJ:MIN="8:49" RM="1" SIZE="7.4G" RO="0" TYPE="part" MOUNTPOINT="/media//85CA-6700" 10 | NAME="sr0" MAJ:MIN="11:0" RM="1" SIZE="1024M" RO="0" TYPE="rom" MOUNTPOINT="" 11 | NAME="loop0" MAJ:MIN="7:0" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 12 | NAME="loop1" MAJ:MIN="7:1" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 13 | NAME="loop2" MAJ:MIN="7:2" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 14 | NAME="loop3" MAJ:MIN="7:3" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 15 | NAME="loop4" MAJ:MIN="7:4" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 16 | NAME="loop5" MAJ:MIN="7:5" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 17 | NAME="loop6" MAJ:MIN="7:6" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 18 | NAME="loop7" MAJ:MIN="7:7" RM="0" SIZE="" RO="0" TYPE="loop" MOUNTPOINT="" 19 | NAME="nvme0n1" MAJ:MIN="259:0" RM="0" SIZE="238.5G" RO="0" TYPE="disk" MOUNTPOINT="" 20 | NAME="nvme0n1p1" MAJ:MIN="259:1" RM="0" SIZE="499M" RO="0" TYPE="part" MOUNTPOINT="" 21 | NAME="nvme0n1p2" MAJ:MIN="259:2" RM="0" SIZE="116.6G" RO="0" TYPE="part" MOUNTPOINT="" 22 | NAME="nvme0n1p3" MAJ:MIN="259:3" RM="0" SIZE="4.9G" RO="0" TYPE="part" MOUNTPOINT="" 23 | NAME="nvme0n1p4" MAJ:MIN="259:4" RM="0" SIZE="116.5G" RO="0" TYPE="part" MOUNTPOINT="/" 24 | -------------------------------------------------------------------------------- /src/dependencies/drivelist/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "outDir": "js", 5 | "sourceMap": true, 6 | "declaration": true, 7 | "target": "es6", 8 | "noImplicitAny": true, 9 | "strictNullChecks": true, 10 | "noUnusedLocals": true, 11 | "noUnusedParameters": true 12 | }, 13 | "include": [ 14 | "lib" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/dependencies/fat32format/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.4.4) 2 | project(fat32format LANGUAGES CXX) 3 | 4 | add_executable(${PROJECT_NAME} fat32format.cpp) 5 | -------------------------------------------------------------------------------- /src/dependencies/fat32format/Makefile: -------------------------------------------------------------------------------- 1 | CXX = clang-cl 2 | CXXFLAGS += -utf-8 -std:c++latest -EHsc -GR- -W4 -Werror=gnu -Wmicrosoft -Wno-missing-field-initializers -Wpedantic 3 | 4 | fat32format: fat32format.cpp 5 | clean: 6 | rm fat32format.exe -------------------------------------------------------------------------------- /src/dependencies/fat32format/README.md: -------------------------------------------------------------------------------- 1 | # fat32format 2 | ``` 3 | Usage Fat32Format [-cN] [-lLABEL] [-p] [-y] { C: | \\.\C: | \\?\Volume{GUID} } 4 | Erase all data on specified volume, format it for FAT32 5 | 6 | -c Specify a cluster size by sector count. 7 | Accepts 1, 2, 4, 8, 16, 32, 64, 128 8 | EXAMPLE: Fat32Format -c4 X: - use 4 sectors per cluster 9 | -l Specify volume label. 10 | If exceeds 11-bytes, truncate label. 11 | -p Make immutable AUTORUN.INF on root directory. 12 | This file cannot do anything on Windows. 13 | 14 | Modified Version see https://github.com/0xbadfca11/fat32format 15 | 16 | Original Version 1.07, see http://www.ridgecrop.demon.co.uk/fat32format.htm 17 | This software is covered by the GPL 18 | Use with care - Ridgecrop are not liable for data lost using this tool 19 | ``` 20 | 21 | ## Changes from original 22 | 23 | ### Alignment awareness 24 | Original fat32format allocates only necessary size to metadata. 25 | This isn't always aligned cluster. 26 | Modified fat32format always round up 1 MiB. 27 | 28 | NOTE: FAT32 is different from NTFS, metadata exists between start of the partition and first cluster. 29 | 30 | ### Immutable AUTORUN.INF 31 | You can not open, read, write, rename, move or delete this on Windows OS. 32 | Only re-format can delete this. (or delete from non-Windows OS) 33 | 34 | NOTE: This behavior is undocumented. 35 | It does not guarantee also be the same behavior in the future. 36 | 37 | ### Strict drive letter 38 | Original fat32format accepts 39 | 40 | fat32format.exe XYZABCDKGS!@#$% 41 | 42 | This will format X: drive. 43 | Modified fat32format deny this. 44 | Only accepts 45 | 46 | fat32format.exe X: 47 | fat32format.exe \\.\X: 48 | fat32format.exe \\?\Volume{GUID} 49 | 50 | ### Support volume label at format 51 | 52 | ## LICENSE 53 | GPL 54 | -------------------------------------------------------------------------------- /src/dependencies/fat32format/fat32format.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.28306.52 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fat32format", "fat32format.vcxproj", "{568C331C-2776-4EE1-A2C6-CEDF11F5D4E5}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x86 = Debug|x86 11 | Release|x86 = Release|x86 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {568C331C-2776-4EE1-A2C6-CEDF11F5D4E5}.Debug|x86.ActiveCfg = Debug|Win32 15 | {568C331C-2776-4EE1-A2C6-CEDF11F5D4E5}.Debug|x86.Build.0 = Debug|Win32 16 | {568C331C-2776-4EE1-A2C6-CEDF11F5D4E5}.Release|x86.ActiveCfg = Release|Win32 17 | {568C331C-2776-4EE1-A2C6-CEDF11F5D4E5}.Release|x86.Build.0 = Release|Win32 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {ECA92B69-47F1-4204-8D02-F620DE37D5F3} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /src/dependencies/fat32format/fat32format.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {bd9de17c-6753-4b74-88c1-053ae3e4be54} 6 | cpp;c;cxx;rc;def;r;odl;idl;hpj;bat 7 | 8 | 9 | {a8723b2b-074a-4151-b954-d9e358891d00} 10 | h;hpp;hxx;hm;inl 11 | 12 | 13 | {073cca14-a20b-4658-af2c-34be74fe99f6} 14 | ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | 12 | [*.md] 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build/ 3 | prebuilds 4 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/.npmignore: -------------------------------------------------------------------------------- 1 | # Files 2 | .* 3 | *.md 4 | *.log 5 | *.yml 6 | 7 | # Directories 8 | doc 9 | tests 10 | build 11 | example 12 | benchmark 13 | prebuilds 14 | scripts 15 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - 6 4 | - 8 5 | - 10 6 | - 12 7 | os: 8 | - linux 9 | - osx 10 | before_install: 11 | - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then 12 | pip install --user -r requirements.txt; 13 | else 14 | pip2 install -r requirements.txt; 15 | fi 16 | script: 17 | - npm test 18 | compiler: clang-4.0 19 | env: 20 | global: 21 | - CCACHE_TEMPDIR=/tmp/.ccache-temp 22 | - CCACHE_COMPRESS=1 23 | - CC="clang" 24 | - CXX="clang++" 25 | matrix: 26 | - TARGET_ARCH=x64 27 | - TARGET_ARCH=x86 28 | matrix: 29 | exclude: 30 | - os: osx 31 | env: TARGET_ARCH=x86 32 | addons: 33 | apt: 34 | sources: 35 | - ubuntu-toolchain-r-test 36 | packages: 37 | - libstdc++-5-dev 38 | notifications: 39 | email: false 40 | deploy: 41 | skip_cleanup: true 42 | provider: script 43 | script: scripts/prebuild-publish.sh 44 | on: 45 | tags: true 46 | branch: master 47 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/MANUAL_TESTS.md: -------------------------------------------------------------------------------- 1 | Manual Tests 2 | ============ 3 | 4 | Windows: 5 | 6 | - [x] SD Card reader 7 | - [x] USB Drive 8 | - [ ] USB HDD (does nothing) 9 | - [x] Multi SD Card reader 10 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/appveyor.yml: -------------------------------------------------------------------------------- 1 | # appveyor file 2 | # http://www.appveyor.com/docs/appveyor-yml 3 | image: 4 | - Visual Studio 2015 5 | 6 | init: 7 | - git config --global core.autocrlf input 8 | 9 | cache: 10 | - C:\Users\appveyor\.node-gyp 11 | - '%AppData%\npm-cache' 12 | 13 | environment: 14 | matrix: 15 | - nodejs_version: 6 16 | - nodejs_version: 8 17 | - nodejs_version: 10 18 | - nodejs_version: 12 19 | 20 | platform: 21 | - x86 22 | - x64 23 | 24 | install: 25 | # https://www.appveyor.com/docs/lang/nodejs-iojs/#installing-any-version-of-nodejs-or-iojs 26 | - ps: Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) $env:PLATFORM 27 | - npm -g install npm@latest 28 | - set PATH=%APPDATA%\npm;%PATH% 29 | - npm install --build-from-source 30 | - pip install -r requirements.txt 31 | 32 | build: off 33 | 34 | test_script: 35 | - node --version 36 | - npm --version 37 | - cmd: npm test 38 | 39 | deploy_script: 40 | - scripts\prebuild-publish.bat 41 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/binding.gyp: -------------------------------------------------------------------------------- 1 | { 2 | "targets": [ 3 | { 4 | "target_name": "MountUtils", 5 | "include_dirs" : [ 6 | " { 44 | * if (error) { 45 | * throw error; 46 | * } 47 | * 48 | * console.log('Done!'); 49 | * }); 50 | */ 51 | 52 | module.exports = require('bindings')({ 53 | bindings: 'MountUtils', 54 | /* eslint-disable camelcase */ 55 | module_root: __dirname 56 | /* eslint-enable camelcase */ 57 | }); 58 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/requirements.txt: -------------------------------------------------------------------------------- 1 | cpplint==1.3.0 2 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/scripts/prebuild-publish.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | IF "%APPVEYOR_REPO_BRANCH%"=="master" ( 4 | IF "%GITHUB_TOKEN%" NEQ "" ( 5 | npm run prebuild-release -- -u %GITHUB_TOKEN% 6 | ) 7 | ) 8 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/scripts/prebuild-publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ $GITHUB_TOKEN ]]; then 4 | npm run prebuild-release -- -u "$GITHUB_TOKEN" 5 | fi 6 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/src/mountutils.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2017 resin.io 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include 19 | #include "mountutils.hpp" 20 | 21 | NAN_MODULE_INIT(MountUtilsInit) { 22 | NAN_EXPORT(target, unmountDisk); 23 | NAN_EXPORT(target, eject); 24 | } 25 | 26 | void MountUtilsLog(std::string string) { 27 | const char* debug = std::getenv("MOUNTUTILS_DEBUG"); 28 | if (debug != NULL) { 29 | std::cout << "[mountutils] " << string << std::endl; 30 | } 31 | } 32 | 33 | NODE_MODULE(MountUtils, MountUtilsInit) 34 | -------------------------------------------------------------------------------- /src/dependencies/mountutils/src/mountutils.hpp: -------------------------------------------------------------------------------- 1 | #ifndef SRC_MOUNTUTILS_HPP_ 2 | #define SRC_MOUNTUTILS_HPP_ 3 | 4 | /* 5 | * Copyright 2017 resin.io 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | */ 19 | 20 | #include 21 | #include 22 | 23 | enum MOUNTUTILS_RESULT { 24 | MOUNTUTILS_SUCCESS, 25 | MOUNTUTILS_ERROR_INVALID_DRIVE, 26 | MOUNTUTILS_ERROR_ACCESS_DENIED, 27 | MOUNTUTILS_ERROR_AGAIN, 28 | MOUNTUTILS_ERROR_GENERAL 29 | }; 30 | 31 | void MountUtilsLog(std::string string); 32 | 33 | MOUNTUTILS_RESULT unmount_disk(const char *device); 34 | MOUNTUTILS_RESULT eject_disk(const char *device); 35 | 36 | NAN_METHOD(unmountDisk); 37 | NAN_METHOD(eject); 38 | 39 | #endif // SRC_MOUNTUTILS_HPP_ 40 | -------------------------------------------------------------------------------- /src/dependencies/sha256crypt/sha256crypt.h: -------------------------------------------------------------------------------- 1 | #ifndef SHA256CRYPT_H 2 | #define SHA256CRYPT_H 3 | 4 | extern "C" { 5 | 6 | char * 7 | sha256_crypt (const char *key, const char *salt); 8 | 9 | } 10 | 11 | #endif // SHA256CRYPT_H 12 | -------------------------------------------------------------------------------- /src/devicewrapper.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICEWRAPPER_H 2 | #define DEVICEWRAPPER_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2022 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class DeviceWrapperBlockCacheEntry; 14 | class DeviceWrapperFatPartition; 15 | 16 | #ifdef Q_OS_WIN 17 | #include "windows/winfile.h" 18 | typedef WinFile DeviceWrapperFile; 19 | #elif defined(Q_OS_DARWIN) 20 | #include "mac/macfile.h" 21 | typedef MacFile DeviceWrapperFile; 22 | #else 23 | typedef QFile DeviceWrapperFile; 24 | #endif 25 | 26 | 27 | class DeviceWrapper : public QObject 28 | { 29 | Q_OBJECT 30 | public: 31 | explicit DeviceWrapper(DeviceWrapperFile *file, QObject *parent = nullptr); 32 | virtual ~DeviceWrapper(); 33 | void sync(); 34 | void pwrite(const char *buf, quint64 size, quint64 offset); 35 | void pread(char *buf, quint64 size, quint64 offset); 36 | DeviceWrapperFatPartition *fatPartition(int nr); 37 | 38 | protected: 39 | bool _dirty; 40 | QMap _blockcache; 41 | DeviceWrapperFile *_file; 42 | 43 | void _readIntoBlockCacheIfNeeded(quint64 offset, quint64 size); 44 | void _seekToBlock(quint64 blockNr); 45 | 46 | signals: 47 | 48 | }; 49 | 50 | #endif // DEVICEWRAPPER_H 51 | -------------------------------------------------------------------------------- /src/devicewrapperblockcacheentry.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "devicewrapperblockcacheentry.h" 7 | #include 8 | 9 | DeviceWrapperBlockCacheEntry::DeviceWrapperBlockCacheEntry(QObject *parent, size_t blocksize) 10 | : QObject(parent), dirty(false) 11 | { 12 | /* Windows requires buffers to be 4k aligned when reading/writing raw disk devices */ 13 | block = (char *) qMallocAligned(blocksize, 4096); 14 | } 15 | 16 | DeviceWrapperBlockCacheEntry::~DeviceWrapperBlockCacheEntry() 17 | { 18 | qFreeAligned(block); 19 | } 20 | -------------------------------------------------------------------------------- /src/devicewrapperblockcacheentry.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICEWRAPPERBLOCKCACHEENTRY_H 2 | #define DEVICEWRAPPERBLOCKCACHEENTRY_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2022 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | 11 | class DeviceWrapperBlockCacheEntry : QObject 12 | { 13 | Q_OBJECT 14 | public: 15 | DeviceWrapperBlockCacheEntry(QObject *parent, size_t blocksize = 4096); 16 | ~DeviceWrapperBlockCacheEntry(); 17 | char *block; 18 | bool dirty; 19 | }; 20 | 21 | #endif // DEVICEWRAPPERBLOCKCACHEENTRY_H 22 | -------------------------------------------------------------------------------- /src/devicewrapperfatpartition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICEWRAPPERFATPARTITION_H 2 | #define DEVICEWRAPPERFATPARTITION_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2022 Raspberry Pi Ltd 7 | */ 8 | 9 | #include "devicewrapperpartition.h" 10 | #include 11 | #include 12 | #include 13 | 14 | enum fatType { FAT12, FAT16, FAT32, EXFAT }; 15 | struct dir_entry; 16 | 17 | class DeviceWrapperFatPartition : public DeviceWrapperPartition 18 | { 19 | Q_OBJECT 20 | public: 21 | DeviceWrapperFatPartition(DeviceWrapper *dw, quint64 partStart, quint64 partLen, QObject *parent = nullptr); 22 | 23 | QByteArray readFile(const QString &filename); 24 | void writeFile(const QString &filename, const QByteArray &contents); 25 | bool fileExists(const QString &filename); 26 | 27 | protected: 28 | enum fatType _type; 29 | uint32_t _firstFatStartOffset, _fatSize, _bytesPerCluster, _clusterOffset; 30 | uint32_t _fat16_rootDirSectors, _fat16_firstRootDirSector; 31 | uint32_t _fat32_firstRootDirCluster, _fat32_currentRootDirCluster; 32 | uint16_t _bytesPerSector, _fat32_fsinfoSector; 33 | QList _fatStartOffset; 34 | QList _currentDirClusters; 35 | 36 | QList getClusterChain(uint32_t firstCluster); 37 | void setFAT16(uint16_t cluster, uint16_t value); 38 | void setFAT32(uint32_t cluster, uint32_t value); 39 | void setFAT(uint32_t cluster, uint32_t value); 40 | uint32_t getFAT(uint32_t cluster); 41 | void seekCluster(uint32_t cluster); 42 | uint32_t allocateCluster(); 43 | uint32_t allocateCluster(uint32_t previousCluster); 44 | bool getDirEntry(const QString &longFilename, struct dir_entry *entry, bool createIfNotExist = false); 45 | bool dirNameExists(const QByteArray dirname); 46 | void updateDirEntry(struct dir_entry *dirEntry); 47 | void writeDirEntryAtCurrentPos(struct dir_entry *dirEntry); 48 | void openDir(); 49 | bool readDir(struct dir_entry *result); 50 | void updateFSinfo(int deltaClusters, uint32_t nextFreeClusterHint); 51 | uint16_t QTimeToFATtime(const QTime &time); 52 | uint16_t QDateToFATdate(const QDate &date); 53 | }; 54 | 55 | #endif // DEVICEWRAPPERFATPARTITION_H 56 | -------------------------------------------------------------------------------- /src/devicewrapperpartition.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "devicewrapperpartition.h" 7 | #include "devicewrapper.h" 8 | 9 | DeviceWrapperPartition::DeviceWrapperPartition(DeviceWrapper *dw, quint64 partStart, quint64 partLen, QObject *parent) 10 | : QObject{parent}, _dw(dw), _partStart(partStart), _partLen(partLen), _offset(partStart) 11 | { 12 | _partEnd = _partStart + _partLen; 13 | } 14 | 15 | DeviceWrapperPartition::~DeviceWrapperPartition() 16 | { 17 | 18 | } 19 | 20 | void DeviceWrapperPartition::read(char *data, qint64 size) 21 | { 22 | if (_offset+size > _partEnd) 23 | { 24 | throw std::runtime_error("Error: trying to read beyond partition"); 25 | } 26 | 27 | _dw->pread(data, size, _offset); 28 | _offset += size; 29 | } 30 | 31 | void DeviceWrapperPartition::seek(qint64 pos) 32 | { 33 | if (pos > _partLen) 34 | { 35 | throw std::runtime_error("Error: trying to seek beyond partition"); 36 | } 37 | _offset = pos+_partStart; 38 | } 39 | 40 | qint64 DeviceWrapperPartition::pos() const 41 | { 42 | return _offset-_partStart; 43 | } 44 | 45 | void DeviceWrapperPartition::write(const char *data, qint64 size) 46 | { 47 | if (_offset+size > _partEnd) 48 | { 49 | throw std::runtime_error("Error: trying to write beyond partition"); 50 | } 51 | 52 | _dw->pwrite(data, size, _offset); 53 | _offset += size; 54 | } 55 | -------------------------------------------------------------------------------- /src/devicewrapperpartition.h: -------------------------------------------------------------------------------- 1 | #ifndef DEVICEWRAPPERPARTITION_H 2 | #define DEVICEWRAPPERPARTITION_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2022 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | 11 | class DeviceWrapper; 12 | 13 | class DeviceWrapperPartition : public QObject 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit DeviceWrapperPartition(DeviceWrapper *dw, quint64 partStart, quint64 partLen, QObject *parent = nullptr); 18 | virtual ~DeviceWrapperPartition(); 19 | void read(char *data, qint64 size); 20 | void seek(qint64 pos); 21 | qint64 pos() const; 22 | void write(const char *data, qint64 size); 23 | 24 | protected: 25 | DeviceWrapper *_dw; 26 | quint64 _partStart, _partLen, _partEnd, _offset; 27 | 28 | signals: 29 | 30 | }; 31 | 32 | #endif // DEVICEWRAPPERPARTITION_H 33 | -------------------------------------------------------------------------------- /src/downloadstatstelemetry.h: -------------------------------------------------------------------------------- 1 | #ifndef DOWNLOADSTATSTELEMETRY_H 2 | #define DOWNLOADSTATSTELEMETRY_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class DownloadStatsTelemetry : public QThread 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit DownloadStatsTelemetry(const QByteArray &url, const QByteArray &parentcategory, const QByteArray &osname, bool embedded, const QString &imagerLang, QObject *parent = nullptr); 18 | 19 | protected: 20 | CURL *_c; 21 | QByteArray _url, _useragent, _postfields; 22 | virtual void run(); 23 | static size_t _curl_write_callback(char *ptr, size_t size, size_t nmemb, void *userdata); 24 | static size_t _curl_header_callback( void *ptr, size_t size, size_t nmemb, void *userdata); 25 | 26 | signals: 27 | 28 | public slots: 29 | }; 30 | 31 | #endif // DOWNLOADSTATSTELEMETRY_H 32 | -------------------------------------------------------------------------------- /src/driveformatthread.h: -------------------------------------------------------------------------------- 1 | #ifndef DRIVEFORMATTHREAD_H 2 | #define DRIVEFORMATTHREAD_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | class DriveFormatThread : public QThread 13 | { 14 | Q_OBJECT 15 | public: 16 | DriveFormatThread(const QByteArray &device, QObject *parent = nullptr); 17 | virtual ~DriveFormatThread(); 18 | virtual void run(); 19 | 20 | signals: 21 | void success(); 22 | void error(QString msg); 23 | 24 | protected: 25 | QByteArray _device; 26 | std::uint64_t getDeviceSize(const QByteArray &device); 27 | }; 28 | 29 | #endif // DRIVEFORMATTHREAD_H 30 | -------------------------------------------------------------------------------- /src/drivelistitem.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "drivelistitem.h" 7 | 8 | DriveListItem::DriveListItem(QString device, QString description, quint64 size, bool isUsb, bool isScsi, bool readOnly, bool isSystem, QStringList mountpoints, QObject *parent) 9 | : QObject(parent), _device(device), _description(description), _mountpoints(mountpoints), _size(size), _isUsb(isUsb), _isScsi(isScsi), _isReadOnly(readOnly), _isSystem(isSystem) 10 | { 11 | 12 | } 13 | 14 | int DriveListItem::sizeInGb() 15 | { 16 | return _size / 1000000000; 17 | } 18 | -------------------------------------------------------------------------------- /src/drivelistitem.h: -------------------------------------------------------------------------------- 1 | #ifndef DRIVELISTITEM_H 2 | #define DRIVELISTITEM_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | class DriveListItem : public QObject 13 | { 14 | Q_OBJECT 15 | public: 16 | explicit DriveListItem(QString device, QString description, quint64 size, bool isUsb = false, bool isScsi = false, bool readOnly = false, bool isSystem = false, QStringList mountpoints = QStringList(), QObject *parent = nullptr); 17 | 18 | Q_PROPERTY(QString device MEMBER _device CONSTANT) 19 | Q_PROPERTY(QString description MEMBER _description CONSTANT) 20 | Q_PROPERTY(quint64 size MEMBER _size CONSTANT) 21 | Q_PROPERTY(QStringList mountpoints MEMBER _mountpoints CONSTANT) 22 | Q_PROPERTY(bool isUsb MEMBER _isUsb CONSTANT) 23 | Q_PROPERTY(bool isScsi MEMBER _isScsi CONSTANT) 24 | Q_PROPERTY(bool isReadOnly MEMBER _isReadOnly CONSTANT) 25 | Q_PROPERTY(bool isSystem MEMBER _isSystem CONSTANT) 26 | Q_INVOKABLE int sizeInGb(); 27 | 28 | signals: 29 | 30 | public slots: 31 | 32 | protected: 33 | QString _device; 34 | QString _description; 35 | QStringList _mountpoints; 36 | quint64 _size; 37 | bool _isUsb; 38 | bool _isScsi; 39 | bool _isReadOnly; 40 | bool _isSystem; 41 | }; 42 | 43 | #endif // DRIVELISTITEM_H 44 | -------------------------------------------------------------------------------- /src/drivelistmodel.h: -------------------------------------------------------------------------------- 1 | #ifndef DRIVELISTMODEL_H 2 | #define DRIVELISTMODEL_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include "drivelistitem.h" 14 | #include "drivelistmodelpollthread.h" 15 | 16 | class DriveListModel : public QAbstractListModel 17 | { 18 | Q_OBJECT 19 | QML_ELEMENT 20 | QML_UNCREATABLE("Created by C++") 21 | public: 22 | DriveListModel(QObject *parent = nullptr); 23 | virtual int rowCount(const QModelIndex &) const; 24 | virtual QHash roleNames() const; 25 | virtual QVariant data(const QModelIndex &index, int role) const; 26 | void startPolling(); 27 | void stopPolling(); 28 | 29 | enum driveListRoles { 30 | deviceRole = Qt::UserRole + 1, descriptionRole, sizeRole, isUsbRole, isScsiRole, isReadOnlyRole, isSystemRole, mountpointsRole 31 | }; 32 | 33 | public slots: 34 | void processDriveList(std::vector l); 35 | 36 | protected: 37 | QMap _drivelist; 38 | QHash _rolenames; 39 | DriveListModelPollThread _thread; 40 | }; 41 | 42 | #endif // DRIVELISTMODEL_H 43 | -------------------------------------------------------------------------------- /src/drivelistmodelpollthread.cpp: -------------------------------------------------------------------------------- 1 | #include "drivelistmodelpollthread.h" 2 | #include 3 | #include 4 | 5 | /* 6 | * SPDX-License-Identifier: Apache-2.0 7 | * Copyright (C) 2020 Raspberry Pi Ltd 8 | */ 9 | 10 | DriveListModelPollThread::DriveListModelPollThread(QObject *parent) 11 | : QThread(parent), _terminate(false) 12 | { 13 | qRegisterMetaType< std::vector >( "std::vector" ); 14 | } 15 | 16 | DriveListModelPollThread::~DriveListModelPollThread() 17 | { 18 | _terminate = true; 19 | if (!wait(2000)) { 20 | terminate(); 21 | } 22 | } 23 | 24 | void DriveListModelPollThread::stop() 25 | { 26 | _terminate = true; 27 | } 28 | 29 | void DriveListModelPollThread::start() 30 | { 31 | _terminate = false; 32 | QThread::start(); 33 | } 34 | 35 | void DriveListModelPollThread::run() 36 | { 37 | QElapsedTimer t1; 38 | 39 | while (!_terminate) 40 | { 41 | t1.start(); 42 | emit newDriveList( Drivelist::ListStorageDevices() ); 43 | if (t1.elapsed() > 1000) 44 | qDebug() << "Enumerating drives took a long time:" << t1.elapsed()/1000.0 << "seconds"; 45 | QThread::sleep(1); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/drivelistmodelpollthread.h: -------------------------------------------------------------------------------- 1 | #ifndef DRIVELISTMODELPOLLTHREAD_H 2 | #define DRIVELISTMODELPOLLTHREAD_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include "dependencies/drivelist/src/drivelist.hpp" 11 | 12 | class DriveListModelPollThread : public QThread 13 | { 14 | Q_OBJECT 15 | public: 16 | DriveListModelPollThread(QObject *parent = nullptr); 17 | ~DriveListModelPollThread(); 18 | void start(); 19 | void stop(); 20 | 21 | protected: 22 | bool _terminate; 23 | virtual void run() override; 24 | 25 | signals: 26 | void newDriveList(std::vector list); 27 | }; 28 | 29 | #endif // DRIVELISTMODELPOLLTHREAD_H 30 | -------------------------------------------------------------------------------- /src/fonts/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/fonts/Roboto-Bold.ttf -------------------------------------------------------------------------------- /src/fonts/Roboto-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/fonts/Roboto-Light.ttf -------------------------------------------------------------------------------- /src/fonts/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/fonts/Roboto-Regular.ttf -------------------------------------------------------------------------------- /src/hwlistmodel.h: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | #ifndef HWLISTMODEL_H 7 | #define HWLISTMODEL_H 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class ImageWriter; 14 | 15 | class HWListModel : public QAbstractListModel 16 | { 17 | Q_OBJECT 18 | QML_ELEMENT 19 | QML_UNCREATABLE("Created by C++") 20 | Q_PROPERTY(QString currentName READ currentName NOTIFY currentNameChanged) 21 | Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged) 22 | public: 23 | 24 | enum HWListRole { 25 | NameRole = Qt::UserRole + 1, 26 | TagsRole, 27 | IconRole, 28 | DescriptionRole, 29 | MatchingTypeRole 30 | }; 31 | 32 | struct HardwareDevice { 33 | QString name; 34 | QJsonArray tags; 35 | QString icon; 36 | QString description; 37 | QString matchingType; 38 | 39 | bool isInclusive() const { 40 | return matchingType == QLatin1String("inclusive"); 41 | } 42 | }; 43 | 44 | explicit HWListModel(ImageWriter &); 45 | 46 | Q_INVOKABLE bool reload(); 47 | 48 | // Returns the name associated with the current index 49 | QString currentName() const; 50 | 51 | int currentIndex() const; 52 | void setCurrentIndex(int index); 53 | 54 | Q_SIGNALS: 55 | void currentNameChanged(); 56 | void currentIndexChanged(); 57 | 58 | protected: 59 | int rowCount(const QModelIndex &) const override; 60 | QHash roleNames() const override; 61 | QVariant data(const QModelIndex &index, int role) const override; 62 | 63 | private: 64 | QVector _hwDevices; 65 | ImageWriter &_imageWriter; 66 | int _currentIndex = -1; 67 | }; 68 | 69 | #endif 70 | -------------------------------------------------------------------------------- /src/i18n/translations.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | rpi-imager_ca.qm 4 | rpi-imager_de.qm 5 | rpi-imager_en.qm 6 | rpi-imager_es.qm 7 | rpi-imager_fr.qm 8 | rpi-imager_he.qm 9 | rpi-imager_it.qm 10 | rpi-imager_ja.qm 11 | rpi-imager_ka.qm 12 | rpi-imager_ko.qm 13 | rpi-imager_nl.qm 14 | rpi-imager_pl.qm 15 | rpi-imager_pt.qm 16 | rpi-imager_ru.qm 17 | rpi-imager_sk.qm 18 | rpi-imager_sl.qm 19 | rpi-imager_tr.qm 20 | rpi-imager_uk.qm 21 | rpi-imager_zh.qm 22 | rpi-imager_zh-TW.qm 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/icons/cat_3d_printing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_3d_printing.png -------------------------------------------------------------------------------- /src/icons/cat_digital_signage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_digital_signage.png -------------------------------------------------------------------------------- /src/icons/cat_emulation_and_games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_emulation_and_games.png -------------------------------------------------------------------------------- /src/icons/cat_home_automation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_home_automation.png -------------------------------------------------------------------------------- /src/icons/cat_language_specific_operating_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_language_specific_operating_systems.png -------------------------------------------------------------------------------- /src/icons/cat_media_players.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_media_players.png -------------------------------------------------------------------------------- /src/icons/cat_misc_utility_images.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_misc_utility_images.png -------------------------------------------------------------------------------- /src/icons/cat_other_general_purpose_operating_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_other_general_purpose_operating_systems.png -------------------------------------------------------------------------------- /src/icons/cat_other_specific_purpose_operating_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_other_specific_purpose_operating_systems.png -------------------------------------------------------------------------------- /src/icons/cat_raspberry_pi_os.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/cat_raspberry_pi_os.png -------------------------------------------------------------------------------- /src/icons/erase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/erase.png -------------------------------------------------------------------------------- /src/icons/ic_chevron_left_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/ic_chevron_right_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/ic_cog_red.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/icons/ic_delete_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/ic_info_12px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/ic_info_12px.png -------------------------------------------------------------------------------- /src/icons/ic_info_16px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/ic_info_16px.png -------------------------------------------------------------------------------- /src/icons/ic_sd_storage_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/ic_storage_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/ic_usb_40px.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/icons/logo_stacked_imager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/logo_stacked_imager.png -------------------------------------------------------------------------------- /src/icons/logo_sxs_imager.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/logo_sxs_imager.png -------------------------------------------------------------------------------- /src/icons/rpi-imager.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/rpi-imager.icns -------------------------------------------------------------------------------- /src/icons/rpi-imager.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/rpi-imager.ico -------------------------------------------------------------------------------- /src/icons/use_custom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/icons/use_custom.png -------------------------------------------------------------------------------- /src/keymap-layouts.txt: -------------------------------------------------------------------------------- 1 | af 2 | al 3 | am 4 | ara 5 | at 6 | au 7 | az 8 | ba 9 | bd 10 | be 11 | bg 12 | br 13 | brai 14 | bt 15 | bw 16 | by 17 | ca 18 | cd 19 | ch 20 | cm 21 | cn 22 | cz 23 | de 24 | dk 25 | dz 26 | ee 27 | epo 28 | es 29 | et 30 | fi 31 | fo 32 | fr 33 | gb 34 | ge 35 | gh 36 | gn 37 | gr 38 | hr 39 | hu 40 | id 41 | ie 42 | il 43 | in 44 | iq 45 | ir 46 | is 47 | it 48 | jp 49 | jv 50 | ke 51 | kg 52 | kh 53 | kr 54 | kz 55 | la 56 | latam 57 | lk 58 | lt 59 | lv 60 | ma 61 | mao 62 | md 63 | me 64 | mk 65 | ml 66 | mm 67 | mn 68 | mt 69 | mv 70 | my 71 | ng 72 | nl 73 | no 74 | np 75 | ph 76 | pk 77 | pl 78 | pt 79 | ro 80 | rs 81 | ru 82 | se 83 | si 84 | sk 85 | sn 86 | sy 87 | tg 88 | th 89 | tj 90 | tm 91 | tr 92 | tw 93 | tz 94 | ua 95 | us 96 | uz 97 | vn 98 | za 99 | -------------------------------------------------------------------------------- /src/linux/acceleratedcryptographichash_gnutls.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Use GnuTLS for SHA256 3 | * 4 | * SPDX-License-Identifier: Apache-2.0 5 | * Copyright (C) 2024 Raspberry Pi Ltd 6 | */ 7 | 8 | #include "acceleratedcryptographichash.h" 9 | #include "gnutls/crypto.h" 10 | 11 | struct AcceleratedCryptographicHash::impl { 12 | explicit impl(QCryptographicHash::Algorithm method) 13 | { 14 | if (method != QCryptographicHash::Sha256) 15 | throw std::runtime_error("Only sha256 implemented"); 16 | 17 | gnutls_hash_init(&_sha256, GNUTLS_DIG_SHA256); 18 | 19 | } 20 | 21 | ~impl() 22 | { 23 | gnutls_hash_deinit(_sha256, NULL); 24 | } 25 | 26 | void addData(const char *data, int length) 27 | { 28 | gnutls_hash(_sha256, data, length); 29 | } 30 | 31 | void addData(const QByteArray &data) 32 | { 33 | addData(data.constData(), data.size()); 34 | } 35 | 36 | QByteArray result() 37 | { 38 | unsigned char binhash[gnutls_hash_get_len(GNUTLS_DIG_SHA256)]; 39 | gnutls_hash_output(_sha256, binhash); 40 | return QByteArray((char *) binhash, sizeof binhash); 41 | } 42 | 43 | private: 44 | gnutls_hash_hd_t _sha256; 45 | }; 46 | 47 | AcceleratedCryptographicHash::AcceleratedCryptographicHash(QCryptographicHash::Algorithm method) 48 | : p_Impl(std::make_unique(method)) {} 49 | 50 | AcceleratedCryptographicHash::~AcceleratedCryptographicHash() = default; 51 | 52 | void AcceleratedCryptographicHash::addData(const char *data, int length) { 53 | p_Impl->addData(data, length); 54 | } 55 | void AcceleratedCryptographicHash::addData(const QByteArray &data) { 56 | p_Impl->addData(data); 57 | } 58 | QByteArray AcceleratedCryptographicHash::result() { 59 | return p_Impl->result(); 60 | } 61 | -------------------------------------------------------------------------------- /src/linux/networkmanagerapi.h: -------------------------------------------------------------------------------- 1 | #ifndef NETWORKMANAGERAPI_H 2 | #define NETWORKMANAGERAPI_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2022 Raspberry Pi Ltd 7 | */ 8 | 9 | #include "wlancredentials.h" 10 | 11 | class NetworkManagerApi : public WlanCredentials 12 | { 13 | public: 14 | NetworkManagerApi(); 15 | virtual QByteArray getSSID(); 16 | virtual QByteArray getPSK(); 17 | 18 | protected: 19 | QByteArray _getSSIDofInterface(const QByteArray &iface); 20 | }; 21 | 22 | #endif // NETWORKMANAGERAPI_H 23 | -------------------------------------------------------------------------------- /src/linux/stpanalyzer.h: -------------------------------------------------------------------------------- 1 | #ifndef STPANALYZER_H 2 | #define STPANALYZER_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2024 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | class StpAnalyzer : public QObject 13 | { 14 | Q_OBJECT 15 | public: 16 | StpAnalyzer(int onlyReportIfForwardDelayIsAbove = 5, QObject *parent = nullptr); 17 | virtual ~StpAnalyzer(); 18 | void startListening(const QByteArray &ifname); 19 | void stopListening(); 20 | 21 | signals: 22 | void detected(); 23 | 24 | protected: 25 | int _s, _minForwardDelay; 26 | QSocketNotifier *_qsn; 27 | 28 | protected slots: 29 | void onPacket(QSocketDescriptor socket, QSocketNotifier::Type type); 30 | }; 31 | 32 | #endif // STPANALYZER_H 33 | -------------------------------------------------------------------------------- /src/linux/udisks2api.h: -------------------------------------------------------------------------------- 1 | #ifndef UDISKS2API_H 2 | #define UDISKS2API_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | 12 | class QDBusInterface; 13 | 14 | class UDisks2Api : public QObject 15 | { 16 | Q_OBJECT 17 | public: 18 | explicit UDisks2Api(QObject *parent = nullptr); 19 | int authOpen(const QString &device, const QString &mode = "rw"); 20 | void ejectDrive(const QString &device); 21 | bool formatDrive(const QString &device, bool mountAfterwards = true); 22 | QString mountDevice(const QString &device); 23 | void unmountDrive(const QString &device); 24 | QByteArrayList mountPoints(const QString &partitionDevice); 25 | QByteArrayList mountPoints(const QDBusInterface &filesystem); 26 | 27 | protected: 28 | QString _resolveDevice(const QString &device); 29 | void _unmountDrive(const QString &driveDbusPath); 30 | 31 | signals: 32 | 33 | public slots: 34 | }; 35 | 36 | #endif // UDISKS2API_H 37 | -------------------------------------------------------------------------------- /src/localfileextractthread.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "localfileextractthread.h" 7 | #include "config.h" 8 | 9 | #include 10 | 11 | LocalFileExtractThread::LocalFileExtractThread(const QByteArray &url, const QByteArray &dst, const QByteArray &expectedHash, QObject *parent) 12 | : DownloadExtractThread(url, dst, expectedHash, parent) 13 | { 14 | _inputBuf = (char *) qMallocAligned(IMAGEWRITER_UNCOMPRESSED_BLOCKSIZE, 4096); 15 | } 16 | 17 | LocalFileExtractThread::~LocalFileExtractThread() 18 | { 19 | _cancelled = true; 20 | wait(); 21 | qFreeAligned(_inputBuf); 22 | } 23 | 24 | void LocalFileExtractThread::_cancelExtract() 25 | { 26 | _cancelled = true; 27 | if (_inputfile.isOpen()) 28 | _inputfile.close(); 29 | } 30 | 31 | void LocalFileExtractThread::run() 32 | { 33 | if (isImage() && !_openAndPrepareDevice()) 34 | return; 35 | 36 | emit preparationStatusUpdate(tr("opening image file")); 37 | _timer.start(); 38 | _inputfile.setFileName( QUrl(_url).toLocalFile() ); 39 | if (!_inputfile.open(_inputfile.ReadOnly)) 40 | { 41 | _onDownloadError(tr("Error opening image file")); 42 | _closeFiles(); 43 | return; 44 | } 45 | _lastDlTotal = _inputfile.size(); 46 | 47 | if (isImage()) 48 | extractImageRun(); 49 | else 50 | extractMultiFileRun(); 51 | 52 | if (_cancelled) 53 | _closeFiles(); 54 | } 55 | 56 | ssize_t LocalFileExtractThread::_on_read(struct archive *, const void **buff) 57 | { 58 | if (_cancelled) 59 | return -1; 60 | 61 | *buff = _inputBuf; 62 | ssize_t len = _inputfile.read(_inputBuf, IMAGEWRITER_UNCOMPRESSED_BLOCKSIZE); 63 | 64 | if (len > 0) 65 | { 66 | _lastDlNow += len; 67 | if (!_isImage) 68 | { 69 | _inputHash.addData(_inputBuf, len); 70 | } 71 | } 72 | 73 | return len; 74 | } 75 | 76 | int LocalFileExtractThread::_on_close(struct archive *) 77 | { 78 | _inputfile.close(); 79 | return 0; 80 | } 81 | -------------------------------------------------------------------------------- /src/localfileextractthread.h: -------------------------------------------------------------------------------- 1 | #ifndef LOCALFILEEXTRACTTHREAD_H 2 | #define LOCALFILEEXTRACTTHREAD_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include "downloadextractthread.h" 10 | #include 11 | 12 | class LocalFileExtractThread : public DownloadExtractThread 13 | { 14 | Q_OBJECT 15 | public: 16 | explicit LocalFileExtractThread(const QByteArray &url, const QByteArray &dst = "", const QByteArray &expectedHash = "", QObject *parent = nullptr); 17 | virtual ~LocalFileExtractThread(); 18 | 19 | protected: 20 | virtual void _cancelExtract(); 21 | virtual void run(); 22 | virtual ssize_t _on_read(struct archive *a, const void **buff); 23 | virtual int _on_close(struct archive *a); 24 | QFile _inputfile; 25 | char *_inputBuf; 26 | }; 27 | 28 | #endif // LOCALFILEEXTRACTTHREAD_H 29 | -------------------------------------------------------------------------------- /src/mac/Info.plist.in: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | English 7 | CFBundleExecutable 8 | @MACOSX_BUNDLE_EXECUTABLE_NAME@ 9 | CFBundleGetInfoString 10 | 11 | CFBundleIconFile 12 | @MACOSX_BUNDLE_ICON_FILE@ 13 | CFBundleIdentifier 14 | @MACOSX_BUNDLE_GUI_IDENTIFIER@ 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleLongVersionString 18 | @MACOSX_BUNDLE_LONG_VERSION_STRING@ 19 | CFBundleName 20 | @MACOSX_BUNDLE_BUNDLE_NAME@ 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | @MACOSX_BUNDLE_SHORT_VERSION_STRING@ 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | @MACOSX_BUNDLE_BUNDLE_VERSION@ 29 | CSResourcesFileMapped 30 | 31 | NSHumanReadableCopyright 32 | @MACOSX_BUNDLE_COPYRIGHT@ 33 | NSPrincipalClass 34 | NSApplication 35 | NSSupportsAutomaticGraphicsSwitching 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/mac/acceleratedcryptographichash_commoncrypto.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Use CommonCrypto on macOS for SHA256 3 | * 4 | * SPDX-License-Identifier: Apache-2.0 5 | * Copyright (C) 2024 Raspberry Pi Ltd 6 | */ 7 | 8 | #include "acceleratedcryptographichash.h" 9 | 10 | #include 11 | 12 | struct AcceleratedCryptographicHash::impl { 13 | explicit impl(QCryptographicHash::Algorithm algo) { 14 | if (algo != QCryptographicHash::Sha256) 15 | throw std::runtime_error("Only sha256 implemented"); 16 | 17 | CC_SHA256_Init(&_sha256); 18 | } 19 | 20 | void addData(const char *data, int length) 21 | { 22 | CC_SHA256_Update(&_sha256, data, length); 23 | } 24 | 25 | void addData(const QByteArray &data) 26 | { 27 | addData(data.constData(), data.size()); 28 | } 29 | 30 | QByteArray result() { 31 | unsigned char binhash[CC_SHA256_DIGEST_LENGTH]; 32 | CC_SHA256_Final(binhash, &_sha256); 33 | return QByteArray((char *) binhash, sizeof binhash); 34 | } 35 | 36 | private: 37 | CC_SHA256_CTX _sha256; 38 | }; 39 | 40 | AcceleratedCryptographicHash::AcceleratedCryptographicHash(QCryptographicHash::Algorithm method) 41 | : p_Impl(std::make_unique(method)) {} 42 | 43 | AcceleratedCryptographicHash::~AcceleratedCryptographicHash() = default; 44 | 45 | void AcceleratedCryptographicHash::addData(const char *data, int length) { 46 | p_Impl->addData(data, length); 47 | } 48 | void AcceleratedCryptographicHash::addData(const QByteArray &data) { 49 | p_Impl->addData(data); 50 | } 51 | QByteArray AcceleratedCryptographicHash::result() { 52 | return p_Impl->result(); 53 | } 54 | -------------------------------------------------------------------------------- /src/mac/macfile.h: -------------------------------------------------------------------------------- 1 | #ifndef MACFILE_H 2 | #define MACFILE_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | 11 | class MacFile : public QFile 12 | { 13 | Q_OBJECT 14 | public: 15 | enum authOpenResult {authOpenCancelled, authOpenSuccess, authOpenError }; 16 | 17 | MacFile(QObject *parent = nullptr); 18 | virtual bool isSequential() const; 19 | authOpenResult authOpen(const QByteArray &filename); 20 | }; 21 | 22 | #endif // MACFILE_H 23 | -------------------------------------------------------------------------------- /src/mac/macwlancredentials.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2023 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "macwlancredentials.h" 7 | #include 8 | #include 9 | #include 10 | 11 | QByteArray MacWlanCredentials::getSSID() 12 | { 13 | /* FIXME: find out the proper API call to get SSID instead of calling command line utilities */ 14 | QString program, regexpstr; 15 | QStringList args; 16 | QProcess proc; 17 | program = "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport"; 18 | args << "-I"; 19 | regexpstr = "[ \t]+SSID: (.+)"; 20 | 21 | proc.start(program, args); 22 | if (proc.waitForStarted(2000) && proc.waitForFinished(2000)) 23 | { 24 | QRegularExpression rx(regexpstr); 25 | const QList outputlines = proc.readAll().replace('\r', "").split('\n'); 26 | 27 | for (const QByteArray &line : outputlines) { 28 | QRegularExpressionMatch match = rx.match(line); 29 | if (match.hasMatch()) 30 | { 31 | _ssid = match.captured(1).toLatin1(); 32 | break; 33 | } 34 | } 35 | } 36 | 37 | return _ssid; 38 | } 39 | 40 | QByteArray MacWlanCredentials::getPSK() 41 | { 42 | SecKeychainRef keychainRef; 43 | QByteArray psk; 44 | 45 | if (_ssid.isEmpty()) 46 | getSSID(); 47 | if (_ssid.isEmpty()) 48 | return psk; 49 | 50 | if (SecKeychainOpen("/Library/Keychains/System.keychain", &keychainRef) == errSecSuccess) 51 | { 52 | UInt32 resultLen; 53 | void *result; 54 | if (SecKeychainFindGenericPassword(keychainRef, 0, NULL, _ssid.length(), _ssid.constData(), &resultLen, &result, NULL) == errSecSuccess) 55 | { 56 | psk = QByteArray((char *) result, resultLen); 57 | SecKeychainItemFreeContent(NULL, result); 58 | } 59 | CFRelease(keychainRef); 60 | } 61 | 62 | return psk; 63 | } 64 | 65 | WlanCredentials *WlanCredentials::_instance = NULL; 66 | WlanCredentials *WlanCredentials::instance() 67 | { 68 | if (!_instance) 69 | _instance = new MacWlanCredentials(); 70 | 71 | return _instance; 72 | } 73 | 74 | -------------------------------------------------------------------------------- /src/mac/macwlancredentials.h: -------------------------------------------------------------------------------- 1 | #ifndef MACWLANCREDENTIALS_H 2 | #define MACWLANCREDENTIALS_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2023 Raspberry Pi Ltd 7 | */ 8 | 9 | #include "wlancredentials.h" 10 | 11 | class MacWlanCredentials : public WlanCredentials 12 | { 13 | public: 14 | virtual QByteArray getSSID(); 15 | virtual QByteArray getPSK(); 16 | 17 | protected: 18 | QByteArray _ssid; 19 | }; 20 | 21 | #endif // MACWLANCREDENTIALS_H 22 | -------------------------------------------------------------------------------- /src/nan.h: -------------------------------------------------------------------------------- 1 | #ifndef NAN_H 2 | #define NAN_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | // Dummy Node.js macros for 3rd party dependencies 10 | #define NAN_METHOD(x) 11 | 12 | namespace v8 { 13 | class Object; 14 | template class Local; 15 | } 16 | 17 | // mountutils also expects some #include files to be there 18 | #include 19 | #include 20 | 21 | #endif // NAN_H 22 | -------------------------------------------------------------------------------- /src/networkaccessmanagerfactory.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "networkaccessmanagerfactory.h" 7 | #include "config.h" 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | /* Configure caching for files downloaded from Internet by QML (e.g. os_list.json and icons) */ 16 | NetworkAccessManagerFactory::NetworkAccessManagerFactory() 17 | : _nr(0) 18 | { 19 | } 20 | 21 | QNetworkAccessManager *NetworkAccessManagerFactory::create(QObject *parent) 22 | { 23 | QNetworkAccessManager *nam = new QNetworkAccessManager(parent); 24 | auto c = new QNetworkDiskCache(nam); 25 | c->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)+QDir::separator()+"oslistcache"+QString::number(_nr++)); 26 | c->clear(); 27 | nam->setCache(c); 28 | return nam; 29 | } 30 | -------------------------------------------------------------------------------- /src/networkaccessmanagerfactory.h: -------------------------------------------------------------------------------- 1 | #ifndef NETWORKACCESSMANAGERFACTORY_H 2 | #define NETWORKACCESSMANAGERFACTORY_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | 11 | class QNetworkDiskCache; 12 | 13 | class NetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory 14 | { 15 | public: 16 | NetworkAccessManagerFactory(); 17 | virtual QNetworkAccessManager *create(QObject *parent); 18 | 19 | protected: 20 | int _nr; 21 | }; 22 | 23 | #endif // NETWORKACCESSMANAGERFACTORY_H 24 | -------------------------------------------------------------------------------- /src/powersaveblocker.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | #include "powersaveblocker.h" 7 | #include 8 | #include 9 | 10 | PowerSaveBlocker::PowerSaveBlocker(QObject *parent) : 11 | QObject(parent), _stayingAwake(false) 12 | { 13 | } 14 | 15 | PowerSaveBlocker::~PowerSaveBlocker() 16 | { 17 | if (_stayingAwake) 18 | removeBlock(); 19 | } 20 | 21 | void PowerSaveBlocker::applyBlock(const QString &reason) 22 | { 23 | if (_stayingAwake) 24 | return; 25 | 26 | #ifdef Q_OS_WIN 27 | REASON_CONTEXT rc; 28 | std::wstring wreason = reason.toStdWString(); 29 | rc.Version = POWER_REQUEST_CONTEXT_VERSION; 30 | rc.Flags = POWER_REQUEST_CONTEXT_SIMPLE_STRING; 31 | rc.Reason.SimpleReasonString = (wchar_t *) wreason.c_str(); 32 | _powerRequest = PowerCreateRequest(&rc); 33 | 34 | if (_powerRequest == INVALID_HANDLE_VALUE) 35 | { 36 | qDebug() << "Error creating power request:" << GetLastError(); 37 | return; 38 | } 39 | 40 | _stayingAwake = PowerSetRequest(_powerRequest, PowerRequestDisplayRequired); 41 | if (!_stayingAwake) 42 | { 43 | qDebug() << "Error running PowerSetRequest():" << GetLastError(); 44 | } 45 | #endif 46 | } 47 | 48 | void PowerSaveBlocker::removeBlock() 49 | { 50 | if (!_stayingAwake) 51 | return; 52 | 53 | #ifdef Q_OS_WIN 54 | PowerClearRequest(_powerRequest, PowerRequestDisplayRequired); 55 | CloseHandle(_powerRequest); 56 | #endif 57 | } 58 | -------------------------------------------------------------------------------- /src/powersaveblocker.h: -------------------------------------------------------------------------------- 1 | #ifndef POWERSAVEBLOCKER_H 2 | #define POWERSAVEBLOCKER_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #ifdef Q_OS_WIN 11 | #include 12 | #endif 13 | 14 | class PowerSaveBlocker : public QObject 15 | { 16 | Q_OBJECT 17 | public: 18 | explicit PowerSaveBlocker(QObject *parent = nullptr); 19 | virtual ~PowerSaveBlocker(); 20 | void applyBlock(const QString &reason); 21 | void removeBlock(); 22 | 23 | signals: 24 | 25 | protected: 26 | bool _stayingAwake; 27 | 28 | #ifdef Q_OS_WIN 29 | HANDLE _powerRequest; 30 | #endif 31 | }; 32 | 33 | #endif // POWERSAVEBLOCKER_H 34 | -------------------------------------------------------------------------------- /src/qml.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | qtquickcontrols2.conf 6 | countries.txt 7 | timezones.txt 8 | keymap-layouts.txt 9 | 10 | 11 | 12 | 13 | fonts/Roboto-Bold.ttf 14 | fonts/Roboto-Light.ttf 15 | fonts/Roboto-Regular.ttf 16 | 17 | icons/rpi-imager.ico 18 | icons/ic_chevron_left_40px.svg 19 | icons/ic_chevron_right_40px.svg 20 | icons/ic_sd_storage_40px.svg 21 | icons/ic_storage_40px.svg 22 | icons/ic_usb_40px.svg 23 | icons/use_custom.png 24 | icons/erase.png 25 | icons/cat_raspberry_pi_os.png 26 | icons/cat_other_specific_purpose_operating_systems.png 27 | icons/cat_other_general_purpose_operating_systems.png 28 | icons/cat_misc_utility_images.png 29 | icons/cat_media_players.png 30 | icons/cat_emulation_and_games.png 31 | icons/ic_info_16px.png 32 | icons/ic_info_12px.png 33 | icons/ic_cog_red.svg 34 | icons/cat_home_automation.png 35 | icons/cat_language_specific_operating_systems.png 36 | icons/cat_3d_printing.png 37 | icons/logo_stacked_imager.png 38 | icons/logo_sxs_imager.png 39 | icons/cat_digital_signage.png 40 | 41 | 42 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImButton.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.9 7 | import QtQuick.Controls 2.2 8 | import QtQuick.Controls.Material 2.2 9 | 10 | import RpiImager 11 | 12 | Button { 13 | font.family: Style.fontFamily 14 | font.capitalization: Font.AllUppercase 15 | Material.background: activeFocus ? Style.buttonFocusedBackgroundColor : Style.buttonBackgroundColor 16 | Material.foreground: Style.buttonForegroundColor 17 | Material.roundedScale: Material.ExtraSmallScale 18 | Accessible.onPressAction: clicked() 19 | Keys.onEnterPressed: clicked() 20 | Keys.onReturnPressed: clicked() 21 | } 22 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImButtonRed.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick.Controls.Material 2.2 7 | 8 | import RpiImager 9 | 10 | ImButton { 11 | Material.background: activeFocus ? Style.button2FocusedBackgroundColor : Style.mainBackgroundColor 12 | Material.foreground: Style.button2ForegroundColor 13 | } 14 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImCheckBox.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.9 7 | import QtQuick.Controls 2.2 8 | import QtQuick.Controls.Material 2.2 9 | 10 | CheckBox { 11 | Keys.onEnterPressed: toggle() 12 | Keys.onReturnPressed: toggle() 13 | } 14 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImCloseButton.qml: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * SPDX-License-Identifier: Apache-2.0 4 | * Copyright (C) 2020 Raspberry Pi Ltd 5 | */ 6 | 7 | import QtQuick 2.9 8 | import QtQuick.Layouts 1.0 9 | 10 | import RpiImager 11 | 12 | Text { 13 | id: root 14 | signal clicked 15 | 16 | text: "X" 17 | 18 | // Layouting is here as all usage sites use the same code, so we save some lines. 19 | // Move it out usage once different usage is needed 20 | Layout.alignment: Qt.AlignRight 21 | horizontalAlignment: Text.AlignRight 22 | verticalAlignment: Text.AlignVCenter 23 | anchors.right: parent.right 24 | anchors.top: parent.top 25 | anchors.rightMargin: 25 26 | anchors.topMargin: 10 27 | 28 | font.family: Style.fontFamily 29 | font.bold: true 30 | 31 | MouseArea { 32 | anchors.fill: parent 33 | onClicked: { 34 | root.clicked(); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImPopup.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2020 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.9 7 | import QtQuick.Controls 2.2 8 | import QtQuick.Layouts 1.0 9 | import QtQuick.Controls.Material 2.2 10 | 11 | import RpiImager 12 | 13 | Popup { 14 | id: msgpopup 15 | x: (parent.width-width)/2 16 | y: (parent.height-height)/2 17 | width: 550 18 | padding: 0 19 | closePolicy: Popup.CloseOnEscape 20 | modal: true 21 | 22 | default property alias content: contents.data 23 | 24 | property alias title: msgpopupheader.text 25 | 26 | signal yes() 27 | signal no() 28 | 29 | // background of title 30 | Rectangle { 31 | id: msgpopup_title_background 32 | color: Style.titleBackgroundColor 33 | anchors.left: parent.left 34 | anchors.top: parent.top 35 | height: 35 36 | width: parent.width 37 | 38 | Text { 39 | id: msgpopupheader 40 | horizontalAlignment: Text.AlignHCenter 41 | anchors.fill: parent 42 | anchors.topMargin: 10 43 | font.family: Style.fontFamily 44 | font.bold: true 45 | } 46 | 47 | ImCloseButton { 48 | onClicked: { 49 | msgpopup.close(); 50 | } 51 | } 52 | } 53 | // line under title 54 | Rectangle { 55 | id: msgpopup_title_separator 56 | color: Style.titleSeparatorColor 57 | width: parent.width 58 | anchors.top: msgpopup_title_background.bottom 59 | height: 1 60 | } 61 | 62 | ColumnLayout { 63 | id: contents 64 | spacing: 20 65 | anchors.top: msgpopup_title_separator.bottom 66 | anchors.left: parent.left 67 | anchors.right: parent.right 68 | anchors.bottom: parent.bottom 69 | 70 | // Derived components inject their childrens here. 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/qmlcomponents/ImRadioButton.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * SPDX-License-Identifier: Apache-2.0 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | */ 5 | 6 | import QtQuick 2.9 7 | import QtQuick.Controls 2.2 8 | import QtQuick.Controls.Material 2.2 9 | 10 | RadioButton { 11 | Keys.onEnterPressed: toggle() 12 | Keys.onReturnPressed: toggle() 13 | } 14 | -------------------------------------------------------------------------------- /src/qtquickcontrols2.conf: -------------------------------------------------------------------------------- 1 | [Controls] 2 | Style=Material 3 | -------------------------------------------------------------------------------- /src/test_formatter.cmake: -------------------------------------------------------------------------------- 1 | # Simple test build for DiskFormatter 2 | # This can be included in the main CMakeLists.txt or used standalone 3 | 4 | # Add the disk formatter executable test 5 | if(BUILD_TESTING) 6 | add_executable(disk_formatter_test 7 | disk_formatter.h 8 | disk_formatter.cpp 9 | disk_formatter_test.cpp 10 | ) 11 | 12 | target_compile_features(disk_formatter_test PRIVATE cxx_std_20) 13 | target_compile_options(disk_formatter_test PRIVATE 14 | -Wall -Wextra -Wpedantic 15 | $<$:-g -O0> 16 | $<$:-O3 -DNDEBUG> 17 | ) 18 | 19 | # For testing, we can run this manually 20 | add_custom_target(test_disk_formatter 21 | COMMAND disk_formatter_test 22 | DEPENDS disk_formatter_test 23 | COMMENT "Running disk formatter tests" 24 | ) 25 | endif() -------------------------------------------------------------------------------- /src/windows/rpi-imager-cli.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | rem 4 | rem For scripting: call rpi-imager.exe and wait until it finished before continuing 5 | rem This is necessary because it is compiled as GUI application, and Windows 6 | rem normalling does not wait until those exit 7 | rem 8 | 9 | start /WAIT rpi-imager.exe --cli %* 10 | -------------------------------------------------------------------------------- /src/windows/rpi-imager.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Raspberry Pi Imager 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/windows/rpi-imager.rc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | IDI_ICON1 ICON DISCARDABLE "../icons/rpi-imager.ico" 4 | CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "rpi-imager.manifest" 5 | 6 | 1 VERSIONINFO 7 | FILEVERSION IMAGER_VERSION_CSV 8 | PRODUCTVERSION IMAGER_VERSION_CSV 9 | { 10 | BLOCK "StringFileInfo" 11 | { 12 | BLOCK "040904b0" 13 | { 14 | VALUE "CompanyName", "Raspberry Pi Ltd" 15 | VALUE "FileDescription", "Raspberry Pi Imager" 16 | } 17 | } 18 | BLOCK "VarFileInfo" 19 | { 20 | VALUE "Translation", 0x409, 1252 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/windows/winfile.h: -------------------------------------------------------------------------------- 1 | #ifndef WINFILE_H 2 | #define WINFILE_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2020 Raspberry Pi Ltd 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | class WinFile : public QObject 14 | { 15 | Q_OBJECT 16 | public: 17 | explicit WinFile(QObject *parent = nullptr); 18 | virtual ~WinFile(); 19 | void setFileName(const QString &name); 20 | bool open(QIODevice::OpenMode mode); 21 | void close(); 22 | bool isOpen(); 23 | qint64 write(const char *data, qint64 maxSize); 24 | qint64 read(char *data, qint64 maxSize); 25 | HANDLE handle(); 26 | QString errorString() const; 27 | int errorCode() const; 28 | bool flush(); 29 | bool seek(qint64 pos); 30 | qint64 pos(); 31 | bool lockVolume(); 32 | bool unlockVolume(); 33 | 34 | protected: 35 | bool _locked; 36 | QString _name, _lasterror; 37 | HANDLE _h; 38 | int _lasterrorcode; 39 | }; 40 | 41 | #endif // WINFILE_H 42 | -------------------------------------------------------------------------------- /src/windows/winwlancredentials.h: -------------------------------------------------------------------------------- 1 | #ifndef WINWLANCREDENTIALS_H 2 | #define WINWLANCREDENTIALS_H 3 | 4 | /* 5 | * SPDX-License-Identifier: Apache-2.0 6 | * Copyright (C) 2023 Raspberry Pi Ltd 7 | */ 8 | 9 | #include "wlancredentials.h" 10 | 11 | class WinWlanCredentials : public WlanCredentials 12 | { 13 | public: 14 | WinWlanCredentials(); 15 | virtual QByteArray getSSID(); 16 | virtual QByteArray getPSK(); 17 | 18 | protected: 19 | QByteArray _ssid, _psk; 20 | }; 21 | 22 | #endif // WINWLANCREDENTIALS_H 23 | -------------------------------------------------------------------------------- /src/windows/wlanapi.def: -------------------------------------------------------------------------------- 1 | LIBRARY wlanapi 2 | EXPORTS 3 | WlanCloseHandle@8 4 | WlanEnumInterfaces@12 5 | WlanFreeMemory@4 6 | WlanGetProfile@28 7 | WlanGetProfileList@16 8 | WlanOpenHandle@16 9 | WlanQueryInterface@28 10 | -------------------------------------------------------------------------------- /src/wlancredentials.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/rpi-imager/94f0517670b75a6bb04d0aea4c06d42cd69e4b60/src/wlancredentials.cpp -------------------------------------------------------------------------------- /src/wlancredentials.h: -------------------------------------------------------------------------------- 1 | #ifndef WLANCREDENTIALS_H 2 | #define WLANCREDENTIALS_H 3 | 4 | /* 5 | * Interface for wlan credential detection 6 | * Use WlanCredentials::instance() to get platform 7 | * specific implementation 8 | * 9 | * SPDX-License-Identifier: Apache-2.0 10 | * Copyright (C) 2023 Raspberry Pi Ltd 11 | */ 12 | 13 | #include 14 | 15 | class WlanCredentials 16 | { 17 | public: 18 | static WlanCredentials *instance(); 19 | virtual QByteArray getSSID() = 0; 20 | virtual QByteArray getPSK() = 0; 21 | 22 | protected: 23 | static WlanCredentials *_instance; 24 | }; 25 | 26 | #endif // WLANCREDENTIALS_H 27 | -------------------------------------------------------------------------------- /tests/README.md: -------------------------------------------------------------------------------- 1 | Integration tests 2 | === 3 | 4 | Test if all json files in the public repository are correct (validate against json schema, and test all image files, icons and websites mentioned in the json do exist by performing HEAD requests) 5 | 6 | ``` 7 | $ cd tests 8 | $ pytest 9 | 10 | ``` 11 | 12 | Test if a specific json file validates correctly 13 | 14 | ``` 15 | $ cd tests 16 | $ pytest --repo=http://my-repo/os_list.json 17 | ``` 18 | 19 | Test image writes for all images in a repository 20 | 21 | ``` 22 | $ cd tests 23 | $ truncate -s 16G loopfile 24 | $ udisksctl loop-setup --file loopfile 25 | Mapped file loopfile as /dev/loop24 26 | $ sudo -g disk pytest test_write_images.py --repo=http://my-repo/os_list.json --device=/dev/loop24 27 | ``` 28 | 29 | Note: make sure automatic mounting of removable media is disabled in your Linux distribution during write tests. 30 | You can also use real drives instead of loop files as device. But be very careful not to enter the wrong device. Writes are done for real, it is not a mock test... 31 | -------------------------------------------------------------------------------- /tests/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /tests/test_firstrun.txt: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo "Bogus firstrun.sh file, used for automated testing of FAT16/FAT32 modification code only" 4 | 5 | exit 0 6 | -------------------------------------------------------------------------------- /tests/test_schema.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import pytest 4 | from jsonschema import validate 5 | from jsonschema.exceptions import ValidationError 6 | 7 | 8 | def test_os_list_json_against_schema(oslisttuple, schema): 9 | oslisturl = oslisttuple[0] 10 | oslistdata = oslisttuple[1] 11 | errorMsg = "" 12 | 13 | j = json.loads(oslistdata) 14 | 15 | try: 16 | validate(instance=j, schema=schema) 17 | except ValidationError as err: 18 | errorMsg = err.message 19 | 20 | if errorMsg != "": 21 | pytest.fail(oslisturl+" failed schema validation: "+errorMsg, False) 22 | 23 | 24 | @pytest.fixture 25 | def schema(): 26 | f = open(os.path.dirname(__file__)+"/../doc/json-schema/os-list-schema.json","r") 27 | data = f.read() 28 | return json.loads(data) 29 | -------------------------------------------------------------------------------- /tests/test_urls.py: -------------------------------------------------------------------------------- 1 | import urllib.request 2 | 3 | def _head_request(url): 4 | req = urllib.request.Request( 5 | url, 6 | data=None, 7 | headers={ 8 | 'User-Agent': 'rpi-imager automated tests' 9 | }, 10 | method="HEAD" 11 | ) 12 | return urllib.request.urlopen(req) 13 | 14 | 15 | def test_icon_url_exists(iconurl): 16 | assert _head_request(iconurl).status == 200 17 | 18 | def test_website_url_exists(websiteurl): 19 | assert _head_request(websiteurl).status == 200 20 | 21 | def test_image_url_exists_and_has_correct_image_download_size(imageitem): 22 | response = _head_request(imageitem["url"]) 23 | 24 | assert response.status == 200 25 | assert str(imageitem["image_download_size"]) == response.headers["Content-Length"] 26 | -------------------------------------------------------------------------------- /tests/test_write_images.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import re 3 | import subprocess 4 | import os 5 | import time 6 | from shlex import quote 7 | 8 | 9 | def shell(cmd, url): 10 | msg = '' 11 | try: 12 | subprocess.run(cmd, shell=True, check=True, capture_output=True) 13 | except subprocess.CalledProcessError as err: 14 | msg = "{} Error running '{}' exit code {} stderr: '{}'".format(url, err.cmd, err.returncode, err.output) 15 | 16 | if msg != '': 17 | pytest.fail(msg, False) 18 | 19 | 20 | def test_write_image_and_modify_fat(imageitem, device): 21 | if not device: 22 | pytest.skip("--device= not specified. Skipping write tests") 23 | return 24 | 25 | assert "extract_sha256" in imageitem, "{}: missing extract_sha256. Cannot perform write test.".format(imageitem["url"]) 26 | assert "image_download_size" in imageitem, "{}: missing image_download_size. Cannot perform write test.".format(imageitem["url"]) 27 | assert re.search("^[a-z0-9]{64}$", imageitem["extract_sha256"]) != None 28 | 29 | cacheFile = "cache/"+imageitem["extract_sha256"] 30 | if os.path.exists(cacheFile) and os.path.getsize(cacheFile) != imageitem["image_download_size"]: 31 | os.remove(cacheFile) 32 | 33 | shell("rpi-imager --cli --quiet --enable-writing-system-drives --sha256 {} --cache-file {} --first-run-script test_firstrun.txt {} {}".format( 34 | quote(imageitem["extract_sha256"]), quote(cacheFile), quote(imageitem["url"]), quote(device) ), imageitem["url"]) 35 | time.sleep(0.5) 36 | shell("fsck.vfat -n "+quote(device+"p1"), imageitem["url"]) 37 | 38 | @pytest.fixture 39 | def device(request): 40 | return request.config.getoption("--device") 41 | --------------------------------------------------------------------------------