情報クライアント

次のクラスはiButtonが挿抜された時にイベントが起こり、それぞれ対応するメソッドに飛びます。これを実行し動作を確認しなさい。

Watch
import com.dalsemi.onewire.OneWireAccessProvider;
import com.dalsemi.onewire.adapter.DSPortAdapter;
import com.dalsemi.onewire.adapter.OneWireIOException;
import com.dalsemi.onewire.container.OneWireContainer;
import com.dalsemi.onewire.utils.*;
import com.dalsemi.onewire.application.monitor.*;

public class Watch
    implements DeviceMonitorEventListener
{
    public static void main (String args [])
    {
        OneWireContainer owd;       // 1-wireのコンテナ
        int               delay;
        try
        {

            // デフォールトのアダプターを得る
            DSPortAdapter adapter = OneWireAccessProvider.getDefaultAdapter();

            System.out.println();
            System.out.println("Adapter: " + adapter.getAdapterName()
                                     + " Port: " + adapter.getPortName());
            System.out.println();

            // 以前の探索制限をクリアする
            adapter.setSearchAllDevices();
            adapter.targetAllFamilies();
            adapter.setSpeed(adapter.SPEED_REGULAR);

            // このアダプターを用いてWatchクラスを作る
            Watch nw = new Watch(adapter);

            // 示された時間だけsleepする
            if (args.length >= 1)
                delay = Integer.decode(args [0]).intValue();
            else
                delay = 20000;           // 20秒

            System.out.println("Monitor run for: " + delay + "ms");
            Thread.sleep(delay);

            // 走っているスレッドを殺す
            nw.killWatch();

            // free port used by adapter
            adapter.freePort();
        }
        catch (Exception e)
        {
            System.out.println(e);
        }

        return;
    }
    // デバイスモニターインスタンス
    private DeviceMonitor dm;
    public Watch (DSPortAdapter adapter)
    {
        // デバイスモニターオブジェクトを作る
        dm = new DeviceMonitor(adapter);

        // このオブジェクトにイベントリスナーを加える
        try
        {
            dm.addDeviceMonitorEventListener(this);
        }
        catch (Exception e){}

        // モニター開始
        Thread t = new Thread(dm);
        t.start();
    }
    
    public void killWatch()
    {
      // デバイスモニタースレッドを殺す
      dm.killMonitor();
    }

    public void deviceArrival (DeviceMonitorEvent devt)
    {
        for(int i=0; i<devt.getDeviceCount(); i++)
            System.out.println("ADD: " + devt.getAddressAsStringAt(i));
    }
    public void deviceDeparture (DeviceMonitorEvent devt)
    {
        for(int i=0; i<devt.getDeviceCount(); i++)
            System.out.println("REMOVE: " + devt.getAddressAsStringAt(i));
    }
    public void networkException (DeviceMonitorException dexc)
    {
        System.out.println("ERROR: " + dexc.toString());
    }
}


build.batのBuildDependencyの最後に
-add OneWireMonitor
のオプションを追加してください。

問題7-1

このプログラムはどのiButtonでも挿抜されたときにメッセージが出ます。これを自分のDS1990AのiButtonでのみ応じるように変更しなさい。簡単なセキュリティプログラムになります。


問題7-2

情報クライアントの一つの例としてLEDをon/offするためのクライアントを作ります。上のプログラムと前の実験で作ったエコーポートを利用して作りなさい。 なお、簡単のためにonあるいはoffの2種類の情報を処理するとします。
また、一つのマシンでServerとClientを行って動作をチェックすること。正常に動作するようになったら、友達のマシンをサーバーあるいはクライアントにしてお互いにチェックしなさい。
次のBlinkyプログラムを参考にしてください。

Blinky
import com.dalsemi.system.BitPort;
import com.dalsemi.system.TINIOS;

class Blinky {
	public static void main(String[] args) {
		BitPort bp;

		bp = new BitPort(BitPort.Port5Bit2);

		for (int i=0; i<10; i++) {
			// LED点灯
			bp.clear();
			// 1/4 秒着いたままにする
			try {
				Thread.sleep(250);
			} catch (InterruptedException ie) {}
			// LED消灯
			bp.set();
			// 1/4 秒消えたまま
			try {
				Thread.sleep(250);
			} catch (InterruptedException ie) {}
		}
	}
}