#include <ctype.h>  
 | 
#include <errno.h>  
 | 
#include <fcntl.h>  
 | 
#include <getopt.h>  
 | 
#include <limits.h>  
 | 
#include <linux/input.h>  
 | 
#include <stdio.h>  
 | 
#include <stdlib.h>  
 | 
#include <string.h>  
 | 
#include <sys/stat.h>  
 | 
#include <sys/types.h>  
 | 
#include <time.h>  
 | 
#include <unistd.h>  
 | 
#include <dirent.h>  
 | 
#include <inttypes.h>  
 | 
#include <errno.h>  
 | 
  
 | 
  
 | 
#include "minui/minui.h"  
 | 
#include "common.h"  
 | 
#include "minzip/DirUtil.h"  
 | 
#include "recovery_ui.h"  
 | 
  
 | 
#include "script.h"  
 | 
#include "test_case.h"  
 | 
#include "script_parser.h"  
 | 
#include "debug.h"  
 | 
  
 | 
#include "Language/language.h"  
 | 
  
 | 
  
 | 
#include "rtc_test.h"  
 | 
#include "wlan_test.h"  
 | 
#include "ddr_test.h"  
 | 
#include "bt_test.h"  
 | 
#include "sdcard_test.h"  
 | 
#include "udisk_test.h"  
 | 
#include "key_test.h"  
 | 
#include "screen_test.h"  
 | 
#include "emmc_test.h"  
 | 
#include "audio_play_test.h"  
 | 
#include "audio_record_test.h"  
 | 
  
 | 
#define SCRIPT_NAME                     "/data/test_config.cfg"  
 | 
  
 | 
int manual_p_y = 1;  
 | 
/* current position for auto test tiem in y direction */  
 | 
int cur_p_y;  
 | 
  
 | 
pthread_t rtc_tid;  
 | 
char *rtc_res;  
 | 
char dt[30] = { "20120927.143045" };  
 | 
struct rtc_msg *rtc_msg;  
 | 
int err_rtc;  
 | 
int rtc_p_y;  
 | 
  
 | 
pthread_t screen_tid;  
 | 
pthread_t wlan_tid;  
 | 
pthread_t bt_tid;  
 | 
pthread_t sd_tid;  
 | 
pthread_t udisk_tid;  
 | 
pthread_t ddr_tid;  
 | 
pthread_t emmc_tid;  
 | 
pthread_t led_tid;  
 | 
pthread_t key_tid;  
 | 
  
 | 
pthread_t audioplay_tid;  
 | 
pthread_t audiorecord_tid;  
 | 
  
 | 
static int total_testcases;  
 | 
static struct testcase_base_info *base_info;  
 | 
static struct list_head auto_test_list_head;  
 | 
static struct list_head manual_test_list_head;  
 | 
  
 | 
  
 | 
static pthread_mutex_t gCur_p_y = PTHREAD_MUTEX_INITIALIZER;  
 | 
  
 | 
int get_cur_print_y(void)  
 | 
{  
 | 
    int tmp;  
 | 
  
 | 
    pthread_mutex_lock(&gCur_p_y);  
 | 
    /*if (gr_fb_height() > 1080)  
 | 
        cur_p_y--;  
 | 
    tmp = cur_p_y--;*/  
 | 
    tmp = cur_p_y++;  
 | 
  
 | 
    pthread_mutex_unlock(&gCur_p_y);  
 | 
    printf("cur_print_y:%d\n", tmp);  
 | 
    return tmp;  
 | 
}  
 | 
  
 | 
