#include <stdio.h> 
 | 
#include <stdlib.h> 
 | 
#include <string.h> 
 | 
#include <unistd.h> 
 | 
#include "screen_test.h" 
 | 
#include "test_case.h" 
 | 
#include "common.h" 
 | 
#include "language.h" 
 | 
#include "minui/minui.h" 
 | 
  
 | 
#include <linux/input.h> 
 | 
#include "script.h" 
 | 
  
 | 
/*  variable for test_config.cfg  */ 
 | 
int key_times; 
 | 
int all_key_change; 
 | 
unsigned int start_key; 
 | 
  
 | 
unsigned int code_tmp = 0; 
 | 
unsigned int picture_change_key; 
 | 
  
 | 
unsigned char code_cnt = 0; 
 | 
unsigned char screen_start = 0; 
 | 
  
 | 
int w1, h1, lcd_y; 
 | 
  
 | 
void screen_change(uint8_t screen_cnt) 
 | 
{ 
 | 
//    printf("////////// screen_chage : %d ///////////\n",screen_cnt); 
 | 
    switch (screen_cnt) { 
 | 
    case  0: 
 | 
        FillColor(255, 0, 0, 255, 0, 0, w1, h1);    /*red*/ 
 | 
        break; 
 | 
    case  1: 
 | 
        tiles_count--; 
 | 
        FillColor(0, 255, 0, 255, 0, 0, w1, h1);    /*green*/ 
 | 
        break; 
 | 
    case  2: 
 | 
        tiles_count--; 
 | 
        FillColor(0, 0, 255, 255, 0, 0, w1, h1);    /*blue*/ 
 | 
        break; 
 | 
    case  3: 
 | 
        tiles_count--; 
 | 
        FillColor(0, 0, 0, 255, 0, 0, w1, h1);      /*black*/ 
 | 
        break; 
 | 
    case  4: 
 | 
        tiles_count--; 
 | 
        FillColor(255, 255, 255, 255, 0, 0, w1, h1);/*white*/ 
 | 
        break; 
 | 
    case  5: 
 | 
        tiles_count--; 
 | 
        ui_print_xy_rgba(0, lcd_y, 0, 255, 0, 255, 
 | 
                        "%s:[%s]\n", PCBA_LCD, PCBA_TESTED); 
 | 
        break; 
 | 
    default: 
 | 
        screen_start = 0; 
 | 
        ui_print_xy_rgba(0, lcd_y, 0, 255, 0, 255, 
 | 
                        "%s:[%s]\n", PCBA_LCD, PCBA_TESTED); 
 | 
        break; 
 | 
    } 
 | 
    /*printf("-----------%s--%s---screen_cnt=%d----------\n", 
 | 
        __FILE__,__FUNCTION__,screen_cnt);*/ 
 | 
} 
 | 
  
 | 
unsigned int get_key_code(char *key_char) 
 | 
{ 
 | 
    if (!strcmp(key_char, "KEY_VOLUMEDOWN")) 
 | 
        return KEY_VOLUMEDOWN; 
 | 
    else if (!strcmp(key_char, "KEY_VOLUMEUP")) 
 | 
        return KEY_VOLUMEUP; 
 | 
    else if (!strcmp(key_char, "KEY_POWER")) 
 | 
        return KEY_POWER; 
 | 
    else if (!strcmp(key_char, "KEY_F1")) 
 | 
        return KEY_F1; 
 | 
    else if (!strcmp(key_char, "KEY_HOME")) 
 | 
        return KEY_HOME; 
 | 
    else if (!strcmp(key_char, "KEY_BACK")) 
 | 
        return KEY_BACK; 
 | 
    else if (!strcmp(key_char, "KEY_UP")) 
 | 
        return KEY_UP; 
 | 
    else if (!strcmp(key_char, "KEY_DOWN")) 
 | 
        return KEY_DOWN; 
 | 
    else if (!strcmp(key_char, "KEY_LEFT")) 
 | 
        return KEY_LEFT; 
 | 
    else if (!strcmp(key_char, "KEY_RIGHT")) 
 | 
        return KEY_RIGHT; 
 | 
    else if (!strcmp(key_char, "KEY_MENU")) 
 | 
        return KEY_MENU; 
 | 
    else if (!strcmp(key_char, "KEY_ENTER")) 
 | 
        return KEY_ENTER; 
 | 
    else if (!strcmp(key_char, "KEY_ALL")) 
 | 
        return 0; 
 | 
    else { 
 | 
        printf("un supported key:%s\n", key_char); 
 | 
        return 0; 
 | 
    } 
 | 
} 
 | 
  
 | 
