feat: add display UI with splash screen, dashboard, and RSSI sparkline
Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
17624 files changed
+4564928
-38
No files matched your search
@@ -0,0 +1,249 @@
|
||||
error[E0277]: the trait bound `NotZerocopy: FromBytes` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:16:24
|
||||
|
|
||||
16 | takes_from_bytes::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `FromBytes` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(FromBytes)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `FromBytes`:
|
||||
()
|
||||
(A, B)
|
||||
(A, B, C)
|
||||
(A, B, C, D)
|
||||
(A, B, C, D, E)
|
||||
(A, B, C, D, E, F)
|
||||
(A, B, C, D, E, F, G)
|
||||
(A, B, C, D, E, F, G, H)
|
||||
and 79 others
|
||||
note: required by a bound in `takes_from_bytes`
|
||||
--> $DIR/diagnostic-not-implemented.rs:77:24
|
||||
|
|
||||
77 | fn takes_from_bytes<T: FromBytes>() {}
|
||||
| ^^^^^^^^^ required by this bound in `takes_from_bytes`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: FromZeros` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:18:24
|
||||
|
|
||||
18 | takes_from_zeros::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `FromZeros` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(FromZeros)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `FromZeros`:
|
||||
()
|
||||
(A, B)
|
||||
(A, B, C)
|
||||
(A, B, C, D)
|
||||
(A, B, C, D, E)
|
||||
(A, B, C, D, E, F)
|
||||
(A, B, C, D, E, F, G)
|
||||
(A, B, C, D, E, F, G, H)
|
||||
and 141 others
|
||||
note: required by a bound in `takes_from_zeros`
|
||||
--> $DIR/diagnostic-not-implemented.rs:78:24
|
||||
|
|
||||
78 | fn takes_from_zeros<T: FromZeros>() {}
|
||||
| ^^^^^^^^^ required by this bound in `takes_from_zeros`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: Immutable` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:20:23
|
||||
|
|
||||
20 | takes_immutable::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `Immutable` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(Immutable)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `Immutable`:
|
||||
&T
|
||||
&mut T
|
||||
()
|
||||
(A, B)
|
||||
(A, B, C)
|
||||
(A, B, C, D)
|
||||
(A, B, C, D, E)
|
||||
(A, B, C, D, E, F)
|
||||
and 128 others
|
||||
note: required by a bound in `takes_immutable`
|
||||
--> $DIR/diagnostic-not-implemented.rs:79:23
|
||||
|
|
||||
79 | fn takes_immutable<T: Immutable>() {}
|
||||
| ^^^^^^^^^ required by this bound in `takes_immutable`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: IntoBytes` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:22:24
|
||||
|
|
||||
22 | takes_into_bytes::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `IntoBytes` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(IntoBytes)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `IntoBytes`:
|
||||
()
|
||||
AU16
|
||||
AtomicBool
|
||||
AtomicI16
|
||||
AtomicI32
|
||||
AtomicI64
|
||||
AtomicI8
|
||||
AtomicIsize
|
||||
and 68 others
|
||||
note: required by a bound in `takes_into_bytes`
|
||||
--> $DIR/diagnostic-not-implemented.rs:80:24
|
||||
|
|
||||
80 | fn takes_into_bytes<T: IntoBytes>() {}
|
||||
| ^^^^^^^^^ required by this bound in `takes_into_bytes`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: KnownLayout` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:24:26
|
||||
|
|
||||
24 | takes_known_layout::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `KnownLayout` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(KnownLayout)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `KnownLayout`:
|
||||
&T
|
||||
&mut T
|
||||
()
|
||||
*const T
|
||||
*mut T
|
||||
AU16
|
||||
AtomicBool
|
||||
AtomicI16
|
||||
and 65 others
|
||||
note: required by a bound in `takes_known_layout`
|
||||
--> $DIR/diagnostic-not-implemented.rs:81:26
|
||||
|
|
||||
81 | fn takes_known_layout<T: KnownLayout>() {}
|
||||
| ^^^^^^^^^^^ required by this bound in `takes_known_layout`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: TryFromBytes` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:26:28
|
||||
|
|
||||
26 | takes_try_from_bytes::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `TryFromBytes` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(TryFromBytes)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `TryFromBytes`:
|
||||
()
|
||||
(A, B)
|
||||
(A, B, C)
|
||||
(A, B, C, D)
|
||||
(A, B, C, D, E)
|
||||
(A, B, C, D, E, F)
|
||||
(A, B, C, D, E, F, G)
|
||||
(A, B, C, D, E, F, G, H)
|
||||
and 153 others
|
||||
note: required by a bound in `takes_try_from_bytes`
|
||||
--> $DIR/diagnostic-not-implemented.rs:82:28
|
||||
|
|
||||
82 | fn takes_try_from_bytes<T: TryFromBytes>() {}
|
||||
| ^^^^^^^^^^^^ required by this bound in `takes_try_from_bytes`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: zerocopy::Unaligned` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:28:23
|
||||
|
|
||||
28 | takes_unaligned::<NotZerocopy>();
|
||||
| ^^^^^^^^^^^ unsatisfied trait bound
|
||||
|
|
||||
help: the trait `zerocopy::Unaligned` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(Unaligned)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `zerocopy::Unaligned`:
|
||||
()
|
||||
AtomicBool
|
||||
AtomicI8
|
||||
AtomicU8
|
||||
Cell<T>
|
||||
F32<O>
|
||||
F64<O>
|
||||
I128<O>
|
||||
and 26 others
|
||||
note: required by a bound in `takes_unaligned`
|
||||
--> $DIR/diagnostic-not-implemented.rs:83:23
|
||||
|
|
||||
83 | fn takes_unaligned<T: Unaligned>() {}
|
||||
| ^^^^^^^^^ required by this bound in `takes_unaligned`
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: Immutable` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:66:19
|
||||
|
|
||||
66 | Foo.write_obj(NotZerocopy(()));
|
||||
| --------- ^^^^^^^^^^^^^^^ the trait `Immutable` is not implemented for `NotZerocopy`
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
note: required by a bound in `Foo::write_obj`
|
||||
--> $DIR/diagnostic-not-implemented.rs:73:25
|
||||
|
|
||||
73 | fn write_obj<T: Immutable + IntoBytes>(&mut self, _val: T) {}
|
||||
| ^^^^^^^^^ required by this bound in `Foo::write_obj`
|
||||
help: consider borrowing here
|
||||
|
|
||||
66 | Foo.write_obj(&NotZerocopy(()));
|
||||
| +
|
||||
66 | Foo.write_obj(&mut NotZerocopy(()));
|
||||
| ++++
|
||||
|
||||
error[E0277]: the trait bound `NotZerocopy: IntoBytes` is not satisfied
|
||||
--> $DIR/diagnostic-not-implemented.rs:66:19
|
||||
|
|
||||
66 | Foo.write_obj(NotZerocopy(()));
|
||||
| --------- ^^^^^^^^^^^^^^^ unsatisfied trait bound
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
help: the trait `IntoBytes` is not implemented for `NotZerocopy`
|
||||
--> $DIR/../include.rs:15:5
|
||||
|
|
||||
15 | pub struct NotZerocopy<T = ()>(pub T);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
= note: Consider adding `#[derive(IntoBytes)]` to `NotZerocopy`
|
||||
= help: the following other types implement trait `IntoBytes`:
|
||||
()
|
||||
AU16
|
||||
AtomicBool
|
||||
AtomicI16
|
||||
AtomicI32
|
||||
AtomicI64
|
||||
AtomicI8
|
||||
AtomicIsize
|
||||
and 68 others
|
||||
note: required by a bound in `Foo::write_obj`
|
||||
--> $DIR/diagnostic-not-implemented.rs:73:37
|
||||
|
|
||||
73 | fn write_obj<T: Immutable + IntoBytes>(&mut self, _val: T) {}
|
||||
| ^^^^^^^^^ required by this bound in `Foo::write_obj`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
Reference in new issue
Block a user