boytacean/devices/
buffer.rs

1use crate::serial::SerialDevice;
2
3use std::fmt::{self, Display, Formatter};
4
5pub struct BufferDevice {
6    buffer: Vec<u8>,
7    callback: fn(image_buffer: &Vec<u8>),
8}
9
10impl BufferDevice {
11    pub fn new() -> Self {
12        Self {
13            buffer: Vec::new(),
14            callback: |_| {},
15        }
16    }
17
18    pub fn set_callback(&mut self, callback: fn(image_buffer: &Vec<u8>)) {
19        self.callback = callback;
20    }
21
22    pub fn buffer(&self) -> &Vec<u8> {
23        &self.buffer
24    }
25}
26
27impl SerialDevice for BufferDevice {
28    fn send(&mut self) -> u8 {
29        0xff
30    }
31
32    fn receive(&mut self, byte: u8) {
33        self.buffer.push(byte);
34        let data = vec![byte];
35        (self.callback)(&data);
36    }
37
38    fn allow_slave(&self) -> bool {
39        false
40    }
41
42    fn description(&self) -> String {
43        String::from("Buffer")
44    }
45
46    fn state(&self) -> String {
47        let buffer = self.buffer.clone();
48        String::from_utf8(buffer).unwrap()
49    }
50}
51
52impl Default for BufferDevice {
53    fn default() -> Self {
54        Self::new()
55    }
56}
57
58impl Display for BufferDevice {
59    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
60        write!(f, "Buffer")
61    }
62}