# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: pymammotion/proto/basestation.proto, pymammotion/proto/common.proto, pymammotion/proto/dev_net.proto, pymammotion/proto/luba_msg.proto, pymammotion/proto/luba_mul.proto, pymammotion/proto/mctrl_driver.proto, pymammotion/proto/mctrl_nav.proto, pymammotion/proto/mctrl_ota.proto, pymammotion/proto/mctrl_pept.proto, pymammotion/proto/mctrl_sys.proto
# plugin: python-betterproto
# This file has been @generated
from dataclasses import dataclass
from typing import (
    Optional,
)

import betterproto



def has_field(message: betterproto.Message) -> bool:
    """Check if the message has any fields serialized on wire."""
    return betterproto.serialized_on_wire(message)


class WifiConfType(betterproto.Enum):
    DisconnectWifi = 0
    ForgetWifi = 1
    DirectConnectWifi = 2
    ReconnectWifi = 3
    set_enable = 4



class DrvUploadFileFileType(betterproto.Enum):
    FILE_TYPE_ALL = 0
    FILE_TYPE_SYSLOG = 1
    FILE_TYPE_NAVLOG = 2
    FILE_TYPE_RTKLOG = 3



class DrvDevInfoResult(betterproto.Enum):
    DRV_RESULT_FAIL = 0
    DRV_RESULT_SUC = 1
    DRV_RESULT_NOTSUP = 2



class SimCardSta(betterproto.Enum):
    SIM_NONE = 0
    SIM_NO_CARD = 1
    SIM_INVALID = 2
    SIM_INPUT_PIN = 3
    SIM_INPUT_PUK = 4
    SIM_OK = 5



class MnetLinkType(betterproto.Enum):
    MNET_LINK_NONE = 0
    MNET_LINK_2G = 1
    MNET_LINK_3G = 2
    MNET_LINK_4G = 3



class ApnAuthType(betterproto.Enum):
    APN_AUTH_NONE = 0
    APN_AUTH_PAP = 1
    APN_AUTH_CHAP = 2
    APN_AUTH_PAP_CHAP = 3



class NetType(betterproto.Enum):
    WIFI = 0
    MNET = 1



class IotConctrlType(betterproto.Enum):
    IOT_TYPE_OFFLINE = 0
    IOT_TYPE_ONLINE = 1
    IOT_TYPE_RESET = 2



class Operation(betterproto.Enum):
    WRITE = 0
    READ = 1
    ERASE = 2



class OffPartId(betterproto.Enum):
    OFF_PART_DL_IMG = 0
    OFF_PART_UPDINFO_BACK = 1
    OFF_PART_UPDINFO = 2
    OFF_PART_NAKEDB = 3
    OFF_PART_FLASHDB = 4
    OFF_PART_UPD_APP_IMG = 5
    OFF_PART_UPD_BMS_IMG = 6
    OFF_PART_UPD_TMP_IMG = 7
    OFF_PART_DEV_INFO = 8
    OFF_PART_NAKEDB_BACK = 9
    OFF_PART_MAX = 10



class QcAppTestId(betterproto.Enum):
    QC_APP_ITEM_ON_CHARGESATSTION = 0
    QC_APP_TEST_X3_SPEAKER = 1
    QC_APP_TEST_STATIC_OBSTACLE_DETECTION = 2
    QC_APP_TEST_CHARGESTATION_TEMP = 3
    QC_APP_ITEM_KEY = 4
    QC_APP_TEST_BUMPER_FRONTLEFT = 5
    QC_APP_TEST_BUMPER_FRONTRIGHT = 6
    QC_APP_TEST_STOP = 7
    QC_APP_TEST_UNLOCK = 8
    QC_APP_TEST_BUZZ = 9
    QC_APP_TEST_LIFT = 10
    QC_APP_ITEM_SENEOR = 11
    QC_APP_TEST_ROLL_LEFT = 12
    QC_APP_TEST_ROLL_RIGHT = 13
    QC_APP_TEST_ULTRA_UNCOVER = 14
    QC_APP_TEST_ULTRA0_COVER = 15
    QC_APP_TEST_ULTRA1_COVER = 16
    QC_APP_TEST_ULTRA2_COVER = 17
    QC_APP_TEST_RAIN = 18
    QC_APP_ITEM_SQ = 19
    QC_APP_TEST_BLE_RSSI = 20
    QC_APP_TEST_SATELLITES_ROVER = 21
    QC_APP_TEST_SATELLITES_REF_STATION_L1 = 22
    QC_APP_TEST_SATELLITES_REF_STATION_L2 = 23
    QC_APP_TEST_SATELLITES_COMMON_VIEW = 24
    QC_APP_TEST_CNO_ROVER = 25
    QC_APP_TEST_CNO_REF_STATION = 26
    QC_APP_TEST_REF_STATION_LINK_STATUS = 27
    QC_APP_TEST_LOCATION_STATE = 28
    QC_APP_TEST_MAX = 29



class NetUsedType(betterproto.Enum):
    NONE = 0
    WIFI = 1
    MNET = 2



class RptInfoType(betterproto.Enum):
    RIT_CONNECT = 0
    RIT_DEV_STA = 1
    RIT_RTK = 2
    RIT_DEV_LOCAL = 3
    RIT_WORK = 4
    RIT_FW_INFO = 5
    RIT_MAINTAIN = 6
    RIT_VISION_POINT = 7
    RIT_VIO = 8
    RIT_VISION_STATISTIC = 9
    RIT_BASESTATION_INFO = 10



class RptAct(betterproto.Enum):
    RPT_START = 0
    RPT_STOP = 1
    RPT_KEEP = 2



class InfoType(betterproto.Enum):
    IT_BASE = 0
    IT_OTA = 1



class MulLanguage(betterproto.Enum):
    ENGLISH = 0
    GERMAN = 1
    UNRECOGNIZED = -1



class MulCameraPosition(betterproto.Enum):
    LEFT = 0
    RIGHT = 1
    REAR = 2
    ALL = 3



class MulVideoErrorCode(betterproto.Enum):
    SUCCESS = 0
    ACTIVATION_FAILED = 1
    NETWORK_NOT_AVAILABLE = 2
    CREATE_CHANNEL_FAILED = 3
    PARAM_INVAILD = 4
    CELLULAR_RESTRICTION = 5



class MulWiperErrorCode(betterproto.Enum):
    SET_SUCCESS = 0
    HW_ERROR = 1
    NAVIGATION_WORK_FORBID = 2



class MsgCmdType(betterproto.Enum):
    START = 0
    NAV = 240
    LOCALIZATION = 241
    PLANNING = 242
    EMBED_DRIVER = 243
    EMBED_SYS = 244
    EMBED_MIDWARE = 245
    EMBED_OTA = 246
    APPLICATION = 247
    ESP = 248
    MUL = 249
    PEPT = 250



class MsgAttr(betterproto.Enum):
    NONE = 0
    REQ = 1
    RESP = 2
    REPORT = 3



class MsgDevice(betterproto.Enum):
    DEV_COMM_ESP = 0
    DEV_MAINCTL = 1
    DEV_LEFTMOTOR = 2
    DEV_RIGHTMOTOR = 3
    DEV_BASESTATION = 4
    DEV_RTKCLI = 5
    DEV_USBHOST = 6
    DEV_MOBILEAPP = 7
    DEV_IOTSERVER = 8
    DEV_BMS = 9
    DEV_NAVIGATION = 17
    DEV_LOCALIZATION = 18
    DEV_PERCEPTION = 19
    SOC_MODULE_MULTIMEDIA = 21
    DEV_IOTCTRL = 25



@dataclass(eq=False, repr=False)
class RequestBasestationInfoT(betterproto.Message):
    request_type: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class ResponseBasestationInfoT(betterproto.Message):
    system_status: int = betterproto.uint64_field(1)
    app_connect_type: int = betterproto.uint32_field(2)
    ble_rssi: int = betterproto.int32_field(3)
    wifi_rssi: int = betterproto.int32_field(4)
    sats_num: int = betterproto.uint64_field(5)
    lora_scan: int = betterproto.int64_field(6)
    lora_channel: int = betterproto.int64_field(7)
    lora_locid: int = betterproto.int64_field(8)
    lora_netid: int = betterproto.int64_field(9)
    rtk_status: int = betterproto.uint64_field(10)
    lowpower_status: int = betterproto.int32_field(11)
    mqtt_rtk_status: int = betterproto.int32_field(12)
    rtk_channel: int = betterproto.int32_field(13)
    rtk_switch: int = betterproto.int32_field(14)


@dataclass(eq=False, repr=False)
class AppToBaseMqttRtkT(betterproto.Message):
    rtk_switch: int = betterproto.int32_field(1)
    rtk_url: str = betterproto.string_field(2)
    rtk_port: int = betterproto.int32_field(3)
    rtk_username: str = betterproto.string_field(4)
    rtk_password: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class BaseToAppMqttRtkT(betterproto.Message):
    rtk_switch_status: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class BaseStation(betterproto.Message):
    to_dev: "RequestBasestationInfoT" = betterproto.message_field(
        1, group="BaseStationSubType"
    )
    to_app: "ResponseBasestationInfoT" = betterproto.message_field(
        2, group="BaseStationSubType"
    )
    app_to_base_mqtt_rtk_msg: "AppToBaseMqttRtkT" = betterproto.message_field(
        3, group="BaseStationSubType"
    )
    base_to_app_mqtt_rtk_msg: "BaseToAppMqttRtkT" = betterproto.message_field(
        4, group="BaseStationSubType"
    )



