You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:22:45