1#![no_std]
2#![deny(unsafe_op_in_unsafe_fn)]
3#![allow(non_camel_case_types)]
4#![allow(non_upper_case_globals)]
5#![allow(non_snake_case)]
6#![feature(c_variadic)]
7
8pub mod abs_enc;
9pub mod adi;
10pub mod ai_vision;
11pub mod arm;
12pub mod battery;
13pub mod competition;
14pub mod controller;
15pub mod device;
16pub mod display;
17pub mod distance;
18pub mod file;
19pub mod generic_radio;
20pub mod generic_serial;
21pub mod gps;
22pub mod imu;
23pub mod led;
24pub mod light_tower;
25pub mod magnet;
26pub mod motor;
27pub mod optical;
28pub mod pneumatic;
29pub mod range;
30pub mod serial;
31pub mod system;
32pub mod task;
33pub mod touch;
34pub mod vision;
35
36pub use abs_enc::*;
37pub use adi::*;
38pub use ai_vision::*;
39pub use arm::*;
40pub use battery::*;
41pub use competition::*;
42pub use controller::*;
43pub use device::*;
44pub use display::*;
45pub use distance::*;
46pub use file::*;
47pub use generic_radio::*;
48pub use generic_serial::*;
49pub use gps::*;
50pub use imu::*;
51pub use led::*;
52pub use light_tower::*;
53pub use magnet::*;
54pub use motor::*;
55pub use optical::*;
56pub use pneumatic::*;
57pub use range::*;
58pub use serial::*;
59pub use system::*;
60pub use task::*;
61pub use touch::*;
62pub use vision::*;
63
64pub const JUMP_TABLE_START: usize = 0x037fc000;
65
66#[macro_export]
67macro_rules! map_jump_table {
68 (
69 $(
70 $offset:expr =>
71 $(#[$meta:meta])* $vis:vis fn $name:ident($($arg:ident: $arg_ty:ty $(,)?),*) $(-> $ret:ty)?
72 ),+ $(,)?
73 ) => {
74 $(
75 $(#[$meta])*
76 #[doc = "# Safety\nCalls to jumptable functions are unsafe because jumptable functions are owned by VEXos and we cannot guarantee their safety."]
77 #[inline]
78 $vis unsafe fn $name($($arg: $arg_ty),*) $(-> $ret)? {
79 unsafe {
80 (*(($crate::JUMP_TABLE_START + $offset) as *const extern "aapcs" fn($($arg_ty,)*) $(-> $ret)?))($($arg,)*)
81 }
82 }
83 )+
84 };
85}