int main(int argc, char *argv[]) { int script_shmid; int ret; char **args; char binary[16] = "launcher"; pid_t launcher_pid; char buffer[128]; FILE *from_child; char *test_case_id_s; int test_case_id; char *result_s; int result; struct item_data it_data; char *exdata; int exdata_len; /* init script and view */ db_msg("core: parse script %s...\n", SCRIPT_NAME); script_shmid = parse_script(SCRIPT_NAME); if (script_shmid == -1) { db_error("core: parse script failed\n"); return -1; } db_msg("core: init script...\n"); ret = init_script(script_shmid); if (ret) { db_error("core: init script failed(%d)\n", ret); return -1; } db_msg("core: init view...\n"); ret = init_view(); if (ret) { db_error("core: init view failed(%d)\n", ret); return -1; } /* parse and draw all test cases to view */ db_msg("core: parse test case from script...\n"); 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; } db_msg("core: draw test case to view...\n"); ret = draw_testcases(); if (ret) { db_error("core: draw all test cases to view failed(%d)\n", ret); return -1; } view_sync(); /* create named pipe */ unlink(CMD_PIPE_NAME); if (mkfifo(CMD_PIPE_NAME, S_IFIFO | 0666) == -1) { db_error("core: mkfifo error(%s)\n", strerror(errno)); return -1; } /* fork launcher process */ db_msg("core: fork launcher process...\n"); args = malloc(sizeof(char *) * 6); args[0] = binary; args[1] = malloc(10); sprintf(args[1], "%d", DRAGONBOARD_VERSION); args[2] = malloc(10); sprintf(args[2], "%d", script_shmid); args[3] = malloc(10); sprintf(args[3], "%d", total_testcases); args[4] = malloc(10); sprintf(args[4], "%d", base_info_shmid); args[5] = NULL; launcher_pid = fork(); if (launcher_pid < 0) { db_error("core: fork launcher process failed(%s)\n", strerror(errno)); } else if (launcher_pid == 0) { execvp(binary, args); db_error("core: can't run %s(%s)\n", binary, strerror(errno)); _exit(-1); } /* listening to child process */ db_msg("core: listening to child process, starting...\n"); from_child = fopen(CMD_PIPE_NAME, "r"); while (1) { if (fgets(buffer, sizeof(buffer), from_child) == NULL) { continue; } db_dump("core: command from child: %s", buffer); /* test completion */ test_case_id_s = strtok(buffer, " \n"); db_dump("test case id #%s\n", test_case_id_s); if (strcmp(buffer, TEST_COMPLETION) == 0) break; if (test_case_id_s == NULL) continue; test_case_id = atoi(test_case_id_s); result_s = strtok(NULL, " \n"); db_dump("result: %s\n", result_s); if (result_s == NULL) continue; result = atoi(result_s); exdata = strtok(NULL, "\n"); db_dump("%s TEST %s\n", base_info[test_case_id].name, (result == 0) ? "OK" : "Fail"); /* update view item */ memset(&it_data, 0, sizeof(struct item_data)); strncpy(it_data.name, base_info[test_case_id].name, 32); strncpy(it_data.display_name, base_info[test_case_id].display_name, 64); it_data.category = base_info[test_case_id].category; it_data.status = result; if (exdata) { /* trim space */ while (*exdata == ' ' || *exdata == '\t') exdata++; exdata_len = strlen(exdata); exdata_len--; while (exdata >= 0 && (exdata[exdata_len] == ' ' || exdata[exdata_len] == '\t')) exdata_len--; if (exdata_len > 0) { exdata[++exdata_len] = '\0'; db_dump("extra data len #%d: %s\n", exdata_len, exdata); strncpy(it_data.exdata, exdata, 64); } } view_update_item(test_case_id, &it_data); } fclose(from_child); db_msg("core: listening to child process, stoping...\n"); deparse_testcase(); exit_view(); deinit_script(); deparse_script(script_shmid); return 0; }
int main(int argc, char *argv[]) { unsigned int args[4]; int status = 0; int retry = 0; int flags = 0; int ret; pthread_t tid; __disp_output_type_t disp_output_type; int mic_activated; INIT_CMD_PIPE(); init_script(atoi(argv[2])); disp = open("/dev/disp", O_RDWR); if (disp == -1) { db_error("hdmitester: open /dev/disp failed(%s)\n", strerror(errno)); goto err; } args[0] = 0; disp_output_type = (__disp_output_type_t)ioctl(disp, DISP_CMD_GET_OUTPUT_TYPE,(void*)args); if(script_fetch("mic", "activated", &mic_activated,1)){ mic_activated=0; } /* test main loop */ while (1) { if(disp_output_type==DISP_OUTPUT_TYPE_LCD) args[0] = 1; else args[0] = 0; ret = ioctl(disp, DISP_CMD_HDMI_GET_HPD_STATUS, args); if (ret == 1) { flags = 0; if (status == 1) { sleep(1); continue; } /* try three times before go on... * it will take 3 second. */ if (retry < 3) { retry++; sleep(1); continue; } if(disp_output_type==DISP_OUTPUT_TYPE_LCD){ /* detect and set output mode */ ret = detect_output_mode(); if (ret < 0) { goto err; } args[0] = 1; args[1] = output_mode; ret = ioctl(disp, DISP_CMD_HDMI_SET_MODE, args); if (ret < 0) { db_error("hdmitester: set hdmi output mode failed(%d)\n", ret); goto err; } /* init layer */ ret = init_layer(); if (ret < 0) { db_error("hdmitester: init layer failed\n"); goto err; } /* set hdmi on */ args[0] = 1; ret = ioctl(disp, DISP_CMD_HDMI_ON, args); if (ret < 0) { db_error("hdmitester: set hdmi on failed(%d)\n", ret); exit_layer(); goto err; } /* create sound play thread */ sound_play_stop = 0; //ret = pthread_create(&tid, NULL, sound_play, NULL); ret=0; if (ret != 0) { db_error("hdmitester: create sound play thread failed\n"); exit_layer(); args[0] = 1; ioctl(disp, DISP_CMD_HDMI_OFF, args); goto err; } }else if((disp_output_type==DISP_OUTPUT_TYPE_HDMI)&&(!mic_activated)){ /* create sound play thread */ sound_play_stop = 0; ret = pthread_create(&tid, NULL, sound_play, NULL); if (ret != 0) { db_error("hdmitester: create sound play thread failed\n"); exit_layer(); args[0] = 1; ioctl(disp, DISP_CMD_HDMI_OFF, args); goto err; } } status = 1; SEND_CMD_PIPE_OK(); } else { void *retval; /* reset retry to 0 */ retry = 0; if (status == 0) { sleep(1); continue; } if (flags < 3) { flags++; sleep(1); continue; } status = 0; if(disp_output_type==DISP_OUTPUT_TYPE_LCD){ /* end sound play thread */ sound_play_stop = 1; db_msg("hdmitester: waiting for sound play thread finish...\n"); if (pthread_join(tid, &retval)) { db_error("hdmitester: can't join with sound play thread\n"); } db_msg("hdmitester: sound play thread exit code #%d\n", (int)retval); exit_layer(); args[0] = 1; ioctl(disp, DISP_CMD_HDMI_OFF, args); } else if((disp_output_type==DISP_OUTPUT_TYPE_HDMI)&&(!mic_activated)){ /* end sound play thread */ sound_play_stop = 1; db_msg("hdmitester: waiting for sound play thread finish...\n"); if (pthread_join(tid, &retval)) { db_error("hdmitester: can't join with sound play thread\n"); } db_msg("hdmitester: sound play thread exit code #%d\n", (int)retval); } } /* sleep 1 second */ sleep(1); } err: SEND_CMD_PIPE_FAIL(); close(disp); deinit_script(); return -1; }
int main(int argc, char *argv[]) { unsigned int args[4] = {0}; int test_status = 0; // 1: sucessed int dev_status = 0; // 1: opended int retry = 0; int flags = 0; int ret; pthread_t tid; disp_output_type output_type; int hdmi_status; int mic_activated; INIT_CMD_PIPE(); init_script(atoi(argv[2])); disp = open("/dev/disp", O_RDWR); if (disp == -1) { db_error("tvtester: open /dev/disp failed(%s)\n", strerror(errno)); goto err; } if(script_fetch("mic", "activated", &mic_activated,1)) { mic_activated = 0; } /* test main loop */ while (1) { args[0] = 1; output_type = getCurrentOutputType(); hdmi_status = isHdmiPluged(); if (hdmi_status != 1) { if (retry < 3) { retry++; sleep(1); continue; } if (test_status == 1) { sleep(1); db_warn("TV: HPD!\n"); continue; } if(DISP_OUTPUT_TYPE_NONE == output_type) { db_warn("then open tv\n"); args[0] = 0; args[1] = output_type; //ret = ioctl(disp, DISP_CMD_TV_SET_MODE, args); ret = 0; if (ret < 0) { db_error("tvtester: set tv output mode failed(%d)\n", ret); goto err; } //init_layer(tv_format); if(dev_status == 0) { //ret = ioctl(disp, DISP_CMD_TV_ON, args); ret = 0; if (ret < 0) { db_error("tvtester: open tv failed(%d)\n", ret); goto err; } dev_status = 1; } } else if(DISP_OUTPUT_TYPE_TV == output_type) { dev_status = 1; } else { db_error("other display device runing! ,output_type[%d]\n", output_type); sleep(3); continue; } db_warn("tvtester: mic_activated[%d]\n", mic_activated); if(!mic_activated) { // create sound play thread sound_play_stop = 0; ret = pthread_create(&tid, NULL, sound_play, NULL); if (ret != 0) { db_error("tvtester: create sound play thread failed\n"); //ioctl(disp, DISP_CMD_TV_OFF, args); goto err; } mic_activated = 1; } test_status = 1; SEND_CMD_PIPE_OK(); } else { void *retval; //db_warn("tvtester: output_type[%d] is not tv!\n", output_type); // reset retry to 0 retry = 0; if (flags < 3) { flags++; sleep(1); continue; } test_status = 0; if((dev_status == 1) || (output_type == DISP_OUTPUT_TYPE_TV)) { args[0] = 0; //ret = ioctl(disp, DISP_CMD_TV_OFF, args); ret = 0; if (ret < 0) { db_error("tvtester: close tv failed(%d)\n", ret); } dev_status = 0; } if(mic_activated) { // end sound play thread sound_play_stop = 1; db_msg("tvtester: waiting for sound play thread finish...\n"); if (pthread_join(tid, &retval)) { db_error("tvtester: can't join with sound play thread\n"); } db_msg("tvtester: sound play thread exit code #%d\n", (int)retval); mic_activated = 0; } } // sleep 1 second sleep(1); } err: SEND_CMD_PIPE_FAIL(); //exit_layer(); close(disp); deinit_script(); return -1; }