Some high-level cleanup

This commit is contained in:
Matthias Portzel 2024-04-19 23:37:38 -04:00
parent 91a32fdd52
commit b7cd1d4dd8
No known key found for this signature in database
4 changed files with 40 additions and 25 deletions

View File

@ -6,18 +6,20 @@ const Point = map.Point;
const Cardinal = map.Cardinal;
const Mouse = @import("mouse.zig").Mouse;
pub const is_robot = @import("builtin").os.tag == .freestanding;
// Doesn't have any state
// It's a hardware abstraction layer
pub const robot = if (is_robot) @import("rp2040-bot.zig") else @import("simulated-bot.zig");
pub const is_irl = @import("builtin").os.tag == .freestanding;
pub const robot = if (is_irl) @import("rp2040-bot.zig") else @import("simulated-bot.zig");
// It's a little weird to do this as a global, but it just returns
// an instance of Mouse with initial values
var mouse = @import("mouse.zig").initialize();
pub fn setup () void {
// Just pass through to robot.setup to do any robot-specific setup (hardware, allocations, and starting alt-core)
robot.setup();
// Any maze-related setup that can't be done at comptime can be done here
}
//// Node
@ -76,9 +78,7 @@ const Node = struct {
}
}
if (!is_robot) {
robot.writeCellScore(self.p, self.score);
}
robot.writeCellScore(self.p, self.score);
}
};
@ -151,9 +151,9 @@ pub fn setWall(p: Point, direction: Cardinal, value: bool) void {
assert(value);
}
// If we're running in sim, display that we saw a wall
if (!is_robot and value) {
robot.showWall(p, direction);
// Display that we saw a wall (e.g. on the simulator display)
if (value) {
robot.recordWall(p, direction);
}
// We don't keep track of the edges, we just assume they're there

View File

@ -19,10 +19,6 @@ pub fn alt_core () noreturn {
}
const is_robot = algo.is_robot;
// // TODO: Refactor again. algo.is_robot???
// if (algo.is_robot) {
// alt_core
// }
const time = @import("microzig").hal.time;
@ -35,21 +31,14 @@ fn core1 () noreturn {
pub fn main() !noreturn {
// Power On test
// TODO: rename is_robot to is_physical or something
if (!is_robot) {
// TODO: spawn a thread to run alt-core operations
}else {
// multicore.launch_core1(core1);
}
algo.setup();
// // Flood fill to the goal
// algo.floodFill(map.goals[0..]);
algo.floodFill(map.goals[0..]);
// // Flood fill back to the start
// const starts = [_]map.Point{ map.start };
// algo.floodFill(starts[0..]);
const starts = [_]map.Point{ map.start };
algo.floodFill(starts[0..]);
robot.stall();
}

View File

@ -3,6 +3,8 @@
// The code in this file will be dirty, it will deal with setting up encoders and all sorts of BS
const map = @import("map.zig");
const Point = map.Point;
const Cardinal = map.Cardinal;
// Hardware-specific declarations
const microzig = @import("microzig");
@ -259,6 +261,8 @@ pub fn setup () void {
// pins.onboard_led.toggle();
// pins.onboard_led.toggle();
// TODO
// start_alt_core()
}
pub fn moveForward() void {
@ -291,6 +295,13 @@ pub fn readBack() bool {
return true;
}
// Multicore isn't functional upstream
// const multicore = rp2040.multicore;
// fn alt_core_main_function noreturn {}
pub fn start_alt_core() !void {
// multicore.launch_core1(alt_core_main_function);
}
pub fn stall() noreturn {
pins.motor_right_1.put(1);
@ -335,3 +346,14 @@ pub fn stall() noreturn {
// pins.led_6.put(0);
}
}
// --- Functions not implemented for the IRL bot ---
pub fn writeCellScore(p: Point, score: usize) void {
_ = p;
_ = score;
// stdout.print("setText {d} {d} {d}\n", .{p.x, p.y, score}) catch unreachable;
}
pub fn recordWall(p: Point, direction: Cardinal) void {
_ = p;
_ = direction;
}

View File

@ -13,7 +13,11 @@ const stdout = std.io.getStdOut().writer();
// Since this only runs on my computer, we can do whatever we want here
pub fn setup () void {}
pub fn setup () void {
// TODO: Create alt thread and start multi-core
// // Blocked on upstream multi-core support
// robot.start_alt_core();
}
// TODO: create a utility function that takes an allocator and reads from std in and returns a &[]u8
@ -84,7 +88,7 @@ pub fn readBack() bool {
std.debug.panic();
}
pub fn showWall(p: Point, direction: Cardinal) void {
pub fn recordWall(p: Point, direction: Cardinal) void {
const dir :u8 = switch (direction) {
.north => 'n',
.south => 's',