Skip to content

Instantly share code, notes, and snippets.

@cyyself
Created April 16, 2026 05:14
Show Gist options
  • Select an option

  • Save cyyself/0fd2bcea11ffc4038a7bbef4e8ad8a11 to your computer and use it in GitHub Desktop.

Select an option

Save cyyself/0fd2bcea11ffc4038a7bbef4e8ad8a11 to your computer and use it in GitHub Desktop.
from pych9329 import HIDController, SerialTransport, CH9329
import time
PASSWORD = "123456"
def xiaomi_devmode(controller):
# assume it's already in settings
# press arrow down 3x to enter my device menu
for i in range(3):
controller.press("down")
controller.press("enter")
# press arrow down 4x to select os version
for i in range(4):
controller.press("down")
for i in range(7):
controller.press("enter")
# enter password
time.sleep(0.2)
controller.write(PASSWORD) # password
controller.press("enter")
# now return to settings menu
def xiaomi_adb(controller):
# press arrow down to additional settings
for i in range(24):
controller.press("down")
controller.press("enter")
# press arrow down to developer options
for i in range(18):
controller.press("down")
controller.press("enter")
for i in range(18):
controller.press("down")
controller.press("enter")
# press arrow down to usb debugging
def enter_password(controller):
controller.write(PASSWORD) # password
time.sleep(0.4)
def oneplus_devmode(controller):
# press arrow down to about phone
for i in range(17): # about phone
controller.press("down")
controller.press("enter")
time.sleep(0.1)
for i in range(7):
controller.press("down")
controller.press("enter")
time.sleep(0.1)
for i in range(10):
controller.press("enter")
time.sleep(0.1)
controller.write(PASSWORD) # password
# assume in the devmode menu, you should restart to return to settings menu then run oneplus_adb
def oneplus_adb(controller):
# press arrow down to developer options
for i in range(16): # system and updates
controller.press("down")
controller.press("enter")
time.sleep(0.1)
for i in range(8):
controller.press("down")
controller.press("enter")
time.sleep(0.1)
for i in range(14+4):
controller.press("down")
controller.press("enter")
time.sleep(0.05)
for i in range(2):
controller.press("right")
controller.press("enter")
def get_config(transport):
ch9329 = CH9329(transport)
config = ch9329.get_config()
print(config)
def enter_aftersale_page(controller):
controller.press("space")
time.sleep(0.5)
# now at lock screen
controller.press("tab")
controller.press("tab")
controller.press("space")
time.sleep(0.5)
# now at emergency call screen, input 1 to select the input box
controller.press("tab")
controller.press("tab")
controller.press("tab")
controller.press("space")
time.sleep(0.5)
controller.press("backspace")
controller.press("backspace")
time.sleep(0.5)
controller.write("*#899#")
time.sleep(1)
def enter_settings_password(controller):
# scroll down the notification bar
controller.dragRel(0, 100)
time.sleep(0.5)
# move to settings icon and click
controller.moveRel(209, 0)
time.sleep(0.5)
controller.moveRel(0, -40)
time.sleep(0.1)
controller.click()
time.sleep(1)
# Create HID controller
with SerialTransport(port='/dev/cu.usbserial-1130', baudrate=115200) as transport:
controller = HIDController(transport, screen_width=1916, screen_height=2160, mouse_mode="relative")
controller.keypress_hold_time = 0.007
#get_config(transport)
# step 0: enter settings password
enter_aftersale_page(controller)
enter_settings_password(controller)
# step 1: enter devmode
#enter_password(controller)
#oneplus_devmode(controller)
# step 2: turn on adb
enter_password(controller)
oneplus_adb(controller)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment