-
Notifications
You must be signed in to change notification settings - Fork 0
/
InstallThread.h
142 lines (124 loc) · 4.3 KB
/
InstallThread.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#ifndef INSTALLTHREAD_H
#define INSTALLTHREAD_H
#include <QImage>
#include <QThread>
#include <QDateTime>
#include "common.h"
class InstallThread : public QThread {
Q_OBJECT
private:
int *m_socket;
bool m_thread_exit;
int m_frameCnt;
QImage m_image;
public:
InstallThread(int* socket) : QThread(), m_socket(socket), m_thread_exit(false), m_frameCnt(0) {}
virtual ~InstallThread() {}
signals:
void signal_frameCountUpdated(int);
void signal_frameImageUpdated(QImage*);
public slots:
void slot_thread_exit() {m_thread_exit = true;}
protected:
void run() {
m_thread_exit = false;
m_frameCnt = 0;
XData xdata;
LOGI("Set work mode to SETUP ...");
int32_t workmode = I_VAL_WORK_MODE_SETUP;
send_cmd(*m_socket, I_ACTION_WRITE_PROPERTY
, I_PROPERTY_int32_WORK_MODE, sizeof(workmode), &workmode);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Set workmode to SETUP failed");
return;
}
if(use_trigger_mode)
{
LOGI("Set trigger mode to INTERNAL ...");
int32_t triggermode = I_VAL_TRIGGER_MODE_INTERNAL;
send_cmd(*m_socket, I_ACTION_WRITE_PROPERTY
, I_PROPERTY_int32_TRIGGER_MODE, sizeof(triggermode), &triggermode);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Set trigger mode to INTERNAL failed");
return;
}
} else {
LOGI("Set trigger mode to CONTINUOUS ...");
int32_t triggermode = I_VAL_TRIGGER_MODE_CONTINUOUS;
send_cmd(*m_socket, I_ACTION_WRITE_PROPERTY
, I_PROPERTY_int32_TRIGGER_MODE, sizeof(triggermode), &triggermode);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Set trigger mode to INTERNAL failed");
return;
}
}
LOGI("Start running ...");
send_cmd(*m_socket, I_ACTION_CMD, I_CMD_START_CAPTURE);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Start running failed");
return;
}
LOGI("Start fetching ...");
send_cmd(*m_socket, I_ACTION_CMD, I_CMD_START_FETCH_DEPTH);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Start fetching failed");
return;
}
LOGI("Run into loop ...");
qint64 t_old = 0;
while(!m_thread_exit)
{
qint64 t0 = QDateTime::currentMSecsSinceEpoch();
if(use_trigger_mode)
{
send_cmd(*m_socket, I_ACTION_CMD, I_CMD_TRIGGER);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Trigger failed!");
continue;
}
}
int err = recieve_data(*m_socket, xdata, &recv_buffer, 1);
if(err != 0)
{
continue;
}
qint64 t1 = QDateTime::currentMSecsSinceEpoch();
LOGD("t_old->t0 %lld, t0->t1 fetch image time %lld", t0 - t_old, t1 - t0);
t_old = t1;
m_frameCnt++;
m_image.loadFromData((uchar*)(&recv_buffer), xdata.length);
emit signal_frameImageUpdated(&m_image);
emit signal_frameCountUpdated(m_frameCnt);
}
LOGI("Stop fetching ...");
send_cmd(*m_socket, I_ACTION_CMD, I_CMD_STOP_FETCH_DEPTH);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Stop fetching failed");
return;
}
LOGI("Stop running ...");
send_cmd(*m_socket, I_ACTION_CMD, I_CMD_STOP_CAPTURE);
recieve_data(*m_socket, xdata, &recv_buffer);
if(xdata.error_id != I_ERR_NO_ERROR)
{
LOGE("Stop running failed");
return;
}
LOGI("InstallThread exit!");
}
};
#endif // INSTALLTHREAD_H