@@ -8,15 +8,17 @@ const Battery = @This();
update: i64 = 0,
capacity: u8 = 0,
powered: bool = false,
name: []const u8 = "battery",
pub fn init() !Battery {
var bat = Battery{};
try bat.read();
try bat.readBat();
try bat.readPowerd();
return bat;
}
fn read(self: *Battery) !void {
fn readBat(self: *Battery) !void {
var file = try std.fs.openFileAbsolute("/sys/class/power_supply/BAT1/capacity", .{});
defer file.close();
var buffer: [10]u8 = undefined;
@@ -24,18 +26,36 @@ fn read(self: *Battery) !void {
self.capacity = try std.fmt.parseInt(u8, buffer[0 .. count - 1], 10);
}
fn readPowerd(self: *Battery) !void {
var file = try std.fs.openFileAbsolute("/sys/class/power_supply/ACAD/online", .{});
defer file.close();
var buffer: [1]u8 = undefined;
const count = try file.read(&buffer);
if (count == 0) return;
switch (buffer[0]) {
'0' => self.powered = false,
'1' => self.powered = true,
else => @panic("unexpected value from ACAD"),
}
}
pub fn update(self: *Battery, i: i64) !void {
if (self.update > i) return;
self.update = i + DELAY;
try self.read();
try self.readBat();
try self.readPowerd();
}
pub fn ttl(self: Battery) ![]u8 {
const ttlbuf = struct {
var buf: [12]u8 = undefined;
};
const time: usize = 240 *| @as(usize, @intCast(self.capacity)) / 100;
const power: usize = @as(usize, @intCast(self.capacity)) / 100;
const time: usize = 240 *| power;
return try std.fmt.bufPrint(&ttlbuf.buf, "{}h{}m", .{ time / 60, time % 60 });
}
@@ -87,7 +107,16 @@ pub fn format(self: Battery, comptime fmt: []const u8, _: std.fmt.FormatOptions,
return out.print("{}", .{p});
}
try out.print("Battery ", .{});
if (self.powered) {
if (self.capacity > 98) {
try out.print("Charged ", .{});
} else {
try out.print("Charging ", .{});
}
} else {
try out.print("Battery ", .{});
}
if (self.capacity == 69) return out.print("NICE!", .{});
const time: []u8 = try self.ttl();
var buffer: [30]u8 = [_]u8{' '} ** 30;