Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions radio/app/customTypes.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from enum import Enum
from typing import Any, Union

from typing_extensions import NotRequired, TypedDict
Expand Down Expand Up @@ -37,3 +38,9 @@ class MotorTestAllValues(TypedDict):
class SetFlightModeValueAndNumber(TypedDict):
mode_number: int
flight_mode: int


class VehicleType(Enum):
UNKNOWN = 0
FIXED_WING = 1
MULTIROTOR = 2
11 changes: 7 additions & 4 deletions radio/app/drone.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
from app.controllers.navController import NavController
from app.controllers.paramsController import ParamsController
from app.controllers.rcController import RcController
from app.customTypes import Number, Response
from app.utils import commandAccepted
from app.customTypes import Number, Response, VehicleType
from app.utils import commandAccepted, getVehicleType

# Constants

Expand Down Expand Up @@ -132,8 +132,11 @@ def __init__(

self.sendConnectionStatusUpdate("Received heartbeat")

self.aircraft_type = initial_heartbeat.type
if self.aircraft_type not in (1, 2):
self.aircraft_type = getVehicleType(initial_heartbeat.type)
if self.aircraft_type not in (
VehicleType.FIXED_WING.value,
VehicleType.MULTIROTOR.value,
):
self.logger.error("Aircraft not plane or quadcopter")
self.master.close()
self.master = None
Expand Down
34 changes: 34 additions & 0 deletions radio/app/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
from pymavlink import mavutil
from serial.tools import list_ports

from app.customTypes import VehicleType

from . import socketio


Expand Down Expand Up @@ -207,3 +209,35 @@ def wpToMissionItemInt(
wp.mission_type,
)
return wp_int


FIXED_WING_TYPES = [
mavutil.mavlink.MAV_TYPE_FIXED_WING,
mavutil.mavlink.MAV_TYPE_VTOL_DUOROTOR,
mavutil.mavlink.MAV_TYPE_VTOL_QUADROTOR,
mavutil.mavlink.MAV_TYPE_VTOL_TILTROTOR,
# mavutil.mavlink.MAV_TYPE_VTOL_TAILSITTER,
# mavutil.mavlink.MAV_TYPE_VTOL_TILTWING,
mavutil.mavlink.MAV_TYPE_VTOL_RESERVED2,
mavutil.mavlink.MAV_TYPE_VTOL_RESERVED3,
mavutil.mavlink.MAV_TYPE_VTOL_RESERVED4,
mavutil.mavlink.MAV_TYPE_VTOL_RESERVED5,
]

MULTIROTOR_TYPES = [
mavutil.mavlink.MAV_TYPE_QUADROTOR,
mavutil.mavlink.MAV_TYPE_HEXAROTOR,
mavutil.mavlink.MAV_TYPE_OCTOROTOR,
mavutil.mavlink.MAV_TYPE_TRICOPTER,
mavutil.mavlink.MAV_TYPE_DODECAROTOR,
mavutil.mavlink.MAV_TYPE_ADSB, # For cube orange (?)
]


def getVehicleType(typeId: int) -> int:
if typeId in FIXED_WING_TYPES:
return VehicleType.FIXED_WING.value
elif typeId in MULTIROTOR_TYPES:
return VehicleType.MULTIROTOR.value
else:
return VehicleType.UNKNOWN.value
Loading