static int parse_testcase(void)  
 | 
{  
 | 
    int i, j, mainkey_cnt;  
 | 
    struct testcase_base_info *info;  
 | 
    char mainkey_name[32], display_name[64], binary[16];  
 | 
    int activated, category, run_type, sim_counts;  
 | 
    int len;  
 | 
  
 | 
    mainkey_cnt = script_mainkey_cnt();  
 | 
    info = (struct testcase_base_info *)  
 | 
        malloc(sizeof(struct testcase_base_info) * mainkey_cnt);  
 | 
    if (info == NULL) {  
 | 
        db_error("core: allocate memory for temporary test case basic "  
 | 
             "information failed(%s)\n", strerror(errno));  
 | 
        return -1;  
 | 
    }  
 | 
    memset(info, 0, sizeof(struct testcase_base_info) * mainkey_cnt);  
 | 
  
 | 
    for (i = 0, j = 0; i < mainkey_cnt; i++) {  
 | 
        struct testcase_info *tc_info;  
 | 
  
 | 
        memset(mainkey_name, 0, 32);  
 | 
        script_mainkey_name(i, mainkey_name);  
 | 
  
 | 
        if (script_fetch  
 | 
            (mainkey_name, "display_name", (int *)display_name, 16))  
 | 
            continue;  
 | 
  
 | 
        if (script_fetch(mainkey_name, "activated", &activated, 1))  
 | 
            continue;  
 | 
  
 | 
        if (display_name[0] && activated == 1) {  
 | 
            strncpy(info[j].name, mainkey_name, 32);  
 | 
            strncpy(info[j].display_name, display_name, 64);  
 | 
            info[j].activated = activated;  
 | 
  
 | 
            if (script_fetch  
 | 
                (mainkey_name, "program", (int *)binary, 4) == 0) {  
 | 
                strncpy(info[j].binary, binary, 16);  
 | 
            }  
 | 
  
 | 
            info[j].id = j;  
 | 
  
 | 
            if (script_fetch(mainkey_name, "category", &category, 1)  
 | 
                == 0) {  
 | 
                info[j].category = category;  
 | 
            }  
 | 
  
 | 
            if (script_fetch(mainkey_name, "run_type", &run_type, 1)  
 | 
                == 0) {  
 | 
                info[j].run_type = run_type;  
 | 
            }  
 | 
  
 | 
            /*  
 | 
            if (script_fetch  
 | 
                (mainkey_name, "sim_counts", &sim_counts, 1) == 0) {  
 | 
                simCounts = sim_counts;  
 | 
            }  
 | 
            */  
 | 
  
 | 
            tc_info = (struct testcase_info *)  
 | 
                malloc(sizeof(struct testcase_info));  
 | 
            if (tc_info == NULL) {  
 | 
                printf("malloc for tc_info[%d] fail\n", j);  
 | 
                return -1;  
 | 
            }  
 | 
            tc_info->x = 0;  
 | 
            tc_info->y = 0;  
 | 
            tc_info->base_info = &info[j];  
 | 
            if (tc_info->base_info->category)   //manual test  
 | 
                list_add(&tc_info->list, &manual_test_list_head);  
 | 
            else    //auto test  
 | 
                list_add(&tc_info->list, &auto_test_list_head);  
 | 
            j++;  
 | 
        }  
 | 
    }  
 | 
    total_testcases = j;  
 | 
  
 | 
    db_msg("core: total test cases #%d\n", total_testcases);  
 | 
    if (total_testcases == 0)  
 | 
        return 0;  
 | 
  
 | 
    len = sizeof(struct testcase_base_info) * total_testcases;  
 | 
  
 | 
    return total_testcases;  
 | 
}  
 | 
  
 | 
