Implement RTC #1

Merged
paoda merged 14 commits from rtc into main 2022-09-17 23:36:34 +00:00
1 changed files with 3 additions and 6 deletions
Showing only changes of commit 1c52c0bf91 - Show all commits

View File

@ -44,8 +44,7 @@ pub fn init(allocator: Allocator, rom_path: []const u8, save_path: ?[]const u8)
pub fn setupGpio(self: *Self) void { pub fn setupGpio(self: *Self) void {
switch (self.gpio.device.kind) { switch (self.gpio.device.kind) {
.Rtc => { .Rtc => {
const ptr = self.gpio.device.ptr orelse @panic("RTC ptr is missing despite GPIO Device Kind"); const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), self.gpio.device.ptr.?));
const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), ptr));
Clock.init(clock, &self.gpio); Clock.init(clock, &self.gpio);
}, },
.None => {}, .None => {},
@ -265,8 +264,7 @@ const Gpio = struct {
fn step(self: *Device, value: u4) void { fn step(self: *Device, value: u4) void {
switch (self.kind) { switch (self.kind) {
.Rtc => { .Rtc => {
const ptr = self.ptr orelse @panic("Device.ptr should != null when Device.kind == .Rtc"); const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), self.ptr.?));
const clock = @ptrCast(*Clock, @alignCast(@alignOf(*Clock), ptr));
clock.step(Clock.GpioData{ .raw = value }); clock.step(Clock.GpioData{ .raw = value });
}, },
@ -304,8 +302,7 @@ const Gpio = struct {
fn deinit(self: This, allocator: Allocator) void { fn deinit(self: This, allocator: Allocator) void {
switch (self.device.kind) { switch (self.device.kind) {
.Rtc => { .Rtc => {
const ptr = self.device.ptr orelse @panic("Device.ptr should != null when Device.kind == .Rtc"); allocator.destroy(@ptrCast(*Clock, @alignCast(@alignOf(*Clock), self.device.ptr.?)));
allocator.destroy(@ptrCast(*Clock, @alignCast(@alignOf(*Clock), ptr)));
}, },
.None => {}, .None => {},
} }