static int detect_output_mode(void) { unsigned int args[4]; int ret; int support_mode; args[0] = 1; args[1] = DISP_TV_MOD_1080P_50HZ; ret = ioctl(disp, DISP_CMD_HDMI_SUPPORT_MODE, args); if (ret == 1) { db_msg("hdmitester: your device support 1080p 50Hz\n"); output_mode = DISP_TV_MOD_1080P_50HZ; screen_width = 1920; screen_height = 1080; } else { args[0] = 1; args[1] = DISP_TV_MOD_720P_50HZ; ret = ioctl(disp, DISP_CMD_HDMI_SUPPORT_MODE, args); if (ret == 1) { db_msg("hdmitester: your device support 720p 50Hz\n"); output_mode = DISP_TV_MOD_720P_50HZ; screen_width = 1280; screen_height = 720; } else { db_msg("hdmitester: your device do not support neither 1080p nor 720p (50Hz)\n"); if (script_fetch("hdmi", "support_mode", &support_mode, 1)) { support_mode = 2; db_msg("hdmitester: can't fetch user config mode, use default mode: %s\n", type_list[support_mode].name); } else if (support_mode < 0 || support_mode >= TYPE_COUNT) { support_mode = 2; db_msg("hdmitester: user config mode invalid, use default mode: %s\n", type_list[support_mode].name); } db_msg("hdmitester: use user config mode: %s\n", type_list[support_mode].name); args[0] = 1; args[1] = type_list[support_mode].mode; ret = ioctl(disp, DISP_CMD_HDMI_SUPPORT_MODE, args); if (ret == 1) { db_msg("hdmitester: you device support %s\n", type_list[support_mode].name); output_mode = type_list[support_mode].mode; screen_width = type_list[support_mode].width; screen_height = type_list[support_mode].height; } else { db_msg("hdmitester: you device do not support %s\n", type_list[support_mode].name); return -1; } } } return 0; }
/* C entry. * * \param argc the number of arguments. * \param argv the arguments. * * DO NOT CHANGES THE NAME OF PARAMETERS, otherwise your program will get * a compile error if you are using INIT_CMD_PIPE macro. */ int main(int argc, char *argv[]) { char buf[128]; char device_node_path[256]; char call_number[128]; int single_level; int setup_delay; int call_time; /* init cmd pipe after local variable declaration */ INIT_CMD_PIPE(); init_script(atoi(argv[2])); db_msg("2g tester\n"); if(script_fetch("2g","device_node",(int*)device_node_path,sizeof(device_node_path)/4)){ db_warn("2gtester:can't fetch device_node,set to /dev/ttyUSB0\n"); strcpy(device_node_path,"/dev/ttyUSB0"); } db_msg("device_node=%s\n",device_node_path); if(script_fetch("2g","call_number",(int*)call_number,sizeof(call_number)/4)){ db_warn("2gtester:can't fetch call_number,set to 10086\n"); strcpy(call_number,"10086"); } if(script_fetch("2g","setup_delay",&setup_delay,1)){ db_warn("2gtester:can't fetch setup_delay,set to 5s\n"); setup_delay=5; } if(script_fetch("2g","call_time",&call_time,1)){ db_warn("2gtester:can't fetch call_time,set to 30s\n"); call_time=30; } single_level=setup_2g_device(device_node_path,setup_delay); if(single_level==0) { SEND_CMD_PIPE_FAIL_EX("can't get single level"); return -1; } db_msg("single level=%d\n",single_level); sprintf(buf,"single level=%d dB\n",single_level); SEND_CMD_PIPE_OK_EX(buf); //make a telephone call with the specified number //return: 0 means ok; -1 means fail; if(call_number_2g_device(call_number)) { SEND_CMD_PIPE_FAIL_EX("can't make a call!"); return -1; } //call time delay,you can speak th each other in this time sleep(call_time); // hangup_2g_device(); /* send OK to core if test OK, otherwise send FAIL * by using SEND_CMD_PIPE_FAIL(). */ SEND_CMD_PIPE_OK_EX("test done"); 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; }
static void *sound_play(void *args) { char path[256]; int samplerate; int err; snd_pcm_t *playback_handle; snd_pcm_hw_params_t *hw_params; FILE *fp; db_msg("prepare play sound...\n"); if (script_fetch("hdmi", "sound_file", (int *)path, sizeof(path) / 4)) { db_warn("unknown sound file, use default\n"); strcpy(path, "/dragonboard/data/test48000.pcm"); } if (script_fetch("hdmi", "samplerate", &samplerate, 1)) { db_warn("unknown samplerate, use default #48000\n"); samplerate = 48000; } db_msg("samplerate #%d\n", samplerate); err = snd_pcm_open(&playback_handle, "hw:1,0", SND_PCM_STREAM_PLAYBACK, 0); if (err < 0) { db_error("cannot open audio device (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_malloc(&hw_params); if (err < 0) { db_error("cannot allocate hardware parameter structure (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_any(playback_handle, hw_params); if (err < 0) { db_error("cannot initialize hardware parameter structure (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_set_access(playback_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED); if (err < 0) { db_error("cannot allocate hardware parameter structure (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_set_format(playback_handle, hw_params, SND_PCM_FORMAT_S16_LE); if (err < 0) { db_error("cannot allocate hardware parameter structure (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_set_rate(playback_handle, hw_params, samplerate, 0); if (err < 0) { db_error("cannot set sample rate (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } err = snd_pcm_hw_params_set_channels(playback_handle, hw_params, 2); if (err < 0) { db_error("cannot set channel count (%s), err = %d\n", snd_strerror(err), err); pthread_exit((void *)-1); } err = snd_pcm_hw_params(playback_handle, hw_params); if (err < 0) { db_error("cannot set parameters (%s)\n", snd_strerror(err)); pthread_exit((void *)-1); } snd_pcm_hw_params_free(hw_params); db_msg("open test pcm file: %s\n", path); fp = fopen(path, "r"); if (fp == NULL) { db_error("cannot open test pcm file(%s)\n", strerror(errno)); pthread_exit((void *)-1); } db_msg("play it...\n"); while (1) { while (!feof(fp)) { if (sound_play_stop) { goto out; } err = fread(buf, 1, BUF_LEN, fp); if (err < 0) { db_warn("read test pcm failed(%s)\n", strerror(errno)); } err = snd_pcm_writei(playback_handle, buf, BUF_LEN/4); if (err < 0) { err = xrun_recovery(playback_handle, err); if (err < 0) { db_warn("write error: %s\n", snd_strerror(err)); } } if (err == -EBADFD) { db_warn("PCM is not in the right state (SND_PCM_STATE_PREPARED or SND_PCM_STATE_RUNNING)\n"); } if (err == -EPIPE) { db_warn("an underrun occurred\n"); } if (err == -ESTRPIPE) { db_warn("a suspend event occurred (stream is suspended and waiting for an application recovery)\n"); } if (feof(fp)) { fseek(fp, 0L, SEEK_SET); } } } out: db_msg("play end...\n"); fclose(fp); snd_pcm_close(playback_handle); pthread_exit(0); }
/* C entry. * * \param argc the number of arguments. * \param argv the arguments. * * DO NOT CHANGES THE NAME OF PARAMETERS, otherwise your program will get * a compile error if you are using INIT_CMD_PIPE macro. */ int main(int argc, char *argv[]) { char device_node_path[256]; int setup_delay; int call_time; int loop_ctl_pipe_fd; int loop_mode_flag = 1; int ret = -1; /* init cmd pipe after local variable declaration */ INIT_CMD_PIPE(); init_script(atoi(argv[2])); db_msg("2glooptester\n"); if(script_fetch("loop","device_node",(int*)device_node_path,sizeof(device_node_path)/4)){ db_warn("2glooptester:can't fetch device_node,set to /dev/ttyUSB0\n"); strcpy(device_node_path,"/dev/ttyUSB0"); } db_msg("device_node=%s\n",device_node_path); if(script_fetch("loop","setup_delay",&setup_delay,1)){ db_warn("2glooptester:can't fetch setup_delay,set to 5s\n"); setup_delay=5; } if(script_fetch("loop","call_time",&call_time,1)){ db_warn("2glooptester:can't fetch call_time,set to 30s\n"); call_time=30; } /* single_level=setup_device(device_node_path,setup_delay); if(single_level==0) { SEND_CMD_PIPE_FAIL_EX("can't get single level"); return -1; }*/ loop_ctl_pipe_fd = open(LOOP_CTL_PIPE_NAME,O_RDONLY ,0); if(loop_ctl_pipe_fd==NULL){ printf("2glooptester:fail to open loop_ctl_pipe\n"); } setup_device(device_node_path,setup_delay); LOOP_TEST: if(enter_loop_mode()){ SEND_CMD_PIPE_FAIL_EX("failed:loop\n"); return 0; } if(loop_test()){ SEND_CMD_PIPE_FAIL_EX("failed:sound_loop\n"); return 0; } SEND_CMD_PIPE_OK(); //call time delay,you can speak th each other in this time // sleep(call_time); // exit_loop_mode(); /* send OK to core if test OK, otherwise send FAIL * by using SEND_CMD_PIPE_FAIL(). */ SEND_CMD_PIPE_OK_EX("test done"); while(1){ db_msg("get loop_ctl_pipe\n"); ret = read(loop_ctl_pipe_fd,&loop_mode_flag,sizeof(loop_mode_flag)); if(ret == -1){ db_msg("no data avlaible\n"); } db_msg("loop mode ON \n"); if(!loop_mode_flag){ db_msg("exit_loop_mode\n"); exit_loop_mode(); break; } sleep(1); } while(1){ ret = read(loop_ctl_pipe_fd,&loop_mode_flag,sizeof(loop_mode_flag)); if(ret == -1){ db_msg("no data avlaible\n"); } db_msg("loop mode OFF \n"); sleep(2); if(loop_mode_flag) goto LOOP_TEST; } close(loop_ctl_pipe_fd); return 0; }
static int parse_testcase() { int i, j, mainkey_cnt; struct testcase_base_info *info; char mainkey_name[32], display_name[64], binary[16]; int activated, category, run_type; int len; mainkey_cnt = script_mainkey_cnt(); 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++) { 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; } 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; base_info_shmid = shmget(IPC_PRIVATE, len, IPC_CREAT | 0666); if (base_info_shmid == -1) { db_error("core: allocate share memory segment for test case basic " "information failed(%s)\n", strerror(errno)); return -1; } base_info = shmat(base_info_shmid, 0, 0); if (base_info == (void *)-1) { db_error("core: attach the share memory for test case basic " "information failed(%s)\n", strerror(errno)); shmctl(base_info_shmid, IPC_RMID, 0); return -1; } memcpy(base_info, info, sizeof(struct testcase_base_info) * total_testcases); return total_testcases; }
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; }