diff options
| author | Wei Shuai <cpuwolf@gmail.com> | 2018-02-07 12:05:03 +0800 | 
|---|---|---|
| committer | Wei Shuai <cpuwolf@gmail.com> | 2018-02-07 12:05:03 +0800 | 
| commit | 993e6b18966af927563398e04c516a6fcafd8123 (patch) | |
| tree | 70a560a701429dabf624e545a4201f92e45ad087 | |
| parent | 84a143aa1b9654e4133cb19016c3a95fbfb57bf2 (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
| -rw-r--r-- | tracker-wii/Resources/on.png | bin | 0 -> 213304 bytes | |||
| -rw-r--r-- | tracker-wii/Resources/sync.png | bin | 0 -> 30573 bytes | |||
| -rw-r--r-- | tracker-wii/tracker_wii.qrc | 2 | ||||
| -rw-r--r-- | tracker-wii/wii_camera.cpp | 21 | ||||
| -rw-r--r-- | tracker-wii/wii_frame.cpp | 9 | ||||
| -rw-r--r-- | tracker-wii/wii_frame.hpp | 3 | ||||
| -rw-r--r-- | tracker-wii/wii_point_extractor.cpp | 19 | 
7 files changed, 26 insertions, 28 deletions
diff --git a/tracker-wii/Resources/on.png b/tracker-wii/Resources/on.png Binary files differnew file mode 100644 index 00000000..70df81ee --- /dev/null +++ b/tracker-wii/Resources/on.png diff --git a/tracker-wii/Resources/sync.png b/tracker-wii/Resources/sync.png Binary files differnew file mode 100644 index 00000000..9da94c3c --- /dev/null +++ b/tracker-wii/Resources/sync.png 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;  	}  }  | 
