import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class RC8Sample{
	private ControlFrame m_frm;
	private CaoJNI m_cao;
	
	public static void main(String[] args){
		new RC8Sample();
	}
	
	public RC8Sample(){
		m_frm = new ControlFrame(this);
		m_cao = new CaoJNI();

		m_frm.addWindowListener(new WindowAdapter()
		{
			public void windowClosing(WindowEvent ev)
			{
				// Delete CaoEngine
				m_cao.CaoRelease();
			}
		});
	}

	public void btnInit_Clicked()
	{
		// Create Engine
		m_cao.CaoInit();

		m_frm.ButtonController(false);
	}

	public void btnConnect_Clicked()
	{
		int hr;

		// Create object and connect with RC8
		hr = m_cao.CaoConnect();

		if (hr >= 0)
		{
			// Enable command buttons
			m_frm.ButtonController(true);
		}
		else
		{
			btnDisconnect_Clicked();
			m_frm.ShowErrorMessage(hr);
		}
	}

	public void btnDisconnect_Clicked()
	{
		// Disconnect from the controller
		m_cao.CaoDisconnect();

		m_frm.ButtonController(false);
	}

	public void btnIRead_Clicked()
	{
		// Reading of "I variable"
		int iValue = m_cao.CaoIRead();

		m_frm.SetValueText(Integer.toString(iValue));
	}

	public void btnIWrite_Clicked()
	{
		// Writing of "I variable"
		m_cao.CaoIWrite(1);
	}

	public void btnFRead_Clicked()
	{
		// Reading of "F variable"
		float fValue = m_cao.CaoFRead();

		m_frm.SetValueText(Float.toString(fValue));
	}

	public void btnFWrite_Clicked()
	{
		// Writing of "F variable"
		m_cao.CaoFWrite(1.23f);
	}

	public void btnDRead_Clicked()
	{
		// Reading of "D variable"
		double dValue = m_cao.CaoDRead();

		m_frm.SetValueText(Double.toString(dValue));
	}

	public void btnDWrite_Clicked()
	{
		// Writing of "D variable"
		m_cao.CaoDWrite(0.123456789);
	}

	public void btnVRead_Clicked()
	{
		// Reading of "V variable"
		float[] fValues = m_cao.CaoVRead();

		String strValue = Float.toString(fValues[0]) + ", " + Float.toString(fValues[1]) + ", " + Float.toString(fValues[2]);

		m_frm.SetValueText(strValue);
	}

	public void btnVWrite_Clicked()
	{
		// Writing of "V variable"
		m_cao.CaoVWrite(new float[] { 100, 200, 300 });
	}

	public void btnPRead_Clicked()
	{
		// Reading of "P variable"
		float[] fValues = m_cao.CaoPRead();

		String strValue =
			Float.toString(fValues[0]) + ", " + Float.toString(fValues[1]) + ", " + Float.toString(fValues[2]) + ", "
			+ Float.toString(fValues[3]) + ", " + Float.toString(fValues[4]) + ", " + Float.toString(fValues[5]) + ", "
			+ Float.toString(fValues[6]);

		m_frm.SetValueText(strValue);
	}

	public void btnPWrite_Clicked()
	{
		// Writing of "P variable"
		m_cao.CaoPWrite(new float[] { 500, 0, 350, 180, 0, 180, 5 });
	}

	public void btnJRead_Clicked()
	{
		// Reading of "J variable"
		float[] fValues = m_cao.CaoJRead();

		String strValue =
			Float.toString(fValues[0]) + ", " + Float.toString(fValues[1]) + ", " + Float.toString(fValues[2]) + ", "
			+ Float.toString(fValues[3]) + ", " + Float.toString(fValues[4]) + ", " + Float.toString(fValues[5]) + ", "
			+ Float.toString(fValues[6]) + ", " + Float.toString(fValues[7]);

		m_frm.SetValueText(strValue);
	}

	public void btnJWrite_Clicked()
	{
		// Writing of "J variable"
		m_cao.CaoJWrite(new float[] { 0, 39.52f, 95.71f, 0, 44.77f, 0, 0, 0 });
	}

	public void btnTRead_Clicked()
	{
		// Reading of "T variable"
		float[] fValues = m_cao.CaoTRead();

		String strValue =
			Float.toString(fValues[0]) + ", " + Float.toString(fValues[1]) + ", " + Float.toString(fValues[2]) + ", "
			+ Float.toString(fValues[3]) + ", " + Float.toString(fValues[4]) + ", " + Float.toString(fValues[5]) + ", "
			+ Float.toString(fValues[6]) + ", " + Float.toString(fValues[7]) + ", " + Float.toString(fValues[8]) + ", "
			+ Float.toString(fValues[9]);

		m_frm.SetValueText(strValue);
	}

	public void btnTWrite_Clicked()
	{
		// Writing of "T variable"
		m_cao.CaoTWrite(new float[] { 500, 0, 300, 0, 1, 0, 0, 0, -1, 5 });
	}

	public void btnSRead_Clicked()
	{
		// Reading of "S variable"
		String strValue = m_cao.CaoSRead();

		m_frm.SetValueText(strValue);
	}

	public void btnSWrite_Clicked()
	{
		// Writing of "S variable"
		m_cao.CaoSWrite("DENSO ROBOT");
	}

	public void btnIORead_Clicked()
	{
		// Reading of "IO variable"
		boolean bValue = m_cao.CaoIORead();

		m_frm.SetValueText(String.valueOf(bValue));
	}

	public void btnIOWrite_Clicked()
	{
		// Writing of "IO Variable"
		m_cao.CaoIOWrite(true); // ON
		// m_cao.CaoIOWrite(false); // OFF
	}
}