@dataclass(eq=False, repr=False)
class CommDataCouple(betterproto.Message):
    x: float = betterproto.float_field(1)
    y: float = betterproto.float_field(2)


@dataclass(eq=False, repr=False)
class DrvWifiUpload(betterproto.Message):
    wifi_msg_upload: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class DrvWifiList(betterproto.Message):
    nvs_wifi_upload: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class DrvWifiSet(betterproto.Message):
    config_param: int = betterproto.int32_field(1)
    confssid: str = betterproto.string_field(2)
    wifi_enable: bool = betterproto.bool_field(3)


@dataclass(eq=False, repr=False)
class DrvWifiMsg(betterproto.Message):
    status1: bool = betterproto.bool_field(1)
    status2: bool = betterproto.bool_field(2)
    ip: str = betterproto.string_field(3)
    msgssid: str = betterproto.string_field(4)
    password: str = betterproto.string_field(5)
    rssi: int = betterproto.int32_field(6)
    productkey: str = betterproto.string_field(7)
    devicename: str = betterproto.string_field(8)
    wifi_enable: bool = betterproto.bool_field(9)


@dataclass(eq=False, repr=False)
class DrvWifiConf(betterproto.Message):
    succ_flag: bool = betterproto.bool_field(1)
    code: int = betterproto.int32_field(2)
    confssid: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class DrvListUpload(betterproto.Message):
    sum: int = betterproto.int32_field(1)
    current: int = betterproto.int32_field(2)
    status: int = betterproto.int32_field(3)
    memssid: str = betterproto.string_field(4)
    rssi: int = betterproto.int32_field(5)


@dataclass(eq=False, repr=False)
class DrvUploadFileReq(betterproto.Message):
    biz_id: str = betterproto.string_field(1)
    url: str = betterproto.string_field(2)
    user_id: str = betterproto.string_field(3)
    num: int = betterproto.int32_field(4)
    type: int = betterproto.int32_field(5)


@dataclass(eq=False, repr=False)
class DrvUploadFileCancel(betterproto.Message):
    biz_id: str = betterproto.string_field(1)


@dataclass(eq=False, repr=False)
class DrvUploadFileToAppReq(betterproto.Message):
    biz_id: str = betterproto.string_field(1)
    operation: int = betterproto.int32_field(2)
    server_ip: int = betterproto.fixed32_field(3)
    server_port: int = betterproto.int32_field(4)
    num: int = betterproto.int32_field(5)
    type: int = betterproto.int32_field(6)


@dataclass(eq=False, repr=False)
class DrvUploadFileToAppRsp(betterproto.Message):
    biz_id: str = betterproto.string_field(1)
    operation: int = betterproto.int32_field(2)
    result: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class DrvDevInfoReqId(betterproto.Message):
    id: int = betterproto.int32_field(1)
    type: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class DrvDevInfoRespId(betterproto.Message):
    id: int = betterproto.int32_field(1)
    type: int = betterproto.int32_field(2)
    res: "DrvDevInfoResult" = betterproto.enum_field(3)
    info: str = betterproto.string_field(4)


@dataclass(eq=False, repr=False)
class DrvDevInfoReq(betterproto.Message):
    req_ids: list["DrvDevInfoReqId"] = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class DrvDevInfoResp(betterproto.Message):
    resp_ids: list["DrvDevInfoRespId"] = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class DrvUpgradeReport(betterproto.Message):
    devname: str = betterproto.string_field(1)
    otaid: str = betterproto.string_field(2)
    version: str = betterproto.string_field(3)
    progress: int = betterproto.int32_field(4)
    result: int = betterproto.int32_field(5)
    message: str = betterproto.string_field(6)
    properties: str = betterproto.string_field(7)


@dataclass(eq=False, repr=False)
class WifiIotStatusReport(betterproto.Message):
    wifi_connected: bool = betterproto.bool_field(1)
    iot_connected: bool = betterproto.bool_field(2)
    productkey: str = betterproto.string_field(3)
    devicename: str = betterproto.string_field(4)


@dataclass(eq=False, repr=False)
class BleTestBytes(betterproto.Message):
    seqs: int = betterproto.int32_field(1)
    data: list[int] = betterproto.fixed32_field(2)


