1  /// Check the `util` module to see how the `Card` structure is implemented.
2  pub mod utils;
3  use crate::utils::*;
4  
main()5  pub fn main() {
6      let card = Card::open_global();
7  
8      // Enable all possible client capabilities
9      for &cap in capabilities::CLIENT_CAP_ENUMS {
10          if let Err(e) = card.set_client_capability(cap, true) {
11              eprintln!("Unable to activate capability {:?}: {}", cap, e);
12              return;
13          }
14      }
15  
16      let resources = card.resource_handles().unwrap();
17      let plane_res = card.plane_handles().unwrap();
18  
19      // Print out all card resource handles
20      println!("Connectors:\t{:?}", resources.connectors());
21      println!("Encoders:\t{:?}", resources.encoders());
22      println!("CRTCs:\t\t{:?}", resources.crtcs());
23      println!("Framebuffers:\t{:?}", resources.framebuffers());
24      println!("Planes:\t\t{:?}", plane_res);
25  
26      for &handle in resources.connectors() {
27          let info = card.get_connector(handle, false).unwrap();
28          println!("Connector: {:?}", handle);
29          println!("\t{:?}-{}", info.interface(), info.interface_id());
30          println!("\t{:?}", info.state());
31          println!("\t{:?}", info.size());
32          println!("\t{:?}", info.encoders());
33          println!("\t{:?}", info.current_encoder());
34  
35          for mode in card.get_modes(handle).unwrap() {
36              println!("{:?}", mode);
37          }
38      }
39      println!("\n");
40  
41      for &handle in resources.encoders() {
42          let info = card.get_encoder(handle).unwrap();
43          println!("Encoder: {:?}", handle);
44          println!("\t{:?}", info.kind());
45          println!("\t{:?}", info.crtc());
46      }
47      println!("\n");
48  
49      for &handle in resources.crtcs() {
50          let info = card.get_crtc(handle).unwrap();
51          println!("CRTC: {:?}", handle);
52          println!("\tPosition: {:?}", info.position());
53          println!("\tMode: {:?}", info.mode());
54          println!("\tFramebuffer: {:?}", info.framebuffer());
55          println!("\tGamma Length: {:?}", info.gamma_length());
56      }
57      println!("\n");
58  
59      for &handle in resources.framebuffers() {
60          let info = card.get_framebuffer(handle).unwrap();
61          println!("Framebuffer: {:?}", handle);
62          println!("\tSize: {:?}", info.size());
63          println!("\tPitch: {:?}", info.pitch());
64          println!("\tBPP: {:?}", info.bpp());
65          println!("\tDepth: {:?}", info.depth());
66      }
67  
68      println!("\n");
69  
70      for handle in plane_res {
71          let info = card.get_plane(handle).unwrap();
72          println!("Plane: {:?}", handle);
73          println!("\tCRTC: {:?}", info.crtc());
74          println!("\tFramebuffer: {:?}", info.framebuffer());
75          println!("\tFormats: {:?}", info.formats());
76      }
77  }
78