Generate a configuration that can be sent to the Hottop roaster.

        Configuration settings need to be represented inside of a byte array
        that is then written to the serial interface. Much of the configuration
        is static, but control settings are also included and pulled from the
        shared dictionary.

        :returns: Byte array of the prepared configuration.

def _generate_config(self):
        """Generate a configuration that can be sent to the Hottop roaster.

        Configuration settings need to be represented inside of a byte array
        that is then written to the serial interface. Much of the configuration
        is static, but control settings are also included and pulled from the
        shared dictionary.

        :returns: Byte array of the prepared configuration.
        """
        config = bytearray([0x00] * 36)
        config[0] = 0xA5
        config[1] = 0x96
        config[2] = 0xB0
        config[3] = 0xA0
        config[4] = 0x01
        config[5] = 0x01
        config[6] = 0x24
        config[10] = self._config.get('heater', 0)
        config[11] = self._config.get('fan', 0)
        config[12] = self._config.get('main_fan', 0)
        config[16] = self._config.get('solenoid', 0)
        config[17] = self._config.get('drum_motor', 0)
        if self._config.get('heater', 0) > 0:
            # Override the user here since the drum MUST be on for heat
            config[17] = 1
        config[18] = self._config.get('cooling_motor', 0)
        config[35] = sum([b for b in config[:35]]) & 0xFF
        return bytes(config)