@dataclass(eq=False, repr=False)
class GetNetworkInfoReq(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class GetNetworkInfoRsp(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)
    wifi_ssid: str = betterproto.string_field(2)
    wifi_mac: str = betterproto.string_field(3)
    wifi_rssi: int = betterproto.int32_field(4)
    ip: int = betterproto.fixed32_field(5)
    mask: int = betterproto.fixed32_field(6)
    gateway: int = betterproto.fixed32_field(7)


@dataclass(eq=False, repr=False)
class MnetInetStatus(betterproto.Message):
    connect: bool = betterproto.bool_field(1)
    ip: int = betterproto.fixed32_field(2)
    mask: int = betterproto.fixed32_field(3)
    gateway: int = betterproto.fixed32_field(4)


@dataclass(eq=False, repr=False)
class MnetInfo(betterproto.Message):
    model: str = betterproto.string_field(1)
    revision: str = betterproto.string_field(2)
    imei: str = betterproto.string_field(3)
    sim: "SimCardSta" = betterproto.enum_field(4)
    imsi: str = betterproto.string_field(5)
    link_type: "MnetLinkType" = betterproto.enum_field(6)
    rssi: int = betterproto.int32_field(7)
    inet: "MnetInetStatus" = betterproto.message_field(8)
    iccid: str = betterproto.string_field(9)


@dataclass(eq=False, repr=False)
class GetMnetInfoReq(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class GetMnetInfoRsp(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)
    result: int = betterproto.int32_field(2)
    mnet: "MnetInfo" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class MnetApn(betterproto.Message):
    cid: int = betterproto.int32_field(1)
    apn_alias: str = betterproto.string_field(2)
    apn_name: str = betterproto.string_field(3)
    auth: "ApnAuthType" = betterproto.enum_field(4)
    username: str = betterproto.string_field(5)
    password: str = betterproto.string_field(6)


@dataclass(eq=False, repr=False)
class MnetApnCfg(betterproto.Message):
    apn_used_idx: int = betterproto.int32_field(1)
    apn: list["MnetApn"] = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class MnetApnSetCfg(betterproto.Message):
    use_default: bool = betterproto.bool_field(1)
    cfg: "MnetApnCfg" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class MnetCfg(betterproto.Message):
    mnet_enable: bool = betterproto.bool_field(1)
    inet_enable: bool = betterproto.bool_field(2)
    type: "NetType" = betterproto.enum_field(3)
    apn: "MnetApnSetCfg" = betterproto.message_field(4)
    auto_select: bool = betterproto.bool_field(5)


@dataclass(eq=False, repr=False)
class GetMnetCfgReq(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class GetMnetCfgRsp(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)
    result: int = betterproto.int32_field(2)
    cfg: "MnetCfg" = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class SetMnetCfgReq(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)
    cfg: "MnetCfg" = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class SetMnetCfgRsp(betterproto.Message):
    req_ids: int = betterproto.int32_field(1)
    result: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class DrvDebugDdsZmq(betterproto.Message):
    is_enable: bool = betterproto.bool_field(1)
    rx_topic_name: str = betterproto.string_field(2)
    tx_zmq_url: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class SetDrvBleMtu(betterproto.Message):
    mtu_count: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class DevNet(betterproto.Message):
    todev_ble_sync: int = betterproto.int32_field(
        1, group="NetSubType"
    )
    todev_conf_type: "WifiConfType" = betterproto.enum_field(
        2, group="NetSubType"
    )
    todev_wifi_msg_upload: "DrvWifiUpload" = betterproto.message_field(
        3, group="NetSubType"
    )
    todev_wifi_list_upload: "DrvWifiList" = betterproto.message_field(
        4, group="NetSubType"
    )
    todev_wifi_configuration: "DrvWifiSet" = betterproto.message_field(
        5, group="NetSubType"
    )
    toapp_wifi_msg: "DrvWifiMsg" = betterproto.message_field(
        6, group="NetSubType"
    )
    toapp_wifi_conf: "DrvWifiConf" = betterproto.message_field(
        7, group="NetSubType"
    )
    toapp_list_upload: "DrvListUpload" = betterproto.message_field(
        8, group="NetSubType"
    )
    todev_req_log_info: "DrvUploadFileReq" = betterproto.message_field(
        9, group="NetSubType"
    )
    todev_log_data_cancel: "DrvUploadFileCancel" = betterproto.message_field(
        10, group="NetSubType"
    )
    todev_devinfo_req: "DrvDevInfoReq" = betterproto.message_field(
        11, group="NetSubType"
    )
    toapp_devinfo_resp: "DrvDevInfoResp" = betterproto.message_field(
        12, group="NetSubType"
    )
    toapp_upgrade_report: "DrvUpgradeReport" = betterproto.message_field(
        13, group="NetSubType"
    )
    toapp_wifi_iot_status: "WifiIotStatusReport" = betterproto.message_field(
        14, group="NetSubType"
    )
    todev_uploadfile_req: "DrvUploadFileToAppReq" = betterproto.message_field(
        15, group="NetSubType"
    )
    toapp_uploadfile_rsp: "DrvUploadFileToAppRsp" = betterproto.message_field(
        16, group="NetSubType"
    )
    todev_networkinfo_req: "GetNetworkInfoReq" = betterproto.message_field(
        17, group="NetSubType"
    )
    toapp_networkinfo_rsp: "GetNetworkInfoRsp" = betterproto.message_field(
        18, group="NetSubType"
    )
    bir_testdata: "BleTestBytes" = betterproto.message_field(
        19, group="NetSubType"
    )
    todev_mnet_info_req: "GetMnetInfoReq" = betterproto.message_field(
        20, group="NetSubType"
    )
    toapp_mnet_info_rsp: "GetMnetInfoRsp" = betterproto.message_field(
        21, group="NetSubType"
    )
    todev_get_mnet_cfg_req: "GetMnetCfgReq" = betterproto.message_field(
        22, group="NetSubType"
    )
    toapp_get_mnet_cfg_rsp: "GetMnetCfgRsp" = betterproto.message_field(
        23, group="NetSubType"
    )
    todev_set_mnet_cfg_req: "SetMnetCfgReq" = betterproto.message_field(
        24, group="NetSubType"
    )
    toapp_set_mnet_cfg_rsp: "SetMnetCfgRsp" = betterproto.message_field(
        25, group="NetSubType"
    )
    todev_set_dds2_zmq: "DrvDebugDdsZmq" = betterproto.message_field(
        26, group="NetSubType"
    )
    todev_set_ble_mtu: "SetDrvBleMtu" = betterproto.message_field(
        27, group="NetSubType"
    )
    todev_set_iot_offline_req: "IotConctrlType" = betterproto.enum_field(
        28, group="NetSubType"
    )



@dataclass(eq=False, repr=False)
class DrvMotionCtrl(betterproto.Message):
    set_linear_speed: int = betterproto.int32_field(1)
    set_angular_speed: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class DrvKnifeHeight(betterproto.Message):
    knife_height: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class DrvSrSpeed(betterproto.Message):
    rw: int = betterproto.int32_field(1)
    speed: float = betterproto.float_field(2)


@dataclass(eq=False, repr=False)
class DrvKnifeStatus(betterproto.Message):
    knife_status: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class DrvKnifeChangeReport(betterproto.Message):
    is_start: int = betterproto.int32_field(1)
    start_high: int = betterproto.int32_field(2)
    end_high: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class DrvMowCtrlByHand(betterproto.Message):
    main_ctrl: int = betterproto.int32_field(1)
    cut_knife_ctrl: int = betterproto.int32_field(2)
    cut_knife_height: int = betterproto.int32_field(3)
    max_run_speed: float = betterproto.float_field(4)


@dataclass(eq=False, repr=False)
class RtkCfgReqT(betterproto.Message):
    cmd_length: int = betterproto.int32_field(1)
    cmd_req: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class RtkCfgReqAckT(betterproto.Message):
    cmd_length: int = betterproto.int32_field(1)
    cmd_response: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class RtkSysMaskQueryT(betterproto.Message):
    sat_system: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class RtkSysMaskQueryAckT(betterproto.Message):
    sat_system: int = betterproto.uint32_field(1)
    system_mask_bits: list[int] = betterproto.uint32_field(2)


@dataclass(eq=False, repr=False)
class MctlDriver(betterproto.Message):
    todev_devmotion_ctrl: "DrvMotionCtrl" = betterproto.message_field(
        1, group="SubDrvMsg"
    )
    todev_knife_height_set: "DrvKnifeHeight" = betterproto.message_field(
        2, group="SubDrvMsg"
    )
    bidire_speed_read_set: "DrvSrSpeed" = betterproto.message_field(
        3, group="SubDrvMsg"
    )
    bidire_knife_height_report: "DrvKnifeHeight" = betterproto.message_field(
        4, group="SubDrvMsg"
    )
    toapp_knife_status: "DrvKnifeStatus" = betterproto.message_field(
        5, group="SubDrvMsg"
    )
    mow_ctrl_by_hand: "DrvMowCtrlByHand" = betterproto.message_field(
        6, group="SubDrvMsg"
    )
    rtk_cfg_req: "RtkCfgReqT" = betterproto.message_field(
        7, group="SubDrvMsg"
    )
    rtk_cfg_req_ack: "RtkCfgReqAckT" = betterproto.message_field(
        8, group="SubDrvMsg"
    )
    rtk_sys_mask_query: "RtkSysMaskQueryT" = betterproto.message_field(
        9, group="SubDrvMsg"
    )
    rtk_sys_mask_query_ack: "RtkSysMaskQueryAckT" = betterproto.message_field(
        10, group="SubDrvMsg"
    )
    toapp_knife_status_change: "DrvKnifeChangeReport" = (
        betterproto.message_field(11, group="SubDrvMsg")
    )



@dataclass(eq=False, repr=False)
class NavLatLonUp(betterproto.Message):
    lat: float = betterproto.double_field(1)
    lon: float = betterproto.double_field(2)


@dataclass(eq=False, repr=False)
class NavBorderState(betterproto.Message):
    bdstate: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class NavPosUp(betterproto.Message):
    x: float = betterproto.float_field(1)
    y: float = betterproto.float_field(2)
    status: int = betterproto.int32_field(3)
    toward: int = betterproto.int32_field(4)
    stars: int = betterproto.int32_field(5)
    age: float = betterproto.float_field(6)
    lat_stddev: float = betterproto.float_field(7)
    lon_stddev: float = betterproto.float_field(8)
    l2_df_stars: int = betterproto.int32_field(9)
    pos_type: int = betterproto.int32_field(10)
    c_hash_id: int = betterproto.int64_field(11)
    pos_level: int = betterproto.int32_field(12)


@dataclass(eq=False, repr=False)
class NavBorderDataGetAck(betterproto.Message):
    job_id: int = betterproto.int32_field(1)
    current_frame: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class NavObstiBorderDataGet(betterproto.Message):
    obstacle_index: int = betterproto.int32_field(1)
    current_frame: int = betterproto.int32_field(2)
    obstacles_len: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class NavObstiBorderDataGetAck(betterproto.Message):
    obstacle_index: int = betterproto.int32_field(1)
    current_frame: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class NavCHlLineData(betterproto.Message):
    start_job_ri: int = betterproto.int32_field(1)
    end_job_ri: int = betterproto.int32_field(2)
    current_frame: int = betterproto.int32_field(3)
    channel_line_len: int = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class NavCHlLineDataAck(betterproto.Message):
    start_job_ri: int = betterproto.int32_field(1)
    end_job_ri: int = betterproto.int32_field(2)
    current_frame: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class NavTaskInfo(betterproto.Message):
    area: int = betterproto.int32_field(1)
    time: int = betterproto.int32_field(2)
    all_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    pathlen: int = betterproto.int32_field(5)
    dc: list["CommDataCouple"] = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class NavBorderDataGet(betterproto.Message):
    job_id: int = betterproto.int32_field(1)
    current_frame: int = betterproto.int32_field(2)
    border_len: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class NavOptLineUp(betterproto.Message):
    start_job_ri: int = betterproto.int32_field(1)
    end_job_ri: int = betterproto.int32_field(2)
    all_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    channel_data_len: int = betterproto.int32_field(5)
    dc: list["CommDataCouple"] = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class NavOptiBorderInfo(betterproto.Message):
    job_id: int = betterproto.int32_field(1)
    all_frame: int = betterproto.int32_field(2)
    current_frame: int = betterproto.int32_field(3)
    border_data_len: int = betterproto.int32_field(4)
    dc: list["CommDataCouple"] = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class NavOptObsInfo(betterproto.Message):
    obstacle_id: int = betterproto.int32_field(1)
    all_frame: int = betterproto.int32_field(2)
    current_frame: int = betterproto.int32_field(3)
    obstacle_data_len: int = betterproto.int32_field(4)
    dc: list["CommDataCouple"] = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class NavStartJob(betterproto.Message):
    job_id: int = betterproto.int64_field(1)
    job_ver: int = betterproto.int32_field(2)
    job_mode: int = betterproto.int32_field(3)
    rain_tactics: int = betterproto.int32_field(4)
    knife_height: int = betterproto.int32_field(5)
    speed: float = betterproto.float_field(6)
    channel_width: int = betterproto.int32_field(7)
    ultra_wave: int = betterproto.int32_field(8)
    channel_mode: int = betterproto.int32_field(9)


@dataclass(eq=False, repr=False)
class NavTaskProgress(betterproto.Message):
    task_progress: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class NavResFrame(betterproto.Message):
    frameid: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class NavGetHashList(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    total_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    data_hash: int = betterproto.fixed64_field(5)
    reserved: str = betterproto.string_field(6)


@dataclass(eq=False, repr=False)
class NavGetHashListAck(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    total_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    data_hash: int = betterproto.fixed64_field(5)
    hash_len: int = betterproto.int32_field(6)
    reserved: str = betterproto.string_field(7)
    result: int = betterproto.int32_field(8)
    data_couple: list[int] = betterproto.int64_field(13)


@dataclass(eq=False, repr=False)
class NavGetCommData(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    action: int = betterproto.int32_field(3)
    type: int = betterproto.int32_field(4)
    hash: int = betterproto.int64_field(5)
    paternal_hash_a: int = betterproto.int64_field(6)
    paternal_hash_b: int = betterproto.int64_field(7)
    total_frame: int = betterproto.int32_field(8)
    current_frame: int = betterproto.int32_field(9)
    data_hash: int = betterproto.fixed64_field(10)
    reserved: str = betterproto.string_field(11)


@dataclass(eq=False, repr=False)
class AreaLabel(betterproto.Message):
    label: str = betterproto.string_field(1)


@dataclass(eq=False, repr=False)
class NavGetCommDataAck(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    result: int = betterproto.int32_field(3)
    action: int = betterproto.int32_field(4)
    type: int = betterproto.int32_field(5)
    hash: int = betterproto.fixed64_field(6)
    paternal_hash_a: int = betterproto.fixed64_field(7)
    paternal_hash_b: int = betterproto.fixed64_field(8)
    total_frame: int = betterproto.int32_field(9)
    current_frame: int = betterproto.int32_field(10)
    data_hash: int = betterproto.fixed64_field(11)
    data_len: int = betterproto.int32_field(12)
    data_couple: list["CommDataCouple"] = betterproto.message_field(13)
    reserved: str = betterproto.string_field(14)
    area_label: "AreaLabel" = betterproto.message_field(15)


@dataclass(eq=False, repr=False)
class NavReqCoverPath(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    job_id: int = betterproto.fixed64_field(2)
    job_ver: int = betterproto.int32_field(3)
    job_mode: int = betterproto.int32_field(4)
    sub_cmd: int = betterproto.int32_field(5)
    edge_mode: int = betterproto.int32_field(6)
    knife_height: int = betterproto.int32_field(7)
    channel_width: int = betterproto.int32_field(8)
    ultra_wave: int = betterproto.int32_field(9)
    channel_mode: int = betterproto.int32_field(10)
    toward: int = betterproto.int32_field(11)
    speed: float = betterproto.float_field(12)
    zone_hashs: list[int] = betterproto.fixed64_field(13)
    path_hash: int = betterproto.fixed64_field(14)
    reserved: str = betterproto.string_field(15)
    result: int = betterproto.int32_field(16)
    toward_mode: int = betterproto.int32_field(17)
    toward_included_angle: int = betterproto.int32_field(18)


@dataclass(eq=False, repr=False)
class NavUploadZigZagResult(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    job_id: int = betterproto.fixed64_field(2)
    job_ver: int = betterproto.int32_field(3)
    result: int = betterproto.int32_field(4)
    area: int = betterproto.int32_field(5)
    time: int = betterproto.int32_field(6)
    total_zone_num: int = betterproto.int32_field(7)
    current_zone_path_num: int = betterproto.int32_field(8)
    current_zone_path_id: int = betterproto.int32_field(9)
    current_zone: int = betterproto.int32_field(10)
    current_hash: int = betterproto.fixed64_field(11)
    total_frame: int = betterproto.int32_field(12)
    current_frame: int = betterproto.int32_field(13)
    channel_mode: int = betterproto.int32_field(14)
    channel_mode_id: int = betterproto.int32_field(15)
    data_hash: int = betterproto.fixed64_field(16)
    data_len: int = betterproto.int32_field(17)
    reserved: str = betterproto.string_field(18)
    data_couple: list["CommDataCouple"] = betterproto.message_field(19)
    sub_cmd: int = betterproto.int32_field(20)


@dataclass(eq=False, repr=False)
class NavUploadZigZagResultAck(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    current_zone: int = betterproto.int32_field(2)
    current_hash: int = betterproto.fixed64_field(3)
    total_frame: int = betterproto.int32_field(4)
    current_frame: int = betterproto.int32_field(5)
    data_hash: int = betterproto.fixed64_field(6)
    reserved: str = betterproto.string_field(7)
    sub_cmd: int = betterproto.int32_field(8)


@dataclass(eq=False, repr=False)
class NavTaskCtrl(betterproto.Message):
    type: int = betterproto.int32_field(1)
    action: int = betterproto.int32_field(2)
    result: int = betterproto.int32_field(3)
    reserved: str = betterproto.string_field(4)


@dataclass(eq=False, repr=False)
class NavTaskIdRw(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    task_name: str = betterproto.string_field(3)
    task_id: str = betterproto.string_field(4)
    result: int = betterproto.int32_field(5)
    reserved: str = betterproto.string_field(6)


@dataclass(eq=False, repr=False)
class NavSysHashOverview(betterproto.Message):
    commonhash_overview: int = betterproto.fixed64_field(1)
    path_hash_overview: int = betterproto.fixed64_field(2)


@dataclass(eq=False, repr=False)
class NavTaskBreakPoint(betterproto.Message):
    x: float = betterproto.float_field(1)
    y: float = betterproto.float_field(2)
    toward: int = betterproto.int32_field(3)
    flag: int = betterproto.int32_field(4)
    action: int = betterproto.int32_field(5)
    zone_hash: int = betterproto.fixed64_field(6)


@dataclass(eq=False, repr=False)
class NavPlanJobSet(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    area: int = betterproto.int32_field(3)
    work_time: int = betterproto.int32_field(4)
    version: str = betterproto.string_field(5)
    id: str = betterproto.string_field(6)
    user_id: str = betterproto.string_field(7)
    device_id: str = betterproto.string_field(8)
    plan_id: str = betterproto.string_field(9)
    task_id: str = betterproto.string_field(10)
    job_id: str = betterproto.string_field(11)
    start_time: str = betterproto.string_field(12)
    end_time: str = betterproto.string_field(13)
    week: int = betterproto.int32_field(14)
    knife_height: int = betterproto.int32_field(15)
    model: int = betterproto.int32_field(16)
    edge_mode: int = betterproto.int32_field(17)
    required_time: int = betterproto.int32_field(18)
    route_angle: int = betterproto.int32_field(19)
    route_model: int = betterproto.int32_field(20)
    route_spacing: int = betterproto.int32_field(21)
    ultrasonic_barrier: int = betterproto.int32_field(22)
    total_plan_num: int = betterproto.int32_field(23)
    plan_index: int = betterproto.int32_field(24)
    result: int = betterproto.int32_field(25)
    speed: float = betterproto.float_field(26)
    task_name: str = betterproto.string_field(27)
    job_name: str = betterproto.string_field(28)
    zone_hashs: list[int] = betterproto.fixed64_field(29)
    reserved: str = betterproto.string_field(30)
    start_date: str = betterproto.string_field(31)
    end_date: str = betterproto.string_field(32)
    trigger_type: int = betterproto.int32_field(33)
    day: int = betterproto.int32_field(34)
    weeks: list[int] = betterproto.fixed32_field(35)
    remained_seconds: int = betterproto.int64_field(36)
    toward_mode: int = betterproto.int32_field(37)
    toward_included_angle: int = betterproto.int32_field(38)


@dataclass(eq=False, repr=False)
class NavUnableTimeSet(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)
    device_id: str = betterproto.string_field(2)
    unable_start_time: str = betterproto.string_field(3)
    unable_end_time: str = betterproto.string_field(4)
    result: int = betterproto.int32_field(5)
    reserved: str = betterproto.string_field(6)


@dataclass(eq=False, repr=False)
class ChargePileType(betterproto.Message):
    toward: int = betterproto.int32_field(1)
    x: float = betterproto.float_field(2)
    y: float = betterproto.float_field(3)


@dataclass(eq=False, repr=False)
class SimulationCmdData(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)
    param_id: int = betterproto.int32_field(2)
    param_value: list[int] = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class WorkReportUpdateCmd(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class WorkReportUpdateAck(betterproto.Message):
    update_flag: bool = betterproto.bool_field(1)
    info_num: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class WorkReportCmdData(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)
    get_info_num: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class WorkReportInfoAck(betterproto.Message):
    interrupt_flag: bool = betterproto.bool_field(1)
    start_work_time: int = betterproto.int64_field(2)
    end_work_time: int = betterproto.int64_field(3)
    work_time_used: int = betterproto.int32_field(4)
    work_ares: float = betterproto.double_field(5)
    work_progress: int = betterproto.int32_field(6)
    height_of_knife: int = betterproto.int32_field(7)
    work_type: int = betterproto.int32_field(8)
    work_result: int = betterproto.int32_field(9)
    total_ack_num: int = betterproto.int32_field(10)
    current_ack_num: int = betterproto.int32_field(11)


@dataclass(eq=False, repr=False)
class AppRequestCoverPathsT(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    total_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    data_hash: int = betterproto.fixed64_field(5)
    transaction_id: int = betterproto.int64_field(6)
    reserved: list[int] = betterproto.int64_field(7)
    hash_list: list[int] = betterproto.fixed64_field(8)


@dataclass(eq=False, repr=False)
class CoverPathPacketT(betterproto.Message):
    path_hash: int = betterproto.fixed64_field(1)
    path_type: int = betterproto.int32_field(2)
    path_total: int = betterproto.int32_field(3)
    path_cur: int = betterproto.int32_field(4)
    zone_hash: int = betterproto.fixed64_field(5)
    data_couple: list["CommDataCouple"] = betterproto.message_field(6)


@dataclass(eq=False, repr=False)
class CoverPathUploadT(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    result: int = betterproto.int32_field(2)
    sub_cmd: int = betterproto.int32_field(3)
    area: int = betterproto.int32_field(4)
    time: int = betterproto.int32_field(5)
    total_frame: int = betterproto.int32_field(6)
    current_frame: int = betterproto.int32_field(7)
    total_path_num: int = betterproto.int32_field(8)
    vaild_path_num: int = betterproto.int32_field(9)
    data_hash: int = betterproto.fixed64_field(10)
    transaction_id: int = betterproto.int64_field(11)
    reserved: list[int] = betterproto.int64_field(12)
    data_len: int = betterproto.int32_field(13)
    path_packets: list["CoverPathPacketT"] = betterproto.message_field(14)


@dataclass(eq=False, repr=False)
class ZoneStartPrecentT(betterproto.Message):
    data_hash: int = betterproto.fixed64_field(1)
    x: float = betterproto.float_field(2)
    y: float = betterproto.float_field(3)
    index: int = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class VisionCtrlMsg(betterproto.Message):
    type: int = betterproto.int32_field(1)
    cmd: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class NavSysParamMsg(betterproto.Message):
    rw: int = betterproto.int32_field(1)
    id: int = betterproto.int32_field(2)
    context: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class NavPlanTaskExecute(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)
    id: str = betterproto.string_field(2)
    name: str = betterproto.string_field(3)
    result: int = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class CostmapT(betterproto.Message):
    width: int = betterproto.int32_field(1)
    height: int = betterproto.int32_field(2)
    center_x: float = betterproto.float_field(3)
    center_y: float = betterproto.float_field(4)
    yaw: float = betterproto.float_field(5)
    res: float = betterproto.float_field(6)
    costmap: list[int] = betterproto.int32_field(7)


@dataclass(eq=False, repr=False)
class PlanTaskNameIdT(betterproto.Message):
    id: str = betterproto.string_field(1)
    name: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class NavGetAllPlanTask(betterproto.Message):
    tasks: list["PlanTaskNameIdT"] = betterproto.message_field(1)


@dataclass(eq=False, repr=False)
class NavTaskCtrlAck(betterproto.Message):
    """Define the NavTaskCtrlAck message"""

    type: int = betterproto.int32_field(1)
    action: int = betterproto.int32_field(2)
    result: int = betterproto.int32_field(3)
    nav_state: int = betterproto.int32_field(4)
    reserved: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class NavMapNameMsg(betterproto.Message):
    rw: int = betterproto.int32_field(1)
    hash: int = betterproto.fixed64_field(2)
    name: str = betterproto.string_field(3)
    result: int = betterproto.int32_field(4)
    device_id: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class SvgMessageT(betterproto.Message):
    x_move: float = betterproto.double_field(1)
    y_move: float = betterproto.double_field(2)
    scale: float = betterproto.double_field(3)
    rotate: float = betterproto.double_field(4)
    base_width_m: float = betterproto.double_field(5)
    base_width_pix: int = betterproto.int32_field(7)
    base_height_m: float = betterproto.double_field(6)
    base_height_pix: int = betterproto.int32_field(8)
    data_count: int = betterproto.int32_field(12)
    hide_svg: bool = betterproto.bool_field(13)
    name_count: int = betterproto.int32_field(11)
    svg_file_name: str = betterproto.string_field(9)
    svg_file_data: str = betterproto.string_field(10)


@dataclass(eq=False, repr=False)
class SvgMessageAckT(betterproto.Message):
    pver: int = betterproto.int32_field(1)
    sub_cmd: int = betterproto.int32_field(2)
    total_frame: int = betterproto.int32_field(3)
    current_frame: int = betterproto.int32_field(4)
    data_hash: int = betterproto.fixed64_field(5)
    paternal_hash_a: int = betterproto.fixed64_field(6)
    type: int = betterproto.int32_field(7)
    result: int = betterproto.int32_field(8)
    svg_message: "SvgMessageT" = betterproto.message_field(9)


@dataclass(eq=False, repr=False)
class AreaHashName(betterproto.Message):
    name: str = betterproto.string_field(2)
    hash: int = betterproto.fixed64_field(1)


@dataclass(eq=False, repr=False)
class AppGetAllAreaHashName(betterproto.Message):
    device_id: str = betterproto.string_field(1)
    hashnames: list["AreaHashName"] = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class MctlNav(betterproto.Message):
    toapp_lat_up: "NavLatLonUp" = betterproto.message_field(
        1, group="SubNavMsg"
    )
    toapp_pos_up: "NavPosUp" = betterproto.message_field(
        2, group="SubNavMsg"
    )
    todev_chl_line_data: "NavCHlLineData" = betterproto.message_field(
        3, group="SubNavMsg"
    )
    toapp_task_info: "NavTaskInfo" = betterproto.message_field(
        4, group="SubNavMsg"
    )
    toapp_opt_line_up: "NavOptLineUp" = betterproto.message_field(
        5, group="SubNavMsg"
    )
    toapp_opt_border_info: "NavOptiBorderInfo" = betterproto.message_field(
        6, group="SubNavMsg"
    )
    toapp_opt_obs_info: "NavOptObsInfo" = betterproto.message_field(
        7, group="SubNavMsg"
    )
    todev_task_info_ack: "NavResFrame" = betterproto.message_field(
        8, group="SubNavMsg"
    )
    todev_opt_border_info_ack: "NavResFrame" = betterproto.message_field(
        9, group="SubNavMsg"
    )
    todev_opt_obs_info_ack: "NavResFrame" = betterproto.message_field(
        10, group="SubNavMsg"
    )
    todev_opt_line_up_ack: "NavResFrame" = betterproto.message_field(
        11, group="SubNavMsg"
    )
    toapp_chgpileto: "ChargePileType" = betterproto.message_field(
        12, group="SubNavMsg"
    )
    todev_sustask: int = betterproto.int32_field(
        13, group="SubNavMsg"
    )
    todev_rechgcmd: int = betterproto.int32_field(
        14, group="SubNavMsg"
    )
    todev_edgecmd: int = betterproto.int32_field(
        15, group="SubNavMsg"
    )
    todev_draw_border: int = betterproto.int32_field(
        16, group="SubNavMsg"
    )
    todev_draw_border_end: int = betterproto.int32_field(
        17, group="SubNavMsg"
    )
    todev_draw_obs: int = betterproto.int32_field(
        18, group="SubNavMsg"
    )
    todev_draw_obs_end: int = betterproto.int32_field(
        19, group="SubNavMsg"
    )
    todev_chl_line: int = betterproto.int32_field(
        20, group="SubNavMsg"
    )
    todev_chl_line_end: int = betterproto.int32_field(
        21, group="SubNavMsg"
    )
    todev_save_task: int = betterproto.int32_field(
        22, group="SubNavMsg"
    )
    todev_cancel_suscmd: int = betterproto.int32_field(
        23, group="SubNavMsg"
    )
    todev_reset_chg_pile: int = betterproto.int32_field(
        24, group="SubNavMsg"
    )
    todev_cancel_draw_cmd: int = betterproto.int32_field(
        25, group="SubNavMsg"
    )
    todev_one_touch_leave_pile: int = betterproto.int32_field(
        26, group="SubNavMsg"
    )
    todev_mow_task: "NavStartJob" = betterproto.message_field(
        27, group="SubNavMsg"
    )
    toapp_bstate: "NavBorderState" = betterproto.message_field(
        28, group="SubNavMsg"
    )
    todev_lat_up_ack: int = betterproto.int32_field(
        29, group="SubNavMsg"
    )
    todev_gethash: "NavGetHashList" = betterproto.message_field(
        30, group="SubNavMsg"
    )
    toapp_gethash_ack: "NavGetHashListAck" = betterproto.message_field(
        31, group="SubNavMsg"
    )
    todev_get_commondata: "NavGetCommData" = betterproto.message_field(
        32, group="SubNavMsg"
    )
    toapp_get_commondata_ack: "NavGetCommDataAck" = betterproto.message_field(
        33, group="SubNavMsg"
    )
    bidire_reqconver_path: "NavReqCoverPath" = betterproto.message_field(
        34, group="SubNavMsg"
    )
    toapp_zigzag: "NavUploadZigZagResult" = betterproto.message_field(
        35, group="SubNavMsg"
    )
    todev_zigzag_ack: "NavUploadZigZagResultAck" = betterproto.message_field(
        36, group="SubNavMsg"
    )
    todev_taskctrl: "NavTaskCtrl" = betterproto.message_field(
        37, group="SubNavMsg"
    )
    bidire_taskid: "NavTaskIdRw" = betterproto.message_field(
        38, group="SubNavMsg"
    )
    toapp_bp: "NavTaskBreakPoint" = betterproto.message_field(
        39, group="SubNavMsg"
    )
    todev_planjob_set: "NavPlanJobSet" = betterproto.message_field(
        40, group="SubNavMsg"
    )
    todev_unable_time_set: "NavUnableTimeSet" = betterproto.message_field(
        41, group="SubNavMsg"
    )
    simulation_cmd: "SimulationCmdData" = betterproto.message_field(
        42, group="SubNavMsg"
    )
    todev_work_report_update_cmd: "WorkReportUpdateCmd" = (
        betterproto.message_field(43, group="SubNavMsg")
    )
    toapp_work_report_update_ack: "WorkReportUpdateAck" = (
        betterproto.message_field(44, group="SubNavMsg")
    )
    todev_work_report_cmd: "WorkReportCmdData" = betterproto.message_field(
        45, group="SubNavMsg"
    )
    toapp_work_report_ack: "WorkReportInfoAck" = betterproto.message_field(
        46, group="SubNavMsg"
    )
    toapp_work_report_upload: "WorkReportInfoAck" = betterproto.message_field(
        47, group="SubNavMsg"
    )
    app_request_cover_paths: "AppRequestCoverPathsT" = (
        betterproto.message_field(48, group="SubNavMsg")
    )
    cover_path_upload: "CoverPathUploadT" = betterproto.message_field(
        49, group="SubNavMsg"
    )
    zone_start_precent: "ZoneStartPrecentT" = betterproto.message_field(
        50, group="SubNavMsg"
    )
    vision_ctrl: "VisionCtrlMsg" = betterproto.message_field(
        51, group="SubNavMsg"
    )
    nav_sys_param_cmd: "NavSysParamMsg" = betterproto.message_field(
        52, group="SubNavMsg"
    )
    plan_task_execute: "NavPlanTaskExecute" = betterproto.message_field(
        53, group="SubNavMsg"
    )
    toapp_costmap: "CostmapT" = betterproto.message_field(
        54, group="SubNavMsg"
    )
    plan_task_name_id: "PlanTaskNameIdT" = betterproto.message_field(
        55, group="SubNavMsg"
    )
    all_plan_task: "NavGetAllPlanTask" = betterproto.message_field(
        56, group="SubNavMsg"
    )
    todev_taskctrl_ack: "NavTaskCtrlAck" = betterproto.message_field(
        57, group="SubNavMsg"
    )
    toapp_map_name_msg: "NavMapNameMsg" = betterproto.message_field(
        58, group="SubNavMsg"
    )
    todev_svg_msg: "SvgMessageAckT" = betterproto.message_field(
        59, group="SubNavMsg"
    )
    toapp_svg_msg: "SvgMessageAckT" = betterproto.message_field(
        60, group="SubNavMsg"
    )
    toapp_all_hash_name: "AppGetAllAreaHashName" = betterproto.message_field(
        61, group="SubNavMsg"
    )



@dataclass(eq=False, repr=False)
class SysBatUp(betterproto.Message):
    bat_val: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysWorkState(betterproto.Message):
    device_state: int = betterproto.int32_field(1)
    charge_state: int = betterproto.int32_field(2)
    cm_hash: int = betterproto.int64_field(3)
    path_hash: int = betterproto.int64_field(4)


@dataclass(eq=False, repr=False)
class SysSetTimeZone(betterproto.Message):
    time_stamp: int = betterproto.int32_field(1)
    time_area: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class SysSetDateTime(betterproto.Message):
    year: int = betterproto.int32_field(1)
    month: int = betterproto.int32_field(2)
    date: int = betterproto.int32_field(3)
    week: int = betterproto.int32_field(4)
    hours: int = betterproto.int32_field(5)
    minutes: int = betterproto.int32_field(6)
    seconds: int = betterproto.int32_field(7)
    time_zone: int = betterproto.int32_field(8)
    daylight: int = betterproto.int32_field(9)


@dataclass(eq=False, repr=False)
class SysJobPlan(betterproto.Message):
    job_id: int = betterproto.int64_field(1)
    job_mode: int = betterproto.int32_field(2)
    rain_tactics: int = betterproto.int32_field(3)
    knife_height: int = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class SysDevErrCode(betterproto.Message):
    error_code: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysBoardType(betterproto.Message):
    board_type: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysSwVersion(betterproto.Message):
    board_type: int = betterproto.int32_field(1)
    version_len: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class SysDelJobPlan(betterproto.Message):
    device_id: str = betterproto.string_field(1)
    plan_id: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class SysJobPlanTime(betterproto.Message):
    plan_id: int = betterproto.int64_field(1)
    start_job_time: int = betterproto.int32_field(2)
    end_job_time: int = betterproto.int32_field(3)
    time_in_day: int = betterproto.int32_field(4)
    job_plan_mode: int = betterproto.int32_field(5)
    job_plan_enable: int = betterproto.int32_field(6)
    week_day: list[int] = betterproto.int32_field(7)
    time_in_week_day: list[int] = betterproto.int32_field(8)
    every_day: int = betterproto.int32_field(9)
    job_plan: "SysJobPlan" = betterproto.message_field(10)


@dataclass(eq=False, repr=False)
class SysMowInfo(betterproto.Message):
    device_state: int = betterproto.int32_field(1)
    bat_val: int = betterproto.int32_field(2)
    knife_height: int = betterproto.int32_field(3)
    rtk_status: int = betterproto.int32_field(4)
    rtk_stars: int = betterproto.int32_field(5)


@dataclass(eq=False, repr=False)
class SysOptiLineAck(betterproto.Message):
    respones_cmd: int = betterproto.int32_field(1)
    current_frame: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class SysCommCmd(betterproto.Message):
    rw: int = betterproto.int32_field(1)
    id: int = betterproto.int32_field(2)
    context: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class SysUploadFileProgress(betterproto.Message):
    biz_id: str = betterproto.string_field(1)
    result: int = betterproto.int32_field(2)
    progress: int = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class SysErrorCode(betterproto.Message):
    code_no: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysBorder(betterproto.Message):
    borderval: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysPlanJobStatus(betterproto.Message):
    planjob_status: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class SysKnifeControl(betterproto.Message):
    knife_status: int = betterproto.int32_field(1)
    knife_height: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class SysResetSystemStatus(betterproto.Message):
    reset_staus: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class TimeCtrlLight(betterproto.Message):
    operate: int = betterproto.int32_field(1)
    enable: int = betterproto.int32_field(2)
    start_hour: int = betterproto.int32_field(3)
    start_min: int = betterproto.int32_field(4)
    end_hour: int = betterproto.int32_field(5)
    end_min: int = betterproto.int32_field(6)
    action: int = betterproto.int32_field(7)


@dataclass(eq=False, repr=False)
class VisionPointMsg(betterproto.Message):
    x: float = betterproto.float_field(1)
    y: float = betterproto.float_field(2)
    z: float = betterproto.float_field(3)


@dataclass(eq=False, repr=False)
class VisionPointInfoMsg(betterproto.Message):
    label: int = betterproto.int32_field(1)
    num: int = betterproto.int32_field(2)
    vision_point: list["VisionPointMsg"] = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class VioToAppInfoMsg(betterproto.Message):
    x: float = betterproto.double_field(1)
    y: float = betterproto.double_field(2)
    heading: float = betterproto.double_field(3)
    vio_state: int = betterproto.int32_field(4)
    brightness: int = betterproto.int32_field(5)
    detect_feature_num: int = betterproto.int32_field(6)
    track_feature_num: int = betterproto.int32_field(7)


@dataclass(eq=False, repr=False)
class VisionStatisticMsg(betterproto.Message):
    mean: float = betterproto.float_field(1)
    var: float = betterproto.float_field(2)


@dataclass(eq=False, repr=False)
class VisionStatisticInfoMsg(betterproto.Message):
    timestamp: float = betterproto.double_field(1)
    num: int = betterproto.int32_field(2)
    vision_statistics: list["VisionStatisticMsg"] = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class SystemRapidStateTunnelMsg(betterproto.Message):
    rapid_state_data: list[int] = betterproto.int64_field(1)
    vision_point_info: list["VisionPointInfoMsg"] = betterproto.message_field(2)
    vio_to_app_info: "VioToAppInfoMsg" = betterproto.message_field(3)
    vision_statistic_info: "VisionStatisticInfoMsg" = betterproto.message_field(4)


@dataclass(eq=False, repr=False)
class SystemTardStateTunnelMsg(betterproto.Message):
    tard_state_data: list[int] = betterproto.int64_field(1)


@dataclass(eq=False, repr=False)
class SystemUpdateBufMsg(betterproto.Message):
    update_buf_data: list[int] = betterproto.int64_field(1)


@dataclass(eq=False, repr=False)
class SysOffChipFlash(betterproto.Message):
    op: "Operation" = betterproto.enum_field(1)
    id: "OffPartId" = betterproto.enum_field(2)
    start_addr: int = betterproto.uint32_field(3)
    offset: int = betterproto.uint32_field(4)
    length: int = betterproto.int32_field(5)
    data: bytes = betterproto.bytes_field(6)
    code: int = betterproto.int32_field(7)
    msg: str = betterproto.string_field(8)


@dataclass(eq=False, repr=False)
class SystemTmpCycleTxMsg(betterproto.Message):
    cycle_tx_data: list[int] = betterproto.int64_field(1)


@dataclass(eq=False, repr=False)
class LoraCfgReq(betterproto.Message):
    op: int = betterproto.int32_field(1)
    cfg: str = betterproto.string_field(2)


@dataclass(eq=False, repr=False)
class LoraCfgRsp(betterproto.Message):
    result: int = betterproto.int32_field(1)
    op: int = betterproto.int32_field(2)
    cfg: str = betterproto.string_field(3)
    fac_cfg: bytes = betterproto.bytes_field(4)


@dataclass(eq=False, repr=False)
class ModFwInfo(betterproto.Message):
    type: int = betterproto.int32_field(1)
    identify: str = betterproto.string_field(2)
    version: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class DeviceFwInfo(betterproto.Message):
    result: int = betterproto.int32_field(1)
    version: str = betterproto.string_field(2)
    mod: list["ModFwInfo"] = betterproto.message_field(3)


@dataclass(eq=False, repr=False)
class MowToAppInfoT(betterproto.Message):
    type: int = betterproto.int32_field(1)
    cmd: int = betterproto.int32_field(2)
    mow_data: list[int] = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class DeviceProductTypeInfoT(betterproto.Message):
    result: int = betterproto.int32_field(1)
    main_product_type: str = betterproto.string_field(2)
    sub_product_type: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class QcAppTestExcept(betterproto.Message):
    except_type: str = betterproto.string_field(1)
    conditions: list["QcAppTestConditions"] = betterproto.message_field(2)


@dataclass(eq=False, repr=False)
class QcAppTestConditions(betterproto.Message):
    cond_type: str = betterproto.string_field(1)
    int_val: int = betterproto.int32_field(2)
    float_val: float = betterproto.float_field(3)
    double_val: float = betterproto.double_field(4)
    string_val: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class MowToAppQctoolsInfoT(betterproto.Message):
    type: "QcAppTestId" = betterproto.enum_field(1)
    time_of_duration: int = betterproto.int32_field(2)
    result: int = betterproto.int32_field(3)
    result_details: str = betterproto.string_field(4)
    except_: list["QcAppTestExcept"] = betterproto.message_field(5)


@dataclass(eq=False, repr=False)
class MCtrlSimulationCmdData(betterproto.Message):
    sub_cmd: int = betterproto.int32_field(1)
    param_id: int = betterproto.int32_field(2)
    param_value: list[int] = betterproto.int32_field(3)


@dataclass(eq=False, repr=False)
class RptLora(betterproto.Message):
    pair_code_scan: int = betterproto.int32_field(1)
    pair_code_channel: int = betterproto.int32_field(2)
    pair_code_locid: int = betterproto.int32_field(3)
    pair_code_netid: int = betterproto.int32_field(4)
    lora_connection_status: int = betterproto.int32_field(5)


@dataclass(eq=False, repr=False)
class MqttRtkConnect(betterproto.Message):
    rtk_switch: int = betterproto.int32_field(1)
    rtk_channel: int = betterproto.int32_field(2)
    rtk_base_num: str = betterproto.string_field(3)


@dataclass(eq=False, repr=False)
class RptRtk(betterproto.Message):
    status: int = betterproto.int32_field(1)
    pos_level: int = betterproto.int32_field(2)
    gps_stars: int = betterproto.int32_field(3)
    age: int = betterproto.int32_field(4)
    lat_std: int = betterproto.int32_field(5)
    lon_std: int = betterproto.int32_field(6)
    l2_stars: int = betterproto.int32_field(7)
    dis_status: int = betterproto.int64_field(8)
    top4_total_mean: int = betterproto.int64_field(9)
    co_view_stars: int = betterproto.int32_field(10)
    reset: int = betterproto.int32_field(11)
    lora_info: "RptLora" = betterproto.message_field(12)
    mqtt_rtk_info: "MqttRtkConnect" = betterproto.message_field(13)


@dataclass(eq=False, repr=False)
class RptDevLocation(betterproto.Message):
    real_pos_x: int = betterproto.int32_field(1)
    real_pos_y: int = betterproto.int32_field(2)
    real_toward: int = betterproto.int32_field(3)
    pos_type: int = betterproto.int32_field(4)
    zone_hash: int = betterproto.int64_field(5)
    bol_hash: int = betterproto.int64_field(6)


@dataclass(eq=False, repr=False)
class VioSurvivalInfoT(betterproto.Message):
    vio_survival_distance: float = betterproto.float_field(1)


@dataclass(eq=False, repr=False)
class CollectorStatusT(betterproto.Message):
    collector_installation_status: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class LockStateT(betterproto.Message):
    lock_state: int = betterproto.uint32_field(1)


@dataclass(eq=False, repr=False)
class RptDevStatus(betterproto.Message):
    sys_status: int = betterproto.int32_field(1)
    charge_state: int = betterproto.int32_field(2)
    battery_val: int = betterproto.int32_field(3)
    sensor_status: int = betterproto.int32_field(4)
    last_status: int = betterproto.int32_field(5)
    sys_time_stamp: int = betterproto.int64_field(6)
    vslam_status: int = betterproto.int32_field(7)
    mnet_info: "MnetInfo" = betterproto.message_field(8)
    vio_survival_info: "VioSurvivalInfoT" = betterproto.message_field(9)
    collector_status: "CollectorStatusT" = betterproto.message_field(10)
    lock_state: "LockStateT" = betterproto.message_field(11)


@dataclass(eq=False, repr=False)
class RptConnectStatus(betterproto.Message):
    connect_type: int = betterproto.int32_field(1)
    ble_rssi: int = betterproto.int32_field(2)
    wifi_rssi: int = betterproto.int32_field(3)
    link_type: int = betterproto.int32_field(4)
    mnet_rssi: int = betterproto.int32_field(5)
    mnet_inet: int = betterproto.int32_field(6)
    used_net: "NetUsedType" = betterproto.enum_field(7)
    mnet_cfg: "MnetCfg" = betterproto.message_field(8)


@dataclass(eq=False, repr=False)
class NavHeadingStateT(betterproto.Message):
    heading_state: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class RptWork(betterproto.Message):
    plan: int = betterproto.int32_field(1)
    path_hash: int = betterproto.int64_field(2)
    progress: int = betterproto.int32_field(3)
    area: int = betterproto.int32_field(4)
    bp_info: int = betterproto.int32_field(5)
    bp_hash: int = betterproto.int64_field(6)
    bp_pos_x: int = betterproto.int32_field(7)
    bp_pos_y: int = betterproto.int32_field(8)
    real_path_num: int = betterproto.int64_field(9)
    path_pos_x: int = betterproto.int32_field(10)
    path_pos_y: int = betterproto.int32_field(11)
    ub_zone_hash: int = betterproto.int64_field(12)
    ub_path_hash: int = betterproto.int64_field(13)
    init_cfg_hash: int = betterproto.int64_field(14)
    ub_ecode_hash: int = betterproto.int64_field(15)
    nav_run_mode: int = betterproto.int32_field(16)
    test_mode_status: int = betterproto.int64_field(17)
    man_run_speed: int = betterproto.int32_field(18)
    nav_edit_status: int = betterproto.int32_field(19)
    knife_height: int = betterproto.int32_field(20)
    nav_heading_state: "NavHeadingStateT" = betterproto.message_field(21)


@dataclass(eq=False, repr=False)
class BladeUsed(betterproto.Message):
    blade_used_time: int = betterproto.int32_field(1)
    blade_used_warn_time: int = betterproto.int32_field(2)



@dataclass(eq=False, repr=False)
class RptMaintain(betterproto.Message):
    mileage: int = betterproto.int64_field(1)
    work_time: int = betterproto.int32_field(2)
    bat_cycles: int = betterproto.int32_field(3)
    blade_used_time: BladeUsed = betterproto.message_field(4)


@dataclass(eq=False, repr=False)
class ReportInfoCfg(betterproto.Message):
    act: "RptAct" = betterproto.enum_field(1)
    timeout: int = betterproto.int32_field(2)
    period: int = betterproto.int32_field(3)
    no_change_period: int = betterproto.int32_field(4)
    count: int = betterproto.int32_field(5)
    sub: list["RptInfoType"] = betterproto.enum_field(6)


@dataclass(eq=False, repr=False)
class ReportInfoData(betterproto.Message):
    connect: "RptConnectStatus" = betterproto.message_field(1)
    dev: "RptDevStatus" = betterproto.message_field(2)
    rtk: "RptRtk" = betterproto.message_field(3)
    locations: list["RptDevLocation"] = betterproto.message_field(4)
    work: "RptWork" = betterproto.message_field(5)
    fw_info: "DeviceFwInfo" = betterproto.message_field(6)
    maintain: "RptMaintain" = betterproto.message_field(7)
    vision_point_info: list["VisionPointInfoMsg"] = betterproto.message_field(8)
    vio_to_app_info: "VioToAppInfoMsg" = betterproto.message_field(9)
    vision_statistic_info: "VisionStatisticInfoMsg" = betterproto.message_field(10)


@dataclass(eq=False, repr=False)
class MctlSys(betterproto.Message):
    toapp_batinfo: "SysBatUp" = betterproto.message_field(
        1, group="SubSysMsg"
    )
    toapp_work_state: "SysWorkState" = betterproto.message_field(
        2, group="SubSysMsg"
    )
    todev_time_zone: "SysSetTimeZone" = betterproto.message_field(
        3, group="SubSysMsg"
    )
    todev_data_time: "SysSetDateTime" = betterproto.message_field(
        4, group="SubSysMsg"
    )
    job_plan: "SysJobPlan" = betterproto.message_field(
        6, group="SubSysMsg"
    )
    toapp_err_code: "SysDevErrCode" = betterproto.message_field(
        7, group="SubSysMsg"
    )
    todev_job_plan_time: "SysJobPlanTime" = betterproto.message_field(
        10, group="SubSysMsg"
    )
    toapp_mow_info: "SysMowInfo" = betterproto.message_field(
        11, group="SubSysMsg"
    )
    bidire_comm_cmd: "SysCommCmd" = betterproto.message_field(
        12, group="SubSysMsg"
    )
    plan_job_del: int = betterproto.int64_field(
        14, group="SubSysMsg"
    )
    border: "SysBorder" = betterproto.message_field(
        15, group="SubSysMsg"
    )
    toapp_plan_status: "SysPlanJobStatus" = betterproto.message_field(
        18, group="SubSysMsg"
    )
    toapp_ul_fprogress: "SysUploadFileProgress" = betterproto.message_field(
        19, group="SubSysMsg"
    )
    todev_deljobplan: "SysDelJobPlan" = betterproto.message_field(
        20, group="SubSysMsg"
    )
    todev_mow_info_up: int = betterproto.int32_field(
        21, group="SubSysMsg"
    )
    todev_knife_ctrl: "SysKnifeControl" = betterproto.message_field(
        22, group="SubSysMsg"
    )
    todev_reset_system: int = betterproto.int32_field(
        23, group="SubSysMsg"
    )
    todev_reset_system_status: "SysResetSystemStatus" = (
        betterproto.message_field(24, group="SubSysMsg")
    )
    system_rapid_state_tunnel: "SystemRapidStateTunnelMsg" = (
        betterproto.message_field(25, group="SubSysMsg")
    )
    system_tard_state_tunnel: "SystemTardStateTunnelMsg" = (
        betterproto.message_field(26, group="SubSysMsg")
    )
    system_update_buf: "SystemUpdateBufMsg" = betterproto.message_field(
        27, group="SubSysMsg"
    )
    todev_time_ctrl_light: "TimeCtrlLight" = betterproto.message_field(
        28, group="SubSysMsg"
    )
    system_tmp_cycle_tx: "SystemTmpCycleTxMsg" = betterproto.message_field(
        29, group="SubSysMsg"
    )
    todev_off_chip_flash: "SysOffChipFlash" = betterproto.message_field(
        30, group="SubSysMsg"
    )
    todev_get_dev_fw_info: int = betterproto.int32_field(
        31, group="SubSysMsg"
    )
    toapp_dev_fw_info: "DeviceFwInfo" = betterproto.message_field(
        32, group="SubSysMsg"
    )
    todev_lora_cfg_req: "LoraCfgReq" = betterproto.message_field(
        33, group="SubSysMsg"
    )
    toapp_lora_cfg_rsp: "LoraCfgRsp" = betterproto.message_field(
        34, group="SubSysMsg"
    )
    mow_to_app_info: "MowToAppInfoT" = betterproto.message_field(
        35, group="SubSysMsg"
    )
    device_product_type_info: "DeviceProductTypeInfoT" = (
        betterproto.message_field(36, group="SubSysMsg")
    )
    mow_to_app_qctools_info: "MowToAppQctoolsInfoT" = (
        betterproto.message_field(37, group="SubSysMsg")
    )
    todev_report_cfg: "ReportInfoCfg" = betterproto.message_field(
        38, group="SubSysMsg"
    )
    toapp_report_data: "ReportInfoData" = betterproto.message_field(
        39, group="SubSysMsg"
    )
    simulation_cmd: "MCtrlSimulationCmdData" = betterproto.message_field(
        42, group="SubSysMsg"
    )



@dataclass(eq=False, repr=False)
class BaseInfo(betterproto.Message):
    dev_version: str = betterproto.string_field(1)
    dev_status: int = betterproto.int32_field(2)
    batt_val: int = betterproto.int32_field(3)
    init_status: int = betterproto.int32_field(4)
    is_tilt: int = betterproto.int32_field(5)


@dataclass(eq=False, repr=False)
class OtaInfo(betterproto.Message):
    otaid: str = betterproto.string_field(1)
    version: str = betterproto.string_field(2)
    progress: int = betterproto.int32_field(3)
    result: int = betterproto.int32_field(4)
    message: str = betterproto.string_field(5)


@dataclass(eq=False, repr=False)
class GetInfoReq(betterproto.Message):
    type: "InfoType" = betterproto.enum_field(1)


@dataclass(eq=False, repr=False)
class GetInfoRsp(betterproto.Message):
    result: int = betterproto.int32_field(1)
    type: "InfoType" = betterproto.enum_field(2)
    base: "BaseInfo" = betterproto.message_field(
        3, group="info"
    )
    ota: "OtaInfo" = betterproto.message_field(4, group="info")



@dataclass(eq=False, repr=False)
class MctlOta(betterproto.Message):
    todev_get_info_req: "GetInfoReq" = betterproto.message_field(
        1, group="SubOtaMsg"
    )
    toapp_get_info_rsp: "GetInfoRsp" = betterproto.message_field(
        2, group="SubOtaMsg"
    )



@dataclass(eq=False, repr=False)
class MulSetAudio(betterproto.Message):
    at_switch: int = betterproto.int32_field(
        1, group="AudioCfg_u"
    )
    au_language: "MulLanguage" = betterproto.enum_field(
        2, group="AudioCfg_u"
    )



@dataclass(eq=False, repr=False)
class MulSetVideo(betterproto.Message):
    position: "MulCameraPosition" = betterproto.enum_field(1)
    vi_switch: int = betterproto.int32_field(2)


@dataclass(eq=False, repr=False)
class MulSetVideoAck(betterproto.Message):
    error_code: "MulVideoErrorCode" = betterproto.enum_field(1)


@dataclass(eq=False, repr=False)
class MulAudioCfg(betterproto.Message):
    au_switch: int = betterproto.int32_field(1)
    au_language: "MulLanguage" = betterproto.enum_field(2)


@dataclass(eq=False, repr=False)
class MulSetWiper(betterproto.Message):
    round: int = betterproto.int32_field(1)


@dataclass(eq=False, repr=False)
class MulSetWiperAck(betterproto.Message):
    error_code: "MulWiperErrorCode" = betterproto.enum_field(1)


@dataclass(eq=False, repr=False)
class SocMul(betterproto.Message):
    set_audio: "MulSetAudio" = betterproto.message_field(
        1, group="SubMul"
    )
    audio_cfg: "MulAudioCfg" = betterproto.message_field(
        2, group="SubMul"
    )
    set_video: "MulSetVideo" = betterproto.message_field(
        3, group="SubMul"
    )
    set_video_ack: "MulSetVideoAck" = betterproto.message_field(
        4, group="SubMul"
    )
    set_wiper: "MulSetWiper" = betterproto.message_field(
        5, group="SubMul"
    )
    set_wiper_ack: "MulSetWiperAck" = betterproto.message_field(
        6, group="SubMul"
    )



@dataclass(eq=False, repr=False)
class PerceptionObstaclesT(betterproto.Message):
    label: int = betterproto.int32_field(1)
    num: int = betterproto.int32_field(2)
    points_x: list[int] = betterproto.int32_field(3)
    points_y: list[int] = betterproto.int32_field(4)


@dataclass(eq=False, repr=False)
class PerceptionObstaclesVisualizationT(betterproto.Message):
    is_heart_beat: int = betterproto.int32_field(1)
    num: int = betterproto.int32_field(2)
    obstacles: list["PerceptionObstaclesT"] = betterproto.message_field(3)
    timestamp: float = betterproto.double_field(4)
    scale: float = betterproto.float_field(5)


@dataclass(eq=False, repr=False)
class PerceptionUniversalBuffT(betterproto.Message):
    perception_type: int = betterproto.int32_field(1)
    perception_len: int = betterproto.int32_field(2)
    universal_buff: list[int] = betterproto.int64_field(3)


@dataclass(eq=False, repr=False)
class MctlPept(betterproto.Message):
    perception_obstacles_visualization: "PerceptionObstaclesVisualizationT" = betterproto.message_field(1, group="SubPeptMsg")
    perception_universal_buff: "PerceptionUniversalBuffT" = (
        betterproto.message_field(2, group="SubPeptMsg")
    )



@dataclass(eq=False, repr=False)
class MsgNull(betterproto.Message):
    pass


@dataclass(eq=False, repr=False)
class LubaMsg(betterproto.Message):
    msgtype: "MsgCmdType" = betterproto.enum_field(1)
    sender: "MsgDevice" = betterproto.enum_field(2)
    rcver: "MsgDevice" = betterproto.enum_field(3)
    msgattr: "MsgAttr" = betterproto.enum_field(4)
    seqs: int = betterproto.int32_field(5)
    version: int = betterproto.int32_field(6)
    subtype: int = betterproto.int32_field(7)
    net: "DevNet" = betterproto.message_field(
        8, group="LubaSubMsg"
    )
    sys: "MctlSys" = betterproto.message_field(
        10, group="LubaSubMsg"
    )
    nav: "MctlNav" = betterproto.message_field(
        11, group="LubaSubMsg"
    )
    driver: "MctlDriver" = betterproto.message_field(
        12, group="LubaSubMsg"
    )
    ota: "MctlOta" = betterproto.message_field(
        13, group="LubaSubMsg"
    )
    mul: "SocMul" = betterproto.message_field(
        14, group="LubaSubMsg"
    )
    null: "MsgNull" = betterproto.message_field(
        16, group="LubaSubMsg"
    )
    pept: "MctlPept" = betterproto.message_field(
        17, group="LubaSubMsg"
    )
    base: "BaseStation" = betterproto.message_field(
        18, group="LubaSubMsg"
    )
    timestamp: int = betterproto.uint64_field(15)
