boytacean/devices/
buffer.rs1use 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}