浏览代码

display: More drawing code.

父节点
当前提交
8a20cd3318
共有 2 个文件被更改,包括 40 次插入24 次删除
  1. 2
    2
      display/firmware/Cargo.lock
  2. 38
    22
      display/firmware/src/display.rs

+ 2
- 2
display/firmware/Cargo.lock 查看文件

400
 [[package]]
400
 [[package]]
401
 name = "tinygfx"
401
 name = "tinygfx"
402
 version = "0.1.0"
402
 version = "0.1.0"
403
-source = "git+https://github.com/mgottschlag/tinygfx#9dd1ff4155b47048bce4c7ed49c87c98e8d91b3b"
403
+source = "git+https://github.com/mgottschlag/tinygfx#6560a8e340ce288b9d3be0fad4933a9e22a74417"
404
 
404
 
405
 [[package]]
405
 [[package]]
406
 name = "tinygfx-assets"
406
 name = "tinygfx-assets"
407
 version = "0.1.0"
407
 version = "0.1.0"
408
-source = "git+https://github.com/mgottschlag/tinygfx#9dd1ff4155b47048bce4c7ed49c87c98e8d91b3b"
408
+source = "git+https://github.com/mgottschlag/tinygfx#6560a8e340ce288b9d3be0fad4933a9e22a74417"
409
 dependencies = [
409
 dependencies = [
410
  "freetype-rs 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
410
  "freetype-rs 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
411
  "lodepng 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
411
  "lodepng 2.6.0 (registry+https://github.com/rust-lang/crates.io-index)",

+ 38
- 22
display/firmware/src/display.rs 查看文件

1
 use embedded_hal::blocking::delay::DelayUs;
1
 use embedded_hal::blocking::delay::DelayUs;
2
 use embedded_hal::digital::v2::OutputPin;
2
 use embedded_hal::digital::v2::OutputPin;
3
-use epd_waveshare::{epd4in2::*, prelude::*};
3
+use epd_waveshare::epd4in2::EPD4in2;
4
+use epd_waveshare::prelude::{DisplayStream, WaveshareDisplay};
4
 use mkl25z4_hal::time::CopyableMonoTimer;
5
 use mkl25z4_hal::time::CopyableMonoTimer;
6
+use tinygfx::color::BlackWhite::{self, Black, White};
7
+use tinygfx::{Frame, Rectangle, Renderer, Text};
5
 
8
 
9
+use super::assets::ROBOTO_30;
6
 use super::information::Information;
10
 use super::information::Information;
7
 use super::pins::{
11
 use super::pins::{
8
     DisplayBmeSpi, DisplayBusy, DisplayCs, DisplayDc, DisplayPins, DisplayPwr, DisplayRst,
12
     DisplayBmeSpi, DisplayBusy, DisplayCs, DisplayDc, DisplayPins, DisplayPwr, DisplayRst,
63
         self.epd.wake_up(spi, &mut time).ok();
67
         self.epd.wake_up(spi, &mut time).ok();
64
 
68
 
65
         // TODO: Draw the display contents.
69
         // TODO: Draw the display contents.
66
-        self.epd.set_background_color(Color::Black);
67
-        let checkerboard = Checkerboard::new(400, 300, true);
70
+        let r = Rectangle::new(10, 10, 100, 50, Black);
71
+        let t = Text::new(20, 100, "asdf", &ROBOTO_30, Black);
72
+        let mut frame = Frame::new(400, 300, |mut renderer| {
73
+            let clip = renderer.full_frame();
74
+            renderer.clear(White);
75
+            r.draw(clip, &mut renderer);
76
+            t.draw(clip, &mut renderer);
77
+        });
78
+        frame.mirror_x(true);
79
+        frame.mirror_y(true);
80
+        //self.epd.set_background_color(Color::Black);
81
+        let checkerboard = TinyGfxStream::new(frame);
68
         self.epd.update_frame_stream(spi, checkerboard).unwrap();
82
         self.epd.update_frame_stream(spi, checkerboard).unwrap();
69
         self.epd.display_frame(spi).unwrap();
83
         self.epd.display_frame(spi).unwrap();
70
 
84
 
73
     }
87
     }
74
 }
88
 }
75
 
89
 
76
-struct Checkerboard {
77
-    width: usize,
78
-    height: usize,
79
-    index: usize,
80
-    buffer: [u8; 1],
90
+struct TinyGfxStream<Draw> {
91
+    frame: Frame<Draw, BlackWhite>,
92
+    buffer: [u8; 400 / 8],
93
+    row: u32,
81
 }
94
 }
82
 
95
 
83
-impl Checkerboard {
84
-    fn new(width: usize, height: usize, start_black: bool) -> Self {
96
+impl<Draw> TinyGfxStream<Draw>
97
+where
98
+    Draw: Fn(Renderer<BlackWhite>),
99
+{
100
+    fn new(frame: Frame<Draw, BlackWhite>) -> Self {
85
         Self {
101
         Self {
86
-            width: width / 8,
87
-            height,
88
-            index: 0,
89
-            buffer: [if start_black { 0x55 } else { 0xaa }],
102
+            frame,
103
+            buffer: [0u8; 400 / 8],
104
+            row: 0,
90
         }
105
         }
91
     }
106
     }
92
 }
107
 }
93
 
108
 
94
-impl DisplayStream for Checkerboard {
109
+impl<Draw> DisplayStream for TinyGfxStream<Draw>
110
+where
111
+    Draw: Fn(Renderer<BlackWhite>),
112
+{
95
     fn next<'a>(&'a mut self) -> Option<&'a [u8]> {
113
     fn next<'a>(&'a mut self) -> Option<&'a [u8]> {
96
-        if self.index != self.width * self.height {
97
-            self.index += 1;
98
-            if (self.index - 1) % self.width == 0 {
99
-                self.buffer[0] = !self.buffer[0];
100
-            }
101
-            Some(&self.buffer)
102
-        } else {
114
+        if self.row == self.frame.height() {
103
             None
115
             None
116
+        } else {
117
+            self.frame.draw_row(self.row, &mut self.buffer);
118
+            self.row += 1;
119
+            Some(&self.buffer)
104
         }
120
         }
105
     }
121
     }
106
 }
122
 }

正在加载...
取消
保存