OSDN Git Service

749c5f8e87d13fa0db98dcd1e406b8e652709e86
[gokigen/FujiCam.git] / app / src / main / java / net / osdn / gokigen / cameratest / fuji / statuses / FujiStatusChecker.java
1 package net.osdn.gokigen.cameratest.fuji.statuses;
2
3 import android.util.Log;
4
5 import androidx.annotation.NonNull;
6
7 import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
8
9 public class FujiStatusChecker implements IFujiStatusReceiver
10 {
11     private final String TAG = toString();
12     private final IFujiStatusRequest comm;
13     private final IFujiStatusNotify notify;
14     private final FujiStatusHolder statusHolder;
15     private boolean threadIsRunning = false;
16     private final int WAIT_MS = 400;
17
18     public FujiStatusChecker(@NonNull IFujiStatusRequest comm, @NonNull IFujiStatusNotify notify)
19     {
20         this.comm = comm;
21         this.notify = notify;
22         this.statusHolder = new FujiStatusHolder();
23     }
24
25     @Override
26     public void statusReceived(ReceivedDataHolder data)
27     {
28         statusReceivedImpl(data.getData());
29     }
30
31     @Override
32     public void start()
33     {
34         Thread thread = new Thread(new Runnable() {
35             @Override
36             public void run()
37             {
38                 try
39                 {
40                     threadIsRunning = true;
41                     while (threadIsRunning)
42                     {
43                         comm.requestStatus();
44                         Thread.sleep(WAIT_MS);
45                     }
46                 }
47                 catch (Exception e)
48                 {
49                     e.printStackTrace();
50                 }
51                 threadIsRunning = false;
52                 Log.v(TAG, "--- FINISH STATUS WATCH ---");
53
54             }
55         });
56         try
57         {
58             if (!threadIsRunning)
59             {
60                 Log.v(TAG, "--- START STATUS WATCH ---");
61                 thread.start();
62             }
63         }
64         catch (Exception e)
65         {
66             e.printStackTrace();
67         }
68     }
69
70     @Override
71     public void stop()
72     {
73         threadIsRunning = false;
74     }
75
76
77
78     private void statusReceivedImpl(byte[] data)
79     {
80         boolean isStatusUpdated = false;
81         try
82         {
83             int nofStatus = (data[13] * 256) + data[12];
84             //Log.v(TAG, "status Received. " + data.length + " bytes. [status : " + nofStatus + "]");
85
86             int statusCount = 0;
87             int index = 14;
88             while ((statusCount < nofStatus)&&(index < data.length))
89             {
90                 int dataId = ((((int)data[index + 1]) & 0xff) * 256) + (((int) data[index]) & 0xff);
91                 statusHolder.updateValue(dataId, data[index + 2], data[index + 3], data[index +4], data[index + 5]);
92                 index = index + 6;
93                 statusCount++;
94                 isStatusUpdated = true;
95             }
96             if (isStatusUpdated)
97             {
98                 notify.statusUpdated(statusHolder);
99             }
100         }
101         catch (Exception e)
102         {
103             e.printStackTrace();
104         }
105     }
106 }