|  | /// Check the `util` module to see how the `Card` structure is implemented. | 
|  | pub mod utils; | 
|  | use crate::utils::*; | 
|  |  | 
|  | pub fn main() { | 
|  | let card = Card::open_global(); | 
|  |  | 
|  | // Enable all possible client capabilities | 
|  | for &cap in capabilities::CLIENT_CAP_ENUMS { | 
|  | if let Err(e) = card.set_client_capability(cap, true) { | 
|  | eprintln!("Unable to activate capability {:?}: {}", cap, e); | 
|  | return; | 
|  | } | 
|  | } | 
|  |  | 
|  | let resources = card.resource_handles().unwrap(); | 
|  | let plane_res = card.plane_handles().unwrap(); | 
|  |  | 
|  | // Print out all card resource handles | 
|  | println!("Connectors:\t{:?}", resources.connectors()); | 
|  | println!("Encoders:\t{:?}", resources.encoders()); | 
|  | println!("CRTCs:\t\t{:?}", resources.crtcs()); | 
|  | println!("Framebuffers:\t{:?}", resources.framebuffers()); | 
|  | println!("Planes:\t\t{:?}", plane_res); | 
|  |  | 
|  | for &handle in resources.connectors() { | 
|  | let info = card.get_connector(handle, false).unwrap(); | 
|  | println!("Connector: {:?}", handle); | 
|  | println!("\t{:?}-{}", info.interface(), info.interface_id()); | 
|  | println!("\t{:?}", info.state()); | 
|  | println!("\t{:?}", info.size()); | 
|  | println!("\t{:?}", info.encoders()); | 
|  | println!("\t{:?}", info.current_encoder()); | 
|  |  | 
|  | for mode in card.get_modes(handle).unwrap() { | 
|  | println!("{:?}", mode); | 
|  | } | 
|  | } | 
|  | println!("\n"); | 
|  |  | 
|  | for &handle in resources.encoders() { | 
|  | let info = card.get_encoder(handle).unwrap(); | 
|  | println!("Encoder: {:?}", handle); | 
|  | println!("\t{:?}", info.kind()); | 
|  | println!("\t{:?}", info.crtc()); | 
|  | } | 
|  | println!("\n"); | 
|  |  | 
|  | for &handle in resources.crtcs() { | 
|  | let info = card.get_crtc(handle).unwrap(); | 
|  | println!("CRTC: {:?}", handle); | 
|  | println!("\tPosition: {:?}", info.position()); | 
|  | println!("\tMode: {:?}", info.mode()); | 
|  | println!("\tFramebuffer: {:?}", info.framebuffer()); | 
|  | println!("\tGamma Length: {:?}", info.gamma_length()); | 
|  | } | 
|  | println!("\n"); | 
|  |  | 
|  | for &handle in resources.framebuffers() { | 
|  | let info = card.get_framebuffer(handle).unwrap(); | 
|  | println!("Framebuffer: {:?}", handle); | 
|  | println!("\tSize: {:?}", info.size()); | 
|  | println!("\tPitch: {:?}", info.pitch()); | 
|  | println!("\tBPP: {:?}", info.bpp()); | 
|  | println!("\tDepth: {:?}", info.depth()); | 
|  | } | 
|  |  | 
|  | println!("\n"); | 
|  |  | 
|  | for handle in plane_res { | 
|  | let info = card.get_plane(handle).unwrap(); | 
|  | println!("Plane: {:?}", handle); | 
|  | println!("\tCRTC: {:?}", info.crtc()); | 
|  | println!("\tFramebuffer: {:?}", info.framebuffer()); | 
|  | println!("\tFormats: {:?}", info.formats()); | 
|  | } | 
|  | } |