feat: Card.getVersion (drmGetVersion).

This commit is contained in:
Jackson Netherwood-Imig
2026-03-08 21:49:25 -07:00
parent aa3a90dc69
commit 685c302b9f
2 changed files with 50 additions and 6 deletions
+8 -6
View File
@@ -5,16 +5,18 @@ pub fn main(init: std.process.Init) !void {
const io = init.io; const io = init.io;
const gpa = init.gpa; const gpa = init.gpa;
// const device = drm.Device.getFromDevId(io, gpa, drm.makeDev(226, 0), .{}) catch
// try drm.Device.getFromDevId(io, gpa, drm.makeDev(226, 1), .{});
// const card = try device.openNode(io);
const card = try drm.Card.openAuto(io, .primary); const card = try drm.Card.openAuto(io, .primary);
defer card.close(io);
const device = try card.getDevice(io, gpa, .{}); const device = try card.getDevice(io, gpa, .{});
std.log.info("Device node path: {s}.", .{device.nodePath()}); std.log.info("Device node path: {s}.", .{device.nodePath()});
defer card.close(io); const version = try card.getVersion(gpa);
defer version.deinit(gpa);
std.log.info("Version: {}.{}.{}.", .{ version.major, version.minor, version.patch });
std.log.info("Name: {s}, date: {s}, desc: {s}.", .{ version.name, version.date, version.desc });
const res = try card.getModesettingResources(gpa); const res = try card.getModesettingResources(gpa);
defer res.deinit(gpa); defer res.deinit(gpa);
+42
View File
@@ -66,6 +66,48 @@ pub fn getDevice(self: Card, io: std.Io, gpa: std.mem.Allocator, flags: Device.F
return .getFromDevId(io, gpa, try self.getDevId(), flags); return .getFromDevId(io, gpa, try self.getDevId(), flags);
} }
pub const Version = struct {
major: u32,
minor: u32,
patch: u32,
name: [:0]const u8,
date: [:0]const u8,
desc: [:0]const u8,
pub fn deinit(self: Version, gpa: std.mem.Allocator) void {
gpa.free(self.name);
gpa.free(self.date);
gpa.free(self.desc);
}
};
pub const GetVersionError = error{OutOfMemory} || sys.IoctlError;
pub fn getVersion(self: Card, gpa: std.mem.Allocator) GetVersionError!Version {
var ret: Version = undefined;
var version = std.mem.zeroes(sys.Version);
try sys.ioctl(self.handle.handle, .version, &version);
ret.name = try gpa.allocSentinel(u8, version.name_len, 0);
errdefer gpa.free(ret.name);
ret.date = try gpa.allocSentinel(u8, version.date_len, 0);
errdefer gpa.free(ret.date);
ret.desc = try gpa.allocSentinel(u8, version.desc_len, 0);
errdefer gpa.free(ret.desc);
version.name = ret.name.ptr;
version.date = ret.date.ptr;
version.desc = ret.desc.ptr;
try sys.ioctl(self.handle.handle, .version, &version);
ret.major = @intCast(version.version_major);
ret.minor = @intCast(version.version_minor);
ret.patch = @intCast(version.version_patch);
return ret;
}
pub fn handleEvents( pub fn handleEvents(
self: Card, self: Card,
io: std.Io, io: std.Io,