OSDN Git Service

ステータス受信準備。その2。
[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 IFujiStatusReceive
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     private void statusReceivedImpl(byte[] data)
77     {
78         boolean isStatusUpdated = false;
79         try
80         {
81             Log.v(TAG, "status Received. " + data.length + " bytes.");
82
83 /*
84 RX [00] 7a 00 00 00 02 00 15 10
85 RX [01] b1 00 00 00 12 00 1b d2
86 RX [02] 00 00 00 00 0c 50 02 00
87 RX [03] 00 00 12 50 00 00 00 00
88 RX [04] 29 d2 67 04 00 00 2a d2
89 RX [05] a1 06 00 00 0e 50 03 00
90 RX [06] 00 00 01 50 03 00 00 00
91 RX [07] 7c d1 04 04 02 03 09 d2
92 RX [08] 01 00 00 00 10 50 b3 fe
93 RX [09] ff ff 05 50 02 00 00 00
94 RX [10] 28 d0 00 00 00 00 0a 50
95 RX [11] 01 80 00 00 41 d2 0a 00
96 RX [12] 00 00 18 d0 04 00 00 00
97 RX [13] 07 50 90 01 00 00 01 d0
98 RX [14] 03 00 00 00 2a d0 40 06
99 RX [15] 00 80 0c 00 00 00 03 00
100 RX [16] 01 20 b1 00 00 00
101 */
102
103             if (isStatusUpdated)
104             {
105                 notify.statusUpdated(statusHolder);
106             }
107         }
108         catch (Exception e)
109         {
110             e.printStackTrace();
111         }
112     }
113 }