class SkidAndGs(AhrsElement):
    def __init__(self, degrees_of_pitch, pixels_per_degree_y, font,
                 framebuffer_size):
        self.task_timer = TaskTimer('SkidAndGs')
        self.__font__ = font
        center_y = framebuffer_size[1] >> 2
        text_half_height = int(font.get_height()) >> 1
        self.__text_y_pos__ = (text_half_height << 2) + \
            center_y - text_half_height
        self.__rhs__ = int(framebuffer_size[0])  # was 0.9

    def render(self, framebuffer, orientation):
        self.task_timer.start()
        is_valid = isinstance(orientation.g_load, Number)
        g_load_text = "{0:.1f} Gs".format(
            orientation.g_load) if is_valid else orientation.g_load
        texture = self.__font__.render(
            g_load_text, True, display.WHITE if is_valid else display.RED,
            display.BLACK)
        text_width, text_height = texture.get_size()

        framebuffer.blit(texture,
                         (self.__rhs__ - text_width, self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(SkidAndGs)
Exemple #2
0
            str(int(utils.apply_declination(
                orientation.gps_heading))).rjust(3))

        rendered_text = self.__font__.render(heading_text, True, display.GREEN,
                                             display.BLACK)
        text_width, text_height = rendered_text.get_size()

        framebuffer.blit(rendered_text, (self.__center_x__ -
                                         (text_width >> 1), text_height << 1))

        pygame.draw.lines(framebuffer, display.GREEN, True,
                          self.__heading_text_box_lines__, 2)
        self.task_timer.stop()

    def __render_heading_text__(self, framebuffer, heading, position_x,
                                position_y):
        """
        Renders the text with the results centered on the given
        position.
        """
        rendered_text, half_size = self.__heading_text__[heading]

        framebuffer.blit(
            rendered_text,
            (position_x - half_size[0], position_y - half_size[1]))


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(CompassAndHeadingTopElement)
Exemple #3
0
        pitch_offset = self.__pixels_per_degree_y__ * \
            (-pitch + reference_angle)

        roll_delta = 90 - roll_int

        center_x = ahrs_center_x - \
            (pitch_offset * COS_RADIANS_BY_DEGREES[roll_delta]) + 0.5
        center_y = ahrs_center_y - \
            (pitch_offset * SIN_RADIANS_BY_DEGREES[roll_delta]) + 0.5

        center_x = int(center_x)
        center_y = int(center_y)

        x_len = int(length * COS_RADIANS_BY_DEGREES[roll_int] + 0.5)
        y_len = int(length * SIN_RADIANS_BY_DEGREES[roll_int] + 0.5)

        half_x_len = x_len >> 1
        half_y_len = y_len >> 1

        start_x = center_x - half_x_len
        end_x = center_x + half_x_len
        start_y = center_y + half_y_len
        end_y = center_y - half_y_len

        return [[start_x, start_y],
                [end_x, end_y]], (center_x, center_y), reference_angle


if __name__ == '__main__':
    run_ahrs_hud_element(ArtificialHorizon)
Exemple #4
0
from ahrs_element import AhrsElement


class Groundspeed(AhrsElement):
    def __init__(self, degrees_of_pitch, pixels_per_degree_y, font, framebuffer_size):
        self.task_timer = TaskTimer('Groundspeed')
        self.__font__ = font
        center_y = framebuffer_size[1] >> 2
        text_half_height = int(font.get_height()) >> 1
        self.__text_y_pos__ = (text_half_height << 2) + \
            center_y - text_half_height
        self.__rhs__ = int(0.9 * framebuffer_size[0])

        self.__left_x__ = 0 # WAS int(framebuffer_size[0] * 0.01)

    def render(self, framebuffer, orientation):
        self.task_timer.start()
        # TODO - Pass in the configuration to all elements so they can have access to the unit types.
        groundspeed_text = "{0:.1f}".format(orientation.groundspeed).rjust(5) + units.UNIT_LABELS[units.STATUTE][units.SPEED]
        texture = self.__font__.render(
            groundspeed_text, True, WHITE, BLACK)

        framebuffer.blit(
            texture, (self.__left_x__, self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(Groundspeed, True)
        width = framebuffer_size[0]
        center = (framebuffer_size[0] >> 1, framebuffer_size[1] >> 1)

        edge_reference_proportion = int(width * 0.05)

        artificial_horizon_level = [[int(width * 0.4),  center[1]],
                                    [int(width * 0.6),  center[1]]]
        left_hash = [[0, center[1]], [edge_reference_proportion, center[1]]]
        right_hash = [[width - edge_reference_proportion,
                       center[1]], [width, center[1]]]

        self.level_reference_lines.append(artificial_horizon_level)
        self.level_reference_lines.append(left_hash)
        self.level_reference_lines.append(right_hash)

    def render(self, framebuffer, orientation):
        """
        Renders a "straight and level" line to the HUD.
        """

        self.task_timer.start()
        [pygame.draw.lines(framebuffer, WHITE, False, line, 6)
         for line in self.level_reference_lines]
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(LevelReference)
            heading -= 360

        [
            self.__render_heading_mark__(framebuffer,
                                         heading_mark_to_render[0],
                                         heading_mark_to_render[1])
            for heading_mark_to_render in self.__heading_strip__[heading]
        ]

        # Render the text that is showing our AHRS and GPS headings
        heading_text = "{0} | {1}".format(
            utils.apply_declination(
                orientation.get_onscreen_projection_display_heading()),
            utils.apply_declination(orientation.gps_heading))

        rendered_text = self.__font__.render(heading_text, True, BLACK, GREEN)
        text_width, text_height = rendered_text.get_size()

        pygame.draw.polygon(framebuffer, GREEN,
                            self.__heading_text_box_lines__)

        framebuffer.blit(rendered_text,
                         (self.__center_x__ -
                          (text_width >> 1), self.compass_text_y))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(CompassAndHeadingBottomElement)
Exemple #7
0
    def __init__(self, degrees_of_pitch, pixels_per_degree_y, font,
                 framebuffer_size):
        self.task_timer = TaskTimer('Time')
        self.__font__ = font
        font_height = font.get_height()
        text_half_height = int(font_height) >> 1
        self.__text_y_pos__ = framebuffer_size[
            1] - text_half_height - font_height
        self.__rhs__ = int(0.9 * framebuffer_size[0])

        self.__left_x__ = int(framebuffer_size[0] * 0.01)
        self.__center_x__ = framebuffer_size[0] >> 1

    def render(self, framebuffer, orientation):
        self.task_timer.start()

        time_text = str(orientation.utc_time).split(
            '.'
        )[0] + "UTC" if orientation.utc_time is not None else AhrsElement.GPS_UNAVAILABLE_TEXT
        texture = self.__font__.render(time_text, True, YELLOW, BLACK)
        width = texture.get_size()[0]

        framebuffer.blit(texture, (self.__center_x__ -
                                   (width >> 1), self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(Time, True)
Exemple #8
0
class Altitude(AhrsElement):
    def __init__(self, degrees_of_pitch, pixels_per_degree_y, font, framebuffer_size):
        self.task_timer = TaskTimer('Altitude')
        self.__font__ = font
        center_y = framebuffer_size[1] >> 2
        text_half_height = int(font.get_height()) >> 1
        self.__text_y_pos__ = center_y - text_half_height
        self.__rhs__ = int(framebuffer_size[0])  # was 0.9

    def render(self, framebuffer, orientation):
        self.task_timer.start()
        is_altitude_valid = orientation.alt is not None and isinstance(orientation.alt, Number)
        altitude_text = str(int(orientation.alt)) + \
            "' MSL" if is_altitude_valid else AhrsElement.INOPERATIVE_TEXT
        color = display.WHITE if is_altitude_valid else display.RED
        alt_texture = self.__font__.render(
            altitude_text,
            True,
            color,
            display.BLACK)
        text_width, text_height = alt_texture.get_size()

        framebuffer.blit(
            alt_texture, (self.__rhs__ - text_width, self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(Altitude)
Exemple #9
0
                 framebuffer_size):
        self.task_timer = TaskTimer('TrafficNotAvailable')
        self.__font__ = font
        font_height = font.get_height()
        self.__text_y_pos__ = int(font_height * 0.7)
        self.__rhs__ = int(0.9 * framebuffer_size[0])

        self.__left_x__ = int(framebuffer_size[0] * 0.01)
        self.__center_x__ = framebuffer_size[0] >> 1

    def render(self, framebuffer, orientation):
        self.task_timer.start()

        if not HudDataCache.IS_TRAFFIC_AVAILABLE:
            (texture, size) = HudDataCache.get_cached_text_texture(
                "TRAFFIC UNAVAILABLE",
                self.__font__,
                text_color=RED,
                background_color=BLACK,
                use_alpha=True)
            width = size[0]

            framebuffer.blit(texture, (self.__center_x__ -
                                       (width >> 1), self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(TrafficNotAvailable, True)
Exemple #10
0
                spo2_text = str(int(spo2_level)) + "% SPO"
                self.__has_been_connected__ = True

            spo2_ppm_texture = self.__font__.render(spo2_text, True,
                                                    spo2_color, BLACK)

            heartbeat_texture = self.__font__.render(heartbeat_text, True,
                                                     GREEN, BLACK)

            framebuffer.blit(spo2_ppm_texture,
                             (self.__lhs__, self.__text_y_pos__))

            framebuffer.blit(heartbeat_texture,
                             (self.__lhs__, self.__pulse_y_pos__))

        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(Aithre)

if __name__ == '__main__':
    import hud_elements

    # for temp in range(45, 95, 5):
    #     color = get_cpu_temp_text_color(temp)
    #     print("{3} => {0},{1},{2}".format(color[0], color[1], color[2], temp))

    hud_elements.run_ahrs_hud_element(SystemInfo, True)
        self.__not_available_lines__ = []

        width, height = framebuffer_size

        self.__not_available_lines__.append([[0, 0], [width, height]])
        self.__not_available_lines__.append([[0, height], [width, 0]])
        self.__na_color__ = RED
        self.__na_line_width__ = 20

    def render(self, framebuffer, orientation):
        """
        Render an "X" over the screen to indicate the AHRS is not
        available.
        """

        self.task_timer.start()
        pygame.draw.line(framebuffer, self.__na_color__,
                         self.__not_available_lines__[0][0],
                         self.__not_available_lines__[0][1],
                         self.__na_line_width__)
        pygame.draw.line(framebuffer, self.__na_color__,
                         self.__not_available_lines__[1][0],
                         self.__not_available_lines__[1][1],
                         self.__na_line_width__)
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(AhrsNotAvailable)
Exemple #12
0
        center_y = framebuffer_size[1] >> 2
        text_half_height = int(font.get_height()) >> 1
        self.__text_y_pos__ = center_y - text_half_height
        self.__rhs__ = int(0.9 * framebuffer_size[0])

        self.__left_x__ = 0  # WAS int(framebuffer_size[0] * 0.01)

    def render(self, framebuffer, orientation):
        self.task_timer.start()
        # Get the traffic, and bail out of we have none

        text = "NO TARGETS"

        try:
            count = len(targets.TARGET_MANAGER.targets)

            if count > 0:
                text = "{0} TARGETS".format(count)
        except Exception as e:
            text = "ERROR" + str(e)

        texture = self.__font__.render(text, True, WHITE, BLACK)

        framebuffer.blit(texture, (self.__left_x__, self.__text_y_pos__))
        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(TargetCount, True)
Exemple #13
0
                            display.GREEN,
                            self.smaller_reference_arc_box,
                            reference_roll_in_radians - self.roll_indicator_arc_radians,
                            reference_roll_in_radians + self.roll_indicator_arc_radians,
                            self.reference_line_size / 2)

        # Draw the REALLY important reference angles longer
        for roll_angle in [-90, -60, -45, 0, 45, 60, 90]:
            reference_roll_in_radians = math.radians(roll_angle + 90.0)
            pygame.draw.arc(framebuffer,
                            display.GREEN,
                            self.reference_arc_box,
                            reference_roll_in_radians - self.roll_indicator_arc_radians,
                            reference_roll_in_radians + self.roll_indicator_arc_radians,
                            self.reference_line_size)

        # Draws the current roll
        pygame.draw.arc(framebuffer,
                        display.YELLOW,
                        self.arc_box,
                        self.half_pi - roll_in_radians - self.roll_indicator_arc_radians,
                        self.half_pi - roll_in_radians + self.roll_indicator_arc_radians,
                        self.reference_line_size * 2)

        self.task_timer.stop()


if __name__ == '__main__':
    import hud_elements
    hud_elements.run_ahrs_hud_element(RollIndicator, False)