/*
 *                                                                            
 *  Copyright (c) 2011 - 2017 - Loetz GmbH & Co KG, 69115 Heidelberg, Germany 
 *                                                                            
 *  All rights reserved. This program and the accompanying materials           
 *  are made available under the terms of the Eclipse Public License 2.0        
 *  which accompanies this distribution, and is available at                  
 *  https://www.eclipse.org/legal/epl-2.0/                                 
 *                                 
 *  SPDX-License-Identifier: EPL-2.0                                 
 *                                                                            
 *  Initial contribution:                                                      
 *     Loetz GmbH & Co. KG                              
 * 
 */
package org.eclipse.osbp.ui.api.statemachine;

import com.vaadin.ui.Audio;
import com.vaadin.ui.Video;

public interface IPeripheral{
	boolean initDevices(IBeeper beeper, Audio audio, Video video);
	void releaseDevices();
	
	/**
	 * Checks if init was done successfully.
	 *
	 * @return true, if is inits the done
	 */
	boolean isInitDone();
	public interface Command  extends IStateMachineParticipant {
	}
}