/*  key detect 
 | 
*   start the test and change the picture 
 | 
*/ 
 | 
void screenTest_key_detect(unsigned int code) 
 | 
{ 
 | 
    if (!screen_start) { 
 | 
        if (code != code_tmp) { 
 | 
            code_tmp = code; 
 | 
            code_cnt = 0; 
 | 
        } else { 
 | 
            if ((!start_key) || (code == start_key)) { 
 | 
                if (++code_cnt >= (key_times-1)) { 
 | 
                    picture_change_key = code; 
 | 
                    screen_start = 1; 
 | 
                    code_cnt = 0; 
 | 
                    screen_change(code_cnt); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } else { 
 | 
        if ((code == picture_change_key) || all_key_change) { 
 | 
            code_cnt++; 
 | 
            screen_change(code_cnt); 
 | 
            if (code_cnt >= 5) { 
 | 
                code_cnt = 0; 
 | 
                screen_start = 0; 
 | 
                code_tmp = !code; 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 | 
  
 | 
void *screen_test(void *argv) 
 | 
{ 
 | 
    struct testcase_info *tc_info = (struct testcase_info *)argv; 
 | 
    char key_name[16]; 
 | 
  
 | 
    if (script_fetch("Lcd", "start_key", (int *)key_name, 4) != 0) { 
 | 
        printf("%s: key_times err : %s !!!\r\n",__func__, key_name); 
 | 
        strcpy(key_name, "KEY_ALL"); 
 | 
    } 
 | 
    printf("=========== code_cnt is:   %d ==========\n", code_cnt); 
 | 
    start_key = get_key_code(key_name); 
 | 
  
 | 
    if (script_fetch("Lcd", "key_times", &key_times, 1) != 0) { 
 | 
        printf("%s: key_times err : %d !!!\r\n",__func__, key_times); 
 | 
        key_times = 3; 
 | 
    } 
 | 
    if (script_fetch("Lcd", "all_key_change", &all_key_change, 1) != 0) { 
 | 
        printf("%s: all_key_change err : %d !!!\r\n",__func__, all_key_change); 
 | 
        all_key_change = 0; 
 | 
    } 
 | 
  
 | 
    w1 =  gr_fb_width(); 
 | 
    h1 =  gr_fb_height(); 
 | 
  
 | 
    if (tc_info->y <= 0) 
 | 
        tc_info->y = get_cur_print_y(); 
 | 
  
 | 
    ui_print_xy_rgba(0, tc_info->y, 255, 255, 0, 255, \ 
 | 
                    "%s: pls press [%s] %d times to start test.\n", \ 
 | 
                    PCBA_LCD, key_name, key_times); 
 | 
    lcd_y = tc_info->y; 
 | 
  
 | 
    int x =  gr_fb_width() >> 1; 
 | 
    int y = (gr_fb_height()*2)/3; 
 | 
    int w =  gr_fb_width() >> 1; 
 | 
    int h = gr_fb_height()/3; 
 | 
  
 | 
    FillColor(255, 0, 0, 255, x, y, w/3, h); 
 | 
    FillColor(0, 255, 0, 255, x+w/3, y, w/3, h); 
 | 
    FillColor(0, 0, 255, 255, x+(2*w)/3, y, w/3, h); 
 | 
    sleep(3); 
 | 
  
 | 
    tc_info->result = 0; 
 | 
    return argv; 
 | 
} 
 |