mirror of
https://github.com/dbisu/pico-ducky
synced 2024-10-18 11:52:20 +00:00
83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
|
# License : GPLv2.0
|
||
|
# copyright (c) 2023 Dave Bailey
|
||
|
# Author: Dave Bailey (dbisu, @daveisu)
|
||
|
# Pico and Pico W board support
|
||
|
|
||
|
|
||
|
import supervisor
|
||
|
|
||
|
|
||
|
import time
|
||
|
import digitalio
|
||
|
from board import *
|
||
|
import board
|
||
|
from duckyinpython import *
|
||
|
if(board.board_id == 'raspberry_pi_pico_w'):
|
||
|
import wifi
|
||
|
from webapp import *
|
||
|
|
||
|
|
||
|
# sleep at the start to allow the device to be recognized by the host computer
|
||
|
time.sleep(.5)
|
||
|
|
||
|
def startWiFi():
|
||
|
import ipaddress
|
||
|
# Get wifi details and more from a secrets.py file
|
||
|
try:
|
||
|
from secrets import secrets
|
||
|
except ImportError:
|
||
|
print("WiFi secrets are kept in secrets.py, please add them there!")
|
||
|
raise
|
||
|
|
||
|
print("Connect wifi")
|
||
|
#wifi.radio.connect(secrets['ssid'],secrets['password'])
|
||
|
wifi.radio.start_ap(secrets['ssid'],secrets['password'])
|
||
|
|
||
|
HOST = repr(wifi.radio.ipv4_address_ap)
|
||
|
PORT = 80 # Port to listen on
|
||
|
print(HOST,PORT)
|
||
|
|
||
|
# turn off automatically reloading when files are written to the pico
|
||
|
#supervisor.disable_autoreload()
|
||
|
supervisor.runtime.autoreload = False
|
||
|
|
||
|
if(board.board_id == 'raspberry_pi_pico'):
|
||
|
led = pwmio.PWMOut(board.LED, frequency=5000, duty_cycle=0)
|
||
|
elif(board.board_id == 'raspberry_pi_pico_w'):
|
||
|
led = digitalio.DigitalInOut(board.LED)
|
||
|
led.switch_to_output()
|
||
|
|
||
|
|
||
|
progStatus = False
|
||
|
progStatus = getProgrammingStatus()
|
||
|
print("progStatus", progStatus)
|
||
|
if(progStatus == False):
|
||
|
print("Finding payload")
|
||
|
# not in setup mode, inject the payload
|
||
|
payload = selectPayload()
|
||
|
print("Running ", payload)
|
||
|
runScript(payload)
|
||
|
|
||
|
print("Done")
|
||
|
else:
|
||
|
print("Update your payload")
|
||
|
|
||
|
led_state = False
|
||
|
|
||
|
async def main_loop():
|
||
|
global led,button1
|
||
|
|
||
|
button_task = asyncio.create_task(monitor_buttons(button1))
|
||
|
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)
|
||
|
else:
|
||
|
pico_led_task = asyncio.create_task(blink_pico_led(led))
|
||
|
await asyncio.gather(pico_led_task, button_task)
|
||
|
|
||
|
asyncio.run(main_loop())
|