SlotData SlotData::PrimarySlot(rdm_slot_definition slot_definition,
                               uint8_t default_slot_value) {
    if (slot_definition == SD_UNDEFINED) {
        OLA_WARN << "Undefined slot definition and no slot description!";
    }
    return SlotData(ST_PRIMARY, slot_definition, default_slot_value);
}
SlotData SlotData::SecondarySlot(rdm_slot_type slot_type,
                                 uint16_t primary_slot,
                                 uint8_t default_slot_value) {
    if (slot_type == ST_PRIMARY) {
        OLA_WARN << "Secondary slot created with slot_type == ST_PRIMARY";
    }
    return SlotData(slot_type, primary_slot, default_slot_value);
}
SlotData SlotData::PrimarySlot(rdm_slot_definition slot_definition,
                               uint8_t default_slot_value,
                               const string &description) {
    if (slot_definition == SD_UNDEFINED && description.empty()) {
        OLA_WARN << "Undefined slot definition and no slot description!";
    }
    return SlotData(ST_PRIMARY, slot_definition, default_slot_value, description);
}
SlotData SlotData::SecondarySlot(rdm_slot_type slot_type,
                                 uint16_t primary_slot,
                                 uint8_t default_slot_value,
                                 const string &description) {
    if (slot_type == ST_PRIMARY) {
        OLA_WARN << "Secondary slot created with slot_type == ST_PRIMARY: "
                 << description;
    }
    return SlotData(slot_type, primary_slot, default_slot_value, description);
}
size_t SetSlot::deserialize(const Buffer& _src, size_t _offset)
{
	_offset = _pm_checkPacketId(_src, _offset);

	_offset = ReadInt8(_src, _offset, _pf_windowId);
	_offset = ReadInt16(_src, _offset, _pf_slotNum);

	_offset = SlotData().deserialize(_src, _offset);

	_pf_initialized = true;
	return _offset;
}