From e6555b4e445679ab322fe6c17cdbfe22616436f8 Mon Sep 17 00:00:00 2001 From: EvATive7 Date: Mon, 8 Jul 2024 21:52:01 +0800 Subject: [PATCH] chore: update python API (#9538) * chore: update python API * fix: remove non-exist return value * style: docstring of param of set_static_option * feat: python API get_image --- src/Python/asst/asst.py | 58 +++++++++++++++++++++++++++++++++++++++- src/Python/asst/utils.py | 8 ++++++ 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/src/Python/asst/asst.py b/src/Python/asst/asst.py index a2eca05b37..29a772dc0e 100644 --- a/src/Python/asst/asst.py +++ b/src/Python/asst/asst.py @@ -6,7 +6,7 @@ import pathlib import platform from typing import Union, Optional -from .utils import InstanceOptionType, JSON +from .utils import InstanceOptionType, StaticOptionType, JSON class Asst: @@ -110,6 +110,19 @@ class Asst: return Asst.__lib.AsstSetInstanceOption(self.__ptr, int(option_type), option_value.encode('utf-8')) + def set_static_option(option_type: StaticOptionType, option_value: str): + """ + 设置进程级参数 + 参见${MaaAssistantArknights}/src/MaaCore/Assistant.cpp#set_static_option + + :params: + ``option_type``: 进程级参数类型 + ``option_value``: 进程级参数的值 + + :return: 是否设置成功 + """ + return Asst.__lib.AsstSetStaticOption(int(option_type), option_value.encode('utf-8')) + def connect(self, adb_path: str, address: str, config: str = 'General'): """ 连接设备 @@ -124,6 +137,33 @@ class Asst: return Asst.__lib.AsstConnect(self.__ptr, adb_path.encode('utf-8'), address.encode('utf-8'), config.encode('utf-8')) + def get_image(self, size: int) -> bytes | None: + """ + 获取上次截图 + :params: + ``size``: 图像字节数, 如 1280*720*3 + + : return: 成功时图像的字节; 失败时 None + """ + buffer_type = ctypes.c_byte * size + buffer = buffer_type() + buffer.value = b'\000' * size + if (got := Asst.__lib.AsstGetImage(self.__ptr, buffer, size)) \ + and got > 0: + return bytes(buffer) + else: + return None + + def set_connection_extras(name: str, extras: JSON): + """ + 连接模拟器端的Extras + + :params: + ``name``: Extras名称 + ``extras``: Extras配置 + """ + Asst.__lib.AsstSetConnectionExtras(name.encode('utf-8'), json.dumps(extras, ensure_ascii=False).encode('utf-8')) + TaskId = int def append_task(self, type_name: str, params: JSON = {}) -> TaskId: @@ -205,6 +245,18 @@ class Asst: Asst.__lib.AsstLoadResource.argtypes = ( ctypes.c_char_p,) + Asst.__lib.AsstSetStaticOption.restype = ctypes.c_bool + Asst.__lib.AsstSetStaticOption.argtypes = ( + ctypes.c_int, ctypes.c_char_p,) + + Asst.__lib.AsstSetConnectionExtras.restype = ctypes.c_void_p + Asst.__lib.AsstSetConnectionExtras.argtypes = ( + ctypes.c_char_p, ctypes.c_char_p,) + + Asst.__lib.AsstGetImage.restype = ctypes.c_uint64 + Asst.__lib.AsstGetImage.argtypes = ( + ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint64) + Asst.__lib.AsstCreate.restype = ctypes.c_void_p Asst.__lib.AsstCreate.argtypes = () @@ -222,6 +274,10 @@ class Asst: Asst.__lib.AsstConnect.argtypes = ( ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p,) + Asst.__lib.AsstAsyncConnect.restype = ctypes.c_int + Asst.__lib.AsstAsyncConnect.argtypes = ( + ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_char_p, ctypes.c_bool) + Asst.__lib.AsstAppendTask.restype = ctypes.c_int Asst.__lib.AsstAppendTask.argtypes = ( ctypes.c_void_p, ctypes.c_char_p, ctypes.c_char_p) diff --git a/src/Python/asst/utils.py b/src/Python/asst/utils.py index f65e0ca05e..d643fb701b 100644 --- a/src/Python/asst/utils.py +++ b/src/Python/asst/utils.py @@ -7,6 +7,14 @@ JSON = Union[Dict[str, Any], List[Any], int, str, float, bool, Type[None]] class InstanceOptionType(IntEnum): touch_type = 2 deployment_with_pause = 3 + adblite_enabled = 4 + kill_on_adb_exit = 5 + + +class StaticOptionType(IntEnum): + invalid = 0 + cpu_ocr = 1 + gpu_ocr = 2 @unique