Completely ported compass to embassy.

This commit is contained in:
Gabe Venberg 2025-07-11 14:32:56 +02:00
parent 3471b71dbc
commit 24c8773820
5 changed files with 78 additions and 24 deletions

View file

@ -19,5 +19,6 @@ pub fn draw_constant_heading<const X: usize, const Y: usize>(
heading: Heading,
matrix: &mut FourQuadrantMatrix<{ X }, { Y }, bool>,
) {
draw_line::<X, Y>(&heading_to_line(heading, X.min(Y)), matrix);
matrix.reset_matrix();
draw_line::<X, Y>(&heading_to_line(Heading(-heading.0), X.min(Y)), matrix);
}

View file

@ -5,8 +5,10 @@ use core::{
#[cfg(test)]
use std::dbg;
use defmt::Format;
/// a signed point in 2d space
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Format, Clone, Copy, PartialEq, Eq)]
pub struct Point {
pub x: isize,
pub y: isize,
@ -25,7 +27,7 @@ impl Point {
}
/// an unsigned point in 2d space
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Format, Clone, Copy, PartialEq, Eq)]
pub struct UPoint {
pub x: usize,
pub y: usize,
@ -45,7 +47,7 @@ impl UPoint {
/// A matrix that allows negative co-oordinates. Will panic if referencing out of bounds, just like
/// a normal 2d array.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[derive(Debug, Format, Clone, Copy, PartialEq, Eq)]
pub struct FourQuadrantMatrix<const X: usize, const Y: usize, T> {
matrix: [[T; X]; Y],
max_point: Point,
@ -139,6 +141,12 @@ impl<T, const X: usize, const Y: usize> From<FourQuadrantMatrix<{ X }, { Y }, T>
}
}
impl<'a, T, const X: usize, const Y: usize> From<&'a FourQuadrantMatrix<{ X }, { Y }, T>> for &'a [[T; X]; Y] {
fn from(value:&'a FourQuadrantMatrix<{ X }, { Y }, T>) -> Self {
&value.matrix
}
}
/// a line segment in 2d space, described by its two endpoints
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Line(pub Point, pub Point);