Ver código fonte

display: More drawing code.

Mathias Gottschlag 5 anos atrás
pai
commit
8a20cd3318
2 arquivos alterados com 40 adições e 24 exclusões
  1. 2
    2
      display/firmware/Cargo.lock
  2. 38
    22
      display/firmware/src/display.rs

+ 2
- 2
display/firmware/Cargo.lock Ver arquivo

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

+ 38
- 22
display/firmware/src/display.rs Ver arquivo

@@ -1,8 +1,12 @@
1 1
 use embedded_hal::blocking::delay::DelayUs;
2 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 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 10
 use super::information::Information;
7 11
 use super::pins::{
8 12
     DisplayBmeSpi, DisplayBusy, DisplayCs, DisplayDc, DisplayPins, DisplayPwr, DisplayRst,
@@ -63,8 +67,18 @@ impl Display {
63 67
         self.epd.wake_up(spi, &mut time).ok();
64 68
 
65 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 82
         self.epd.update_frame_stream(spi, checkerboard).unwrap();
69 83
         self.epd.display_frame(spi).unwrap();
70 84
 
@@ -73,34 +87,36 @@ impl Display {
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 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 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 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
 }

Carregando…
Cancelar
Salvar