Skip to content

aircraft

Classes:

Name Description
A10C

A-10C Warthog.

A10C2

A-10C II Tank Killer.

AH64DBLKII

AH-64D Apache.

AV8BNA

AV-8B Night Attack.

AdvancedAircraft

Advanced Aircraft.

BasicAircraft

Basic Aircraft.

C130J30

C-130J 30 Hercules.

F14A135GR

F-14A-135-GR Tomcat.

F14B

F-14B Tomcat.

F15ESE

F-15ESE Eagle.

F16C50

F-16C Viper.

F4E45MC

F-4E Phantom II.

FA18Chornet

F/A-18C Hornet.

Ka50

Ka-50 Black Shark.

Ka503

Ka-50 Black Shark III.

MetaAircraft

Metaclass for all BasicAircraft.

Mi24P

Mi-24P Hind.

Mi8MT

Mi-8MTV2 Magnificent Eight.

Functions:

Name Description
draw_autopilot_channels

Draw rectangles with a background for autopilot channels.

A10C

A10C(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

A-10C Warthog.

Create A-10C Warthog or A-10C II Tank Killer.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for A-10C Warthog for Color LCD.

draw_for_lcd_mono

Prepare image for A-10C Warthog for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create A-10C Warthog or A-10C II Tank Killer.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'VHFAM_FREQ1': int(),
        'VHFAM_FREQ2': int(),
        'VHFAM_FREQ3': int(),
        'VHFAM_FREQ4': int(),
        'VHFAM_PRESET': int(),
        'VHFFM_FREQ1': int(),
        'VHFFM_FREQ2': int(),
        'VHFFM_FREQ3': int(),
        'VHFFM_FREQ4': int(),
        'VHFFM_PRESET': int(),
        'UHF_100MHZ_SEL': int(),
        'UHF_10MHZ_SEL': int(),
        'UHF_1MHZ_SEL': int(),
        'UHF_POINT1MHZ_SEL': int(),
        'UHF_POINT25_SEL': int(),
        'UHF_PRESET': '',
        'ARC210_FREQUENCY': '',
        'ARC210_PREV_MANUAL_FREQ': '',
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for A-10C Warthog for Color LCD.

Source code in src/dcspy/aircraft.py
900
901
902
903
904
905
906
907
908
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for A-10C Warthog for Color LCD."""
    draw = ImageDraw.Draw(img)
    uhf = self._generate_uhf()
    vhf_am = self._generate_vhf('AM')
    vhf_fm = self._generate_vhf('FM')
    for i, line in enumerate(['      *** RADIOS ***', f' AM: {vhf_am}', f'UHF: {uhf}', f' FM: {vhf_fm}']):
        offset = i * 20
        draw.text(xy=(0, offset), text=line, fill=self.lcd.foreground, font=self.lcd.font_s)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for A-10C Warthog for Mono LCD.

Source code in src/dcspy/aircraft.py
890
891
892
893
894
895
896
897
898
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for A-10C Warthog for Mono LCD."""
    draw = ImageDraw.Draw(img)
    uhf = self._generate_uhf()
    vhf_am = self._generate_vhf('AM')
    vhf_fm = self._generate_vhf('FM')
    for i, line in enumerate(['      *** RADIOS ***', f' AM: {vhf_am}', f'UHF: {uhf}', f' FM: {vhf_fm}']):
        offset = i * 10
        draw.text(xy=(0, offset), text=line, fill=self.lcd.foreground, font=self.lcd.font_s)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

A10C2

A10C2(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: A10C

A-10C II Tank Killer.

Create A-10C Warthog or A-10C II Tank Killer.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for A-10C II Tank Killer for Color LCD.

draw_for_lcd_mono

Prepare image for A-10C II Tank Killer for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create A-10C Warthog or A-10C II Tank Killer.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'VHFAM_FREQ1': int(),
        'VHFAM_FREQ2': int(),
        'VHFAM_FREQ3': int(),
        'VHFAM_FREQ4': int(),
        'VHFAM_PRESET': int(),
        'VHFFM_FREQ1': int(),
        'VHFFM_FREQ2': int(),
        'VHFFM_FREQ3': int(),
        'VHFFM_FREQ4': int(),
        'VHFFM_PRESET': int(),
        'UHF_100MHZ_SEL': int(),
        'UHF_10MHZ_SEL': int(),
        'UHF_1MHZ_SEL': int(),
        'UHF_POINT1MHZ_SEL': int(),
        'UHF_POINT25_SEL': int(),
        'UHF_PRESET': '',
        'ARC210_FREQUENCY': '',
        'ARC210_PREV_MANUAL_FREQ': '',
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for A-10C II Tank Killer for Color LCD.

Source code in src/dcspy/aircraft.py
925
926
927
928
929
930
931
932
933
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for A-10C II Tank Killer for Color LCD."""
    draw = ImageDraw.Draw(img)
    uhf = self._generate_uhf()
    vhf_fm = self._generate_vhf('FM')
    arc = self._generate_arc()
    for i, line in enumerate(['      *** RADIOS ***', f' AM: {arc}', f'UHF: {uhf}', f' FM: {vhf_fm}']):
        offset = i * 20
        draw.text(xy=(0, offset), text=line, fill=self.lcd.foreground, font=self.lcd.font_s)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for A-10C II Tank Killer for Mono LCD.

Source code in src/dcspy/aircraft.py
915
916
917
918
919
920
921
922
923
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for A-10C II Tank Killer for Mono LCD."""
    draw = ImageDraw.Draw(img)
    uhf = self._generate_uhf()
    vhf_fm = self._generate_vhf('FM')
    arc = self._generate_arc()
    for i, line in enumerate(['      *** RADIOS ***', f' AM: {arc}', f'UHF: {uhf}', f' FM: {vhf_fm}']):
        offset = i * 10
        draw.text(xy=(0, offset), text=line, fill=self.lcd.foreground, font=self.lcd.font_s)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

AH64DBLKII

AH64DBLKII(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: AdvancedAircraft

AH-64D Apache.

Create AH-64D Apache.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare AH-64D Apache specific DCS-BIOS request for button pressed.

draw_for_lcd_color

Prepare image for AH-64D Apache for Color LCD.

draw_for_lcd_mono

Prepare image for AH-64D Apache for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set new data.

Source code in src/dcspy/aircraft.py
674
675
676
677
678
679
680
681
682
683
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create AH-64D Apache.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {f'PLT_EUFD_LINE{i}': '' for i in range(1, 15)}
    super().__init__(lcd_type=lcd_type, **kwargs)
    self.mode = ApacheEufdMode.IDM
    self.warning_line = 1

button_request

button_request(button: AnyButton) -> RequestModel

Prepare AH-64D Apache specific DCS-BIOS request for button pressed.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare AH-64D Apache specific DCS-BIOS request for button pressed.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    wca_or_idm = f'PLT_EUFD_WCA {RequestType.CUSTOM.value} PLT_EUFD_WCA 0|PLT_EUFD_WCA 1|'
    if self.mode == ApacheEufdMode.IDM:
        wca_or_idm = f'PLT_EUFD_IDM {RequestType.CUSTOM.value} PLT_EUFD_IDM 0|PLT_EUFD_IDM 1|'

    if button in (LcdButton.FOUR, LcdButton.UP) and self.mode == ApacheEufdMode.IDM:
        self.mode = ApacheEufdMode.WCA
    elif button in (LcdButton.FOUR, LcdButton.UP) and self.mode != ApacheEufdMode.IDM:
        self.mode = ApacheEufdMode.IDM

    if button in (LcdButton.ONE, LcdButton.LEFT) and self.mode == ApacheEufdMode.WCA:
        self.warning_line += 1

    self.key_req.set_request(LcdButton.ONE, wca_or_idm)
    self.key_req.set_request(LcdButton.LEFT, wca_or_idm)
    return super().button_request(button)

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for AH-64D Apache for Color LCD.

Source code in src/dcspy/aircraft.py
696
697
698
699
700
701
702
703
704
705
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for AH-64D Apache for Color LCD."""
    LOG.debug(f'Mode: {self.mode}')
    kwargs: ApacheAllDrawModesKwargs = ApacheAllDrawModesKwargs(draw=ImageDraw.Draw(img), scale=2)
    if self.mode == ApacheEufdMode.PRE:
        kwargs['x_cords'] = [0] * 10
        kwargs['y_cords'] = [j * 24 for j in range(0, 10)]
        kwargs['font'] = self.lcd.font_l
        del kwargs['scale']
    getattr(self, f'_draw_for_{self.mode.value}')(**kwargs)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for AH-64D Apache for Mono LCD.

Source code in src/dcspy/aircraft.py
685
686
687
688
689
690
691
692
693
694
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for AH-64D Apache for Mono LCD."""
    LOG.debug(f'Mode: {self.mode}')
    kwargs: ApacheAllDrawModesKwargs = ApacheAllDrawModesKwargs(draw=ImageDraw.Draw(img), scale=1)
    if self.mode == ApacheEufdMode.PRE:
        kwargs['x_cords'] = [0] * 5 + [80] * 5
        kwargs['y_cords'] = [j * 8 for j in range(0, 5)] * 2
        kwargs['font'] = self.lcd.font_xs
        del kwargs['scale']
    getattr(self, f'_draw_for_{self.mode.value}')(**kwargs)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set new data.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set new data.

    :param selector:
    :param value:
    """
    if selector == 'PLT_EUFD_LINE1':
        self.mode = ApacheEufdMode.IDM
        if search(r'.*\|.*\|(PRESET TUNE)\s\w+', str(value)):
            self.mode = ApacheEufdMode.PRE
    if selector in ('PLT_EUFD_LINE8', 'PLT_EUFD_LINE9', 'PLT_EUFD_LINE10', 'PLT_EUFD_LINE11', 'PLT_EUFD_LINE12'):
        LOG.debug(f'{type(self).__name__} {selector} original: "{value}"')
        value = str(value).replace(']', '\u2666').replace('[', '\u25ca').replace('~', '\u25a0'). \
            replace('>', '\u25b8').replace('<', '\u25c2').replace('=', '\u2219')
    if 'PLT_EUFD_LINE' in selector:
        LOG.debug(f'{type(self).__name__} {selector} original: "{value}"')
        value = str(value).replace('!', '\u2192')  # replace ! with ->
    super().set_bios(selector, value)

AV8BNA

AV8BNA(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

AV-8B Night Attack.

Create AV-8B Night Attack.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for AV-8B N/A for Color LCD.

draw_for_lcd_mono

Prepare image for AV-8B N/A for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create AV-8B Night Attack.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'UFC_SCRATCHPAD': '',
        'UFC_COMM1_DISPLAY': '',
        'UFC_COMM2_DISPLAY': '',
        'AV8BNA_ODU_1_SELECT': '',
        'AV8BNA_ODU_1_TEXT': '',
        'AV8BNA_ODU_2_SELECT': '',
        'AV8BNA_ODU_2_TEXT': '',
        'AV8BNA_ODU_3_SELECT': '',
        'AV8BNA_ODU_3_TEXT': '',
        'AV8BNA_ODU_4_SELECT': '',
        'AV8BNA_ODU_4_TEXT': '',
        'AV8BNA_ODU_5_SELECT': '',
        'AV8BNA_ODU_5_TEXT': '',
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for AV-8B N/A for Color LCD.

Source code in src/dcspy/aircraft.py
1016
1017
1018
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for AV-8B N/A for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for AV-8B N/A for Mono LCD.

Source code in src/dcspy/aircraft.py
1012
1013
1014
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for AV-8B N/A for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

AdvancedAircraft

AdvancedAircraft(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: BasicAircraft

Advanced Aircraft.

Create advanced aircraft.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for Aircraft for Color LCD.

draw_for_lcd_mono

Prepare image for Aircraft for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
110
111
112
113
114
115
116
117
118
119
120
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create advanced aircraft.

    :param lcd_type: LCD type
    """
    super().__init__(lcd_type=lcd_type)
    self.update_display: Callable[[Image.Image], None] | None = kwargs.get('update_display', None)
    if callable(self.update_display):
        self.bios_data.update(kwargs.get('bios_data', {}))
    self._debug_img = cycle([f'{x:03}' for x in range(NO_OF_LCD_SCREENSHOTS)])

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for Aircraft for Color LCD.

Source code in src/dcspy/aircraft.py
151
152
153
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for Aircraft for Color LCD."""
    raise NotImplementedError

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for Aircraft for Mono LCD.

Source code in src/dcspy/aircraft.py
147
148
149
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for Aircraft for Mono LCD."""
    raise NotImplementedError

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

BasicAircraft

BasicAircraft(lcd_type: LcdInfo)

Basic Aircraft.

Create basic aircraft.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

get_bios

Get value for DCS-BIOS selector.

set_bios

Set value for DCS-BIOS selector.

Source code in src/dcspy/aircraft.py
57
58
59
60
61
62
63
64
65
66
67
68
def __init__(self, lcd_type: LcdInfo) -> None:
    """
    Create basic aircraft.

    :param lcd_type: LCD type
    """
    self.lcd = lcd_type
    self.cfg = load_yaml(full_path=default_yaml)
    self.bios_data: dict[str, BiosValue] = {}
    if self.bios_name:
        self.key_req = KeyRequest(yaml_path=default_yaml.parent / f'{self.bios_name}.yaml', get_bios_fn=self.get_bios)
        self.bios_data.update(self.key_req.cycle_button_ctrl_name)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
82
83
84
85
86
87
88
89
90
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set value for DCS-BIOS selector.

    :param selector:
    :param value:
    """
    self.bios_data[selector] = value
    LOG.debug(f'{type(self).__name__} {selector} value: "{value}" ({type(value).__name__})')

C130J30

C130J30(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: AdvancedAircraft

C-130J 30 Hercules.

Create C-130J 30 Hercules.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for C-130J-30 for Color LCD.

draw_for_lcd_mono

Prepare image for C-130J-30 for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create C-130J 30 Hercules.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'PLT_ICS_INTERPHONE_MODE': 0,
        'PLT_ICS_TRANSMISSION_SELECTOR': 0,
        'CPLT_ICS_INTERPHONE_MODE': 0,
        'CPLT_ICS_TRANSMISSION_SELECTOR': 0,
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for C-130J-30 for Color LCD.

Source code in src/dcspy/aircraft.py
1057
1058
1059
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for C-130J-30 for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for C-130J-30 for Mono LCD.

Source code in src/dcspy/aircraft.py
1053
1054
1055
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for C-130J-30 for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

F14A135GR

F14A135GR(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: F14B

F-14A-135-GR Tomcat.

Create advanced aircraft.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F-14B Tomcat for Color LCD.

draw_for_lcd_mono

Prepare image for F-14B Tomcat for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
110
111
112
113
114
115
116
117
118
119
120
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create advanced aircraft.

    :param lcd_type: LCD type
    """
    super().__init__(lcd_type=lcd_type)
    self.update_display: Callable[[Image.Image], None] | None = kwargs.get('update_display', None)
    if callable(self.update_display):
        self.bios_data.update(kwargs.get('bios_data', {}))
    self._debug_img = cycle([f'{x:03}' for x in range(NO_OF_LCD_SCREENSHOTS)])

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F-14B Tomcat for Color LCD.

Source code in src/dcspy/aircraft.py
952
953
954
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F-14B Tomcat for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F-14B Tomcat for Mono LCD.

Source code in src/dcspy/aircraft.py
948
949
950
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F-14B Tomcat for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

F14B

F14B(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

F-14B Tomcat.

Create advanced aircraft.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F-14B Tomcat for Color LCD.

draw_for_lcd_mono

Prepare image for F-14B Tomcat for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
110
111
112
113
114
115
116
117
118
119
120
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create advanced aircraft.

    :param lcd_type: LCD type
    """
    super().__init__(lcd_type=lcd_type)
    self.update_display: Callable[[Image.Image], None] | None = kwargs.get('update_display', None)
    if callable(self.update_display):
        self.bios_data.update(kwargs.get('bios_data', {}))
    self._debug_img = cycle([f'{x:03}' for x in range(NO_OF_LCD_SCREENSHOTS)])

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F-14B Tomcat for Color LCD.

Source code in src/dcspy/aircraft.py
952
953
954
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F-14B Tomcat for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F-14B Tomcat for Mono LCD.

Source code in src/dcspy/aircraft.py
948
949
950
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F-14B Tomcat for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img))

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

F15ESE

F15ESE(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

F-15ESE Eagle.

Create F-15ESE Egle.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F-15ESE Eagle for Color LCD.

draw_for_lcd_mono

Prepare image for F-15ESE Eagle for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
408
409
410
411
412
413
414
415
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create F-15ESE Egle.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {f'F_UFC_LINE{i}_DISPLAY': '' for i in range(1, 7)}
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F-15ESE Eagle for Color LCD.

Source code in src/dcspy/aircraft.py
427
428
429
430
431
432
433
434
435
436
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F-15ESE Eagle for Color LCD."""
    draw = ImageDraw.Draw(img)
    for i in range(1, 7):
        offset = (i - 1) * 24
        # todo: fix custom font for Color LCD
        draw.text(xy=(0, offset),
                  text=str(self.get_bios(f'F_UFC_LINE{i}_DISPLAY')),
                  fill=self.lcd.foreground,
                  font=ImageFont.truetype(DEFAULT_FONT_NAME, 29))

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F-15ESE Eagle for Mono LCD.

Source code in src/dcspy/aircraft.py
417
418
419
420
421
422
423
424
425
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F-15ESE Eagle for Mono LCD."""
    draw = ImageDraw.Draw(img)
    for i in range(1, 6):
        offset = (i - 1) * 8
        draw.text(xy=(0, offset), text=str(self.get_bios(f'F_UFC_LINE{i}_DISPLAY')), fill=self.lcd.foreground, font=self.lcd.font_s)
    if mat := search(r'\s*([0-9G]{1,2})\s+([0-9GV]{1,2})\s+', str(self.get_bios('F_UFC_LINE6_DISPLAY'))):
        uhf, v_uhf = mat.groups()
        draw.text(xy=(130, 30), text=f'{uhf:>2} {v_uhf:>2}', fill=self.lcd.foreground, font=self.lcd.font_s)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

F16C50

F16C50(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

F-16C Viper.

Create F-16C Viper.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F-16C Viper for Color LCD.

draw_for_lcd_mono

Prepare image for F-16C Viper for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Catch BIOS changes and remove garbage characters and replace with correct ones.

Source code in src/dcspy/aircraft.py
268
269
270
271
272
273
274
275
276
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create F-16C Viper.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {f'DED_LINE_{i}': '' for i in range(1, 6)}
    super().__init__(lcd_type=lcd_type, **kwargs)
    self.font = self.lcd.font_s if not self.lcd.font_ded else self.lcd.font_ded

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F-16C Viper for Color LCD.

Source code in src/dcspy/aircraft.py
293
294
295
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F-16C Viper for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), separation=24)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F-16C Viper for Mono LCD.

Source code in src/dcspy/aircraft.py
289
290
291
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F-16C Viper for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), separation=8)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Catch BIOS changes and remove garbage characters and replace with correct ones.

Parameters:

Name Type Description Default

selector

str

Selector name

required

value

BiosValue

Value for DCS-BIOS

required
Source code in src/dcspy/aircraft.py
297
298
299
300
301
302
303
304
305
306
307
308
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Catch BIOS changes and remove garbage characters and replace with correct ones.

    :param selector: Selector name
    :param value: Value for DCS-BIOS
    """
    if 'DED_LINE_' in selector:
        value = str(value)
        LOG.debug(f'{type(self).__name__} {selector} org  : "{value}"')
        value = self._clean_and_replace(value)
    super().set_bios(selector, value)

F4E45MC

F4E45MC(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: AdvancedAircraft

F-4E Phantom II.

Create F-4E Phantom II.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F-4E Phantom II Color LCD.

draw_for_lcd_mono

Prepare image for F-4E Phantom II Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
359
360
361
362
363
364
365
366
367
368
369
370
371
372
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create F-4E Phantom II.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'PLT_ARC_164_FREQ_MODE': 0,
        'PLT_ARC_164_MODE': 2,
        'PLT_ARC_164_AUX_CHANNEL': 0,
        'PLT_ARC_164_FREQ': '',
        'PLT_ARC_164_COMM_CHANNEL': 0,
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F-4E Phantom II Color LCD.

Source code in src/dcspy/aircraft.py
399
400
401
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F-4E Phantom II Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), separation=24)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F-4E Phantom II Mono LCD.

Source code in src/dcspy/aircraft.py
395
396
397
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F-4E Phantom II Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), separation=10)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

FA18Chornet

FA18Chornet(
    lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]
)

