Rust decode nfc payload #18
+1
-212
@@ -13,6 +13,7 @@ use alloc::{
|
||||
};
|
||||
use base64::{Engine as _, engine::general_purpose};
|
||||
use creaturedex::card::mock::{MOCK_PAYLOAD, MOCK_PAYLOAD2};
|
||||
use creaturedex::display::palette::{PALETTES, Rgb, TYPE_STYLES};
|
||||
use display_interface_spi::SPIInterface;
|
||||
use embassy_executor::Spawner;
|
||||
use embassy_time::Timer;
|
||||
@@ -54,219 +55,7 @@ esp_bootloader_esp_idf::esp_app_desc!();
|
||||
|
||||
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
struct Rgb(pub u8, pub u8, pub u8);
|
||||
|
||||
impl Rgb {
|
||||
fn into_rgb565(self) -> Rgb565 {
|
||||
Rgb565::new(self.0, self.1, self.2)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
struct TypeStyle {
|
||||
pub name: &'static str,
|
||||
pub primary: Rgb,
|
||||
pub text: Rgb,
|
||||
}
|
||||
|
||||
const PALETTES: [[Rgb; 16]; 8] = [
|
||||
// Palette Default
|
||||
[
|
||||
Rgb(31, 23, 35),
|
||||
Rgb(60, 47, 82),
|
||||
Rgb(178, 39, 65),
|
||||
Rgb(70, 86, 165),
|
||||
Rgb(245, 70, 76),
|
||||
Rgb(216, 104, 48),
|
||||
Rgb(140, 127, 144),
|
||||
Rgb(73, 149, 243),
|
||||
Rgb(62, 197, 75),
|
||||
Rgb(240, 149, 72),
|
||||
Rgb(188, 176, 179),
|
||||
Rgb(247, 156, 136),
|
||||
Rgb(114, 222, 235),
|
||||
Rgb(180, 230, 86),
|
||||
Rgb(239, 208, 129),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Blueprint
|
||||
[
|
||||
Rgb(83, 67, 127),
|
||||
Rgb(44, 111, 153),
|
||||
Rgb(142, 88, 111),
|
||||
Rgb(0, 188, 170),
|
||||
Rgb(153, 104, 226),
|
||||
Rgb(109, 129, 255),
|
||||
Rgb(255, 84, 112),
|
||||
Rgb(196, 143, 158),
|
||||
Rgb(168, 159, 204),
|
||||
Rgb(190, 155, 255),
|
||||
Rgb(255, 155, 113),
|
||||
Rgb(127, 206, 255),
|
||||
Rgb(255, 155, 182),
|
||||
Rgb(255, 217, 174),
|
||||
Rgb(255, 217, 232),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette CYBER
|
||||
[
|
||||
Rgb(0, 0, 0),
|
||||
Rgb(0, 0, 126),
|
||||
Rgb(0, 0, 255),
|
||||
Rgb(126, 0, 0),
|
||||
Rgb(126, 0, 126),
|
||||
Rgb(4, 126, 0),
|
||||
Rgb(254, 0, 0),
|
||||
Rgb(4, 126, 126),
|
||||
Rgb(254, 0, 255),
|
||||
Rgb(126, 126, 0),
|
||||
Rgb(126, 126, 126),
|
||||
Rgb(6, 255, 4),
|
||||
Rgb(6, 255, 255),
|
||||
Rgb(190, 190, 190),
|
||||
Rgb(255, 255, 4),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Nature
|
||||
[
|
||||
Rgb(35, 34, 40),
|
||||
Rgb(40, 66, 97),
|
||||
Rgb(30, 116, 83),
|
||||
Rgb(117, 77, 69),
|
||||
Rgb(95, 88, 84),
|
||||
Rgb(36, 133, 166),
|
||||
Rgb(198, 80, 70),
|
||||
Rgb(85, 160, 88),
|
||||
Rgb(135, 133, 115),
|
||||
Rgb(84, 186, 210),
|
||||
Rgb(161, 191, 65),
|
||||
Rgb(230, 146, 138),
|
||||
Rgb(184, 176, 149),
|
||||
Rgb(227, 192, 84),
|
||||
Rgb(195, 213, 199),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Fossil
|
||||
[
|
||||
Rgb(75, 61, 68),
|
||||
Rgb(119, 66, 81),
|
||||
Rgb(78, 84, 99),
|
||||
Rgb(100, 83, 85),
|
||||
Rgb(156, 82, 78),
|
||||
Rgb(132, 109, 89),
|
||||
Rgb(91, 125, 115),
|
||||
Rgb(125, 123, 98),
|
||||
Rgb(140, 124, 121),
|
||||
Rgb(185, 122, 96),
|
||||
Rgb(168, 138, 94),
|
||||
Rgb(142, 159, 125),
|
||||
Rgb(170, 162, 93),
|
||||
Rgb(169, 156, 141),
|
||||
Rgb(204, 168, 123),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Ghost
|
||||
[
|
||||
Rgb(0, 0, 0),
|
||||
Rgb(24, 24, 24),
|
||||
Rgb(40, 40, 40),
|
||||
Rgb(56, 56, 56),
|
||||
Rgb(71, 71, 71),
|
||||
Rgb(86, 86, 86),
|
||||
Rgb(100, 100, 100),
|
||||
Rgb(113, 113, 113),
|
||||
Rgb(126, 126, 126),
|
||||
Rgb(140, 140, 140),
|
||||
Rgb(155, 155, 155),
|
||||
Rgb(171, 171, 171),
|
||||
Rgb(189, 189, 189),
|
||||
Rgb(209, 209, 209),
|
||||
Rgb(231, 231, 231),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Daemon
|
||||
[
|
||||
Rgb(0, 3, 60),
|
||||
Rgb(96, 0, 136),
|
||||
Rgb(0, 56, 132),
|
||||
Rgb(42, 46, 121),
|
||||
Rgb(0, 82, 96),
|
||||
Rgb(177, 5, 133),
|
||||
Rgb(255, 0, 78),
|
||||
Rgb(172, 41, 206),
|
||||
Rgb(0, 157, 74),
|
||||
Rgb(0, 138, 197),
|
||||
Rgb(78, 110, 168),
|
||||
Rgb(255, 92, 255),
|
||||
Rgb(10, 255, 82),
|
||||
Rgb(0, 247, 255),
|
||||
Rgb(173, 212, 250),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Fairy
|
||||
[
|
||||
Rgb(40, 40, 46),
|
||||
Rgb(108, 86, 113),
|
||||
Rgb(135, 168, 137),
|
||||
Rgb(249, 130, 132),
|
||||
Rgb(176, 169, 228),
|
||||
Rgb(222, 163, 139),
|
||||
Rgb(172, 204, 228),
|
||||
Rgb(254, 170, 228),
|
||||
Rgb(217, 200, 191),
|
||||
Rgb(255, 195, 132),
|
||||
Rgb(176, 235, 147),
|
||||
Rgb(179, 227, 218),
|
||||
Rgb(233, 245, 157),
|
||||
Rgb(255, 230, 198),
|
||||
Rgb(255, 247, 160),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
];
|
||||
|
||||
const TYPE_STYLES: [TypeStyle; 8] = [
|
||||
TypeStyle {
|
||||
name: "Default",
|
||||
primary: Rgb(0xD8, 0x68, 0x30),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Blueprint",
|
||||
primary: Rgb(0x6D, 0x81, 0xFF),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "CYBER",
|
||||
primary: Rgb(0xFF, 0xFF, 0x04),
|
||||
text: Rgb(0x00, 0x00, 0x00),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Nature",
|
||||
primary: Rgb(0x55, 0xA0, 0x58),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Fossil",
|
||||
primary: Rgb(0xB9, 0x7A, 0x60),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Ghost",
|
||||
primary: Rgb(0xAB, 0xAB, 0xAB),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Daemon",
|
||||
primary: Rgb(0x60, 0x00, 0x88),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Fairy",
|
||||
primary: Rgb(0xB0, 0xA9, 0xE4),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
];
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
struct NfcPayload<'a> {
|
||||
|
||||
+215
-1
@@ -1 +1,215 @@
|
||||
// Display palette module
|
||||
use embedded_graphics::pixelcolor::Rgb565;
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct Rgb(pub u8, pub u8, pub u8);
|
||||
|
||||
impl Rgb {
|
||||
pub fn into_rgb565(self) -> Rgb565 {
|
||||
Rgb565::new(self.0, self.1, self.2)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct TypeStyle {
|
||||
pub name: &'static str,
|
||||
pub primary: Rgb,
|
||||
pub text: Rgb,
|
||||
}
|
||||
|
||||
pub const PALETTES: [[Rgb; 16]; 8] = [
|
||||
// Palette Default
|
||||
[
|
||||
Rgb(31, 23, 35),
|
||||
Rgb(60, 47, 82),
|
||||
Rgb(178, 39, 65),
|
||||
Rgb(70, 86, 165),
|
||||
Rgb(245, 70, 76),
|
||||
Rgb(216, 104, 48),
|
||||
Rgb(140, 127, 144),
|
||||
Rgb(73, 149, 243),
|
||||
Rgb(62, 197, 75),
|
||||
Rgb(240, 149, 72),
|
||||
Rgb(188, 176, 179),
|
||||
Rgb(247, 156, 136),
|
||||
Rgb(114, 222, 235),
|
||||
Rgb(180, 230, 86),
|
||||
Rgb(239, 208, 129),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Blueprint
|
||||
[
|
||||
Rgb(83, 67, 127),
|
||||
Rgb(44, 111, 153),
|
||||
Rgb(142, 88, 111),
|
||||
Rgb(0, 188, 170),
|
||||
Rgb(153, 104, 226),
|
||||
Rgb(109, 129, 255),
|
||||
Rgb(255, 84, 112),
|
||||
Rgb(196, 143, 158),
|
||||
Rgb(168, 159, 204),
|
||||
Rgb(190, 155, 255),
|
||||
Rgb(255, 155, 113),
|
||||
Rgb(127, 206, 255),
|
||||
Rgb(255, 155, 182),
|
||||
Rgb(255, 217, 174),
|
||||
Rgb(255, 217, 232),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette CYBER
|
||||
[
|
||||
Rgb(0, 0, 0),
|
||||
Rgb(0, 0, 126),
|
||||
Rgb(0, 0, 255),
|
||||
Rgb(126, 0, 0),
|
||||
Rgb(126, 0, 126),
|
||||
Rgb(4, 126, 0),
|
||||
Rgb(254, 0, 0),
|
||||
Rgb(4, 126, 126),
|
||||
Rgb(254, 0, 255),
|
||||
Rgb(126, 126, 0),
|
||||
Rgb(126, 126, 126),
|
||||
Rgb(6, 255, 4),
|
||||
Rgb(6, 255, 255),
|
||||
Rgb(190, 190, 190),
|
||||
Rgb(255, 255, 4),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Nature
|
||||
[
|
||||
Rgb(35, 34, 40),
|
||||
Rgb(40, 66, 97),
|
||||
Rgb(30, 116, 83),
|
||||
Rgb(117, 77, 69),
|
||||
Rgb(95, 88, 84),
|
||||
Rgb(36, 133, 166),
|
||||
Rgb(198, 80, 70),
|
||||
Rgb(85, 160, 88),
|
||||
Rgb(135, 133, 115),
|
||||
Rgb(84, 186, 210),
|
||||
Rgb(161, 191, 65),
|
||||
Rgb(230, 146, 138),
|
||||
Rgb(184, 176, 149),
|
||||
Rgb(227, 192, 84),
|
||||
Rgb(195, 213, 199),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Fossil
|
||||
[
|
||||
Rgb(75, 61, 68),
|
||||
Rgb(119, 66, 81),
|
||||
Rgb(78, 84, 99),
|
||||
Rgb(100, 83, 85),
|
||||
Rgb(156, 82, 78),
|
||||
Rgb(132, 109, 89),
|
||||
Rgb(91, 125, 115),
|
||||
Rgb(125, 123, 98),
|
||||
Rgb(140, 124, 121),
|
||||
Rgb(185, 122, 96),
|
||||
Rgb(168, 138, 94),
|
||||
Rgb(142, 159, 125),
|
||||
Rgb(170, 162, 93),
|
||||
Rgb(169, 156, 141),
|
||||
Rgb(204, 168, 123),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Ghost
|
||||
[
|
||||
Rgb(0, 0, 0),
|
||||
Rgb(24, 24, 24),
|
||||
Rgb(40, 40, 40),
|
||||
Rgb(56, 56, 56),
|
||||
Rgb(71, 71, 71),
|
||||
Rgb(86, 86, 86),
|
||||
Rgb(100, 100, 100),
|
||||
Rgb(113, 113, 113),
|
||||
Rgb(126, 126, 126),
|
||||
Rgb(140, 140, 140),
|
||||
Rgb(155, 155, 155),
|
||||
Rgb(171, 171, 171),
|
||||
Rgb(189, 189, 189),
|
||||
Rgb(209, 209, 209),
|
||||
Rgb(231, 231, 231),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Daemon
|
||||
[
|
||||
Rgb(0, 3, 60),
|
||||
Rgb(96, 0, 136),
|
||||
Rgb(0, 56, 132),
|
||||
Rgb(42, 46, 121),
|
||||
Rgb(0, 82, 96),
|
||||
Rgb(177, 5, 133),
|
||||
Rgb(255, 0, 78),
|
||||
Rgb(172, 41, 206),
|
||||
Rgb(0, 157, 74),
|
||||
Rgb(0, 138, 197),
|
||||
Rgb(78, 110, 168),
|
||||
Rgb(255, 92, 255),
|
||||
Rgb(10, 255, 82),
|
||||
Rgb(0, 247, 255),
|
||||
Rgb(173, 212, 250),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
// Palette Fairy
|
||||
[
|
||||
Rgb(40, 40, 46),
|
||||
Rgb(108, 86, 113),
|
||||
Rgb(135, 168, 137),
|
||||
Rgb(249, 130, 132),
|
||||
Rgb(176, 169, 228),
|
||||
Rgb(222, 163, 139),
|
||||
Rgb(172, 204, 228),
|
||||
Rgb(254, 170, 228),
|
||||
Rgb(217, 200, 191),
|
||||
Rgb(255, 195, 132),
|
||||
Rgb(176, 235, 147),
|
||||
Rgb(179, 227, 218),
|
||||
Rgb(233, 245, 157),
|
||||
Rgb(255, 230, 198),
|
||||
Rgb(255, 247, 160),
|
||||
Rgb(255, 255, 255),
|
||||
],
|
||||
];
|
||||
|
||||
pub const TYPE_STYLES: [TypeStyle; 8] = [
|
||||
TypeStyle {
|
||||
name: "Default",
|
||||
primary: Rgb(0xD8, 0x68, 0x30),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Blueprint",
|
||||
primary: Rgb(0x6D, 0x81, 0xFF),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "CYBER",
|
||||
primary: Rgb(0xFF, 0xFF, 0x04),
|
||||
text: Rgb(0x00, 0x00, 0x00),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Nature",
|
||||
primary: Rgb(0x55, 0xA0, 0x58),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Fossil",
|
||||
primary: Rgb(0xB9, 0x7A, 0x60),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Ghost",
|
||||
primary: Rgb(0xAB, 0xAB, 0xAB),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Daemon",
|
||||
primary: Rgb(0x60, 0x00, 0x88),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
TypeStyle {
|
||||
name: "Fairy",
|
||||
primary: Rgb(0xB0, 0xA9, 0xE4),
|
||||
text: Rgb(0xFF, 0xFF, 0xFF),
|
||||
},
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user