#battery #logitech #g-hub

app elem

罗技电池电量托盘指示器

4个版本

0.1.3 2022年12月29日
0.1.2 2022年12月29日
0.1.1 2022年12月29日
0.1.0 2022年12月29日

#601 in 硬件支持

GPL-3.0-only

36KB
592

elem

罗技电池电量托盘指示器

在系统托盘显示您的无线罗技设备的电池电量。

名称来源于匈牙利语中的“电池”:elem。

用法

crates.io安装

要从crates.io安装,您必须安装Rust

cargo install elem --force

下载预构建的二进制文件

要开始使用elem,请从发布页面下载并执行最新版本的可执行文件:Fuwn/elem/releases/latest

自行构建

要构建elem,您必须在您的系统上安装RustGit

  1. 克隆此仓库:git clone https://github.com/Fuwn/elem.git
  2. 导航到您的本地仓库:cd elem
  3. 构建elem:cargo build elem --release
  4. elem的可执行文件将位于target/release/elem

注意

更新频率

默认情况下,elem每分钟获取一次所选设备的电池电量。考虑到罗技设备在节能方面的表现,这对于大多数人来说应该足够了。

如果您想增加--或减少--更新频率,您可以从命令行启动elem并传递一个以毫秒为单位的值,这将成为您的新更新频率。

$ ./elem 60000  # Updates every 60 seconds (60000ms / 1000ms = 60s)
$ ./elem 1000   # Updates every second (1000ms = 1s)
$ ./elem 120000 # Updates every two minutes (120000ms / 1000ms = 120s)

冻结了吗?

如果elem看起来冻结了,它并没有。它只是等待watchman(电池电量获取器)返回一个值。

解决方案

实际上编写这个项目很有趣。

我必须解决的主要问题是如何仅从数字显示电池电量。我的第一个想法是下载一堆图标并将它们与程序捆绑在一起。很快我就意识到,找到看起来不错的免费图标实际上并不容易。更重要的是,您真的想随身携带100多个图标只是为了显示一个数字吗?我放弃了这个想法,并开始走程序化的路线。我试图找到生成图像的Rust crate,但令人惊讶的是,我找不到。仅仅是数字到文本?还不是。这让我开始解决下一个问题:从数字生成图像。

我的第一个想法,也是最终实现的想法,是从数字生成ASCII艺术。出乎我的意料,我找不到一个可以直接完成这个任务的crate。(顺便说一句;我实际上找到了一个crate,它部分实现了这个功能,但当我找到它的时候,我自己的实现已经完成了。实际上,我更喜欢自己的实现,因为它给了我更多控制最终结果的能力。)使用Patrick Gillespie的文本转ASCII艺术生成器(TAAG),我提取了一些重要的ASCII艺术元素:从零到九的数字;最终,我还需要一个省略号、一个问号和一个笑脸。

使用这些基本元素,我能够编写一组函数来生成我想要的任何数字组合的ASCII艺术。这个功能的好处是它全部都是ASCII字符,这意味着我可以轻松地遍历每一行和每个字符,将其转换为临时的像素艺术。只需几个简单的步骤,我就可以将任何ASCII像素艺术转换为RGBA图像,步骤如下

  1. 找到ASCII艺术的宽度
  2. 去除换行符,使整个ASCII艺术位于一行上
  3. 遍历ASCII艺术中的每个字符,将相应的像素值写入图像缓冲区:对于空像素是 0 0 0 0,而对于填充像素是 255 255 255 255(红、绿、蓝、透明度)。
  4. 将图像缓冲区保存到内存中,并将其用作托盘指示器的图标。:)

很酷,对吧?

将来,我会看看是否可以进一步优化这个过程,但由于主要瓶颈是罗技G HUB API,所以这并不是什么大问题。

许可证

本项目使用GNU通用公共许可证v3.0授权。

依赖项

~20–55MB
~697K SLoC