1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
//! For use with the [`entry`] macro. use libc_print::std_name::*; use crate::rtos::Context; /// A trait representing a competition-ready VEX Robot. pub trait Robot { /// Runs at startup, constructing your robot. This should be non-blocking, /// since the FreeRTOS scheduler doesn't start until it returns. fn new() -> Self; /// Runs immediately after [`Robot::new`]. The FreeRTOS scheduler is running /// by this point. /// /// The purpose of this method is to provide a hook to run things on startup /// which require a reference to all or part of the robot structure; since /// it takes `&'static self` as its parameter, the lifetime of the robot /// object is guaranteed to be static (i.e., forever), and so the /// implementation may pass references around (e.g., to new tasks) at will /// without issue. fn initialize(&'static self, _ctx: Context) {} /// Runs during the autonomous period. fn autonomous(&'static self, _ctx: Context) { println!("autonomous"); } /// Runs during the opcontrol period. fn opcontrol(&'static self, _ctx: Context) { println!("opcontrol"); } /// Runs when the robot is disabled. fn disabled(&'static self, _ctx: Context) { println!("disabled"); } }