Bases: AdvancedAircraft

F/A-18C Hornet.

Create F/A-18C Hornet.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for F/A-18C Hornet for Color LCD.

draw_for_lcd_mono

Prepare image for F/A-18C Hornet for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set new data.

Source code in src/dcspy/aircraft.py
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create F/A-18C Hornet.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'UFC_SCRATCHPAD_STRING_1_DISPLAY': '',
        'UFC_SCRATCHPAD_STRING_2_DISPLAY': '',
        'UFC_SCRATCHPAD_NUMBER_DISPLAY': '',
        'UFC_OPTION_DISPLAY_1': '',
        'UFC_OPTION_DISPLAY_2': '',
        'UFC_OPTION_DISPLAY_3': '',
        'UFC_OPTION_DISPLAY_4': '',
        'UFC_OPTION_DISPLAY_5': '',
        'UFC_COMM1_DISPLAY': '',
        'UFC_COMM2_DISPLAY': '',
        'UFC_OPTION_CUEING_1': '',
        'UFC_OPTION_CUEING_2': '',
        'UFC_OPTION_CUEING_3': '',
        'UFC_OPTION_CUEING_4': '',
        'UFC_OPTION_CUEING_5': '',
        'IFEI_FUEL_DOWN': '',
        'IFEI_FUEL_UP': '',
        'HUD_ATT_SW': int(),
        'IFEI_DWN_BTN': int(),
        'IFEI_UP_BTN': int(),
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for F/A-18C Hornet for Color LCD.

