#![no_std]
extern crate alloc;
use core::ffi::*;
use core::ptr::null_mut;
use core::ptr::NonNull;
use alloc::boxed::Box;
#[macro_use]
extern crate playdate_sys as pd;
use pd::EventLoopCtrl;
use pd::ffi::*;
#[no_mangle]
fn event_handler(api: NonNull<PlaydateAPI>, event: PDSystemEvent, arg: u32) -> EventLoopCtrl {
println!("Init");
if event == PDSystemEvent::kEventInit {
let state = Box::into_raw(Box::new(0_u32));
unsafe { api!(system.setUpdateCallback)(Some(update_handler), state as *mut _) };
}
EventLoopCtrl::Continue
}
unsafe extern "C" fn update_handler(state: *mut c_void) -> c_int {
let ptr: *mut u32 = state.cast();
let state = ptr.as_mut().expect("missed state");
*state += 1;
println!("Counting, {state}");
if *state == 100 {
println!("Stopping updates...");
api!(system.setUpdateCallback)(None, null_mut());
println!("See you.");
}
true.into()
}
ll_symbols!();