diff --git a/code.py b/code.py index 3d47f85..108ee8a 100644 --- a/code.py +++ b/code.py @@ -11,6 +11,7 @@ import time import digitalio from board import * import board +import duckyinpython from duckyinpython import * if(board.board_id == 'raspberry_pi_pico_w'): import wifi @@ -56,7 +57,8 @@ if(progStatus == False): # not in setup mode, inject the payload payload = selectPayload() print("Running ", payload) - runScript(payload) + #runScript(payload) + duckyinpython.fileToRun = payload print("Done") else: @@ -68,15 +70,16 @@ async def main_loop(): global led,button1 button_task = asyncio.create_task(monitor_buttons(button1)) + script_task = asyncio.create_task(runScriptTask()) if(board.board_id == 'raspberry_pi_pico_w'): pico_led_task = asyncio.create_task(blink_pico_w_led(led)) print("Starting Wifi") startWiFi() print("Starting Web Service") webservice_task = asyncio.create_task(startWebService()) - await asyncio.gather(pico_led_task, button_task, webservice_task) + await asyncio.gather(pico_led_task, button_task, webservice_task, script_task) else: pico_led_task = asyncio.create_task(blink_pico_led(led)) - await asyncio.gather(pico_led_task, button_task) + await asyncio.gather(pico_led_task, button_task, script_task) asyncio.run(main_loop()) diff --git a/duckyinpython.py b/duckyinpython.py index a0a6087..30ce5cb 100644 --- a/duckyinpython.py +++ b/duckyinpython.py @@ -80,8 +80,8 @@ def parseLine(line): if(line[0:3] == "REM"): # ignore ducky script comments pass - elif(line[0:5] == "DELAY"): - time.sleep(float(line[6:])/1000) + #elif(line[0:5] == "DELAY"): + # time.sleep(float(line[6:])/1000) elif(line[0:6] == "STRING"): sendString(line[7:]) elif(line[0:5] == "PRINT"): @@ -133,26 +133,44 @@ def getProgrammingStatus(): defaultDelay = 0 -def runScript(file): - global defaultDelay +async def runScriptTask(): + global defaultDelay, fileToRun + print("starting runScript") + while True: + #print("Checking for file", fileToRun) + if fileToRun is not None: + duckyScriptPath = fileToRun + print("starting",duckyScriptPath) + with open(duckyScriptPath,"r",encoding='utf-8') as f: - duckyScriptPath = file - try: - f = open(duckyScriptPath,"r",encoding='utf-8') - previousLine = "" - for line in f: - line = line.rstrip() - if(line[0:6] == "REPEAT"): - for i in range(int(line[7:])): - #repeat the last command - parseLine(previousLine) - time.sleep(float(defaultDelay)/1000) - else: - parseLine(line) - previousLine = line - time.sleep(float(defaultDelay)/1000) - except OSError as e: - print("Unable to open file ", file) + previousLine = "" + for line in f: + line = line.rstrip() + if(line[0:6] == "REPEAT"): + for i in range(int(line[7:])): + #repeat the last command + parseLine(previousLine) + await asyncio.sleep_ms(defaultDelay) + elif(line[0:5] == "DELAY"): + delay = int(line[6:]) + #print("sleeping for ",delay) + #print(type(delay)) + await asyncio.sleep_ms(delay) + previousLine = line + else: + #print("parsing line", line) + parseLine(line) + previousLine = line + #print("sleeping",defaultDelay) + await asyncio.sleep_ms(defaultDelay) + #print("done sleeping") + + print("ending",duckyScriptPath) + + fileToRun = None + await asyncio.sleep(1) + + print("ending runScript") def selectPayload(): global payload1Pin, payload2Pin, payload3Pin, payload4Pin @@ -234,7 +252,7 @@ async def blink_pico_w_led(led): await asyncio.sleep(0.5) async def monitor_buttons(button1): - global inBlinkeyMode, inMenu, enableRandomBeep, enableSirenMode,pixel + global inBlinkeyMode, inMenu, enableRandomBeep, enableSirenMode,pixel, fileToRun print("starting monitor_buttons") button1Down = False while True: @@ -257,7 +275,8 @@ async def monitor_buttons(button1): # Run selected payload payload = selectPayload() print("Running ", payload) - runScript(payload) + #runScript(payload) + fileToRun = payload print("Done") button1Down = False diff --git a/webapp.py b/webapp.py index a87c78a..479a736 100644 --- a/webapp.py +++ b/webapp.py @@ -12,6 +12,7 @@ import wsgiserver as server from adafruit_wsgi.wsgi_app import WSGIApp import wifi +import duckyinpython from duckyinpython import * payload_html = """ @@ -209,7 +210,8 @@ def run_script(request, filename): print("run_script ", filename) response = response_html.format("Running script " + filename) #print(response) - runScript(filename) + #runScript(filename) + duckyinpython.fileToRun = filename return("200 OK",[('Content-Type', 'text/html')], response) @web_app.route("/") @@ -223,7 +225,8 @@ def run_script(request, filenumber): print("run_script ", filenumber) response = response_html.format("Running script " + filename) #print(response) - runScript(filename) + #runScript(filename) + duckyinpython.fileToRun = filename return("200 OK",[('Content-Type', 'text/html')], response) async def startWebService(): @@ -240,4 +243,4 @@ async def startWebService(): wsgiServer.start() while True: wsgiServer.update_poll() - await asyncio.sleep(0) \ No newline at end of file + await asyncio.sleep(0)