一 問題描述
工廠測試camera,會出現兩種現象:
1 camera preview有顯示,但是按鍵無響應,無法拍照測試
2 camera preview黑屏,按鍵無響應
以上情況,系統都沒有死,adb log正常
二 復現路徑確認
按照正常測試手法,進入camera測試,preview取景出來,再按confirm鍵拍照,測試camera都不會出現問題,反覆試驗發現,一進入camera測試,preview取景還沒有出來,就按confirm鍵拍照,則必現按鍵無響應現象。
三 問題分析
**流程分析:
caseitem_camera_test://重新測試
break;
case item_pass: //測試通過
break;
caseitem_fail: //測試失敗
break;
while(1);
static void*camera_update_capture_tv_thread(void *priv)
//register key handle
ui_init_textview(tv,camera_cap_key_handler,(void*)cam);
camera_preview_test();//preview entry
cam->exit_thd = mfalse;
//waite key event
while (1)
key = ui_wait_key();
usleep(200000);
chkcnt--;
tv->m_khandler(key, tv->m_priv);
if (cam ->exit_thd)
break;
if (chkcnt > 0)
continue;
chkcnt = 5;
static mint32camera_preview_test()
bool bret =bsenddatatoacdk(acdk_cmd_preview_start,
(muint8*)&racdkprvconfig,
sizeof(acdk_preview_struct),
null,
0,&u4retlen);
camera_state = camera_state_preview;
static volatile intcapture_done = mfalse;
static intcamera_cap_key_handler(int key, void *priv)
switch (key)
case ui_key_confirm:
err =camera_capture_test();
if(err == 0)
capture_done =mtrue;
else
ftm_camera_dbg("capture fail\n");
exit = 1;
break;
case ui_key_back:
exit = 1;
break;
if (exit)
cam->exit_thd =mtrue;
tv->exit(tv);
static intcamera_capture_test()
gcapcbdone = mfalse;
bret = bsenddatatoacdk(acdk_cmd_capture,
(unsigned char*)&racdkcapconfig,
sizeof(acdk_capture_struct),
null,
0,&u4retlen);
//wait capture done
if(bret == mtrue)
// gcapcbdone在capture success cb置true
while(!gcapcbdone) {
usleep(1000);
else
return 1;
問題的本質原因是camera ftm thread 呼叫acdk preview/capture是非同步的,通過發訊息給acdk module。而進入 camera_update_capture_tv_thread就註冊key handle,這時confirm key就能正常相應,然而camera preview 還要通過發訊息acdk_cmd_preview_start給acdk,返回後preview還沒有ok,因為是非同步的,但是這時confirm keyevent來,就得跑到handle的capture流程,傳送acdk_cmd_capture訊息給acdk做拍照,一直等待capture成功,但是由於preivew流程都沒有正常執行,這時capture一直不能成功執行,導致thread 死鎖,按鍵無響應。
四 修改方法
將key handle 註冊後移到camera preview ready後,camera ftm發acdk_cmd_preview_start訊息給acdk啟動preview,返回後等待1.5s 使得camerapreview取景正常。這時confirm key按下就能正常相應了。
+ pthread_mutex_lock(&camera_mutex);
camera_preview_test();
+ usleep(1500000);//2s
+ pthread_mutex_unlock(&camera_mutex);
+ ui_init_textview(tv,camera_cap_key_handler, (void*)cam );
+ tv->set_title(tv, &cam->title);
+ tv->set_text(tv, &cam->text);
+ tv->set_btn(tv,&cam->left_btn, &cam->center_btn, &cam->right_btn);
+ tv->redraw(tv);
MacBook鍵盤鎖定 按鍵失效問題
相應 重啟 的號召,我通過滑鼠控制macbook重新啟動。但發現問題仍然存在。其一 鍵盤短路 or 鍵盤壞掉了。解決方法 拿去修吧!因為我電腦重啟的時候需要輸入登入密碼,在這個時候,我測試了鍵盤上的大多數按鍵,都有反應,能進行正常輸入。所以我斷定我的鍵盤肯定沒有壞,只是被鎖定住了。於是接著往下看。其...
Linux按鍵響應測試
在linux核心中,input裝置用input dev結構體描述,使用input子系統實現輸入裝置驅動的時候,驅動的核心工作就是向系統報告按鍵 觸控螢幕 鍵盤 滑鼠等輸入事件 event,通過input event結構體描述 linux input.h 這個檔案定義了event事件的結構體,api和...
遠端桌面按鍵失效變成快捷鍵
一直在使用遠端桌面連線windows 2008作業系統,發現乙個很煩的問題,經常發現某些時間,輸入的按鍵變成了快捷鍵。如彈出 輔助功能選項 某些程式被快捷啟動 按e出現資源管理器等。又如按l鍵就直接回到登入介面要求重新登入 後來網上查了資料發現,按e會出現資源管理器,相當於e變成了win e,所以才...