Source code in src/dcspy/aircraft.py
224
225
226
227
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for F/A-18C Hornet for Color LCD."""
    draw = self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)
    draw.text(xy=(72, 100), text=str(self.get_bios('IFEI_FUEL_DOWN')), fill=self.lcd.foreground, font=self.lcd.font_l)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for F/A-18C Hornet for Mono LCD.

Source code in src/dcspy/aircraft.py
220
221
222
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for F/A-18C Hornet for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set new data.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
229
230
231
232
233
234
235
236
237
238
239
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set new data.

    :param selector:
    :param value:
    """
    if selector in ('UFC_SCRATCHPAD_STRING_1_DISPLAY', 'UFC_SCRATCHPAD_STRING_2_DISPLAY',
                    'UFC_COMM1_DISPLAY', 'UFC_COMM2_DISPLAY'):
        value = str(value).replace('`', '1').replace('~', '2')
    super().set_bios(selector, value)

Ka50

Ka50(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

Ka-50 Black Shark.

Create Ka-50 Black Shark.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for Ka-50 Black Shark for Mono LCD.

draw_for_lcd_mono

Prepare image for Ka-50 Black Shark for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create Ka-50 Black Shark.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'PVI_LINE1_APOSTROPHE1': '',
        'PVI_LINE1_APOSTROPHE2': '',
        'PVI_LINE1_POINT': '',
        'PVI_LINE1_SIGN': '',
        'PVI_LINE1_TEXT': '',
        'PVI_LINE2_APOSTROPHE1': '',
        'PVI_LINE2_APOSTROPHE2': '',
        'PVI_LINE2_POINT': '',
        'PVI_LINE2_SIGN': '',
        'PVI_LINE2_TEXT': '',
        'AP_ALT_HOLD_LED': int(),
        'AP_BANK_HOLD_LED': int(),
        'AP_FD_LED': int(),
        'AP_HDG_HOLD_LED': int(),
        'AP_PITCH_HOLD_LED': int(),
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for Ka-50 Black Shark for Mono LCD.

Source code in src/dcspy/aircraft.py
526
527
528
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for Ka-50 Black Shark for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for Ka-50 Black Shark for Mono LCD.

Source code in src/dcspy/aircraft.py
522
523
524
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for Ka-50 Black Shark for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

Ka503

Ka503(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: Ka50

Ka-50 Black Shark III.

Create Ka-50 Black Shark.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for Ka-50 Black Shark for Mono LCD.

draw_for_lcd_mono

Prepare image for Ka-50 Black Shark for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create Ka-50 Black Shark.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'PVI_LINE1_APOSTROPHE1': '',
        'PVI_LINE1_APOSTROPHE2': '',
        'PVI_LINE1_POINT': '',
        'PVI_LINE1_SIGN': '',
        'PVI_LINE1_TEXT': '',
        'PVI_LINE2_APOSTROPHE1': '',
        'PVI_LINE2_APOSTROPHE2': '',
        'PVI_LINE2_POINT': '',
        'PVI_LINE2_SIGN': '',
        'PVI_LINE2_TEXT': '',
        'AP_ALT_HOLD_LED': int(),
        'AP_BANK_HOLD_LED': int(),
        'AP_FD_LED': int(),
        'AP_HDG_HOLD_LED': int(),
        'AP_PITCH_HOLD_LED': int(),
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for Ka-50 Black Shark for Mono LCD.

Source code in src/dcspy/aircraft.py
526
527
528
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for Ka-50 Black Shark for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for Ka-50 Black Shark for Mono LCD.

Source code in src/dcspy/aircraft.py
522
523
524
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for Ka-50 Black Shark for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

MetaAircraft

Bases: type

Metaclass for all BasicAircraft.

Mi24P

Mi24P(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

Mi-24P Hind.

Create Mi-24P Hind.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for Mi-24P Hind for Color LCD.

draw_for_lcd_mono

Prepare image for Mi-24P Hind for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create Mi-24P Hind.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'PLT_R863_CHAN': int(),
        'PLT_R863_MODUL': int(),
        'PLT_R828_CHAN': int(),
        'JADRO_FREQ': '',
        'PLT_SAU_HOVER_MODE_ON_L': int(),
        'PLT_SAU_ROUTE_MODE_ON_L': int(),
        'PLT_SAU_ALT_MODE_ON_L': int(),
        'PLT_SAU_H_ON_L': int(),
        'PLT_SAU_K_ON_L': int(),
        'PLT_SAU_T_ON_L': int(),
        'PLT_SAU_B_ON_L': int(),
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for Mi-24P Hind for Color LCD.

Source code in src/dcspy/aircraft.py
652
653
654
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for Mi-24P Hind for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for Mi-24P Hind for Mono LCD.

Source code in src/dcspy/aircraft.py
648
649
650
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for Mi-24P Hind for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

Mi8MT

Mi8MT(lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs])

Bases: AdvancedAircraft

Mi-8MTV2 Magnificent Eight.

Create Mi-8MTV2 Magnificent Eight.

Parameters:

Name Type Description Default

lcd_type

LcdInfo

LCD type

required

Methods:

Name Description
button_request

Prepare DCS-BIOS request for pressed button for specific aircraft.

draw_for_lcd_color

Prepare image for Mi-8MTV2 Magnificent Eight for Color LCD.

draw_for_lcd_mono

Prepare image for Mi-8MTV2 Magnificent Eight for Mono LCD.

get_bios

Get value for DCS-BIOS selector.

prepare_image

Prepare an image to be sent to a correct type of LCD.

set_bios

Set a value for DCS-BIOS selector and update LCD with an image.

Source code in src/dcspy/aircraft.py
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
def __init__(self, lcd_type: LcdInfo, **kwargs: Unpack[AircraftKwargs]) -> None:
    """
    Create Mi-8MTV2 Magnificent Eight.

    :param lcd_type: LCD type
    """
    kwargs['bios_data'] = {
        'LMP_AP_HDG_ON': int(),
        'LMP_AP_PITCH_ROLL_ON': int(),
        'LMP_AP_HEIGHT_ON': int(),
        'R863_CNL_SEL': int(),
        'R863_MOD': int(),
        'R863_FREQ': '',
        'R828_PRST_CHAN_SEL': int(),
        'YADRO1A_FREQ': '',
    }
    super().__init__(lcd_type=lcd_type, **kwargs)

button_request

button_request(button: AnyButton) -> RequestModel

Prepare DCS-BIOS request for pressed button for specific aircraft.

Parameters:

Name Type Description Default

button

AnyButton

LcdButton, Gkey or MouseButton

required

Returns:

Type Description
RequestModel

RequestModel object

Source code in src/dcspy/aircraft.py
70
71
72
73
74
75
76
77
78
79
80
def button_request(self, button: AnyButton) -> RequestModel:
    """
    Prepare DCS-BIOS request for pressed button for specific aircraft.

    :param button: LcdButton, Gkey or MouseButton
    :return: RequestModel object
    """
    LOG.debug(f'{type(self).__name__} Button: {button}')
    request = self.key_req.get_request(button)
    LOG.debug(f'Request: {request}')
    return request

draw_for_lcd_color

draw_for_lcd_color(img: Image) -> None

Prepare image for Mi-8MTV2 Magnificent Eight for Color LCD.

Source code in src/dcspy/aircraft.py
581
582
583
def draw_for_lcd_color(self, img: Image.Image) -> None:
    """Prepare image for Mi-8MTV2 Magnificent Eight for Color LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=2)

draw_for_lcd_mono

draw_for_lcd_mono(img: Image) -> None

Prepare image for Mi-8MTV2 Magnificent Eight for Mono LCD.

Source code in src/dcspy/aircraft.py
577
578
579
def draw_for_lcd_mono(self, img: Image.Image) -> None:
    """Prepare image for Mi-8MTV2 Magnificent Eight for Mono LCD."""
    self._draw_common_data(draw=ImageDraw.Draw(img), scale=1)

get_bios

get_bios(
    selector: str, default: BiosValue = ""
) -> BiosValue

Get value for DCS-BIOS selector.

Parameters:

Name Type Description Default

selector

str

A name of selector

required

default

BiosValue

When fetch of value failed, this value will be returned

''
Source code in src/dcspy/aircraft.py
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
def get_bios(self, selector: str, default: BiosValue = '') -> BiosValue:
    """
    Get value for DCS-BIOS selector.

    :param selector: A name of selector
    :param default: When fetch of value failed, this value will be returned
    """
    try:
        return type(default)(self.bios_data[selector])
    except (KeyError, ValueError):
        return default

prepare_image

prepare_image() -> Image

Prepare an image to be sent to a correct type of LCD.

Returns:

Type Description
Image

Image instance ready to display on LCD

Source code in src/dcspy/aircraft.py
133
134
135
136
137
138
139
140
141
142
143
144
145
def prepare_image(self) -> Image.Image:
    """
    Prepare an image to be sent to a correct type of LCD.

    :return: Image instance ready to display on LCD
    """
    img = Image.new(mode=self.lcd.mode.value, size=(self.lcd.width.value, self.lcd.height.value), color=self.lcd.background)
    getattr(self, f'draw_for_lcd_{self.lcd.type.name.lower()}')(img)
    if self.cfg.get('save_lcd', False):
        screen_shot_file = f'{type(self).__name__}_{next(self._debug_img)}.png'
        img.save(Path(gettempdir()) / screen_shot_file, 'PNG')
        LOG.debug(f'Save screenshot: {screen_shot_file}')
    return img

set_bios

set_bios(selector: str, value: BiosValue) -> None

Set a value for DCS-BIOS selector and update LCD with an image.

Parameters:

Name Type Description Default

selector

str
required

value

BiosValue
required
Source code in src/dcspy/aircraft.py
122
123
124
125
126
127
128
129
130
131
def set_bios(self, selector: str, value: BiosValue) -> None:
    """
    Set a value for DCS-BIOS selector and update LCD with an image.

    :param selector:
    :param value:
    """
    super().set_bios(selector=selector, value=value)
    if callable(self.update_display):
        self.update_display(self.prepare_image())

draw_autopilot_channels

draw_autopilot_channels(
    lcd: LcdInfo,
    ap_channel: str,
    c_rect: tuple[float, float, float, float],
    c_text: tuple[float, float],
    draw_obj: ImageDraw,
    turn_on: str | int | float,
) -> None

Draw rectangles with a background for autopilot channels.

Parameters:

Name Type Description Default

lcd

LcdInfo

Instance of LCD

required

ap_channel

str

Channel name

required

c_rect

tuple[float, float, float, float]

Coordinates for rectangle

required

c_text

tuple[float, float]

Coordinates for a name

required

draw_obj

ImageDraw

ImageDraw instance

required

turn_on

str | int | float

Channel on/off, fill on/off

required
Source code in src/dcspy/aircraft.py
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
def draw_autopilot_channels(lcd: LcdInfo,
                            ap_channel: str,
                            c_rect: tuple[float, float, float, float],
                            c_text: tuple[float, float],
                            draw_obj: ImageDraw.ImageDraw,
                            turn_on: str | int | float) -> None:
    """
    Draw rectangles with a background for autopilot channels.

    :param lcd: Instance of LCD
    :param ap_channel: Channel name
    :param c_rect: Coordinates for rectangle
    :param c_text: Coordinates for a name
    :param draw_obj: ImageDraw instance
    :param turn_on: Channel on/off, fill on/off
    """
    if turn_on:
        draw_obj.rectangle(c_rect, fill=lcd.foreground, outline=lcd.foreground)
        draw_obj.text(xy=c_text, text=ap_channel, fill=lcd.background, font=lcd.font_l)
    else:
        draw_obj.rectangle(xy=c_rect, fill=lcd.background, outline=lcd.foreground)
        draw_obj.text(xy=c_text, text=ap_channel, fill=lcd.foreground, font=lcd.font_l)