working dynamically loaded app
This commit is contained in:
78
Cargo.lock
generated
78
Cargo.lock
generated
@@ -18,7 +18,7 @@ version = "0.1.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"abi_sys",
|
"abi_sys",
|
||||||
"embassy-time 0.5.0",
|
"embassy-time 0.5.0",
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
"shared",
|
"shared",
|
||||||
"spin",
|
"spin",
|
||||||
"talc",
|
"talc",
|
||||||
@@ -28,7 +28,7 @@ dependencies = [
|
|||||||
name = "abi_sys"
|
name = "abi_sys"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
"shared",
|
"shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -226,7 +226,7 @@ name = "calculator"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"abi",
|
"abi",
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -801,6 +801,19 @@ dependencies = [
|
|||||||
"embedded-io-async",
|
"embedded-io-async",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-graphics"
|
||||||
|
version = "0.7.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "750082c65094fbcc4baf9ba31583ce9a8bb7f52cadfb96f6164b1bc7f922f32b"
|
||||||
|
dependencies = [
|
||||||
|
"az",
|
||||||
|
"byteorder",
|
||||||
|
"embedded-graphics-core 0.3.3",
|
||||||
|
"float-cmp 0.8.0",
|
||||||
|
"micromath 1.1.1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-graphics"
|
name = "embedded-graphics"
|
||||||
version = "0.8.1"
|
version = "0.8.1"
|
||||||
@@ -810,9 +823,19 @@ dependencies = [
|
|||||||
"az",
|
"az",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
"defmt 0.3.100",
|
"defmt 0.3.100",
|
||||||
"embedded-graphics-core",
|
"embedded-graphics-core 0.4.0",
|
||||||
"float-cmp",
|
"float-cmp 0.9.0",
|
||||||
"micromath",
|
"micromath 2.1.0",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-graphics-core"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b8b1239db5f3eeb7e33e35bd10bd014e7b2537b17e071f726a09351431337cfa"
|
||||||
|
dependencies = [
|
||||||
|
"az",
|
||||||
|
"byteorder",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -893,7 +916,7 @@ version = "0.4.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9a90553247f2b05c59ac7894ea13d830636c2b1203fa03bff400eddbd1fa9f52"
|
checksum = "9a90553247f2b05c59ac7894ea13d830636c2b1203fa03bff400eddbd1fa9f52"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
"embedded-layout-macros",
|
"embedded-layout-macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -921,6 +944,16 @@ dependencies = [
|
|||||||
"heapless",
|
"heapless",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "embedded-snake"
|
||||||
|
version = "0.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "af598ad20b839c26b95be615a94619a069303ec776a58aef6dc0e86cf7eabbb8"
|
||||||
|
dependencies = [
|
||||||
|
"embedded-graphics 0.7.1",
|
||||||
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "embedded-storage"
|
name = "embedded-storage"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
@@ -943,7 +976,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "005680edc0d075af5e02d5788ca291737bd9aba7fc404ae031cc9dfa715e5f7d"
|
checksum = "005680edc0d075af5e02d5788ca291737bd9aba7fc404ae031cc9dfa715e5f7d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"az",
|
"az",
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
"object-chain",
|
"object-chain",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -992,6 +1025,15 @@ version = "0.5.7"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "float-cmp"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e1267f4ac4f343772758f7b1bdcbe767c218bbab93bb432acbf5162bbf85a6c4"
|
||||||
|
dependencies = [
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "float-cmp"
|
name = "float-cmp"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@@ -1262,7 +1304,7 @@ dependencies = [
|
|||||||
"embassy-sync 0.7.2",
|
"embassy-sync 0.7.2",
|
||||||
"embassy-time 0.5.0",
|
"embassy-time 0.5.0",
|
||||||
"embassy-usb",
|
"embassy-usb",
|
||||||
"embedded-graphics",
|
"embedded-graphics 0.8.1",
|
||||||
"embedded-hal 0.2.7",
|
"embedded-hal 0.2.7",
|
||||||
"embedded-hal 1.0.0",
|
"embedded-hal 1.0.0",
|
||||||
"embedded-hal-async",
|
"embedded-hal-async",
|
||||||
@@ -1396,6 +1438,12 @@ version = "2.7.5"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "micromath"
|
||||||
|
version = "1.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc4010833aea396656c2f91ee704d51a6f1329ec2ab56ffd00bfd56f7481ea94"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "micromath"
|
name = "micromath"
|
||||||
version = "2.1.0"
|
version = "2.1.0"
|
||||||
@@ -1970,6 +2018,16 @@ dependencies = [
|
|||||||
"rgb",
|
"rgb",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "snake"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"abi",
|
||||||
|
"embedded-graphics 0.8.1",
|
||||||
|
"embedded-snake",
|
||||||
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spin"
|
name = "spin"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
@@ -1995,7 +2053,7 @@ version = "0.11.0"
|
|||||||
source = "git+https://github.com/legitcamper/st7365p-lcd-rs?rev=1d15123929fa7ef73d5d6aead7faf1bba50ce915#1d15123929fa7ef73d5d6aead7faf1bba50ce915"
|
source = "git+https://github.com/legitcamper/st7365p-lcd-rs?rev=1d15123929fa7ef73d5d6aead7faf1bba50ce915#1d15123929fa7ef73d5d6aead7faf1bba50ce915"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitvec",
|
"bitvec",
|
||||||
"embedded-graphics-core",
|
"embedded-graphics-core 0.4.0",
|
||||||
"embedded-hal 1.0.0",
|
"embedded-hal 1.0.0",
|
||||||
"embedded-hal-async",
|
"embedded-hal-async",
|
||||||
"heapless",
|
"heapless",
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ pub type SleepAbi = extern "Rust" fn(ms: u64);
|
|||||||
|
|
||||||
pub fn sleep(ms: u64) {
|
pub fn sleep(ms: u64) {
|
||||||
unsafe {
|
unsafe {
|
||||||
let ptr = CALL_ABI_TABLE[CallAbiTable::Print as usize];
|
let ptr = CALL_ABI_TABLE[CallAbiTable::Sleep as usize];
|
||||||
let f: SleepAbi = core::mem::transmute(ptr);
|
let f: SleepAbi = core::mem::transmute(ptr);
|
||||||
f(ms);
|
f(ms);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use embassy_time::{Delay, Timer};
|
|||||||
use embedded_graphics::{
|
use embedded_graphics::{
|
||||||
draw_target::DrawTarget,
|
draw_target::DrawTarget,
|
||||||
pixelcolor::{Rgb565, RgbColor},
|
pixelcolor::{Rgb565, RgbColor},
|
||||||
|
prelude::Dimensions,
|
||||||
};
|
};
|
||||||
use embedded_hal_bus::spi::ExclusiveDevice;
|
use embedded_hal_bus::spi::ExclusiveDevice;
|
||||||
use st7365p_lcd::ST7365P;
|
use st7365p_lcd::ST7365P;
|
||||||
@@ -48,8 +49,11 @@ pub async fn init_display(
|
|||||||
display
|
display
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn clear_fb() {
|
pub fn clear_fb() {
|
||||||
unsafe { FRAMEBUFFER.clear(Rgb565::BLACK).unwrap() }
|
let bounds = unsafe { FRAMEBUFFER.bounding_box() };
|
||||||
|
unsafe {
|
||||||
|
let _ = FRAMEBUFFER.fill_solid(&bounds, Rgb565::BLACK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn display_handler(mut display: DISPLAY) {
|
pub async fn display_handler(mut display: DISPLAY) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ static mut BUFFER: [u16; SIZE] = [0; SIZE];
|
|||||||
static mut DIRTY_TILES: LazyLock<Vec<AtomicBool, TILE_COUNT>> = LazyLock::new(|| {
|
static mut DIRTY_TILES: LazyLock<Vec<AtomicBool, TILE_COUNT>> = LazyLock::new(|| {
|
||||||
let mut tiles = Vec::new();
|
let mut tiles = Vec::new();
|
||||||
for _ in 0..TILE_COUNT {
|
for _ in 0..TILE_COUNT {
|
||||||
tiles.push(AtomicBool::new(true));
|
tiles.push(AtomicBool::new(true)).unwrap();
|
||||||
}
|
}
|
||||||
tiles
|
tiles
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ async fn userland_task() {
|
|||||||
*state = TaskState::Kernel;
|
*state = TaskState::Kernel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear_fb().await; // blocks future exec?
|
// clear_fb();
|
||||||
|
|
||||||
defmt::info!("Executing Binary");
|
defmt::info!("Executing Binary");
|
||||||
entry().await;
|
entry().await;
|
||||||
|
|||||||
@@ -26,41 +26,48 @@ pub async fn main() {
|
|||||||
|
|
||||||
let character_style = MonoTextStyle::new(&FONT_6X10, Rgb565::RED);
|
let character_style = MonoTextStyle::new(&FONT_6X10, Rgb565::RED);
|
||||||
|
|
||||||
let mut text = vec!['H', 'E', 'L', 'L', 'O'];
|
let mut text = vec!['T', 'y', 'p', 'e'];
|
||||||
|
let mut dirty = true;
|
||||||
|
let mut last_bounds: Option<Rectangle> = None;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
// First, clear the text area
|
if dirty {
|
||||||
let text_area = Rectangle::new(
|
if let Some(bounds) = last_bounds {
|
||||||
display.bounding_box().center() + Point::new(0, 0),
|
Rectangle::new(bounds.top_left, bounds.size)
|
||||||
Size::new(320, 320),
|
|
||||||
);
|
|
||||||
Rectangle::new(text_area.top_left, text_area.size)
|
|
||||||
.into_styled(PrimitiveStyle::with_fill(Rgb565::BLACK))
|
.into_styled(PrimitiveStyle::with_fill(Rgb565::BLACK))
|
||||||
.draw(&mut display)
|
.draw(&mut display)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
Text::with_alignment(
|
let text = text.iter().cloned().collect::<String>();
|
||||||
&text.iter().cloned().collect::<String>(),
|
let aligned_text = Text::with_alignment(
|
||||||
display.bounding_box().center() + Point::new(0, 15),
|
&text,
|
||||||
|
display.bounding_box().center(),
|
||||||
character_style,
|
character_style,
|
||||||
Alignment::Center,
|
Alignment::Center,
|
||||||
)
|
);
|
||||||
.draw(&mut display)
|
last_bounds = Some(aligned_text.bounding_box());
|
||||||
.unwrap();
|
|
||||||
|
aligned_text.draw(&mut display).unwrap();
|
||||||
|
dirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(event) = get_key() {
|
if let Some(event) = get_key() {
|
||||||
print("User got event");
|
dirty = true;
|
||||||
match event.key {
|
match event.key {
|
||||||
KeyCode::Char(ch) => {
|
KeyCode::Char(ch) => {
|
||||||
text.push(ch);
|
text.push(ch);
|
||||||
}
|
}
|
||||||
|
KeyCode::Del => {
|
||||||
|
text.clear();
|
||||||
|
}
|
||||||
KeyCode::Backspace => {
|
KeyCode::Backspace => {
|
||||||
text.pop();
|
text.pop();
|
||||||
}
|
}
|
||||||
|
KeyCode::Esc => return,
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sleep(1000)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user