首页 > 解决方案 > pyUSB - 延迟发送到设备?

问题描述

我有一台 ESC 打印机。我制作了一个简单的脚本来向设备发送数据,但是在更改脚本的内容后 - 打印了 1x 以前版本的字幕,然后,当再次调用时,当前版本。好像来自 USB 的数据被缓存在某个地方。我怎样才能做一些冲洗?

test.py

usb_= Connector(showUsbDevices=False)
usb_.send(b'I LOVE YOU')

连接器:

class Connector:
    def __init__(self, idVendor=0x0123, idProduct=0x1234, showUsbDevices=False):
        self.idVendor = idVendor
        self.idProduct = idProduct
        if showUsbDevices:
            pass
        self.device  = self.FindAndConnect()
        if self.device is not None:  

            #if self.device.is_kernel_driver_active(0):
                #self.device.detach_kernel_driver(0)
                #self.device.detach_kernel_driver(1)
            self.device.reset()
            self.device.set_configuration()

            self.cfg = self.device.get_active_configuration()

            data_itfs = list(usb.util.find_descriptor(self.cfg, find_all=True,custom_match=lambda e: (e.bInterfaceClass == 0xA)))
            intf = data_itfs[0]
            self.device.set_interface_altsetting(intf)
            itf_num = intf.bInterfaceNumber

            print ("inf descriptor:===============", intf)
            print("numer:===============",itf_num)
            self.messageOut = usb.util.find_descriptor(intf, custom_match=lambda e: not (e.bEndpointAddress & 0x80))

            self.messageIn = usb.util.find_descriptor(intf, custom_match=lambda e: (e.bEndpointAddress & 0x80))
            #print(">>>>>>>>>>>>>>>>>>>Message Out",self.messageOut)
            #print(">>>>>>>>>>>>>>>>>>>Message In",self.messageIn)
            #print(repr(self.cfg))

    def __del__(self):
        if self.device is not None:
            usb.util.dispose_resources(self.device)

    def send(self, data):
        #print ("endpoint_out",self.messageOut)
        if self.device is not None:
            print(data.decode("IBM852"))
            self.messageOut.write(data)
            #self.device.write(1,data,100)
            #dane = self.messageIn.read(300)
            #print("IN|->",dane)


    def FindAndConnect(self):
        device=usb.core.find(idVendor=self.idVendor, idProduct=self.idProduct)
        if device is None:
            raise ValueError('Not found idVendor 0x%04x i idProduct 0x%04x' % (self.idVendor,self.idProduct))  
        print('Printer found idVendor 0x%04x i idProduct 0x%04x.... ' %(self.idVendor,self.idProduct))
        return device

所以当我运行一个说我爱你的测试脚本时

我爱你

当我将题词更改为 I HATE YOU 并运行脚本时,会打印另一个副本 I LOVE YOU,只有下一次启动时才会给出:I HATE YOU

它是什么?错误在哪里?

标签: bufferdelayflushpyusb

解决方案


我找到了!它: self.device.reset() 在终结器中:

def __del__(self):
        if self.device is not None:
        self.device.reset()  ############### <<<< THIS IS THE KEY>>>> (added to all code)
        usb.util.dispose_resources(self.device)

推荐阅读