from pykeyboard import PyKeyboardEvent
import serial

ser = serial.Serial('/dev/ttyUSB0', 115200)

def ready():
    message = "clink"
    ser.write(message.encode())
def stop():
    message = "cstop"
    ser.write(message.encode())
    print("stop")
def reverse():
     message = "crvrs"
     ser.write(message.encode())
     print("RECULE")
def forward():
    message = "cfrwd"
    ser.write(message.encode())
    print("AVANCE")
def right():
    message = "crght"
    ser.write(message.encode())
def left():
    message = "cleft"
    ser.write(message.encode())
def backleft():
     message = "cblft"
     ser.write(message.encode())
def frontleft():
    message = "cflft"
    ser.write(message.encode())
def backright():
    message = "cbrgt"
    ser.write(message.encode())
def frontright():
    message = "cfrgt"
    ser.write(message.encode())

def centcam():
    message = "ccent"
    ser.write(message.encode())
def modretro():
    message = "crmod"
    ser.write(message.encode())
def camup():
     message = "ccamu"
     ser.write(message.encode())
def camdown():
    message = "ccamd"
    ser.write(message.encode())    
def camleft():
    message = "ccaml"
    ser.write(message.encode())
def camright():
    message = "ccamr"
    ser.write(message.encode())

def modauto():
    message = "cauto"
    ser.write(message.encode())

def accelere():
    message = "m"
    ser.write(message.encode())
def ralenti():
    message = "l"
    ser.write(message.encode())

class KeyTest(PyKeyboardEvent):
    
    def tap(self, keycode, character, press):   
        if keycode == 111:#up
            if press == True:
                forward()
            if press == False:
                stop()
        if keycode == 116:#down
            if press == True:
                reverse()
            if press == False:
                stop()
        if keycode == 113:#left
            if press == True:
                left()
            if press == False:
                stop()
        if keycode == 114:#rigt
            if press == True:
                right()
            if press == False:
                stop()
                
        if character == 'z' :#V+
            if press == True:
                camup()
            if press == False:
                stop()
        if character == 'x':#V-
            if press == True:
                camdown()
            if press == False:
                stop()
        if character == 'q':#|<<
            if press == True:
                camleft()
            if press == False:
                stop()
        if character == 'd':#>>|
            if press == True:
                camright()
            if press == False:
                stop()
        if keycode == 179:#premier en haut a gauche du pad
            if press == True:
                modretro()
        if character == 's':#>||
            if press == True:
                centcam()
        if character == 'O': # shift o
            if press == True:
                modauto()

        
        #Show the modifier states if Ctrl+Shift+M is pressed
        #The Shift state is implicit with a capital 'M'
        if press and keycode == 111 and self.modifiers['Alt']:
            reverse()
        if press and self.modifiers['Control'] and keycode == 111:
            if press == True:
               camright()
        if press and character == 'b' and keycode == 111:
            print("stop")
        if press and character == 'V' and self.modifiers['Control']:
            randVert()
        if press and character == 'M' and self.modifiers['Control']:
            modeManuel()
        if press and character == 'A' and self.modifiers['Control']:
            modeAuto()
            
key_tester = KeyTest()
key_tester.start()  # The 'Escape' key should stop the listener