有哪位大侠用CH374控制USB打印机成功过? 我枚举打印机已经成功,但要去打印机状态时,每次协议执行成功,但返回的数据都是0,请问是什么原因呢?
根据你的打印协议,去操作你的设备。或者你的你的打印机插在电脑上,用USB分析仪观察电脑对其的操作过程
按照我的理解,如果从接口描述子得到的接口类型是单向口,打印机的状态应该从缺省的0口返回;如果是双向口的话,则从输入口(比如82h)返回。 但在单向口的时候,执行控制传输协议虽然成功了,返回的状态却是00h,而此时并未装纸,所以肯定不正确。 在双向口的时候,我把控制传输协议的函数改了下,允许输入时使用endpoint地址(比如82h),但此时执行不成功。而如果仍用原来的控制传输协议的函数,也是执行成功,但返回的也是00h。 所以觉得有些疑惑。
打印机获取端口状态的控制请求有很多打印机要很长时间才能将打印机的状态报给主机。还有对以例如喷墨的打印机有上传端点的话,基本上墨的状态都是通过上传端点上传给主机。至于你上面所描述的现象,你需要确认你的打印机是否有上传端点。之后才能做你做的实验。并且如果有上传端点,那么上传的数据有特定的数据格式。这个也需要你了解的。
根据Universal Serial Bus Device Class Definition for Printing Devices Version 1.1,取得USB打印机的端口状态有专门的请求码,如下: Label bmRequestType bRequest wValue wIndex wLength Data GET_PORT_STATUS 10100001B 1 Zero Interface 1 BYTE
我想知道的是,如果根据接口描述子得到的接口类型是单向口,用例子程序HostCtrlTransfer374函数,返回的数据就是打印机状态?至于时间,HostCtrlTransfer374函数的SETUP令牌和IN令牌都设置有200ms的超时时间。
按照USB协议来说就应该返回,但是我测试过一款三星的打印机,无论怎么获取端口状态返回的数据都是0X18,所以这个和打印机厂家有很大的关系。实际和CH374芯片没什么关系。只要你发送控制请求,USB打印机一定会返回数据。但是有时候正确的状态返回时间会比较长。
你用BUSHOUND或者USB分析仪,看下你的枚举过程到底对不对,然后再根据你的打印协议操作你的打印机
谢谢5楼和6楼的回答。
关于5楼返回正确地状态时间会比较长,我想请教是一次控制传输协议返回的时间比较长,还是多执行几次控制传输协议返回的结果可能会不同?
我实际上用的是一台USB接口和并口都有的点阵打印机。
多次执行才能返回。因为控制请求发出去之后在几个MS之内必须返回。否则USB传输就认为有问题。
按照沁恒范例程序,执行控制传输时,函数的调用流程如下: HostCtrlTransfer374 -> WaitHostTransact374 -> HostTransact374 在函数HostCtrlTransfer374中,会设置调用WaitHostTransact374时的超时时间,当然函数HostTransact374是很快就返回的。
关于7楼的问题,我想问的是HostCtrlTransfer374函数返回OK后,也不能保证读回的是正确的打印机状态吗?
我这边测试的时候是没有很快返回状态。可能和打印机厂家有关系。