def write_headers(self, headers):
        """
        Write all the necessary headers in the correct order::

            writer.write_headers({
                'manufacturer_code': 'XCS',
                'logger_id': 'TBX',
                'date': datetime.date(1987, 2, 24),
                'fix_accuracy': 50,
                'pilot': 'Tobias Bieniek',
                'copilot': 'John Doe',
                'glider_type': 'Duo Discus',
                'glider_id': 'D-KKHH',
                'firmware_version': '2.2',
                'hardware_version': '2',
                'logger_type': 'LXNAVIGATION,LX8000F',
                'gps_receiver': 'uBLOX LEA-4S-2,16,max9000m',
                'pressure_sensor': 'INTERSEMA,MS5534A,max10000m',
                'competition_id': '2H',
                'competition_class': 'Doubleseater',
            })

            # -> AXCSTBX
            # -> HFDTE870224
            # -> HFFXA050
            # -> HFPLTPILOTINCHARGE:Tobias Bieniek
            # -> HFCM2CREW2:John Doe
            # -> HFGTYGLIDERTYPE:Duo Discus
            # -> HFGIDGLIDERID:D-KKHH
            # -> HFDTM100GPSDATUM:WGS-1984
            # -> HFRFWFIRMWAREVERSION:2.2
            # -> HFRHWHARDWAREVERSION:2
            # -> HFFTYFRTYPE:LXNAVIGATION,LX8000F
            # -> HFGPSuBLOX LEA-4S-2,16,max9000m
            # -> HFPRSPRESSALTSENSOR:INTERSEMA,MS5534A,max10000m
            # -> HFCIDCOMPETITIONID:2H
            # -> HFCCLCOMPETITIONCLASS:Doubleseater

        This method will throw a :class:`ValueError` if a mandatory header is
        missing and will fill others up with empty strings if no value was
        given. The optional headers are only written if they are part of the
        specified :class:`dict`.

        .. admonition:: Note

            The use of this method is encouraged compared to calling all the
            other header-writing methods manually!

        :param headers: a :class:`dict` of all the headers that should be
            written.
        """

        for header in self.REQUIRED_HEADERS:
            if header not in headers:
                raise ValueError('%s header missing' % header)

        self.write_logger_id(
            headers['manufacturer_code'],
            headers['logger_id'],
            extension=headers.get('logger_id_extension')
        )

        self.write_date(headers['date'])
        self.write_fix_accuracy(headers.get('fix_accuracy'))

        self.write_pilot(headers.get('pilot', ''))
        if 'copilot' in headers:
            self.write_copilot(headers['copilot'])

        self.write_glider_type(headers.get('glider_type', ''))
        self.write_glider_id(headers.get('glider_id', ''))

        self.write_gps_datum(
            code=headers.get('gps_datum_code'),
            gps_datum=headers.get('gps_datum'),
        )

        self.write_firmware_version(headers.get('firmware_version', ''))
        self.write_hardware_version(headers.get('hardware_version', ''))
        self.write_logger_type(headers['logger_type'])
        self.write_gps_receiver(headers['gps_receiver'])
        self.write_pressure_sensor(headers.get('pressure_sensor', ''))

        if 'competition_id' in headers:
            self.write_competition_id(headers['competition_id'])

        if 'competition_class' in headers:
            self.write_competition_class(headers['competition_class'])

        if 'club' in headers:
            self.write_club(headers['club'])