Arm板上usb接口热敏打印机控制

2023-10-17 08:20

本文主要是介绍Arm板上usb接口热敏打印机控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于没有厂家的驱动,需要自己对usb口进行控制,主要有两种方式:

1.手写驱动,加载设备。2.采用libusb库进行无驱动配置

由于第一种较为麻烦,我采用了第二种。

主要步骤:

1.libusb配置:

  官网下载,安装,发现config有问题,先安装依赖项。

  主要参考:https://www.cnblogs.com/ettie999/p/8142973.html

  

2.测试example里面的listudev.c,可运行代表安装成功

3.Qt开发:

  1.首先需要在.pro文件中添加路径,用来访问libusb的库:

  INCLUDEPATH += /usr/local/include?libusb-1.0

  LIBS += -L"/usr/local/lib" -lusb-1.0

  2.编写代码:

  

   libusb_context *context = NULL;libusb_device_handle *dev_handle = NULL;libusb_device **devs;libusb_device *dev=NULL;int rc = 0;ssize_t count;//*****************Initial *********rc = libusb_init(&context);//   cout << "rc : " << rc << endl;assert(rc==0);//Enable debug
#ifndef NDEBUGlibusb_set_debug(context,LIBUSB_LOG_LEVEL_WARNING);
#endif//Get device listcount = libusb_get_device_list(context,&devs);cout << "count : " << count << endl;assert(count>0);for(ssize_t idx=0;idx<count;idx++){libusb_device *device = devs[idx];libusb_device_descriptor desc = {0};rc = libusb_get_device_descriptor(device,&desc);assert(rc ==0);if((desc.idVendor == 0x0483) && (desc.idProduct == 0x5743)){cout << "get the device " << endl;dev = device;}// printf("Vendor:Device =  %04x:%04x\n",desc.idVendor,desc.idProduct);cout << "Vendor:Device = " << hex << desc.idVendor << "___" << desc.idProduct << endl;}//open usb devicerc = libusb_open(dev,&dev_handle);//dev_handle = libusb_open_device_with_vid_pid(context,0x0483,0x5743);//dev_handle = libusb_open_device_with_vid_pid(context,0x17ef,0x602d);if(dev_handle == NULL){cout << "Cann't Open device" << endl;return;}elsecout << "Open Success " << endl;//  assert(dev_handle != NULL);//set privilige//Write dataunsigned char *data = new unsigned char[0x30];int actual;data[0] = 0x0a;data[1] = 0x1b;data[2] = 0x21;data[3] = 0x00;data[4] = 0x55;data[6] = 0x66;data[7] = 0x23;data[8] = 0x45;data[9] = 0x0d;data[10] = 0x0a;if(libusb_kernel_driver_active(dev_handle,0) == 1){cout << "Kernel_driver_active" << endl;rc = libusb_detach_kernel_driver(dev_handle,0);cout << "detach_kernel_driver __rc: " << rc << endl;assert(rc==0);}rc = libusb_claim_interface(dev_handle,0);cout << "libusb_claim_interface __rc: " << rc << endl;//  assert(rc<0);//  transfer *******libusb_config_descriptor* config_descriptor_in = NULL;libusb_get_config_descriptor(dev,0,&config_descriptor_in);// rc = libusb_control_transfer(dev_handle,0x21,0x09,0x0300,0x00,data+1,0x20,10000);// rc = libusb_bulk_transfer(dev_handle,(64|LIBUSB_ENDPOINT_OUT),data,4,&actual,0);rc = libusb_bulk_transfer(dev_handle,0x02,data,12,&actual,0);//rc = libusb_bulk_transfer(dev_handle,config_descriptor_in->interface->altsetting->endpoint->bEndpointAddress,data,4,&actual,10000);cout << "libusb_bulk_transfer __rc: " << rc << endl;cout << "actual num : " << actual << endl;assert(rc!=0 || actual !=5);rc = libusb_release_interface(dev_handle,0);cout << "libusb_release_interface __rc: " << rc << endl;//assert(rc!=0);cout << "close devices " << endl;//Free device listlibusb_free_device_list(devs,1);libusb_attach_kernel_driver(dev_handle,0);libusb_close(dev_handle);libusb_exit(context);

  用lsusb可查到usb设备的VID和PID,然后通过官网可以查询对应函数的用法,从而实现控制。

  http://libusb.sourceforge.net/api-1.0/libusb_api.html

 

  

 

转载于:https://www.cnblogs.com/Oscar67/p/9185974.html

这篇关于Arm板上usb接口热敏打印机控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/224123

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

Spring如何使用注解@DependsOn控制Bean加载顺序

《Spring如何使用注解@DependsOn控制Bean加载顺序》:本文主要介绍Spring如何使用注解@DependsOn控制Bean加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录1.javascript 前言2. 代码实现总结1. 前言默认情况下,Spring加载Bean的顺

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手