feat: Card.getVersion (drmGetVersion).
This commit is contained in:
+8
-6
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user