summaryrefslogtreecommitdiffhomepage
path: root/tracker-wii
diff options
context:
space:
mode:
authorWei Shuai <cpuwolf@gmail.com>2018-02-07 12:05:03 +0800
committerWei Shuai <cpuwolf@gmail.com>2018-02-07 12:05:03 +0800
commit993e6b18966af927563398e04c516a6fcafd8123 (patch)
tree70a560a701429dabf624e545a4201f92e45ad087 /tracker-wii
parent84a143aa1b9654e4133cb19016c3a95fbfb57bf2 (diff)
tracker/wii: enhance user friendly UI
1. add wii status wii_cam_wait_for_sync 2. add images show how user should do in preview window 3. reduce redundancy convertion about QImage by doing in WIIPreview Class
Diffstat (limited to 'tracker-wii')
-rw-r--r--tracker-wii/Resources/on.pngbin0 -> 213304 bytes
-rw-r--r--tracker-wii/Resources/sync.pngbin0 -> 30573 bytes
-rw-r--r--tracker-wii/tracker_wii.qrc2
-rw-r--r--tracker-wii/wii_camera.cpp21
-rw-r--r--tracker-wii/wii_frame.cpp9
-rw-r--r--tracker-wii/wii_frame.hpp3
-rw-r--r--tracker-wii/wii_point_extractor.cpp19
7 files changed, 26 insertions, 28 deletions
diff --git a/tracker-wii/Resources/on.png b/tracker-wii/Resources/on.png
new file mode 100644
index 00000000..70df81ee
--- /dev/null
+++ b/tracker-wii/Resources/on.png
Binary files differ
diff --git a/tracker-wii/Resources/sync.png b/tracker-wii/Resources/sync.png
new file mode 100644
index 00000000..9da94c3c
--- /dev/null
+++ b/tracker-wii/Resources/sync.png
Binary files differ
diff --git a/tracker-wii/tracker_wii.qrc b/tracker-wii/tracker_wii.qrc
index a7a50512..94610710 100644
--- a/tracker-wii/tracker_wii.qrc
+++ b/tracker-wii/tracker_wii.qrc
@@ -1,5 +1,7 @@
<RCC>
<qresource prefix="/">
<file>Resources/wii.png</file>
+ <file>Resources/sync.png</file>
+ <file>Resources/on.png</file>
</qresource>
</RCC>
diff --git a/tracker-wii/wii_camera.cpp b/tracker-wii/wii_camera.cpp
index 99a1414c..91d61b34 100644
--- a/tracker-wii/wii_camera.cpp
+++ b/tracker-wii/wii_camera.cpp
@@ -106,11 +106,12 @@ void WIICamera::stop()
wii_camera_status WIICamera::_pair()
{
- wii_camera_status ret = wii_cam_wait_for_connect;
+ wii_camera_status ret = wii_cam_wait_for_sync;
HBLUETOOTH_RADIO_FIND hbt;
BLUETOOTH_FIND_RADIO_PARAMS bt_param;
HANDLE hbtlist[10];
int ibtidx = 0;
+ bool wiifound = false;
bt_param.dwSize = sizeof(bt_param);
hbt = BluetoothFindFirstRadio(&bt_param, hbtlist + ibtidx);
@@ -123,6 +124,7 @@ wii_camera_status WIICamera::_pair()
int i;
+ bool error = false;
for (i = 0; i < ibtidx; i++)
{
BLUETOOTH_RADIO_INFO btinfo;
@@ -154,9 +156,12 @@ wii_camera_status WIICamera::_pair()
{
continue;
}
- if (btdevinfo.fRemembered) {
- //BluetoothRemoveDevice(&btdevinfo.Address);
+
+ if ((btdevinfo.fRemembered)&&error) {
+ BluetoothRemoveDevice(&btdevinfo.Address);
}
+
+ wiifound = true;
if (btdevinfo.fConnected) {
break;
}
@@ -168,11 +173,11 @@ wii_camera_status WIICamera::_pair()
pwd[4] = btinfo.address.rgBytes[4];
pwd[5] = btinfo.address.rgBytes[5];
- if (ERROR_SUCCESS != BluetoothAuthenticateDevice(NULL, hbtlist[i],&btdevinfo, pwd, 6)) { continue; }
+ if (ERROR_SUCCESS != BluetoothAuthenticateDevice(NULL, hbtlist[i], &btdevinfo, pwd, 6)) { error = true; continue; }
DWORD servicecount = 32;
GUID guids[32];
- if (ERROR_SUCCESS != BluetoothEnumerateInstalledServices(hbtlist[i], &btdevinfo, &servicecount, guids)) { continue; }
- if (ERROR_SUCCESS != BluetoothSetServiceState(hbtlist[i], &btdevinfo, &HumanInterfaceDeviceServiceClass_UUID, BLUETOOTH_SERVICE_ENABLE)) { continue; }
+ if (ERROR_SUCCESS != BluetoothEnumerateInstalledServices(hbtlist[i], &btdevinfo, &servicecount, guids)) { error = true; continue; }
+ if (ERROR_SUCCESS != BluetoothSetServiceState(hbtlist[i], &btdevinfo, &HumanInterfaceDeviceServiceClass_UUID, BLUETOOTH_SERVICE_ENABLE)) { error = true; continue; }
break;
} while (BluetoothFindNextDevice(hbtdevfd, &btdevinfo));
BluetoothFindDeviceClose(hbtdevfd);
@@ -182,7 +187,7 @@ wii_camera_status WIICamera::_pair()
{
CloseHandle(hbtlist[i]);
}
-
+ if (wiifound) { ret = wii_cam_wait_for_connect; }
return ret;
}
@@ -192,7 +197,7 @@ wii_camera_status WIICamera::_get_frame(cv::Mat& frame)
if (!m_pDev->IsConnected()) {
qDebug() << "wii wait";
- _pair();
+ ret = _pair();
if (!m_pDev->Connect(wiimote::FIRST_AVAILABLE)) {
Beep(500, 30); Sleep(1000);
goto goodbye;
diff --git a/tracker-wii/wii_frame.cpp b/tracker-wii/wii_frame.cpp
index 9e367926..16bcfab2 100644
--- a/tracker-wii/wii_frame.cpp
+++ b/tracker-wii/wii_frame.cpp
@@ -19,9 +19,12 @@ using namespace pt_module;
WIIPreview& WIIPreview::operator=(const pt_frame& frame_)
{
+ const struct wii_info& wii = frame_.as_const<WIIFrame>()->wii;
const cv::Mat& frame = frame_.as_const<const WIIFrame>()->mat;
ensure_size(frame_copy, frame_out.cols, frame_out.rows, CV_8UC3);
+ status = wii.status;
+
if (frame.channels() != 3)
{
once_only(qDebug() << "tracker/pt: camera frame depth: 3 !=" << frame.channels());
@@ -46,6 +49,12 @@ WIIPreview::WIIPreview(int w, int h)
QImage WIIPreview::get_bitmap()
{
+ switch (status) {
+ case wii_cam_wait_for_sync:
+ return QImage(":/Resources/sync.png");
+ case wii_cam_wait_for_connect:
+ return QImage(":/Resources/on.png");
+ }
int stride = frame_out.step.p[0];
if (stride < 64 || stride < frame_out.cols * 4)
diff --git a/tracker-wii/wii_frame.hpp b/tracker-wii/wii_frame.hpp
index 2bffa862..3ad23734 100644
--- a/tracker-wii/wii_frame.hpp
+++ b/tracker-wii/wii_frame.hpp
@@ -16,7 +16,7 @@
namespace pt_module {
-enum wii_camera_status : unsigned { wii_cam_wait_for_connect, wii_cam_data_no_change, wii_cam_data_change };
+enum wii_camera_status : unsigned { wii_cam_wait_for_sync, wii_cam_wait_for_connect, wii_cam_data_no_change, wii_cam_data_change };
struct wii_info_points {
unsigned ux;
@@ -59,6 +59,7 @@ private:
bool fresh = true;
cv::Mat frame_copy, frame_color, frame_resize, frame_out;
+ wii_camera_status status;
};
} // ns pt_module
diff --git a/tracker-wii/wii_point_extractor.cpp b/tracker-wii/wii_point_extractor.cpp
index 99d4d375..215d50b8 100644
--- a/tracker-wii/wii_point_extractor.cpp
+++ b/tracker-wii/wii_point_extractor.cpp
@@ -109,35 +109,16 @@ void WIIPointExtractor::_draw_bg(cv::Mat& preview_frame, const struct wii_info &
1);
}
-
void WIIPointExtractor::extract_points(const pt_frame& frame_, pt_preview& preview_frame_, std::vector<vec2>& points)
{
- //const cv::Mat& frame = frame_.as_const<WIIFrame>()->mat;
const struct wii_info& wii = frame_.as_const<WIIFrame>()->wii;
cv::Mat& preview_frame = *preview_frame_.as<WIIPreview>();
- //create a blank frame
- //cv::Mat blank_frame(preview_frame.cols, preview_frame.rows, CV_8UC3, cv::Scalar(0, 0, 0));
- //cv::cvtColor(_frame, _frame2, cv::COLOR_BGR2BGRA);
- //cv::resize(blank_frame, preview_frame, cv::Size(preview_frame.cols, preview_frame.rows), 0, 0, cv::INTER_NEAREST);
-
switch (wii.status) {
case wii_cam_data_change:
_draw_bg(preview_frame, wii);
_draw_points(preview_frame, wii, points);
break;
- case wii_cam_wait_for_connect:
- char txtbuf[64];
- sprintf(txtbuf, "%s", "wait for WIImote");
- //draw wait text
- cv::putText(preview_frame,
- txtbuf,
- cv::Point(preview_frame.cols / 10, preview_frame.rows / 2),
- cv::FONT_HERSHEY_SIMPLEX,
- 1,
- cv::Scalar(255, 255, 255),
- 1);
- break;
}
}