int start_test_pthread(struct testcase_info *tc_info)  
 | 
{  
 | 
    int err;  
 | 
    printf(">>> Currnet test is : [ %s ]\n", tc_info->base_info->name);  
 | 
  
 | 
#if 1  
 | 
    if (!strcmp(tc_info->base_info->name, "rtc")) {  
 | 
        err = pthread_create(&rtc_tid, NULL, rtc_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } if (!strcmp(tc_info->base_info->name, "Lcd")) {  
 | 
        err = pthread_create(&screen_tid, NULL, screen_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "wifi")) {  
 | 
        err = pthread_create(&wlan_tid, NULL, wlan_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "ddr")) {  
 | 
        err = pthread_create(&ddr_tid, NULL, ddr_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    }else if (!strcmp(tc_info->base_info->name, "bluetooth")) {  
 | 
        err = pthread_create(&bt_tid, NULL, bt_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "sdcard")) {  
 | 
        err = pthread_create(&sd_tid, NULL, sdcard_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create sdcard test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "emmc")) {  
 | 
        err = pthread_create(&emmc_tid, NULL, emmc_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create sdcard test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "udisk")) {  
 | 
        err = pthread_create(&udisk_tid, NULL, udisk_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create usb host test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "play")) {  
 | 
        err = pthread_create(&audioplay_tid, NULL, audio_play_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create audio play test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "record")) {  
 | 
        err = pthread_create(&audiorecord_tid, NULL, audio_record_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create audio record test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "Key")) {  
 | 
        err = pthread_create(&key_tid, NULL, key_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create key test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else {  
 | 
        printf(">>> unsupport test item: [ %s ] for now!\n", tc_info->base_info->name);  
 | 
        return -1;  
 | 
    }  
 | 
#endif  
 | 
  
 | 
  
 | 
#if 0  
 | 
  
 | 
    if (!strcmp(tc_info->base_info->name, "Lcd")) {  
 | 
        err = pthread_create(&screen_tid, NULL, screen_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create screen test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "rtc")) {  
 | 
        err = pthread_create(&rtc_tid, NULL, rtc_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create rtc test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "battery")) {  
 | 
        err = pthread_create(&battery_tid, NULL, battery_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create battery_test test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "ddr_emmc")) {  
 | 
        err = pthread_create(&ddr_emmc_tid, NULL,  
 | 
            ddr_emmc_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create ddr_emmc test  thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "Codec")) {  
 | 
        hasCodec = 1;  
 | 
        err = pthread_create(&codec_tid, NULL, codec_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create codec test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "Key")) {  
 | 
        err = pthread_create(&key_tid, NULL, key_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create key test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "fm")) {  
 | 
        err = pthread_create(&fm_tid, NULL, fm_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create fm test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "camera")) {  
 | 
        tc_info->dev_id = 0;  
 | 
        err = pthread_create(&camera_tid, NULL, camera_test, tc_info);  
 | 
        if (err != 0) {  
 | 
               printf("create camera test thread error: %s/n",  
 | 
                      strerror(err));  
 | 
               return -1;  
 | 
        }  
 | 
        }  
 | 
    else if (!strcmp(tc_info->base_info->name, "wifi")) {  
 | 
        err = pthread_create(&wlan_tid, NULL, wlan_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create wifi test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "nand")) {  
 | 
        err = pthread_create(&nand_tid, NULL, nand_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create nandflash test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "bluetooth")) {  
 | 
        printf("bluetooth_test thread created\n");  
 | 
  
 | 
        err = pthread_create(&bt_tid, NULL, bt_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create bt(bluetooth) test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "gsensor")) {  
 | 
        err = pthread_create(&gsensor_tid, NULL, gsensor_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create gsensor test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "allsensor")) {  
 | 
        err = pthread_create(&sensor_tid, NULL,  
 | 
            all_sensor_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create sensor test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "lsensor")) {  
 | 
        err =  
 | 
            pthread_create(&lsensor_tid, NULL, lightsensor_test,  
 | 
                   tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create lsensor test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "gps")) {  
 | 
        err = pthread_create(&gps_tid, NULL, gps_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create gps test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "psensor")) {  
 | 
        err = pthread_create(&psensor_tid, NULL, psensor_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create psensor test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "compass")) {  
 | 
        err = pthread_create(&compass_tid, NULL, compass_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create ST compass test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "udisk")) {  
 | 
        err = pthread_create(&udisk_tid, NULL, udisk_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create sdcard test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "sdcard")) {  
 | 
        sd_err = pthread_create(&sd_tid, NULL, sdcard_test, tc_info);  
 | 
        if (sd_err != 0) {  
 | 
            printf("create sdcard test thread error: %s/n",  
 | 
                   strerror(sd_err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "hdmi")) {  
 | 
        hdmi_err = pthread_create(&hdmi_tid, NULL, hdmi_test, tc_info);  
 | 
        if (hdmi_err != 0) {  
 | 
            printf("create hdmi test thread error: %s/n",  
 | 
                   strerror(hdmi_err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "sim")) {  
 | 
        err = pthread_create(&sim_tid, NULL, sim_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create sim test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "vibrator")) {  
 | 
        err =  
 | 
            pthread_create(&vibrator_tid, NULL, vibrator_test, tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create vibrator test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "falshlight")) {  
 | 
        err =  
 | 
            pthread_create(&falshlight_tid, NULL, flashlight_test,  
 | 
                   tc_info);  
 | 
        if (err != 0) {  
 | 
            printf("create flashlight test thread error: %s/n",  
 | 
                   strerror(err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "ddr")) {  
 | 
        ddr_err = pthread_create(&ddr_tid, NULL, ddr_test, tc_info);  
 | 
        if (ddr_err != 0) {  
 | 
            printf("create ddr test thread error: %s/n",  
 | 
                   strerror(ddr_err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "cpu")) {  
 | 
        cpu_err = pthread_create(&cpu_tid, NULL, cpu_test, tc_info);  
 | 
        if (cpu_err != 0) {  
 | 
            printf("create cpu test thread error: %s/n",  
 | 
                   strerror(cpu_err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else if (!strcmp(tc_info->base_info->name, "lan")) {  
 | 
        lan_err = pthread_create(&lan_tid, NULL, lan_test, tc_info);  
 | 
        if (lan_err != 0) {  
 | 
            printf("create lan test thread error: %s/n",  
 | 
                   strerror(lan_err));  
 | 
            return -1;  
 | 
        }  
 | 
    } else {  
 | 
        printf("unsupport test item:%s\n", tc_info->base_info->name);  
 | 
        return -1;  
 | 
    }  
 | 
#endif  
 | 
    return 0;  
 | 
}  
 | 
  
 | 
  
 | 
int init_manual_test_item(struct testcase_info *tc_info)  
 | 
{  
 | 
    int err = 0;  
 | 
    printf("start_manual_test_item : %d, %s \r\n", tc_info->y,  
 | 
           tc_info->base_info->name);  
 | 
  
 | 
    manual_p_y += 1;  
 | 
    tc_info->y = manual_p_y;  
 | 
  
 | 
    start_test_pthread(tc_info);  
 | 
  
 | 
    return 0;  
 | 
}  
 | 
  
 | 
int start_manual_test_item(int x, int y)  
 | 
{  
 | 
    return 1;  
 | 
//    Camera_Click_Event(x, y);  
 | 
}  
 | 
  
 | 
int start_auto_test_item(struct testcase_info *tc_info)  
 | 
{  
 | 
    printf("start_auto_test_item : LINE:%d, %s \r\n", tc_info->y,  
 | 
           tc_info->base_info->name);  
 | 
  
 | 
    start_test_pthread(tc_info);  
 | 
  
 | 
    return 0;  
 | 
}  
 | 
  
 | 
int run_test_item_cmd(char* item_bin)  
 | 
{  
 | 
    int ret = 0;  
 | 
    int status = 0;  
 | 
    if (item_bin == NULL)  
 | 
        return -1;  
 | 
  
 | 
    status = system(item_bin);  
 | 
    if (status == -1) {  
 | 
        printf("system cmd run :%s error...\n", item_bin);  
 | 
        ret = -1;  
 | 
    } else {  
 | 
        printf("exit status value = [0x%x]\n", status);  
 | 
        if (WIFEXITED(status)) {  
 | 
            if (0 == WEXITSTATUS(status)) {  
 | 
                printf("run item bin successfully.\n");  
 | 
                ret = 0;  
 | 
            } else {  
 | 
                printf("run item bin fail, script exit code: %d\n", WEXITSTATUS(status));  
 | 
                ret = -2;  
 | 
            }  
 | 
        } else {  
 | 
            printf("exit status = [%d]\n", WEXITSTATUS(status));  
 | 
            ret = -1;  
 | 
        }  
 | 
    }  
 | 
  
 | 
    return ret;  
 | 
}  
 | 
  
 | 
int parse_test_result(char* rst_filename, char* test_item, char* para0)  
 | 
{  
 | 
    int ret = -1;  
 | 
    char read_buf[128];  
 | 
    char test_buf[10];  
 | 
    int flag = 0;  
 | 
  
 | 
    if (rst_filename == NULL || test_item == NULL)  
 | 
        return -1;  
 | 
  
 | 
    //read test result from /tmp dir  
 | 
    if(access(rst_filename, F_OK) == 0) {  
 | 
        //have find result file. we read this result file and parse.  
 | 
        FILE *fp;  
 | 
  
 | 
        fp = fopen(rst_filename, "r");  
 | 
        memset(read_buf, 0 ,sizeof(read_buf));  
 | 
        if (!fp) {  
 | 
            printf("%s fopen err:%s\n",__func__,strerror(errno));  
 | 
            return ret;  
 | 
        }  
 | 
  
 | 
        while(!feof(fp)) {  
 | 
            char* test_ret= NULL;  
 | 
            fgets(read_buf,sizeof(read_buf),fp);  
 | 
  
 | 
            if((strstr(read_buf,test_item))!= NULL) {  
 | 
                char *result = NULL;  
 | 
                char delims[] = ",";  
 | 
  
 | 
                result = strtok(read_buf, delims );  
 | 
                while( result != NULL ) {  
 | 
                    if(para0 != NULL && !flag) {  
 | 
                        //just get extrernal first string, do'nt care others.  
 | 
                        printf(">>>>> will get extern param is %s \n", result);  
 | 
                        memcpy(para0, result, strlen(result));  
 | 
                        flag = 1;  
 | 
                    }  
 | 
  
 | 
                    if(strstr(result,"PASS")!= NULL ||  
 | 
                        strstr(result,"FAIL")!= NULL) {  
 | 
                        test_ret = result;  
 | 
                        break;  
 | 
                    }  
 | 
                    result = strtok( NULL, delims );  
 | 
                }  
 | 
  
 | 
                if(test_ret) {  
 | 
                    char ch;  
 | 
                    int i = 0;  
 | 
                    ch = *test_ret;  
 | 
                    while(ch != '\0') {  
 | 
                        if (isalpha(ch)) {  
 | 
                            test_buf[i++] = ch;  
 | 
                            ch = *test_ret++;  
 | 
                        } else {  
 | 
                            ch = *test_ret++;  
 | 
                        }  
 | 
                    }  
 | 
                    //printf(" >>>>> We get test result is %s <<<<<\n", test_buf);  
 | 
  
 | 
                    if(0 == strcmp(test_buf, "PASS")) {  
 | 
                        //pass  
 | 
                        ret = 0;  
 | 
                    } else if (0 == strcmp(test_buf, "FAIL")) {  
 | 
                        //fail  
 | 
                        ret= -1;  
 | 
                    }  
 | 
                } else {  
 | 
                    printf(" >>>>> Error!!! wrong test result format. <<<<<\n");  
 | 
                }  
 | 
            }  
 | 
        }  
 | 
        fclose(fp);  
 | 
    }  
 | 
  
 | 
    return ret;  
 | 
}  
 | 
  
 | 
int main(int argc, char **argv)  
 | 
{  
 | 
    int ret, w;  
 | 
    char *script_buf;  
 | 
    struct list_head *pos;  
 | 
    int success = 0;  
 | 
    char rfCalResult[10];  
 | 
  
 | 
#if 0  
 | 
    freopen("/dev/ttyFIQ0", "a", stdout);  
 | 
    setbuf(stdout, NULL);  
 | 
    freopen("/dev/ttyFIQ0", "a", stderr);  
 | 
    setbuf(stderr, NULL);  
 | 
#endif  
 | 
    printf("*****************************************\n");  
 | 
    printf("***         pcba test start           ***\n");  
 | 
    printf("***         Rockchip.Co.Ld.           ***\n");  
 | 
    printf("*****************************************\n");  
 | 
  
 | 
    ui_init();  
 | 
    ui_set_background(BACKGROUND_ICON_INSTALLING);  
 | 
    ui_print_init();  
 | 
    w = gr_fb_width();  
 | 
    printf(" @@@ w= %d \n", w);  
 | 
    ui_print_xy_rgba((((w >> 1) - strlen(PCBA_VERSION_NAME)*CHAR_WIDTH/2)  
 | 
        /CHAR_WIDTH), 0, 0, 255, 0, 255, "%s\n", PCBA_VERSION_NAME);  
 | 
  
 | 
//    printf("Now in PCBA_test %d\n",__LINE__);  
 | 
    ui_print_xy_rgba(((w >> 2) / CHAR_WIDTH - 4), 1, 255, 255, 0, 255,  
 | 
             "%s\n", PCBA_MANUAL_TEST);  
 | 
//    printf("Now in PCBA_test %d\n",__LINE__);  
 | 
  
 | 
//    drawline_4(255, 255, 0, 255, 0, (1 * CHAR_HEIGHT - (CHAR_HEIGHT>>2)),  
 | 
//        w>>1, CHAR_HEIGHT, 3);  
 | 
  
 | 
//    printf("Now in PCBA_test %d\n",__LINE__);  
 | 
    //return 0;  
 | 
  
 | 
    /*cur_p_y = (gr_fb_height() / CHAR_HEIGHT) - 1;*/  
 | 
  
 | 
    INIT_LIST_HEAD(&manual_test_list_head);  
 | 
    INIT_LIST_HEAD(&auto_test_list_head);  
 | 
    script_buf = parse_script(SCRIPT_NAME);  
 | 
    if (!script_buf) {  
 | 
        printf("parse script failed\n");  
 | 
        return -1;  
 | 
    }  
 | 
  
 | 
    ret = init_script(script_buf);  
 | 
    if (ret) {  
 | 
        db_error("core: init script failed(%d)\n", ret);  
 | 
        return -1;  
 | 
    }  
 | 
  
 | 
    ret = parse_testcase();  
 | 
    if (ret < 0) {  
 | 
        db_error("core: parse all test case from script failed(%d)\n",  
 | 
             ret);  
 | 
        return -1;  
 | 
    } else if (ret == 0) {  
 | 
        db_warn("core: NO TEST CASE to be run\n");  
 | 
        return -1;  
 | 
    }  
 | 
  
 | 
    printf("\n\t manual testcase:\n");  
 | 
    list_for_each(pos, &manual_test_list_head) {  
 | 
        struct testcase_info *tc_info =  
 | 
            list_entry(pos, struct testcase_info, list);  
 | 
        init_manual_test_item(tc_info);  
 | 
    }  
 | 
    manual_p_y += 1;  
 | 
  
 | 
//    cur_p_y = manual_p_y+1;   /*for auto add items*/  
 | 
    cur_p_y = MAX_ROWS / 2;  
 | 
    ui_print_xy_rgba(((w >> 2) / CHAR_WIDTH - 4), cur_p_y - 1, 255, 255,  
 | 
            0, 255, "%s\n", PCBA_AUTO_TEST);  
 | 
  
 | 
  
 | 
  
 | 
//    ui_print_xy_rgba(((w >> 2) / CHAR_WIDTH - 4), manual_p_y, 255, 255,  
 | 
//             0, 255, "%s\n", PCBA_AUTO_TEST);  
 | 
//    drawline_4(255, 255, 0, 255, 0,  
 | 
//           (CHAR_HEIGHT * (manual_p_y) - (CHAR_HEIGHT>>2)), w>>1,  
 | 
//           CHAR_HEIGHT, 3);  
 | 
  
 | 
    printf("\n\t auto testcase:\n");  
 | 
    list_for_each(pos, &auto_test_list_head) {  
 | 
        struct testcase_info *tc_info =  
 | 
            list_entry(pos, struct testcase_info, list);  
 | 
        start_auto_test_item(tc_info);  
 | 
    }  
 | 
  
 | 
    start_input_thread();  
 | 
  
 | 
    printf("pcba test over!\n");  
 | 
  
 | 
    //clear misc, and ready to entern main system.  
 | 
  
 | 
    return success;  
 | 
}  
 | 
  
 |