您的位置 : 资讯 > 软件资讯 > .NET 8.0 与硬件设备能碰撞出怎么样的火花

.NET 8.0 与硬件设备能碰撞出怎么样的火花

来源:菜鸟下载 | 更新时间:2025-04-26

前言近期我在社区中表达了想要制作稚晖君的瀚文键盘的意愿,幸运的是,有两位朋友慷慨相助,一位

前言

近期我在社区中表达了想要制作稚晖君的瀚文键盘的意愿,幸运的是,有两位朋友慷慨相助,一位赠送了我电路板,另一位则送来了已经焊接好元件的电路板。既然大家如此大方,我也决定全力投入到这把客制化键盘的制作中。为了节省成本,我特意重新设计了外壳模型,并使用3D打印机打印了整个外壳,这样就省下了八九百元的CNC加工费。

关于键盘的基本介绍这里就不赘述了,它的主要特色在于左侧的扩展模块,配备了墨水屏和手感极佳的旋钮,当然也支持自定义开发,这也是我撰写这篇文章的动机之一,因为我想开发一些功能。以下是效果图:

.NET 8.0 与硬件设备能碰撞出怎么样的火花

技术选型

我查阅了一些社区的键盘资料,发现社区的固件有多个版本。稚晖君原版的固件年代久远,不太好用,而赠送我键盘的那位朋友的版本我觉得很方便,且用户量也很多。因此,我基于这个版本的固件进行dotnet版本的SDK开发。目前,社区还有其他版本的SDK,包括Python版本和Vue版本,我可以参考这些进行开发。

1、框架选择

作为一名.Net开发者,我自然希望使用.Net进行开发。理由是这个键盘主要用于PC上,使用.Net实现SDK可以与WPF、MAUI和WinUI无缝对接,完成很多任务型功能。我选择了最新的.Net8版本,在SDK测试编写完成后,将其集成到我之前的WinUI桌面程序中。大家可能会问,为什么不选择MAUI?因为我暂时不想花时间重新编写,但SDK是支持跨平台的,这点问题不大。

2、设备通讯协议

键盘使用的固件是基于开源的ZMK代码编写的,设备在电脑上被识别为HID设备,通讯格式采用Protobuf协议。因此,对于.Net也需要使用Protobuf来进行数据打包。这部分花费了我一些时间,主要是有些地方不太理解,坑主要是在将数据转换成字节数组时遇到的问题,这点在后面的代码讲解中会有详细说明。

设备固件地址:https://www.php.cn/link/729bea7aa9914689ae2a70fe8bb5cf27

Python SDK: https://www.php.cn/link/14d010488fdb86b7b84ad331943cbb35

3、库选择

我原本以为.Net可以使用的HID库有很多,但经过一番测试后发现,HidApi.Net的表现还算不错,其他如Device.Net和HidLibrary则不太满意。最终,我选择了HidApi.Net来与设备通讯,使用Google.Protobuf和Grpc.Tools处理通讯数据,使用SixLabors.ImageSharp进行图片数据转换。

HidApi.Net

Google.Protobuf

Grpc.Tools

SixLabors.ImageSharp

最终效果如下图所示:

.NET 8.0 与硬件设备能碰撞出怎么样的火花

代码讲解

我这次将项目代码提交到了电子脑壳的仓库,因为我要将功能集成到电子脑壳中,所以放在了这个仓库的helloworld-keyboard分支,未来可能会合并到主分支。

仓库地址:https://www.php.cn/link/7048c496a6cf49699109089b743c2bf6

.NET 8.0 与硬件设备能碰撞出怎么样的火花

通讯协议实现

通讯的核心部分是Hw75DynamicDevice的Call方法,它包含了将protobuf生成的C#对象转换成字节数组并拆分成数据包发送到设备。

代码语言:javascript

代码运行次数:0

private MessageD2H Call(MessageH2D h2d) {    if (_device == null) {        throw new Exception("设备为空");    }    var bytes = h2d.EnCodeProtoMessage();    for (int i = 0; i < bytes.Length; i += PayloadSize) {        byte[] buf;        if (i + PayloadSize > bytes.Length) {            buf = bytes[i..];        } else {            buf = bytes[i..(i + PayloadSize)];        }        var list = new byte[2] { 1, (byte)buf.Length };        var result = list.Concat(buf).ToArray();        _device.Write(result);    }    Task.Delay(20);    var byteList = new List();    while (true) {        var read = _device.Read(RePortCount + 1);        int cnt = read[1];        byteList.AddRange(read[3..(cnt + 2)]);        if (cnt < PayloadSize) {            break;        }    }    var resultMessage = new MessageD2H();    resultMessage.MergeFrom(byteList.ToArray());    return resultMessage;}
登录后复制

菜鸟下载发布此文仅为传递信息,不代表菜鸟下载认同其观点或证实其描述。

展开
跟我玩连萌GoetiaX测试服
跟我玩连萌GoetiaX测试服
类型:动作闯关 运营状态:公测 语言:简体中文
二次元 战斗
前往下载

相关文章

更多>>

热门游戏

更多>>

手机扫描此二维码,

在手机上查看此页面

关于本站 下载帮助 版权声明 网站地图

版权投诉请发邮件到 cn486com#outlook.com (把#改成@),我们会尽快处理

Copyright © 2019-2020 菜鸟下载(www.cn486.com).All Reserved | 备案号:湘ICP备2023003002号-8

本站资源均收集整理于互联网,其著作权归原作者所有,如有侵犯你的版权,请来信告知,我们将及时下架删除相应资源