开源改变世界

提案:用于 grblHAL 二次输入的 API #80

推推 grbl 2年前 (2023-02-08) 232次浏览
打开
5ocworkshop 开了这个issue 2021 年 11 月 1 日 · 26条评论
打开

提案:用于 grblHAL 二次输入的 API#80

5ocworkshop 开了这个issue 2021 年 11 月 1 日 · 26条评论

评论

提案:用于 grblHAL 二次输入的 API #80

泰耶,

我想通过官方插件向 grblHAL 核心提出正式 API 的想法,该插件定义了可用的功能,应用了所需的限制和安全检查,并定义了可选连接到 grblHAL 的物理接口类型。

Serial an i2c 今天公开并且可能涵盖大多数应用程序。可能在路线图上将 USB 作为硬件层的附加选项也可能是需要考虑的事情,因为这会带来更高的带宽和大量现有的 USB 设备。

由于 grblHAL 具有如此大的灵活性和潜力,在 grbl 的核心用户群和应用程序之外进行创造性开发(和使用)的机会非常重要,这将有助于展示 grblHAL 在可扩展性方面如何超越 grbl 的代际飞跃。

例如,第二个串行接口的可用性以及将其连接到现有键盘插件的简便性和优雅性让我一夜之间想到探索获得 Xbox One BT 控制器,直接通过 Pi 工作。我通过 Windows 上的通用 GCode 发送器在以前的 grbl 系统上使用了它。Xbox 控制器从操纵杆等方面带来更好的启动/停止反馈,我相信 Pi/Linux 方面的支持已经很成熟,但如果在这方面所做的任何工作在很大程度上可重复用于其他类型的控制器,那就太好了.

缩小,正如您在 MPG 工作中所展示的那样,通过与核心握手并确定从任何现有发送者手中接管权限是安全的,辅助接口可以支持(甚至超过?)完整发送者的能力主界面。我和德鲁讨论了一下,他提出了一个重要的观点,即“必须有优先权和仲裁权。” 两者之间。

此外,通过使(可选的)硬件和软件接口更加正式,电路板设计人员可以选择在他们的设计中包含或不包含它们,但是它们可以被提升并且插件工作(在 grblHAL 和远程设备端)可以更容易由更广泛的受众共享和改进,无论他们的 grblHAL 驱动程序如何。

如果您认为它有价值,我很乐意为这项工作做出贡献。

提案:用于 grblHAL 二次输入的 API #80
贡献者

Serial an i2c 今天公开并且可能涵盖大多数应用程序。

不要忘记网络连接 ;-) 我没有将其纳入我们之前的讨论中,但是有一个可以订阅的事件允许在流之间无缝切换。

我和德鲁讨论了一下,他提出了一个重要的观点,即“必须有优先权和仲裁权。” 两者之间。

这就是 MPG 模式切换输入试图实现的目标……

如果您认为它有价值,我很乐意为这项工作做出贡献。

它确实有——硬件接口应该很容易描述,软件接口不一定如此,这取决于它在堆栈中的位置。我来这里是为了支持你,但我自己不会带头——如果你决定继续前进,我和社区肯定会很高兴。

提案:用于 grblHAL 二次输入的 API #80
贡献者

一些驱动程序实现了可选的hal.stream_select API 调用,一个是iMXRT1062驱动程序。这被流实现用来接管完全控制,例如通过连接上的 telnet 流。

内核具有处理 MPG 协议的基本支持(用于通过引脚信号接管控制的指定流)。此代码不被核心使用,但提供给驱动程序/插件使用。

这些是您设想的良好开端吗?也许改善它们之间的交互将是一个好的开始。例如,hal.stream_select如果 MPG 流受控制,实施应该拒绝切换?

提案:用于 grblHAL 二次输入的 API #80

是的,自从我在 IMX 驱动程序中看到它以来,hal.stream_select API 就一直在我的脑海中。我们正在讨论的一件事是如何通过某种信号量结构在不使用外部引脚的情况下启用流选择。这可能很有用,例如,如果您有一个通过蓝牙或 UART 连接的智能吊坠,并且想从吊坠发送宏,但您没有专用的 MPG 模式引脚。

可能核心功能已经到位,我们需要做的就是在驱动程序中实现它,但如果我们能以某种方式想出一种更通用的方法,可以很容易地在所有司机。

提案:用于 grblHAL 二次输入的 API #80
贡献者

乱序命令可以通过grbl.enqueue_gcodeIdle发送,只有在控制器状态为,Jog或时才会被接受Tool change。目前这些没有缓冲。

另一种选择是缓冲来自辅助流的字符,直到接收到行尾字符,然后临时切换活动输入流以从此缓冲区读取。必须小心使用此方法,因为它存在混合来自活动流的输入的风险。
另一个可能更安全的选择是直接发送输入以作为 gcode 或系统命令进行解析。

向驱动程序添加此类功能在我看来不是一个好主意,添加此类功能(如插件)会更简单——更容易维护且更灵活。

顺便说一句,打开/关闭 MPG 模式不需要引脚,它可以通过单个字符命令(最高位设置字符?)或其他任何合适的方式来完成。

提案:用于 grblHAL 二次输入的 API #80
作者

为延迟道歉。当我将项目的外部从常规 Pi 移动到 Pi Zero 时,我遇到了一些问题,这导致我在 USB 驱动程序监狱中呆了几天。令人高兴的是,这个问题已经解决了,我对如何为各种输入设备利用内核事件驱动程序有了很好的理解。我已经将我的项目切换为现在使用它,并使用键盘模块让它与 grblHAL 很好地通信。我希望今天清理它并实现一个配置文件,以便可以轻松调整它以支持其他类型的输入。完成之后,我希望通过使用 XBox One 蓝牙控制器进行试验来检验该理论。我很乐观,这可能会很快走到一起。

在处理此问题时,我将继续考虑界面的注意事项并在此处讨论想法。

提案:用于 grblHAL 二次输入的 API #80
作者
5oc工作坊 评论了 2021 年 11 月 4 日  

我目前的想法是,我可能会以新名称在键盘模块上进行构建,并且当我在 python 代码中构建外部 linux 端的功能时,我将更新这个新模块。我认为 Linux 端的一个模块将能够配置为支持许多不同类型的输入,如红外遥控器、游戏控制器、键盘和可能的触摸屏。

我一直只使用 my_plugin.c 方法,所以为了进行此键盘测试,我暂时删除了我的 RGB 灯插件。我即将把它加回去,但不一定要合并这两个功能。有两个或多个“本地”插件的既定方法吗?或者,如果没有,我怎样才能正式化 RGB 插件并将其移动到它的永久名称下?

提案:用于 grblHAL 二次输入的 API #80
贡献者

有两个或多个“本地”插件的既定方法吗?

不,但我可以添加更多。添加新插件并通过将它们添加到此文件使所有驱动程序都可以使用它们很容易。

或者,如果没有,我怎样才能正式化 RGB 插件并将其移动到它的永久名称下?

这对我来说是一个棘手的问题——我有点犹豫是否要打开闸门并接受新的插件(以及驱动程序),因为这可能意味着我必须接管支持。一种解决方案是接受对​​上面链接的文件的更改,并在插件回购自述文件中添加指向外部存储库的链接。用户必须从提供的链接下载代码并在my_machine.h或编译命令行中添加<plugin>_ENABLE符号以启用它们。 这样做的一个副作用是以这种方式“形式化”的插件可以有很多实现……

你怎么认为?

提案:用于 grblHAL 二次输入的 API #80

我确实认为应该有一种方法可以将插件正式添加到项目(plugins_init.h 似乎是一个合理的地方)以及自述文件中的外部引用。我认为这有点类似于将板添加到各种驱动程序的方式。通过将 repos 保持在外部并强制用户手动添加子模块,我希望能画一条线并将支持负担转移给插件开发人员而不是 GRBLHAL。

提案:用于 grblHAL 二次输入的 API #80
作者

我同意德鲁的观点。我认为 plugins_init.h 和自述文件或存储库的 URL 可以从那里指向用户,并得出一个关键区别,即插件开发人员对这些插件的支持和反馈是适当的。

我不确定这在初始设置期间如何与 my_machine 或类似文件中的启用/列出插件映射。也许需要在此处添加一条注释以表明还有其他第三方插件,这些插件在 plugin_init.h 中有详细说明。

由于它与我目前在 grblhal 端用于 IR 和操纵杆工作的键盘插件相关,我想我应该分叉它并将其重命名为 serialapi 或类似的东西并维护我自己的版本。我的初始更改可能会很好地合并到 keypad.c 中,但最好不要让您将来不得不审查/接受它们。

提案:用于 grblHAL 二次输入的 API #80
贡献者

我不确定这在初始设置期间如何与 my_machine 或类似文件中的启用/列出插件映射。也许需要在此处添加一条注释以表明还有其他第三方插件,这些插件在 plugin_init.h 中有详细说明。

在my_machine.h中添加信息是不行的,所有驱动程序都必须与之保持同步。最好按照我上面的建议在插件回购中添加信息链接。

我将尝试概述如何处理对插件名称(对于 init 函数和启用符号)的请求。第三方插件可能需要“公开”的设置数字和 M 代码也是如此。

提案:用于 grblHAL 二次输入的 API #80
作者
5oc工作坊 评论了 2021 年 11 月 8 日  

在my_machine.h中添加信息是不行的,所有驱动程序都必须与之保持同步。最好按照我上面的建议在插件回购中添加信息链接。

我想我们说的是同一件事。我并不是建议我们将它们添加到那里,只是用一行来提醒他们可能有适用于他们平台的第三方插件,如果是的话,关于它们的任何细节都会在 plugins_init.h 中。否则,用户不一定会期望有额外的插件选项。

提案:用于 grblHAL 二次输入的 API #80
作者

我已经通过 RGB 插件进行了大量清理和重组,因此我可以将其作为 1.0 版本提供。

它的 URL 在这里:https ://github.com/5ocworkshop/grblhal-rgb-plugin/tree/main/rgb

如果您可以将它添加到 plugins_init.h 文件中,那就太好了。

我希望在第二天左右也能准备好串行输入/红外遥控的东西。我从来没有意识到组织和注释所有这些文件需要花费多少时间。哇。

提案:用于 grblHAL 二次输入的 API #80
贡献者
terjeio 评论了 2021 年 11 月 9 日  

我已经添加了一些关于如何向 grblHAL 添加插件的信息。

@5ocworkshop我可以添加它,但我不太确定我喜欢这个名字,rgb 是 IMO 有点非描述性。状态灯好还是状态灯好?

#if STATUS_LIGHT_ENABLE
    extern void status_light_init (void);
    status_light_init();
#endif

编辑:您仍然可以调用 repo rgb-plugin。我有另一个用户想要为类似的东西添加一个插件,可以使用相同的插件名称吗?

提案:用于 grblHAL 二次输入的 API #80
作者
5oc工作坊 评论了 2021 年 11 月 11 日  

是的,我对这个名字感到困惑。我对它或回购协议的名称并不敏感。如果我们要更改名称,我认为将它们对齐是有实际意义的。

让我考虑一下,看看我是否有任何进一步的想法。

为堆栈灯调整插件或为 Neopixel 扩展它应该很容易。颜色设置/灯光控制是从实际逻辑中抽象出来的功能和定义。最后,它只是一组触发辅助输出线的规则。可能有一些地方的东西仍然应该抽象为配置/定义,我仍然需要了解如何通过 $ 命令公开设置。

Drew 要求我将 R/G/B 到辅助线路映射设置为您可以从机器上进行的设置,这样您就可以将其连接起来并根据实际发生的情况更正该映射。他正确地观察到 RGB 灯条往往会改变哪个信号在哪条物理线上,这样会很好。

我还想在 ? 状态行告诉您触发了哪些映​​射的 RGB 引脚,就像您在按钮/探针输入中看到的那样,仅用于故障排除。

我想我已经说服自己写下了这个名字。我唯一的改变是我认为我们应该将其设为复数并使用 STATUS_LIGHTS_ENABLE。今天对 8 种颜色的支持(以及未来可能完整的 Neopixel 光谱)用复数更好地表示。

我昨天刚收到我的新主轴和 VFD,昨晚让它们在工作台上旋转,但我还有更多工作要做。所以我要过几天才能做出改变并重新做回购,但我会把它放在我的近期清单上。我还需要为新主轴的支架铣削一个插入环。

我以为我在周末完成了 serialapi / IR Remote 的东西,但在最终测试中我发现了一个小错误,其中 ALARM 标志的设置在某处被清除。在我“清理”我的代码并将其四处移动以使其成为一个独立的插件之前,这并没有发生,所以我认为这是我所做的。找到解决方案后,我也可以发布它。

我暂时称那个为 serialapi。由于使用串行进行一般 grbl 通信,我对这个名字并不感兴趣。也许我们应该把它倒过来叫它 apiserial?如果您有任何想法,请告诉我。

提案:用于 grblHAL 二次输入的 API #80

最后一个想法 – 我很想从发送器中删除用于打开检查(白色)灯的 MCode,因为我添加了物理按钮控件和红外遥控器的控件。但经过深思熟虑,我意识到并不是每个人都会拥有其中之一或两者,而且我最初只是用代码手动打开它。

我不确定 MCode 是否是正确的方法,它确实不是与加工相关的功能。一旦我们弄清楚 $ 设置,它应该只是一个开/关 $ 设置,然后我们可以潜在地在 IOSender UI 中公开它(如果存在于固件中)?

提案:用于 grblHAL 二次输入的 API #80
贡献者
terjeio 评论了 2021 年 11 月 11 日  

Drew 要求我将 R/G/B 到辅助线路映射设置为您可以从机器上进行的设置,这样您就可以将其连接起来并根据实际发生的情况更正该映射。

这将需要更改核心 – 或者必须使插件特定于驱动程序。我有更长期的计划,使引脚映射在运行时可用,至少对于某些引脚。IMO 不是一件容易的
事……目前只能通过逐个修改辅助引脚映射(由最终用户)来将特定引脚分配给插件。

我唯一的改变是我认为我们应该将其设为复数并使用 STATUS_LIGHTS_ENABLE。

好的,我可以在下一次提交中更改它——到那时不太可能有人开始使用单数版本。

也许我们应该把它倒过来叫它 apiserial?如果您有任何想法,请告诉我。

“serialapi”是另一个我不喜欢的名字——“API”是我编写代码所针对的东西,你的插件也许更好地描述为某种串行协议?您的插件是 HAL 流 API 之上的一层,我猜很多人会认为流是串行的同义词,从而混淆了他们?命名有时让我很头疼……
顺便说一句,我想为插件添加功能以枚举流接口并从 init 函数中声明独占所有权。再一次,我将遇到我们在辅助引脚方面遇到的先到先得的问题——但希望这能得到解决。

我不确定 MCode 是否是正确的方法,它确实不是与加工相关的功能。

我对使用 M 代码没有问题,特别是如果与 Marlin 实现的代码相似。但是如果它们不太可能被用作 G 代码程序的一部分,那么 $-commands 是首选。

一旦我们弄清楚 $ 设置,它应该只是一个开/关 $ 设置

你的意思是-设置存储在非易失性存储器中?
两者都可以从插件中添加,正确定义的设置将显示在输出中的 ioSender 设置 UI 和命令$help commands

提案:用于 grblHAL 二次输入的 API #80
安德鲁马尔斯 评论了 2021 年 11 月 11 日  

我不认为需要更改的是 MCU 引脚分配,而只是在插件中引脚分配可能会有所不同。因此插件可以获取 IOPORTS 0-2,然后可以根据 rgb.c 的第 1012 到 1014 行在运行时重新分配 0 – Red、1 – Green、2 – Blue。此处的索引常量可以替换为存储在 NVS 中的 $variables。我认为这不需要修改核心或驱动程序?

提案:用于 grblHAL 二次输入的 API #80
贡献者

此处的索引常量可以替换为存储在 NVS 中的 $variables。我认为这不需要修改核心或驱动程序?

它没有,但它留下了可从 M62-M65 访问的引脚,这可能是个问题?当前 pin 信息存储在索引列表中,索引用作 pin id – 如果要阻止插件声明的 pin 的 M62-M65 访问,则必须更改此设置。

提案:用于 grblHAL 二次输入的 API #80

命名有时让我很头疼…

是的,尤其是在像这样的多平台、模块化项目中。

我对这个名字没有情感上的依恋,甚至在选择它时我也有过类似的挣扎。我的出发点是,这将是非流媒体的外部应用程序(尽管它们可能是,我们还没有完全定义)可以与核心对话的接口,辅助已经存在的主要接口USB 或以太网。

我可能认为它太狭隘了,因为我迄今为止的用例包括在 Pi Zero 上运行的外部 python 脚本,它实际上位于 HAL2000 板上的 40 针 GPIO 接头上。到目前为止,这些用例是二级或三级的——比如使用红外遥控器(希望还有其他输入设备)来控制机器、打开检查灯等。我还可以设想有人制作一个连接到 Pi 的综合控制面板,就像这个结合了与 grblHAL 本身相关但不需要由 grblHAL 本身控制的各种其他商店功能:https ://forum.onefinitycnc.com/t/information-to-build-you-own-onefinity-companion-control -盒子/2647

从 Pi 开发的角​​度来看,grblHAL 中模块的存在确实公开了一个接口供某人编写,我们希望对其进行标准化。但即使在名称中使用 world serial 也不是最佳选择,因为它很可能是不同平台上的 USB 或以太网。也许附件接口或辅助接口或类似的东西会更合适?

提案:用于 grblHAL 二次输入的 API #80
贡献者

也许附件接口或辅助接口或类似的东西会更合适?

“辅助接口”优于“辅助接口”,因为 grblHAL 中有许多内部接口,所以“辅助”在 IMO 中是模棱两可的——至少对于插件程序员来说是这样?

引脚映射问题可以通过为预定义的辅助引脚添加一个重映射函数和相关的 $ 设置来解决,这些设置只是在数组中移动它们的定义。这必须在插件声明任何引脚之前完成。它可能会解决我目前遇到的输入引脚问题,并非所有引脚都具有中断功能,需要该功能的插件必须声明引脚,直到找到它需要的引脚。最重要的是电路板标签的问题……

提案:用于 grblHAL 二次输入的 API #80

我想让 teensy4.1 的板载 LED 通过闪烁模式显示状态。我知道我可以使用这个建议的模块/库进行一些修改,但我正在考虑在某处直接编码,因为它只是高低的问题。哪个地方最好添加该代码?以及如何链接它?

提案:用于 grblHAL 二次输入的 API #80
贡献者
terjeio 评论了 2021 年 11 月 11 日  

@karoria如果仅供您自己使用,您可以通过my_plugin_init()在代码中添加一个函数来添加它,这将在启动时自动调用,并通过修改函数指针“挂钩”到系统中。这是STM32F411 的“闪烁”示例,它初始化 LED 连接的引脚。这种方法的缺点是这样的插件绑定到特定的 MCU 和板……

包含代码的文件应放在与driver.c相同的目录中,并自动链接。

提案:用于 grblHAL 二次输入的 API #80

非常感谢 Terje!是的,它仅供我个人使用。

提案:用于 grblHAL 二次输入的 API #80
贡献者

我添加了与在插件中声明辅助端口相关的讨论。如果您有意见,请添加。

提案:用于 grblHAL 二次输入的 API #80

附件接口”优于“二级接口”

好的,同意。我将进行调整,使其引用附件接口的概念,并为方便起见调用模块 acc_if。

提案:用于 grblHAL 二次输入的 API #80
贡献者

有关信息:最新版本中添加了用于在插件中声明串行端口的 API。一个例子

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

4人参加
提案:用于 grblHAL 二次输入的 API #80提案:用于 grblHAL 二次输入的 API #80提案:用于 grblHAL 二次输入的 API #80提案:用于 grblHAL 二次输入的 API #80

喜欢 (0)