@@ -255,7 +255,7 @@ static int do_odroidtest_lcd(cmd_tbl_t * cmdtp, int flag,
255255 return ret ;
256256}
257257
258- void btn_draw_key_arrays (int numkeys )
258+ void btn_draw_key_arrays (int numkeys , int key_idx )
259259{
260260 int i ;
261261
@@ -266,7 +266,7 @@ void btn_draw_key_arrays(int numkeys)
266266 lcd_printf (0 , 1 , 1 , "[ GPIO KEY TEST ]" );
267267
268268 for (i = 0 ; i < numkeys ; i ++ ) {
269- if (gpiokeys [i ].chk )
269+ if (( gpiokeys [i ].chk ) && ( i != key_idx ) )
270270 lcd_setfg_color ("blue" );
271271 else
272272 lcd_setfg_color ("red" );
@@ -275,6 +275,11 @@ void btn_draw_key_arrays(int numkeys)
275275 0 , gpiokeys [i ].name );
276276 }
277277
278+ mdelay (200 );
279+
280+ lcd_setfg_color ("blue" );
281+ lcd_printf (gpiokeys [key_idx ].x , gpiokeys [key_idx ].y ,
282+ 0 , gpiokeys [key_idx ].name );
278283}
279284
280285static int btn_passed ;
@@ -287,15 +292,13 @@ int btn_update_key_status(int key)
287292 if (!(gpiokeys [i ].chk )) {
288293 gpiokeys [i ].chk = 1 ;
289294 btn_passed ++ ;
290- return 1 ;
291- } else {
292- return 0 ;
293295 }
296+ return i ;
294297 }
295298 i ++ ;
296299 }
297300
298- return 0 ;
301+ return -1 ;
299302}
300303
301304void btn_set_default (void )
@@ -310,26 +313,41 @@ void btn_set_default(void)
310313static int do_odroidtest_btn (cmd_tbl_t * cmdtp , int flag ,
311314 int argc , char * const argv [])
312315{
313- int key , numkeys ;
316+ int key , numkeys , key_idx ;
314317 const char * hwrev = env_get ("hwrev" );
315318
316319 if (hwrev && !strcmp (hwrev , "v11" ))
317320 numkeys = NUMGPIOKEYS ;
318321 else
319322 numkeys = NUMGPIOKEYS - 2 ;
320323
321- btn_draw_key_arrays (numkeys );
324+ key_idx = -1 ;
325+ btn_draw_key_arrays (numkeys , key_idx );
322326 mdelay (2000 );
323327
324- while (btn_passed < numkeys ) {
328+ while (1 ) {
325329 key = wait_key_event ();
326- if ( btn_update_key_status (key ))
327- btn_draw_key_arrays (numkeys );
330+ key_idx = btn_update_key_status (key );
331+ btn_draw_key_arrays (numkeys , key_idx );
328332 printf ("key 0x%x, passed %d\n" , key , btn_passed );
333+
334+ /* termination using F1+F6 */
335+ if ((key == BTN_TRIGGER_HAPPY1 ) || (key == BTN_TRIGGER_HAPPY6 )) {
336+ printf ("check termination keys, key_idx %d\n" , key_idx );
337+
338+ if (!run_command ("gpio input C0" , 0 )
339+ && !run_command ("gpio input C5" , 0 )) {
340+ printf ("Got termination key!\n" );
341+ break ;
342+ }
343+ }
329344 }
330345
331346 lcd_setfg_color ("white" );
332- lcd_printf (0 , 18 , 1 , "GPIO KEY TEST PASS!" );
347+ if (btn_passed == numkeys )
348+ lcd_printf (0 , 18 , 1 , "GPIO KEY TEST PASS!" );
349+ else
350+ lcd_printf (0 , 18 , 1 , "GPIO KEY TEST TERMINATED!" );
333351
334352 btn_set_default ();
335353
0 commit comments