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