/*** * Copyright 2002-2010 jamod development team * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ***/ package net.wimpi.modbus; import net.wimpi.modbus.procimg.DefaultProcessImageFactory; import net.wimpi.modbus.procimg.ProcessImage; import net.wimpi.modbus.procimg.ProcessImageFactory; /** * Class implemented following a Singleton pattern, * to couple the slave side with a master side or * with a device. * <p> * At the moment it only provides a reference to the * OO model of the process image. * * @author Dieter Wimberger * @version @version@ (@date@) */ public class ModbusCoupler { // class attributes private static ModbusCoupler c_Self; // Singleton reference // instance attributes private ProcessImage m_ProcessImage; private int m_UnitID = Modbus.DEFAULT_UNIT_ID; private boolean m_Master = true; private ProcessImageFactory m_PIFactory; static { c_Self = new ModbusCoupler(); } // initializer private ModbusCoupler() { m_PIFactory = new DefaultProcessImageFactory(); }// constructor /** * Private constructor to prevent multiple * instantiation. * <p/> * * @param procimg a <tt>ProcessImage</tt>. */ private ModbusCoupler(ProcessImage procimg) { setProcessImage(procimg); c_Self = this; }// contructor(ProcessImage) /** * Returns the actual <tt>ProcessImageFactory</tt> instance. * * @return a <tt>ProcessImageFactory</tt> instance. */ public ProcessImageFactory getProcessImageFactory() { return m_PIFactory; }// getProcessImageFactory /** * Sets the <tt>ProcessImageFactory</tt> instance. * * @param factory the instance to be used for creating process * image instances. */ public void setProcessImageFactory(ProcessImageFactory factory) { m_PIFactory = factory; }// setProcessImageFactory /** * Returns a reference to the <tt>ProcessImage</tt> * of this <tt>ModbusCoupler</tt>. * <p/> * * @return the <tt>ProcessImage</tt>. */ public synchronized ProcessImage getProcessImage() { return m_ProcessImage; }// getProcessImage /** * Sets the reference to the <tt>ProcessImage</tt> * of this <tt>ModbusCoupler</tt>. * <p/> * * @param procimg the <tt>ProcessImage</tt> to be set. */ public synchronized void setProcessImage(ProcessImage procimg) { m_ProcessImage = procimg; }// setProcessImage /** * Returns the identifier of this unit. * This identifier is required to be set * for serial protocol slave implementations. * * @return the unit identifier as <tt>int</tt>. */ public int getUnitID() { return m_UnitID; }// getUnitID /** * Sets the identifier of this unit, which is needed * to be determined in a serial network. * * @param id the new unit identifier as <tt>int</tt>. */ public void setUnitID(int id) { m_UnitID = id; }// setUnitID /** * Tests if this instance is a master device. * * @return true if master, false otherwise. */ public boolean isMaster() { return m_Master; }// isMaster /** * Tests if this instance is not a master device. * * @return true if slave, false otherwise. */ public boolean isSlave() { return !m_Master; }// isSlave /** * Sets this instance to be or not to be * a master device. * * @param master true if master device, false otherwise. */ public void setMaster(boolean master) { m_Master = master; }// setMaster /** * Returns a reference to the singleton instance. * <p/> * * @return the <tt>ModbusCoupler</tt> instance reference. */ public static final ModbusCoupler getReference() { return c_Self; }// getReference }// class ModbusCoupler