Опрос USB-событий мыши - PullRequest
0 голосов
/ 31 января 2019

Мне нужно опрашивать движение USB-мыши и запускать код только во время движения мыши.

Во-первых, я научился Python примерно за 5 дней, поэтому извиняюсь за плохое кодирование.Во-вторых, я использую PyUSB на Raspberry Pi, работающем под управлением Stretch.

Я написал некоторый код Python, который позволяет мне соединять USB-мышь со старым разъемом последовательного типа, как для старого коммодора (за исключением другоготип протокола).Код работает и выводит в GPIO, как мне это тоже нужно, однако массив данных содержит свое последнее значение, поэтому мой код видит это как движение, поэтому мышь никогда не остается на экране.Я попытался обнулить массив (перезаписывается на следующей итерации), попытался сохранить данные в конце цикла и сравнить два массива, но не могу заставить это работать.

Как мне сделать кодобновлять только когда мышь движется?Можно ли как-то опрашивать движение мыши?

#Start USB Data Collection
while 1:
    try:
        data = dev.read(endpoint.bEndpointAddress,endpoint.wMaxPacketSize)
        #Extract data we need from array

        B = data[0]                 # Button Data
        X = data[1]                 # X Data
        Y = data[2]                 # Y Data
        S = data[3]                 # Scroll Wheel

        IO.output(dataPinBL, 1)     #Set Mouse Buttons to HIGH
        IO.output(dataPinBR, 1)     #Set Mouse Buttons to HIGH
        IO.output(dataPinST, 1)     #Turn on Status LED
##        print('START')

        #Debugging only
        print (data)               #Testing Only- Uncomment to see outputs

        if Y == 0:
            uFreq=0
            dFreq=0
            YD.ChangeDutyCycle(dFreq)
            YU.ChangeDutyCycle(uFreq)
            print("Y Zero") 

       if X == 0:
           rFreq=0
           lFreq=0
           XL.ChangeDutyCycle(lFreq)
           XR.ChangeDutyCycle(rFreq)
           print("X Zero")

    #X Movement
    if X >> 0:
        if X <= 127:
            rFreq=((X/127.0)*100.0)
            XR.ChangeDutyCycle(rFreq)
            print(X, "RIGHT",data) #Testing Only



        elif X >= 128:
            lFreq= 200-0.78*X
            XL.ChangeDutyCycle(lFreq)
            print("LEFT",data)     #Testing Only



    #Y Movement   
        if Y >> 0:
            if Y <= 127:
                dFreq=((Y/127.0)*100.0)
                YD.ChangeDutyCycle(dFreq)
              ##print("DOWN",dFreq)     #Testing Only



        elif Y >=128:
            uFreq= 200-0.78*Y
            YU.ChangeDutyCycle(uFreq)
            print("UP",uFreq)       #Testing Only


    Y=0
    X=0

    #Button Presses   
    if B == 1:
        IO.output(dataPinBL , 0)
        print("LEFT CLICK")         #Testing Only
        sleep(0.0)

    elif B == 2:
        IO.output(dataPinBR, 0)
        print("RIGHT CLICK")        #Testing Only
        sleep(0.0)

except usb.core.USBError as e:
    data = None
    if e.args == ('Operation timed out',):
        print ('Time Out')
    continue
    break

#End USB Data Collection      
#release Mouse back to OS

Я ожидаю, что массив (или, по крайней мере, выходные данные) останется равным 0, пока мышь не будет перемещена, но не могу понять, как этого добиться.

...