diff --git a/upy.py b/upy.py index 3b0365fc1e54d86e89cadc70a3785a0c47dcd547..113499a903856ae6755de3fd08d5518ba1577304 100755 --- a/upy.py +++ b/upy.py @@ -20,18 +20,19 @@ # warranty is provided, and users accept all liability. # -char_delay = 0.0001 +char_delay = 0.001 +cmd_delay = 0.1 import sys,serial,time if (len(sys.argv) < 3): print("upy.py port command [arguments]") sys.exit() s = serial.Serial(sys.argv[1]) +s.write(b'\x04') # ^d reset s.write(b'\r\n\x03\r\n') # ^c break s.write(b'\x01') # ^a enter raw mode while (s.in_waiting > 0): # clear buffer s.read() if (sys.argv[2] == 'run'): - s.write(b'\x03') # ^c interrupt file = open(sys.argv[3],'r') str = file.read() file.close() @@ -42,51 +43,55 @@ if (sys.argv[2] == 'run'): while (True): # show output sys.stdout.write(s.read().decode('utf-8')) elif (sys.argv[2] == 'ls'): - s.write(b'\x03') # ^c interrupt s.write(b'import os\n') s.write(b'files = os.listdir()\n') s.write(b'print("")\n') s.write(b'for i in files:\n') s.write(b' print(i)\n') s.write(b'\x04') # ^d exit raw mode and execute - time.sleep(0.1) + time.sleep(cmd_delay) while (s.in_waiting > 0): # show output sys.stdout.write(s.read().decode('utf-8')) print('') elif (sys.argv[2] == 'put'): - s.write(b'\x03') # ^c interrupt file = open(sys.argv[3],'r') str = file.read() file.close() - s.write(bytes(f'str = """{str}"""\n','ascii')) if (len(sys.argv) == 4): s.write(bytes(f'file = open("{sys.argv[3]}","w")\n','ascii')) elif (len(sys.argv) == 5): s.write(bytes(f'file = open("{sys.argv[4]}","w")\n','ascii')) - s.write(b'file.write(str)\n') + s.write(bytes(f'file.write("""','ascii')) + for i in range(len(str)): + c = str[i] + s.write(bytes(f'{c}','ascii')) + if (c == '\\'): + s.write(b'\\') + time.sleep(char_delay) + s.write(bytes(f'""")\n','ascii')) s.write(b'file.close()\n') - s.write(b'del str\n') s.write(b'\x04') # ^d exit raw mode and execute - time.sleep(0.1) + time.sleep(cmd_delay) while (s.in_waiting > 0): # show output and quit sys.stdout.write(s.read().decode('utf-8')) print('') elif (sys.argv[2] == 'get'): - s.write(b'\x03') # ^c interrupt s.write(bytes(f'file = open("{sys.argv[3]}","r")\n','ascii')) - s.write(b'print(file.read())\n') + s.write(b'while (True):\n') + s.write(b' ret = file.read(1)\n') + s.write(b' if (ret != ""):\n') + s.write(b' print(ret,end="")\n') + s.write(b' else:\n') + s.write(b' break\n') s.write(b'file.close()\n') s.write(b'\x04') # ^d exit raw mode and execute - time.sleep(0.1) - while (s.in_waiting > 0): # show output and quit - sys.stdout.write(s.read().decode('utf-8')) - print('') + time.sleep(cmd_delay) + while (True): + sys.stdout.write(s.read().decode('ascii')) elif (sys.argv[2] == 'rm'): - s.write(b'\x03') # ^c interrupt s.write(b'import os\n') s.write(bytes(f'os.remove("{sys.argv[3]}")\n','ascii')) s.write(b'\x04') # ^d exit raw mode and execute - time.sleep(0.1) + time.sleep(cmd_delay) while (s.in_waiting > 0): # show output and quit sys.stdout.write(s.read().decode('utf-8')) - print('')