#include <stdio.h> 
 | 
#include <stdlib.h> 
 | 
#include <string.h> 
 | 
//#include "extra-functions.h" 
 | 
#include "common.h" 
 | 
#include "sdcard_test.h" 
 | 
#include "test_case.h" 
 | 
#include "language.h" 
 | 
  
 | 
#define LOG_TAG    "PCBA [sdcard]: " 
 | 
#define LOG(x...)    printf(LOG_TAG x) 
 | 
  
 | 
#define SCAN_RESULT_LENGTH        128 
 | 
#define SCAN_RESULT_FILE        "/data/sd_capacity" 
 | 
#define SD_INSERT_RESULT_FILE    "/data/sd_insert_info" 
 | 
  
 | 
void *sdcard_test(void *argv) 
 | 
{ 
 | 
    struct testcase_info *tc_info = (struct testcase_info *)argv; 
 | 
    int ret, y; 
 | 
    double cap; 
 | 
    FILE *fp; 
 | 
    char results[SCAN_RESULT_LENGTH]; 
 | 
  
 | 
    /* remind sdcard test */ 
 | 
    if (tc_info->y <= 0) 
 | 
        tc_info->y = get_cur_print_y(); 
 | 
    y = tc_info->y; 
 | 
  
 | 
    LOG("start sdcard test.\n"); 
 | 
  
 | 
    //ui_print_xy_rgba(0, y, 255, 255, 0, 255, "%s\n", PCBA_SDCARD); 
 | 
    ui_print_xy_rgba(0, y, 255, 255, 0, 255, "%s:[%s..]\n", PCBA_RTC, 
 | 
             PCBA_TESTING); 
 | 
  
 | 
#if 0 
 | 
#if defined(RK3288_PCBA) 
 | 
    ret = __system("busybox chmod 777 /res/emmctester.sh"); 
 | 
#else 
 | 
    ret = __system("busybox chmod 777 /res/mmctester.sh"); 
 | 
#endif 
 | 
  
 | 
    if (ret) 
 | 
        LOG("chmod mmctester.sh failed :%d\n", ret); 
 | 
  
 | 
#if defined(RK3288_PCBA) 
 | 
    ret = __system("/res/emmctester.sh"); 
 | 
#else 
 | 
    ret = __system("/res/mmctester.sh"); 
 | 
#endif 
 | 
  
 | 
    if (ret < 0) { 
 | 
        LOG("mmc test failed.\n"); 
 | 
        ui_print_xy_rgba(0, y, 255, 0, 0, 255, "%s:[%s]\n", PCBA_SDCARD, 
 | 
                 PCBA_FAILED); 
 | 
        tc_info->result = -1; 
 | 
        return argv; 
 | 
    } 
 | 
  
 | 
    fp = fopen(SCAN_RESULT_FILE, "r"); 
 | 
    if (fp == NULL) { 
 | 
        LOG("can not open %s.\n", SCAN_RESULT_FILE); 
 | 
        ui_print_xy_rgba(0, y, 255, 0, 0, 255, "%s:[%s]\n", PCBA_SDCARD, 
 | 
                 PCBA_FAILED); 
 | 
        tc_info->result = -1; 
 | 
        return argv; 
 | 
    } 
 | 
  
 | 
    memset(results, 0, SCAN_RESULT_LENGTH); 
 | 
    fgets(results, 50, fp); 
 | 
  
 | 
    cap = strtod(results, NULL); 
 | 
    if (cap) { 
 | 
        ui_print_xy_rgba(0, y, 0, 255, 0, 255, "%s:[%s] { %2fG }\n", 
 | 
                 PCBA_SDCARD, PCBA_SECCESS, 
 | 
                 cap * 1.0 / 1024 / 1024); 
 | 
        tc_info->result = 0; 
 | 
    } 
 | 
    fclose(fp); 
 | 
#else 
 | 
  
 | 
    int rst; 
 | 
    char sd_buf[128]= {0}; 
 | 
    char sd_size[32] = {0}; 
 | 
    char result_filename[100] = {0}; 
 | 
  
 | 
    LOG("============= start sdcard test==============\n"); 
 | 
    rst = run_test_item_cmd("echo_auto_test echo_sdcard_test"); 
 | 
  
 | 
    if(rst == 0) { 
 | 
        snprintf(result_filename, sizeof(result_filename), 
 | 
                "%s/echo_sdcard_test_result", "/tmp"); 
 | 
        ret = parse_test_result(result_filename, "sdcard_test", sd_buf); 
 | 
  
 | 
    }else  { 
 | 
        //rst < 0 
 | 
        ui_print_xy_rgba(0, y, 225, 0, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD, 
 | 
                 PCBA_FAILED, PCBA_SDCARD_NOINSERT); 
 | 
        tc_info->result = -1; 
 | 
        LOG("sdcard_test failed.\n"); 
 | 
        return NULL; 
 | 
    } 
 | 
  
 | 
    if(ret == 0) { 
 | 
        if(strstr(sd_buf, "capacity") != NULL) { 
 | 
            char *result = NULL; 
 | 
            char delims[] = " "; 
 | 
  
 | 
            memset(sd_size, 0, sizeof(sd_size)); 
 | 
            result = strtok(sd_buf, delims ); 
 | 
            while( result != NULL ) { 
 | 
                LOG("result is \"%s\"\n", result); 
 | 
  
 | 
                if(strstr(result,"capacity")!= NULL){ 
 | 
                    strcat(sd_size, result); 
 | 
                } 
 | 
  
 | 
                result = strtok( NULL, delims ); 
 | 
            } 
 | 
        } 
 | 
        ui_print_xy_rgba(0, y, 0, 255, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD, 
 | 
                 PCBA_SECCESS, sd_size); 
 | 
        tc_info->result = 0; 
 | 
        LOG("sdcard_test success.\n"); 
 | 
    } else { 
 | 
        ui_print_xy_rgba(0, y, 225, 0, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD, 
 | 
                 PCBA_FAILED, sd_size); 
 | 
        tc_info->result = -1; 
 | 
        LOG("sdcard_test failed.\n"); 
 | 
    } 
 | 
  
 | 
#endif 
 | 
    return argv; 
 | 
} 
 |