blob: c5cca24fb7d8a9f00f098152b2f56a289545be10 (
plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
|
const std = @import("std");
const os = std.os.linux;
const cerror = @import("../cerror.zig");
const Resources = @import("resources.zig").Resources;
const Connector = @import("connector/root.zig").Connector;
const Encoder = @import("encoder/root.zig").Encoder;
pub const Card = struct {
const Self = @This();
file: std.fs.File,
allocator: std.mem.Allocator,
pub fn open(name: []const u8, allocator: std.mem.Allocator) !Self {
var dri_dir = try std.fs.openDirAbsolute("/dev/dri", .{});
defer dri_dir.close();
return .{
.file = try dri_dir.openFile(name, .{
.mode = .read_write,
.lock_nonblocking = true,
}),
.allocator = allocator,
};
}
pub fn close(self: *Card) void {
self.file.close();
}
pub fn is_kms(self: *Card) !bool {
const raw_info = Resources.raw_without_ids(self);
return raw_info.count_crtcs > 0 and raw_info.count_connectors > 0 and raw_info.count_encoders > 0;
}
pub fn resources(self: *Card) !Resources {
return Resources.init(self);
}
pub fn connector(self: *Card, id: u32) !Connector {
return Connector.init(self, id);
}
pub fn encoder(self: *Card, id: u32) !Encoder {
return Encoder.init(self, id);
}
};
|