1 use drm_ffi as ffi;
2
3 use std::fs::{File, OpenOptions};
4 use std::os::unix::io::{AsFd, BorrowedFd};
5
6 #[derive(Debug)]
7 // This is our customized struct that implements the traits in drm.
8 struct Card(File);
9
10 // Need to implement AsRawFd before we can implement drm::Device
11 impl AsFd for Card {
as_fd(&self) -> BorrowedFd<'_>12 fn as_fd(&self) -> BorrowedFd<'_> {
13 self.0.as_fd()
14 }
15 }
16
17 impl Card {
open(path: &str) -> Self18 fn open(path: &str) -> Self {
19 let mut options = OpenOptions::new();
20 options.read(true);
21 options.write(true);
22 Card(options.open(path).unwrap())
23 }
24
open_global() -> Self25 fn open_global() -> Self {
26 Self::open("/dev/dri/card0")
27 }
28 }
29
print_busid(fd: BorrowedFd<'_>)30 fn print_busid(fd: BorrowedFd<'_>) {
31 let mut buffer = Vec::new();
32 let busid = ffi::get_bus_id(fd, Some(&mut buffer));
33 println!("{:#?}", busid);
34 }
35
print_client(fd: BorrowedFd<'_>)36 fn print_client(fd: BorrowedFd<'_>) {
37 let client = ffi::get_client(fd, 0);
38 println!("{:#?}", client);
39 }
40
print_version(fd: BorrowedFd<'_>)41 fn print_version(fd: BorrowedFd<'_>) {
42 let mut name = Vec::new();
43 let mut date = Vec::new();
44 let mut desc = Vec::new();
45
46 let version = ffi::get_version(fd, Some(&mut name), Some(&mut date), Some(&mut desc));
47
48 println!("{:#?}", version);
49 }
50
print_capabilities(fd: BorrowedFd<'_>)51 fn print_capabilities(fd: BorrowedFd<'_>) {
52 for cty in 1.. {
53 let cap = ffi::get_capability(fd, cty);
54 match cap {
55 Ok(_) => println!("{:#?}", cap),
56 Err(_) => break,
57 }
58 }
59 }
60
print_token(fd: BorrowedFd<'_>)61 fn print_token(fd: BorrowedFd<'_>) {
62 let token = ffi::auth::get_magic_token(fd);
63 println!("{:#?}", token);
64 }
65
main()66 fn main() {
67 let card = Card::open_global();
68 let fd = card.as_fd();
69
70 print_busid(fd);
71 print_client(fd);
72 print_version(fd);
73 print_capabilities(fd);
74 print_token(fd);
75 //print_stats(fd);
76 }
77