Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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;
}
Exemple #4
0
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;
}
Exemple #6
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;
}
Exemple #7
0
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;
}