1 package net.osdn.gokigen.cameratest.fuji.statuses;
3 import android.util.Log;
5 import androidx.annotation.NonNull;
7 import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
9 public class FujiStatusChecker implements IFujiStatusReceiver
11 private final String TAG = toString();
12 private final IFujiStatusRequest comm;
13 private final IFujiStatusNotify notify;
14 private final FujiStatusHolder statusHolder;
15 private static final int ERROR_LIMIT = 10;
16 private boolean threadIsRunning = false;
17 private final int WAIT_MS = 400;
19 public FujiStatusChecker(@NonNull IFujiStatusRequest comm, @NonNull IFujiStatusNotify notify)
23 this.statusHolder = new FujiStatusHolder();
27 public void statusReceived(ReceivedDataHolder data)
29 statusReceivedImpl(data.getData());
35 Thread thread = new Thread(new Runnable() {
41 threadIsRunning = true;
42 while (threadIsRunning)
47 Thread.sleep(WAIT_MS);
55 if (errorCount > ERROR_LIMIT)
57 threadIsRunning = false;
60 Log.v(TAG, "--- FINISH STATUS WATCH ---");
67 Log.v(TAG, "--- START STATUS WATCH ---");
77 public int getValue(int statusId)
79 return (statusHolder.getValue(statusId));
85 threadIsRunning = false;
88 private void statusReceivedImpl(byte[] data)
90 boolean isStatusUpdated = false;
95 Log.v(TAG, "received status length is short. (" + data.length + " bytes.)");
99 int nofStatus = (data[13] * 256) + data[12];
100 //Log.v(TAG, "status Received. " + data.length + " bytes. [status : " + nofStatus + "]");
104 while ((statusCount < nofStatus)&&(index < data.length))
106 int dataId = ((((int)data[index + 1]) & 0xff) * 256) + (((int) data[index]) & 0xff);
107 statusHolder.updateValue(dataId, data[index + 2], data[index + 3], data[index +4], data[index + 5]);
110 isStatusUpdated = true;
114 notify.statusUpdated(statusHolder);