diff --git a/example.zig b/example.zig index 3b1542f..8b5406f 100644 --- a/example.zig +++ b/example.zig @@ -5,16 +5,18 @@ pub fn main(init: std.process.Init) !void { const io = init.io; 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); + defer card.close(io); + const device = try card.getDevice(io, gpa, .{}); 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); defer res.deinit(gpa); diff --git a/src/Card.zig b/src/Card.zig index f449f06..453b269 100644 --- a/src/Card.zig +++ b/src/Card.zig @@ -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); } +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( self: Card, io: std.Io,