如何通过libusb直接向zebra打印机发送zpl,跨平台win/linux

环境:windows & linux & Zebra打印机gt820

windows:

        之前安装了Zebra打印机官方驱动,所以先卸载掉驱动。再安装Zadig,用Zadig工具来安装WinUSB驱动。

zadig下载:Zadig - USB driver installation made easy

记住这两个数据:vendorId:0A5F productId :00C1 。这是打印机的供应商ID,和产品ID,程序中要用到。

Linux:ubuntu22.04 x86_64已经内置usbfs,直接下载libusb库:libusb - Browse /libusb-1.0/libusb-1.0.27 at SourceForge.net

解压后安装

./configure --prefix=/home/a/libusb-1.0.27/build
make -j 4
sudo make install

linux查看vendorid productId命令:lsusb

将头文件和库加到项目中。

测试代码:

void testPrintZplDirectUsb()
{libusb_context* ctx = NULL;libusb_device** devs;libusb_device_handle* dev_handle = NULL;ssize_t cnt;//int i;// 初始化libusb库if (libusb_init(&ctx) < 0) {printf("初始化失败\n");return;}// 枚举设备cnt = libusb_get_device_list(ctx, &devs);if (cnt < 0) {printf("枚举设备失败\n");return ;}printf("%d个设备找到\n", cnt);libusb_device* dev;int i = 0, j = 0;uint8_t path[8];while ((dev = devs[i++]) != NULL) {struct libusb_device_descriptor desc;int r = libusb_get_device_descriptor(dev, &desc);if (r < 0) {fprintf(stderr, "failed to get device descriptor");continue;}printf("%04x:%04x (bus %d, device %d)",desc.idVendor, desc.idProduct,libusb_get_bus_number(dev), libusb_get_device_address(dev));r = libusb_get_port_numbers(dev, path, sizeof(path));if (r > 0) {printf(" path: %d", path[0]);for (j = 1; j < r; j++)printf(".%d", path[j]);}printf("\n");if (desc.idVendor == 0x0a5f && desc.idProduct == 0x00c1){获取handle方式一://dev_handle = libusb_open_device_with_vid_pid(ctx, desc.idVendor, desc.idProduct);			//if (dev_handle != NULL) {//	int ok = libusb_claim_interface(dev_handle, 0);//	unsigned char data[] = "^XA^FO200,20^BY3^BCN,100,Y,N,N^FDDAe123456^FS^XZ";//	int dataSize = sizeof(data)/*+1*/;//	int actrueLeng = 0;//	int transferedBytes = libusb_bulk_transfer(dev_handle, 0x01, data, dataSize, &actrueLeng, 0);//	//	//int transferedBytes = libusb_bulk_transfer(dev_handle, 0x01, data, dataSize, &actrueLeng, 1000);//	if (transferedBytes < 0)//		printf("写入数据失败\n");//	else//		printf("写入%d字节数据成功\n", actrueLeng);//	libusb_close(dev_handle);//}//获取handle方式二:推荐int udev = libusb_open(dev, &dev_handle);if (LIBUSB_SUCCESS == udev && dev_handle){//show device name char buffer[256] = { 0 };//libusb_get_string_descriptor(dev_handle, desc.iProduct, 1, (unsigned char*)buffer, sizeof(buffer));int iRetTemp = libusb_get_string_descriptor_ascii(dev_handle, desc.iProduct, (unsigned char*)buffer, sizeof(buffer));if (iRetTemp > 0){printf("device name:%s\n", buffer);}char* sb = "^XA^FO10,20^BY3^BCN,100,Y,N,N^FDDAe123456^FS^XZ";//char* sb = "^XA^FX Third section with bar code.^BY5,2,200^FO50,50^BC^FD12345678^FS^XZ";int ok = libusb_claim_interface(dev_handle, 0);printf("%d\n", ok);int actrueLeng = 0;ok = libusb_bulk_transfer(dev_handle, 0x01, (unsigned char*)sb, 50, &actrueLeng, 1000);printf("%d\n", ok);libusb_close(dev_handle);}}}libusb_free_device_list(devs, 1);libusb_exit(/*NULL*/ctx);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537849.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#制作软件时窗体的弹出与嵌入

文章目录 一、窗体的弹出二、窗体的嵌入 一、窗体的弹出 这里面我们以Windows窗体应用程序为例&#xff0c;这里面达到的效果如下&#xff1a; 点击指定按钮&#xff0c;弹出目标窗口。接下来我们看具体操作&#xff1a; 这是我们的主窗体&#xff1a; 接下来我们需要在这个…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解

学习视频&#xff1a;Faster-RCNN理论合集 概念辨析 在目标检测中&#xff0c;proposals和anchors都是用于生成候选区域的概念&#xff0c;但它们在实现上有些许不同。 Anchors&#xff08;锚框&#xff09;&#xff1a; 锚框是在图像中预定义的一组框&#xff0c;它们通常以…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

《系统架构设计师教程(第2版)》第6章-据库设计基础知识-03-关系数据库设计

文章目录 0. 设计的基本步骤0.1 用户需求分析0.2 概念结构设计0.3 逻辑结构设计0.4 物理结构设计0.5 数据库实施阶段0.6 数据库运行和维护阶段 1. 数据需求分析1.1 概述1.2 需要获取的需求 2. 概念结构设计2.1 概述2.2 E-R方法2.3 概念结构设计工作步骤2.3.1 选择局部应用2.3.2…

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型&#xff0c;并且具有幻想和创意色彩。 作者述&#xff1a;我选取了…

阿里云-云服务器ECS新手如何建网站?

租阿里云服务器一年要多少钱&#xff1f; 不同类型的服务器有不同的价格。 以ECS计算型c5为例&#xff1a;2核4G-1年518.40元&#xff0c;4核8G-1年948.00元。 阿里云ECS云服务器租赁价格由三部分组成&#xff1a; 也就是说&#xff0c;云服务器配置成本磁盘价格网络宽带价格…

MBT-Net

feature F&#xff0c;edge feature E-F where r related to the relative position 辅助信息 作者未提供代码

STC89C52单片机 启动!!!(一)

跑马灯实现 直接上代码 #include<regx52.h> sbit D1P2^0; sbit D2P2^1; sbit D3P2^2; sbit D4P2^3; sbit D5P2^4; sbit D6P2^5; sbit D7P2^6; sbit D8P2^7; void delay(int num){while(num--){} } void led_running(){//从第1盏灯到第8盏灯依次点亮D10;delay(40000);D2…

Github主页设置贪吃蛇详细教程

先看最终实现结果&#xff1a; 有条贪吃蛇放在主页还是蛮酷的哈哈哈。接下来我来讲一讲怎么在Github主页添加一条贪吃蛇。 首先要修改自己的Github的主页&#xff0c;我们得有一个特殊的仓库——这个仓库必须与你的Github用户名保持一致&#xff0c;并且需要公开&#xff0c…

Database Connection Pool 数据库连接池-01-概览

拓展阅读 第一节 从零开始手写 mybatis&#xff08;一&#xff09;MVP 版本。 第二节 从零开始手写 mybatis&#xff08;二&#xff09;mybatis interceptor 插件机制详解 第三节 从零开始手写 mybatis&#xff08;三&#xff09;jdbc pool 从零实现数据库连接池 第四节 从…

QT c++ 双精度数拆分和组合 Tool

本文描述QT c的双精度数拆分和合并&#xff0c;即双精度浮点数拆为四个16位无符号整数以及将四个16位无符号整数组合为双精度浮点数。 开发平台&#xff1a;win10QT6.2.4 MSVC2019 64 bit 在本文的最好列出了代码和可执行文件打包下载链接&#xff08;可直接使用&#xff09;…

国创证券|炒股有哪八不碰?

炒股存在以下八不碰&#xff1a; 1、散户多的个股不碰 散户较多&#xff0c;则阐明市场上的散户在不断地买入该股&#xff0c;主力在不断地卖出该股&#xff0c;筹码逐步从主力的手中流入散户的手中&#xff0c;这会引起市场上的投资者惊惧&#xff0c;大量地抛出手中的股票&…