1use core::ptr::{read_volatile, write_volatile};
16
17use crate::{WINDOW, reg};
18
19const CLEAR: *mut u8 = WINDOW as *mut u8;
20const SAMPLE: *mut u8 = (WINDOW + 0x10) as *mut u8;
21const X_LOW: *const u8 = (WINDOW + 0x20) as *const u8;
22const X_HIGH: *const u8 = (WINDOW + 0x30) as *const u8;
23const Y_LOW: *const u8 = (WINDOW + 0x40) as *const u8;
24const Y_HIGH: *const u8 = (WINDOW + 0x50) as *const u8;
25
26pub const CENTRE: u16 = 0x8000;
28
29#[derive(Clone, Copy, PartialEq, Eq, Debug)]
34pub struct Tilt {
35 pub x: u16,
36 pub y: u16,
37}
38
39pub fn read() -> Tilt {
41 reg::enable();
42 reg::select_raw(0x40);
43
44 unsafe { write_volatile(CLEAR, 0x55) };
45 unsafe { write_volatile(SAMPLE, 0xAA) };
46
47 let x = unsafe { read_volatile(X_LOW) } as u16
48 | (unsafe { read_volatile(X_HIGH) } as u16) << 8;
49 let y = unsafe { read_volatile(Y_LOW) } as u16
50 | (unsafe { read_volatile(Y_HIGH) } as u16) << 8;
51
52 reg::disable();
53 Tilt { x, y }
54}