1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 //#include "extra-functions.h"
5 #include "common.h"
6 #include "sdcard_test.h"
7 #include "test_case.h"
8 #include "language.h"
9
10 #define LOG_TAG "PCBA [sdcard]: "
11 #define LOG(x...) printf(LOG_TAG x)
12
13 #define SCAN_RESULT_LENGTH 128
14 #define SCAN_RESULT_FILE "/data/sd_capacity"
15 #define SD_INSERT_RESULT_FILE "/data/sd_insert_info"
16
sdcard_test(void * argv)17 void *sdcard_test(void *argv)
18 {
19 struct testcase_info *tc_info = (struct testcase_info *)argv;
20 int ret, y;
21 double cap;
22 FILE *fp;
23 char results[SCAN_RESULT_LENGTH];
24
25 /* remind sdcard test */
26 if (tc_info->y <= 0)
27 tc_info->y = get_cur_print_y();
28 y = tc_info->y;
29
30 LOG("start sdcard test.\n");
31
32 //ui_print_xy_rgba(0, y, 255, 255, 0, 255, "%s\n", PCBA_SDCARD);
33 ui_print_xy_rgba(0, y, 255, 255, 0, 255, "%s:[%s..]\n", PCBA_RTC,
34 PCBA_TESTING);
35
36 #if 0
37 #if defined(RK3288_PCBA)
38 ret = __system("busybox chmod 777 /res/emmctester.sh");
39 #else
40 ret = __system("busybox chmod 777 /res/mmctester.sh");
41 #endif
42
43 if (ret)
44 LOG("chmod mmctester.sh failed :%d\n", ret);
45
46 #if defined(RK3288_PCBA)
47 ret = __system("/res/emmctester.sh");
48 #else
49 ret = __system("/res/mmctester.sh");
50 #endif
51
52 if (ret < 0) {
53 LOG("mmc test failed.\n");
54 ui_print_xy_rgba(0, y, 255, 0, 0, 255, "%s:[%s]\n", PCBA_SDCARD,
55 PCBA_FAILED);
56 tc_info->result = -1;
57 return argv;
58 }
59
60 fp = fopen(SCAN_RESULT_FILE, "r");
61 if (fp == NULL) {
62 LOG("can not open %s.\n", SCAN_RESULT_FILE);
63 ui_print_xy_rgba(0, y, 255, 0, 0, 255, "%s:[%s]\n", PCBA_SDCARD,
64 PCBA_FAILED);
65 tc_info->result = -1;
66 return argv;
67 }
68
69 memset(results, 0, SCAN_RESULT_LENGTH);
70 fgets(results, 50, fp);
71
72 cap = strtod(results, NULL);
73 if (cap) {
74 ui_print_xy_rgba(0, y, 0, 255, 0, 255, "%s:[%s] { %2fG }\n",
75 PCBA_SDCARD, PCBA_SECCESS,
76 cap * 1.0 / 1024 / 1024);
77 tc_info->result = 0;
78 }
79 fclose(fp);
80 #else
81
82 int rst;
83 char sd_buf[128]= {0};
84 char sd_size[32] = {0};
85 char result_filename[100] = {0};
86
87 LOG("============= start sdcard test==============\n");
88 rst = run_test_item_cmd("echo_auto_test echo_sdcard_test");
89
90 if(rst == 0) {
91 snprintf(result_filename, sizeof(result_filename),
92 "%s/echo_sdcard_test_result", "/tmp");
93 ret = parse_test_result(result_filename, "sdcard_test", sd_buf);
94
95 }else {
96 //rst < 0
97 ui_print_xy_rgba(0, y, 225, 0, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD,
98 PCBA_FAILED, PCBA_SDCARD_NOINSERT);
99 tc_info->result = -1;
100 LOG("sdcard_test failed.\n");
101 return NULL;
102 }
103
104 if(ret == 0) {
105 if(strstr(sd_buf, "capacity") != NULL) {
106 char *result = NULL;
107 char delims[] = " ";
108
109 memset(sd_size, 0, sizeof(sd_size));
110 result = strtok(sd_buf, delims );
111 while( result != NULL ) {
112 LOG("result is \"%s\"\n", result);
113
114 if(strstr(result,"capacity")!= NULL){
115 strcat(sd_size, result);
116 }
117
118 result = strtok( NULL, delims );
119 }
120 }
121 ui_print_xy_rgba(0, y, 0, 255, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD,
122 PCBA_SECCESS, sd_size);
123 tc_info->result = 0;
124 LOG("sdcard_test success.\n");
125 } else {
126 ui_print_xy_rgba(0, y, 225, 0, 0, 255, "%s:[%s] { %s }\n", PCBA_SDCARD,
127 PCBA_FAILED, sd_size);
128 tc_info->result = -1;
129 LOG("sdcard_test failed.\n");
130 }
131
132 #endif
133 return argv;
134 }
135