1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use crate::runtime::dev::prelude::*;
/// Output a given number of messages in one burst and terminate.
///
/// # Message Inputs
///
/// No message inputs.
///
/// # Message Outputs
///
/// `out`: The configured message, repeated `n_messages` times.
///
/// # Usage
/// ```
/// use futuresdr::blocks::MessageBurst;
/// use futuresdr::runtime::Pmt;
///
/// let burst = MessageBurst::new(Pmt::String("tick".to_string()), 4);
/// ```
#[derive(Block)]
#[message_outputs(out)]
pub struct MessageBurst {
message: Pmt,
n_messages: u64,
}
impl MessageBurst {
/// Create MessageBurst block
pub fn new(message: Pmt, n_messages: u64) -> Self {
MessageBurst {
message,
n_messages,
}
}
}
#[doc(hidden)]
impl Kernel for MessageBurst {
async fn work(
&mut self,
io: &mut WorkIo,
mo: &mut MessageOutputs,
_meta: &mut BlockMeta,
) -> Result<()> {
for _ in 0..self.n_messages {
mo.post("out", self.message.clone()).await?;
}
io.finished = true;
Ok(())
}
}