diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92d109de5a..0a8d7c5cda 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,13 +31,15 @@ jobs: uses: py-actions/py-dependency-install@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.7 + ruby-version: 2.7.0 + rubygems: 3.3.22 + bundler: 2.3.22 bundler-cache: true - uses: seanmiddleditch/gha-setup-ninja@v3 with: version: 1.10.2 - name: Install arm-none-eabi-gcc GNU Arm Embedded Toolchain - uses: carlosperate/arm-none-eabi-gcc-action@v1.6.1 + uses: carlosperate/arm-none-eabi-gcc-action@v1.6.3 - name: Install Doxygen run: | wget https://www.doxygen.nl/files/doxygen-1.9.6.linux.bin.tar.gz diff --git a/Gemfile b/Gemfile index 24abe181a5..09accec04b 100644 --- a/Gemfile +++ b/Gemfile @@ -36,5 +36,5 @@ gem "wdm", "~> 0.1.0", :install_if => Gem.win_platform? gem "nokogiri", "~> 1.15" # So we can add custom element templates -gem 'slim', '~> 3.0.7' +gem 'slim', '~> 5.1.1' gem 'thread_safe', '~> 0.3.5' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index 0a60b6c7b9..6a1e701ed5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -57,13 +57,13 @@ GEM jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - nokogiri (1.15.2) + nokogiri (1.15.3) mini_portile2 (~> 2.8.2) racc (~> 1.4) pathutil (0.16.2) forwardable-extended (~> 2.6) public_suffix (5.0.1) - racc (1.7.0) + racc (1.7.1) rake (13.0.6) rb-fsevent (0.11.2) rb-inotify (0.10.1) @@ -74,14 +74,14 @@ GEM sass-embedded (1.58.3) google-protobuf (~> 3.21) rake (>= 10.0.0) - slim (3.0.9) - temple (>= 0.7.6, < 0.9) - tilt (>= 1.3.3, < 2.1) - temple (0.8.2) + slim (5.1.1) + temple (~> 0.10.0) + tilt (>= 2.1.0) + temple (0.10.2) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) thread_safe (0.3.6) - tilt (2.0.11) + tilt (2.2.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) tzinfo-data (1.2023.3) @@ -99,11 +99,11 @@ DEPENDENCIES jekyll-feed (~> 0.17) minima (~> 2.0) nokogiri (~> 1.15) - slim (~> 3.0.7) + slim (~> 5.1.1) thread_safe (~> 0.3.5) tzinfo (~> 2.0) tzinfo-data wdm (~> 0.1.0) BUNDLED WITH - 2.2.15 + 2.3.22 diff --git a/documentation/asciidoc/accessories/audio/configuration.adoc b/documentation/asciidoc/accessories/audio/configuration.adoc index 8548a01fcc..c43ed21e4e 100644 --- a/documentation/asciidoc/accessories/audio/configuration.adoc +++ b/documentation/asciidoc/accessories/audio/configuration.adoc @@ -65,7 +65,7 @@ independently. Within the codec itself, other mixers and switches exist to allow Both the AUX IN and AUX OUT are 1V RMS. It may be necessary to adjust the AUX IN’s mixer to ensure that the input signal doesn’t saturate the ADC. Similarly, the output mixers can be to be adjusted to get the best possible output. -Preconfigured scripts (loadable ALSA settings) https://github.com/iqaudio/Pi-Codec[are available on GitHub], offering: +Preconfigured scripts (loadable ALSA settings) https://github.com/raspberrypi/Pi-Codec[are available on GitHub], offering: * Mono MEMS mic recording, mono speaker playback * Mono MEMS mic recording, mono AUX OUT playback @@ -75,7 +75,7 @@ Preconfigured scripts (loadable ALSA settings) https://github.com/iqaudio/Pi-Cod The Codec Zero needs to know which of these input and output settings are being used each time the Raspberry Pi powers on. Using a Terminal session on your Raspberry Pi, run the following command to download the scripts: ---- -$ git clone https://github.com/iqaudio/Pi-Codec.git +$ git clone https://github.com/raspberrypi/Pi-Codec.git ---- If git is not installed, run the following command to install it: @@ -87,7 +87,7 @@ $ sudo apt install git The following command will set your device to use the on-board MEMS microphone and output for speaker playback: ---- -$ sudo alsactl restore -f /home/pi/Pi-Codec/IQaudIO_Codec_OnboardMIC_record_and_SPK_playback.state +$ sudo alsactl restore -f /home/pi/Pi-Codec/Codec_Zero_OnboardMIC_record_and_SPK_playback.state ---- In order for your project to operate with your required settings when it is powered on, edit the `/etc/rc.local` file. The contents of this file are run at the end of every boot process, so it is ideal for this purpose. Edit the file: @@ -112,7 +112,7 @@ Add the chosen script command above the exit 0 line and then Ctrl X, Y and Enter # # By default this script does nothing. -sudo alsactl restore -f /home/pi/Pi-Codec/IQaudIO_Codec_OnboardMIC_record_and_SPK_playback.state +sudo alsactl restore -f /home/pi/Pi-Codec/Codec_Zero_OnboardMIC_record_and_SPK_playback.state exit 0 ---- @@ -151,16 +151,32 @@ supports the unmute of the DigiAMP{plus} through additional parameters. Firstly a "one-shot" unmute when kernel module loads. +For Raspberry Pi boards: + +---- +dtoverlay=rpi-digiampplus,unmute_amp +---- + +For IQaudIO boards: + ---- -dtoverlay=iqaudio-dacplus,unmute_amp +dtoverlay=iqaudio-digiampplus,unmute_amp ---- Unmute the amp when an ALSA device is opened by a client. Mute, with a five-second delay when the ALSA device is closed. (Reopening the device within the five-second close window will cancel mute.) +For Raspberry Pi boards: + +---- +dtoverlay=rpi-digiampplus,auto_mute_amp +---- + +For IQaudIO boards: + ---- -dtoverlay=iqaudio-dacplus,auto_mute_amp +dtoverlay=iqaudio-digiampplus,auto_mute_amp ---- If you do not want to control the mute state through the device tree, you can also script your own diff --git a/documentation/asciidoc/accessories/camera/camera_hardware.adoc b/documentation/asciidoc/accessories/camera/camera_hardware.adoc index 6afd4b691f..4077cff854 100644 --- a/documentation/asciidoc/accessories/camera/camera_hardware.adoc +++ b/documentation/asciidoc/accessories/camera/camera_hardware.adoc @@ -239,5 +239,6 @@ image:images/RPi-S5-conn.png[camera connector, width="65%"] Other available schematics; * Camera Module v2 https://datasheets.raspberrypi.com/camera/camera-module-2-schematics.pdf[PDF] +* Camera Module v3 https://datasheets.raspberrypi.com/camera/camera-module-3-schematics.pdf[PDF] * HQ Camera Module https://datasheets.raspberrypi.com/hq-camera/hq-camera-schematics.pdf[PDF] diff --git a/documentation/asciidoc/computers/camera/libcamera_apps_building.adoc b/documentation/asciidoc/computers/camera/libcamera_apps_building.adoc index 9cea515af9..066a05e42a 100644 --- a/documentation/asciidoc/computers/camera/libcamera_apps_building.adoc +++ b/documentation/asciidoc/computers/camera/libcamera_apps_building.adoc @@ -14,7 +14,7 @@ NOTE: When building on a Raspberry Pi with 1GB or less of RAM, there is a risk t ==== Building `libcamera-apps` without rebuilding `libcamera` -You can rebuild `libcamera-apps` _without_ first rebuilding the whole of `libcamera` and `libepoxy`. If you do not need support for the X11/GLES preview window then `libepoxy` can be omitted entirely. Mostly this will include Raspberry Pi OS Lite users, and they must be sure to use `-DENABLE_X11=0` when running `cmake` later. These users should run: +You can rebuild `libcamera-apps` _without_ first rebuilding the whole of `libcamera` and `libepoxy`. If you do not need support for the X11/GLES preview window then `libepoxy` can be omitted entirely. Mostly this will include Raspberry Pi OS Lite users, and they must be sure to use `-Denable_egl=false` when running `meson setup` later. These users should run: ---- sudo apt install -y libcamera-dev libjpeg-dev libtiff5-dev @@ -57,7 +57,7 @@ All users should then install the following: ---- sudo apt install -y libboost-dev -sudo apt install -y libgnutls28-dev openssl libtiff5-dev +sudo apt install -y libgnutls28-dev openssl libtiff5-dev pybind11-dev sudo apt install -y qtbase5-dev libqt5core5a libqt5gui5 libqt5widgets5 sudo apt install -y meson sudo apt install -y cmake @@ -133,6 +133,7 @@ First fetch the necessary dependencies for `libcamera-apps`. ---- sudo apt install -y cmake libboost-program-options-dev libdrm-dev libexif-dev +sudo pip3 install ninja meson ---- The `libcamera-apps` build process begins with the following: @@ -141,43 +142,43 @@ The `libcamera-apps` build process begins with the following: cd git clone https://github.com/raspberrypi/libcamera-apps.git cd libcamera-apps -mkdir build -cd build ---- -At this point you will need to run `cmake` after deciding what extra flags to pass it. The valid flags are: +At this point you will need to run `meson setup` after deciding what extra flags to pass it. The valid flags are: -* `-DENABLE_COMPILE_FLAGS_FOR_TARGET=armv8-neon` - you may supply this when building for Raspberry Pi 3 or Raspberry Pi 4 devices running a 32-bit OS. Some post-processing features may run more quickly. +* `-Dneon_flags=armv8-neon` - you may supply this when building for Raspberry Pi 3 or Raspberry Pi 4 devices running a 32-bit OS. Some post-processing features may run more quickly. -* `-DENABLE_DRM=1` or `-DENABLE_DRM=0` - this enables or disables the DRM/KMS preview rendering. This is what implements the preview window when X Windows is not running. +* `-Denable_libav=true` or `-Denable_libav=false` - this enables or disables the libav encoder integration. -* `-DENABLE_X11=1` or `-DENABLE_X11=0` - this enables or disables the X Windows based preview. You should disable this if your system does not have X Windows installed. +* `-Denable_drm=true` or `-Denable_drm=false` - this enables or disables the DRM/KMS preview rendering. This is what implements the preview window when X Windows is not running. -* `-DENABLE_QT=1` or `-DENABLE_QT=0` - this enables or disables support for the Qt-based implementation of the preview window. You should disable it if you do not have X Windows installed, or if you have no intention of using the Qt-based preview window. The Qt-based preview is normally not recommended because it is computationally very expensive, however it does work with X display forwarding. +* `-Denable_egl=true` or `-Denable_egl=false` - this enables or disables the X Windows based preview. You should disable this if your system does not have X Windows installed. -* `-DENABLE_OPENCV=1` or `-DENABLE_OPENCV=0` - you may choose one of these to force OpenCV-based post-processing stages to be linked (or not). If you enable them, then OpenCV must be installed on your system. Normally they will be built by default if OpenCV is available. +* `-Denable_qt=true` or `-Denable_qt=false` - this enables or disables support for the Qt-based implementation of the preview window. You should disable it if you do not have X Windows installed, or if you have no intention of using the Qt-based preview window. The Qt-based preview is normally not recommended because it is computationally very expensive, however it does work with X display forwarding. -* `-DENABLE_TFLITE=1` or `-DENABLE_TFLITE=0` - choose one of these to enable TensorFlow Lite post-processing stages (or not). By default they will not be enabled. If you enable them then TensorFlow Lite must be available on your system. Depending on how you have built and/or installed TFLite, you may need to tweak the `CMakeLists.txt` file in the `post_processing_stages` directory. +* `-Denable_opencv=true` or `-Denable_opencv=false` - you may choose one of these to force OpenCV-based post-processing stages to be linked (or not). If you enable them, then OpenCV must be installed on your system. Normally they will be built by default if OpenCV is available. -For Raspberry Pi OS users we recommend the following `cmake` command: +* `-Denable_tflite=true` or `-Denable_tflite=false` - choose one of these to enable TensorFlow Lite post-processing stages (or not). By default they will not be enabled. If you enable them then TensorFlow Lite must be available on your system. Depending on how you have built and/or installed TFLite, you may need to tweak the `meson.build` file in the `post_processing_stages` directory. + +For Raspberry Pi OS users we recommend the following `meson setup` command: ---- -cmake .. -DENABLE_DRM=1 -DENABLE_X11=1 -DENABLE_QT=1 -DENABLE_OPENCV=0 -DENABLE_TFLITE=0 +meson setup build -Denable_libav=true -Denable_drm=true -Denable_egl=true -Denable_qt=true -Denable_opencv=false -Denable_tflite=false ---- and for Raspberry Pi OS Lite users: ---- -cmake .. -DENABLE_DRM=1 -DENABLE_X11=0 -DENABLE_QT=0 -DENABLE_OPENCV=0 -DENABLE_TFLITE=0 +meson setup build -Denable_libav=false -Denable_drm=true -Denable_egl=false -Denable_qt=false -Denable_opencv=false -Denable_tflite=false ---- -In both cases, consider `-DENABLE_COMPILE_FLAGS_FOR_TARGET=armv8-neon` if you are using a 32-bit OS on a Raspberry Pi 3 or Raspberry Pi 4. Consider `-DENABLE_OPENCV=1` if you have installed _OpenCV_ and wish to use OpenCV-based post-processing stages. Finally also consider `-DENABLE_TFLITE=1` if you have installed _TensorFlow Lite_ and wish to use it in post-processing stages. +In both cases, consider `-Dneon_flags=armv8-neon` if you are using a 32-bit OS on a Raspberry Pi 3 or Raspberry Pi 4. Consider `-Denable_opencv=true` if you have installed _OpenCV_ and wish to use OpenCV-based post-processing stages. Finally also consider `-Denable_tflite=true` if you have installed _TensorFlow Lite_ and wish to use it in post-processing stages. -After executing the `cmake` command of your choice, the whole process concludes with the following: +After executing the `meson setup` command of your choice, the whole process concludes with the following: ---- -make -j4 # use -j1 on Raspberry Pi 3 or earlier devices -sudo make install +meson compile -C build # use -j1 on Raspberry Pi 3 or earlier devices +sudo meson install -C build sudo ldconfig # this is only necessary on the first build ---- diff --git a/documentation/asciidoc/computers/getting-started/setting-up.adoc b/documentation/asciidoc/computers/getting-started/setting-up.adoc index f658c5152f..d75c837e2d 100644 --- a/documentation/asciidoc/computers/getting-started/setting-up.adoc +++ b/documentation/asciidoc/computers/getting-started/setting-up.adoc @@ -4,7 +4,7 @@ video::CQtliTJ41ZE[youtube] To get started with your Raspberry Pi computer, you'll need the following accessories: -A computer monitor or television. Most should work as a display for the Raspberry Pi, but for best results, you should use a display with HDMI input. You'll also need an appropriate xref:getting-started.adoc#connecting-a-display[display] cable to connect your monitor to your Raspberry Pi. +A computer monitor or television. Most should work as a display for the Raspberry Pi, but for best results, you should use a display with HDMI® input. You'll also need an appropriate xref:getting-started.adoc#connecting-a-display[display] cable to connect your monitor to your Raspberry Pi. A computer keyboard and mouse @@ -31,7 +31,7 @@ NOTE: The Raspberry Pi 4 has two micro HDMI connectors, which require a good-qua If you're using your Raspberry Pi with a monitor with built-in speakers and are connecting to it using an HDMI cable, you can also use it to output sound. For monitors with a DVI port, you can use an HDMI-to-DVI cable or an HDMI cable with a DVI adapter. In addition, you can use an HDMI-to-VGA adapter for older monitors that only support VGA. -NOTE: Unlike HDMI the DVI and VGA standards do not support audio. +NOTE: Unlike HDMI, the DVI and VGA standards do not support audio. Finally, some models of Raspberry Pi have a composite out port for connecting to analog devices, but the type of connector varies depending on the model. The original Raspberry Pi used an RCA connector, and a standard RCA composite video lead will work. Other models (Raspberry Pi B+ and later) combine the audio and composite out onto the same 3.5mm jack. This requires a particular type of lead, with audio left on the tip, audio right on ring 1, ground on ring 2, and video on the sleeve. This is the same as leads used on the Zune and on Apple devices. diff --git a/documentation/asciidoc/computers/raspberry-pi/bcm2711-bootloader.adoc b/documentation/asciidoc/computers/raspberry-pi/bcm2711-bootloader.adoc index 28cbc5ea49..cf5082a82f 100644 --- a/documentation/asciidoc/computers/raspberry-pi/bcm2711-bootloader.adoc +++ b/documentation/asciidoc/computers/raspberry-pi/bcm2711-bootloader.adoc @@ -576,7 +576,7 @@ Default: `0` Configures the EEPROM `Write Status Register`. This can be set to either mark the entire EEPROM as write-protected or clear write-protection. -This option must be used in conjunction with the EEPROM `/WP` pin which controls updates to the EEPROM `Write Status Register`. Pulling `/WP` low (CM4 `EEPROM_nEP` or Pi4B `TP5`) does NOT write-protect the EEPROM unless the `Write Status Register` has also been configured. +This option must be used in conjunction with the EEPROM `/WP` pin which controls updates to the EEPROM `Write Status Register`. Pulling `/WP` low (CM4 `EEPROM_nWP` or on a Raspberry Pi 4 `TP5`) does NOT write-protect the EEPROM unless the `Write Status Register` has also been configured. See the https://www.winbond.com/resource-files/w25x40cl_f%2020140325.pdf[Winbond W25x40cl datasheet] for further details. diff --git a/documentation/asciidoc/computers/raspberry-pi/display-parallel-interface.adoc b/documentation/asciidoc/computers/raspberry-pi/display-parallel-interface.adoc index 58c6ff574f..06b40329e0 100644 --- a/documentation/asciidoc/computers/raspberry-pi/display-parallel-interface.adoc +++ b/documentation/asciidoc/computers/raspberry-pi/display-parallel-interface.adoc @@ -1,5 +1,12 @@ == Parallel Display Interface (DPI) +[.whitepaper, title="Using a DPI Display on the Raspberry Pi", subtitle="", link=https://pip.raspberrypi.com/categories/685-whitepapers-app-notes/documents/RP-003471-WP/Using-a-DPI-display.pdf] +**** +Display Parallel Interface (DPI) displays can be connected to Raspberry Pi devices via the 40-pin general-purpose input/output (GPIO) connector as an alternative to using the dedicated Display Serial Interface (DSI) or High-Definition Multimedia Interface (HDMI) ports. Many third-party DPI displays have been made available to take advantage of this. The Buster (and earlier) Raspberry Pi operating system (OS) and the legacy display stack used Raspberry Pi-specific parameters in config.txt to configure DPI displays. With the move to Bullseye and its use of the Kernel Mode Setting (KMS) graphics driver by default, these config.txt entries are no longer relevant as all control of the display pipeline has shifted to the Linux kernel. + +This whitepaper assumes that the Raspberry Pi is running the Raspberry Pi OS (Linux), and is fully up to date with the latest firmware and kernels. +**** + An up-to-24-bit parallel RGB interface is available on all Raspberry Pi boards with the 40 way header and the Compute Modules. This interface allows parallel RGB displays to be attached to the Raspberry Pi GPIO either in RGB24 (8 bits for red, green and blue) or RGB666 (6 bits per colour) or RGB565 (5 bits red, 6 green, and 5 blue). This interface is controlled by the GPU firmware and can be programmed by a user via special config.txt parameters and by enabling the correct Linux Device Tree overlay. diff --git a/documentation/asciidoc/microcontrollers/debug-probe/installing-tools.adoc b/documentation/asciidoc/microcontrollers/debug-probe/installing-tools.adoc index 5db7684251..9b3ce64583 100644 --- a/documentation/asciidoc/microcontrollers/debug-probe/installing-tools.adoc +++ b/documentation/asciidoc/microcontrollers/debug-probe/installing-tools.adoc @@ -27,7 +27,7 @@ $ sudo apt install automake autoconf build-essential texinfo libtool libftdi-dev and then build OpenOCD. ---- -$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1 --no-single-branch +$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040-v0.12.0 --depth=1 --no-single-branch $ cd openocd $ ./bootstrap $ ./configure @@ -61,7 +61,7 @@ and build OpenOCD from source. ---- $ cd ~/pico -$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1 +$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040-v0.12.0 --depth=1 $ cd openocd $ export PATH="/usr/local/opt/texinfo/bin:$PATH" $ ./bootstrap @@ -98,7 +98,7 @@ Pick all when installing the `mingw-w64-x86_64` toolchain by pressing ENTER. Close MSYS2 and reopen the 64-bit version to make sure the environment picks up GCC, ---- -$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040 --depth=1 +$ git clone https://github.com/raspberrypi/openocd.git --branch rp2040-v0.12.0 --depth=1 $ cd openocd $ ./bootstrap $ ./configure --disable-werror diff --git a/jekyll-assets/_includes/copyright.html b/jekyll-assets/_includes/copyright.html index 1fff451bb5..9b00e43e68 100644 --- a/jekyll-assets/_includes/copyright.html +++ b/jekyll-assets/_includes/copyright.html @@ -2,5 +2,6 @@ diff --git a/jekyll-assets/css/style.css b/jekyll-assets/css/style.css index 0c7f7e81ae..5d434cd496 100644 --- a/jekyll-assets/css/style.css +++ b/jekyll-assets/css/style.css @@ -509,6 +509,14 @@ td div.listingblock div.content code { height: auto; } +div.imageblock div.title { + font-style: italic; + font-weight: 300; + font-size: 0.8em; + margin-top: -15px; + margin-bottom: 30px; +} + .w10 { width: 10%; } .w20 { width: 20%; } .w30 { width: 30%; } diff --git a/requirements.txt b/requirements.txt index f6d9bda73f..137ce6313b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ pyyaml == 6.0 -lxml == 4.9.2 +lxml == 4.9.3 diff --git a/scripts/create_build_adoc.py b/scripts/create_build_adoc.py index 253a747dc2..aea3c41a49 100755 --- a/scripts/create_build_adoc.py +++ b/scripts/create_build_adoc.py @@ -63,7 +63,7 @@ def check_no_markdown(filename): seen_header = False with open(src_adoc) as in_fh: for line in in_fh.readlines(): - if line.startswith('== '): + if re.match('^=+ ', line) is not None: if not seen_header: seen_header = True if github_edit is not None: @@ -81,6 +81,7 @@ def check_no_markdown(filename): :doctitle: {} :page-sub_title: {} :sectanchors: +:figure-caption!: {} """.format(output_subdir, includes_dir, '{} - {}'.format(site_config['title'], index_title), index_title, new_contents)) diff --git a/scripts/create_build_adoc_include.py b/scripts/create_build_adoc_include.py index f1b3b03ba8..6e570822ee 100755 --- a/scripts/create_build_adoc_include.py +++ b/scripts/create_build_adoc_include.py @@ -43,7 +43,7 @@ def check_no_markdown(filename): new_contents = '' seen_header = False for line in in_fh.readlines(): - if line.startswith('== '): + if re.match('^=+ ', line) is not None: if not seen_header: seen_header = True if github_edit is not None: