修改CUPS过滤器源码实现Rongta RP326打印前蜂鸣求助
容大RP326打印机蜂鸣功能在树莓派Linux环境下失效求助
我有一台支持ESC/POS的容大(Rongta)RP326打印机,设备底部明确标注了这一点,目前已连接到树莓派4B。
这款热敏收据打印机的制造商没有提供ARM Linux驱动,我找到一个可用的第三方驱动并按照附带的编译说明完成编译,现已投入使用。目前切纸功能正常(因无钱箱未测试钱箱弹出,但打印机属性中可见相关选项,推测功能正常)。
当前遇到的问题是:打印任务开始前的蜂鸣功能无法正常工作,但该打印机在Windows和macOS系统下可正常蜂鸣,说明硬件本身支持此功能。我已找到触发蜂鸣所需的ESC/POS命令,但由于完全不懂C语言,不知道如何正确将该命令转化为驱动过滤器源码中的代码。
相关参考资源:
- 控制打印机行为的过滤器C源码文件:
rastertozj.c - 同型号打印机用户通过ESC/POS命令实现蜂鸣的讨论
- 爱普生ESC/POS蜂鸣命令参考文档
- 容大打印机命令集文档
我先后尝试了两次修改源码:
第一次尝试
添加以下代码:
static void sendBeep(int n, int t) { if (n >= 1 && n <= 9 && t >= 1 && t <= 9) { char beepCommand[] = "\x1B\x42"; beepCommand[2] = n + '0'; // Convert n to ASCII beepCommand[3] = t + '0'; // Convert t to ASCII SendCommand(beepCommand); } }
并在setupJob()函数中调用sendBeep(3, 5);,但未生效。后来发现这是修改蜂鸣音调的命令,来自容大RP80命令集文档。
第二次尝试
添加以下代码:
static void soundBuzzer(int n, int c, int t) { if (n >= 0 && n <= 9 && c >= 1 && c <= 9 && t >= 0 && t <= 9) { // ESC/POS command to sound the buzzer char buzzerCommand[] = "\x1b\x28\x41\x04\x00\x30"; buzzerCommand[6] = n + '0'; // Convert n to ASCII buzzerCommand[7] = c + '0'; // Convert c to ASCII buzzerCommand[8] = t + '0'; // Convert t to ASCII SendCommand(buzzerCommand); } }
并在setupJob()函数中添加调用:
void setupJob() { SendCommand(escInit); if (settings.CashDrawer1 == 1) CashDrawerEject(0,settings.CashDrawer1On,settings.CashDrawer1Off); if (settings.CashDrawer2 == 1) CashDrawerEject(1, settings.CashDrawer2On, settings.CashDrawer2Off); soundBuzzer(4, 3, 1); }
但仍然无法触发蜂鸣。每次修改后,我都会删除/usr/lib/cups/filter目录中的过滤器,重新编译源码并将新过滤器放回该目录,但问题依旧。
我已在该驱动的代码仓库提交Issue,但仓库似乎已无人维护,恳请提供帮助指导我解决此问题🙏
内容的提问来源于stack exchange,提问作者Uriahs Victor
相关产品推荐
相关产品推荐

