12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 383|回复: 0

”打印服务器 “原理探究,USB驱动开发和验证

[复制链接]

51

主题

51

帖子

112

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
112
发表于 2021-5-8 00:16:17 | 显示全部楼层 |阅读模式
无奈,想不出好的标题,为了和板块贴合,只能又臭又长了

[section .媒介]
前不久财政买了个打印机,然后呢,又不想在本身电脑上进行共享(要求贼高),怕电脑卡。然你呢,把这需求和供应商说了,然后给搞来了一个叫“打印服务器”的神器。
这小东西把USB打印机插上面,不必要给打印服务器装驱动(驱动是安装本身电脑上,这个和平凡的网络打印机一样),就可以大概实现网络打印了。反正我以为很有意思,猜测这东西可能和串口服务器一样,只是单纯转发,而并不必要提供复杂的服务。
(图片已打码,仅做拓扑图展示)
像平凡的打印机共享,基本都是基于肯定的协议的。比如samba协议,就常见的Windows共享协议,创建共享打印机进网上邻人双击安装打印机就可以使用了。还有是http共享打印机,这个是cups可以创建的共享打印机,可以通过一个http的url链接进行打印,而且支持使用代{过}{滤}理服务器。
而9100端口,常见于本身就是网络打印机的打印机,公司里非常常见。支持postscript等脚本,通过9100发送给打印机后,打印机就能打印出来。原理简单,稳固,本钱低廉,有比力多的优势,所以被广泛的使用。
USB打印机转成9100的网络打印机,在Linux上应该是比力容易实现的,由于有一群大神开发了cups这牛物。但如果考虑移植性和轻便,以及乐趣,自然是要本身实现才比力有意思。

[section .正文]
作为一只“栈溢出工程师”,凡事讲究亲力亲为是我们的准则。
对于设计验证和实现,首先考虑验证步伐简单,而且可以大概实现跨平台。首选qt,libusb本身是个C库,提供的是C的头文件,所以选用C/C++写会避免不少贫困。然后qt可以大概实现不同系统上包括UI和网络代码的一致性。
关于libusb,他是一个比力有名的跨平台USB库,这套库支持win、linux、mac os、bsd等操作系统。知名的开源开发环境Arduino就是通过libusb库来实现atmage32u4这种mcu下载步伐的。
但,libusb有分两个主流的版本,一个是libusb-0.1(简写为libusb0,Arduino使用的就是0.1版本的库)还有个是libusb-1.0(Linux2.6之后的版本基本上都只用1.0了,而且包管理器里0.1的devel版本已经不包罗头文件了。mac os x中brew可以安装的是1.0.22版本,freebsd也是提供的1.0版本)。可见1.0版本已是主流,考虑兼容性的话个人发起使用1.0版本。
Windows上移植的libusb,libusb-win32是0.1的,另外还有WinUSB(libusb),来自github官方版本,可以详见https://github.com/libusb/libusb/wiki/Windows,也可以看一下zadig(https://zadig.akeo.ie/)这个软件上面提供的介绍。这软件安装USB驱动非常方便,而且开源了他的核心代码,为作者点赞。

[section .验证]
验证1,先写一个USB版的HelloWorld,由于第一次写USB步伐,先从简单的开始。
列出VID&PID,USB设备的核心应该就是这个了,当一个不明物体插进USB后,首先系统会获取这个VID和PID,而且自动的搜索驱动。VID(idVendor)是重要辨认生产厂商的,PID(idProduct)则是负责辨认产品。
这两个东西在一起组成了,USB的唯一ID,重名的几率非常的低。由于同一家厂商是不会做出PID类似的东西的。


其次必要知道的东西是interface(MI,Muti-Interface?),还有endpoint。下面步伐是列出打印机的interface和endpoint,操作读写USB设备时,必不可少的参数。


验证2,使用 "nc -l -p 9100>文件" 下令把打印机驱动发送给打印机的数据给生存下来。然后实行直接把这个数据给发送到USB端口。



验证3,使用qt创建一个监听9100端口的服务器,将读取到的数据,发送到USB端口。



[section .后续]
后续最想做的就是想用esp32-s2来重新实现这么个功能,虽然esp32的RAM不大,但优化的好的话,应该是能实现打印服务器的。s2版本的话支持IP协议栈和USB OTG(USB HOST和USB DEVICE),可行性还是很高的,而且本钱可能只必要20-30元。
使用MTK的OpenWrt之类的软路由,或者全志的开发板也能实现,但是毕竟价位不低。而且有现成套件,移植意义不是很大。
另外就是这种打印转发在连续打印时会有点小问题,必要实现队列或者缓冲池,然后适的重新对包进行切片。
根据抓包可以看出,PJL下令(我手头这台是HP的打印机,别的打印机可能会使用不同的下令)比力多,有固定的切片长度。但是通过网络发送的话PJL下令是连续的,所以实现对下令的重切片是非常有须要。


[section .感言]
USB真的是很棒的东西呢,记得小时候家里的电脑只有PS2接口和软驱(黄金奔腾PRO 200MHz),还实行过PS2转USB来插入希奇的东西,显然只能使用键盘鼠标。
曾经的美好时光依旧是记忆如新,下次来实行一下PS2接口设备?
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-4-27 03:43 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表