Skip to content
This is the development version of the documentation. It may change before the next release. See 0.14.x for the latest release.

WritePatternBuffer

WritePatternBuffer is a low-level command that writes Patterns (the phase and intensity of each transducer) to consecutive indices of the specified bank, starting at start_index. One frame holds up to WritePatternBuffer::MAX_LEN (2) Patterns. To write more, send them in several commands.

WritePatternBuffer::new(bank, start_index, patterns, intensities);
Field Type Description
bank PatternBank Destination bank
start_index usize First destination index within the bank
patterns &[Vec<Vec<Phase>>] Per-device phases of each index
intensities StmIntensity Intensity (same as PatternStm)

The following is an example of playing a single Pattern via WritePatternBuffer → ConfigPattern → ActivatePatternBank (equivalent to the high-level Pattern).

use core::num::NonZeroU16;
use autd3_rs::commands::{
ActivatePatternBank, Clear, ConfigPattern, Synchronize, WritePatternBuffer,
};
use autd3_rs::geometry::{Autd3, Geometry, offset};
use autd3_rs::units::{m, mm, s};
use autd3_rs::value::{Intensity, LoopBehavior, PatternBank, SamplingConfig, TransitionMode};
use autd3_rs::Client;
use autd3_rs::udp::TransportOption;
use autd3_rs_pattern::{focus, wavelength};
let geometry = Geometry::new(vec![Autd3::default()]);
let option = TransportOption::default();
let mut client = Client::open(&geometry, &option).await?;
client.send(Clear).await?;
client.send(Synchronize).await?;
let mut phases = geometry.phase_buffer();
focus(
&geometry,
geometry.center() + offset(0.0 * mm, 0.0 * mm, 150.0 * mm),
wavelength(340.0 * m / s),
&mut phases,
);
let bank = PatternBank::B0;
client
.send(WritePatternBuffer::new(bank, 0, &[phases], Intensity::MAX))
.await?;
client.send(ConfigPattern {
bank,
config: SamplingConfig::new(NonZeroU16::MAX),
size: 1,
loop_behavior: LoopBehavior::Infinite,
}).await?;
client.send(ActivatePatternBank {
bank,
transition_mode: TransitionMode::Immediate,
}).await?;