Пример #1
0
/* main */
int main(int argc, char *argv[]) 
{
    fb_info fb_inf;
    pthread_t p_tcp;

    if (argc != 2)
    {
        printf("Usage: ./appname 192.168.1.***\n");
        exit(1);
    }
    
    if (init_fb(&fb_inf) < 0)
    {
    	  fprintf(stderr, "Error initial framebuffer\b")	;
    	  return -1;
    }

    if (init_ft("mao.ttf", 150) < 0)
    {
        fprintf(stderr, "Error initial font\b");
    	 exit(1);
    }

    pthread_create(&p_tcp, NULL, pro_thread_tcp, argv[1]);
    mouse_work(fb_inf, X_START, Y_START);
    
    munmap(fb_inf.fbmem, fb_inf.w * fb_inf.h * fb_inf.bpp / 8);
    
    return 0;
}
Пример #2
0
/* main function */
int main(int argc, char *argv[]) 
{
	if (argc < 2)
		argv[1] = "test.jpg";

	fb_info fb_inf;
	if (init_fb(&fb_inf) < 0){
		fprintf(stderr, "Error initial framebuffer\n");
		return 1;
	}
	
	display_jpeg(argv[1], fb_inf);

	
#if 0 
	/* Test mouse */
	//test_mouse(fb_inf);

	if (init_ft("mao.ttf", 0) != 0){
		fprintf(stderr, "Error initial font\n")	;
		return 1;
	}
	
	display_string("显示文字", 432, 400, fb_inf, 0xFF0000);
#endif

	munmap(fb_inf.fbmem, fb_inf.w * fb_inf.h * fb_inf.bpp / 8);

	return 0;
}
Пример #3
0
/***********************************************************
* view pic
************************************************************/
void view_pic(fb_info fb_inf, char name[4][20])
{
	display_one("background/view.jpg",fb_inf);
    
	int size = 32 * fb_inf.w/1024;
	
	if(init_ft("font/type.ttf", size) != 0)
	{
		fprintf(stderr, "Error initial font\n");
		return;
	}

	int x = fb_inf.w/4 - size * 3/2;
	int y = fb_inf.h - 20 * fb_inf.h/768;

	display_string("上一页", x, y, fb_inf, COLOR);
	display_string("下一页", x + fb_inf.w/2, y, fb_inf, COLOR);

	int i;
   
	for(i = 0; i < 4; i++)
	{
		char path[128]="image/";
		strncat(path,name[i],strlen(name[i]) - 1);
		if(strstr(path,".jpg") != NULL)
			show(path, fb_inf, i);
	}  
	
}
Пример #4
0
/*主界面 函数*/
void menu(fb_info fb_inf)
{
	display_menu("1.jpg", fb_inf);
	
	if (init_ft("mao.ttf", 0) != 0)
	{
	    fprintf(stderr, "Error initial font\n");
	    return;
	}
	
	display_string("播放", fb_inf.w/8, fb_inf.h/5, fb_inf, 0xFF0000);
	display_string("预览", fb_inf.w/8, fb_inf.h*2/5, fb_inf, 0xFF0000);
	display_string("音乐", fb_inf.w/8, fb_inf.h*3/5, fb_inf, 0xFF0000);
	display_string("退出", fb_inf.w/8, fb_inf.h*4/5, fb_inf, 0xFF0000);

		display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000);
		display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000);
}
Пример #5
0
int previewmusic(fb_info fb_inf)//音乐名字预览未完成
{
	struct  dirent *musicdr;
	DIR *musicdir;
	char bufmusic[MUSIC_MAX][MUSIC_MAX];
	int music_number = 0;
	int j = 0,i = 1;
	display_jpeg_2("1.jpg",fb_inf);
	musicdir = opendir("/home/akaedu/929/teacher/music");
	while((musicdr = readdir(musicdir) )!= NULL )
	{
		if((strcmp(musicdr->d_name, "..")==0) || (strcmp(musicdr->d_name, ".")==0))
			continue;
		strcpy(bufmusic[music_number],musicdr->d_name);
		music_number++;
		//      printf("%s\n",buf);
	}

	closedir(musicdir);
	if(init_ft("mao.ttf",0) != 0)
	{
		fprintf(stderr, "Error inital font\n");
		return 1;
	}
	while(j<=music_number)
	{
		display_string(bufmusic[j],fb_inf.w/8,(j+1)*fb_inf.h/10,fb_inf,0x0000ff00);
		j++;
		display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000);
		display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000);
		if(j == 10*i)
		{
			i++;
			pause();
		}
	}
	display_string("已到最后一曲",fb_inf.w,98*fb_inf.h/100,fb_inf, 0x00ff0000);
	return 0;
}
Пример #6
0
int previewpicture(fb_info fb_inf)
{
	struct  dirent *mydr;
	DIR *fpdir;
	char buf[PICTURE_MAX][PICTURE_MAX];
	int picture_number = 0;
	int i = 0;
 /* struct sigaction sig_set;

    sigemptyset(&sig_set.sa_mask);
    sig_set.sa_handler = sig_usr;
    sig_set.sa_flags = 0;

    sigprocmask(SIG_BLOCK, &sig_set.sa_mask, NULL);


    sigaction(SIGABRT, &sig_set, NULL);
    sigaction(SIGCONT, &sig_set, NULL);
*/
	fpdir = opendir("../image");
	while(((mydr = readdir(fpdir) ))!= NULL )
	{
		if((strcmp(mydr->d_name, "..")==0) || (strcmp(mydr->d_name, ".")==0))
			continue;
		strcpy(buf[picture_number],mydr->d_name);
		picture_number++;
	}
	closedir(fpdir);

	while(i <= picture_number )
	{
		display_jpeg("1.jpg",fb_inf);
		if(sig_number < 0)
			sig_number = 0;
		if(sig_number > picture_number)
			sig_number = picture_number;
		i = sig_number;
		
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,fb_inf.w/16,fb_inf.h/16,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,fb_inf.h/16,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,fb_inf.h/16,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,fb_inf.w/16,3*fb_inf.h/8,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,3*fb_inf.h/8,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,3*fb_inf.h/8,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,1*fb_inf.w/16,11*fb_inf.h/16,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,3*fb_inf.w/8,11*fb_inf.h/16,fb_inf);
		else break;
		if(i < picture_number )
			display_scale(buf[i++],fb_inf.w/4,fb_inf.h/4,11*fb_inf.w/16,11*fb_inf.h/16,fb_inf);
		else break;
		sig_number = i;

		if(init_ft("mao.ttf",0) != 0)
		{
			fprintf(stderr, "Error inital font\n");
			return 1;
		}
		display_string("上一页",fb_inf.w/2,98*fb_inf.h/100,fb_inf, 0x00ff0000);
		display_string("下一页",3*fb_inf.w/4,98*fb_inf.h/100,fb_inf, 0x00ff0000);

        if (restar_flag == 1)
        {
        printf("ddddddddddd\n");
            init_restar();
            return 1;
        }
        pause();
	}
	display_string("已到最后一页",fb_inf.w,98*fb_inf.h/100,fb_inf, 0x00ff0000);

	return 0;
}
Пример #7
0
int button_click(fb_info fb_inf)
{
	int mfd;
	mouse_open(NULL, &mfd);
	/* highlight ico */
	fb_info jpeg_inf;
	fb_info b_inf;
	if (init_fb(&b_inf) < 0)
	{
		printf("Error init_fb\n");
		exit(1);
	}
	u8_t *buf24 = decode_jpeg("mainframel.jpg", &jpeg_inf);
	u8_t * scale_buf = scale24(buf24, b_inf, jpeg_inf);
	u32_t *buf32 = rgb24to32(scale_buf, b_inf);

	/* initialize font */
	if (init_ft("x.ttf", 45) != 0){
		fprintf(stderr, "Error initial font\n")	;
		return 1;
	}



	int m_x = fb_inf.w / 2;
	int m_y = fb_inf.h / 2;
	fb_drawcursor(fb_inf, m_x, m_y);

	u8_t buf[8];
	mouse_event_t mevent;
	 
	ico fkey[9];
	fkey[0].x = 34;
	fkey[0].y = 34;
	fkey[1].x = 34;
	fkey[1].y = 178;
	fkey[2].x = 34;
	fkey[2].y = 322;
	fkey[3].x = 34;
	fkey[3].y = 510;
	fkey[4].x = 34;
	fkey[4].y = 660;
	fkey[5].x = 262;
	fkey[5].y = 46;
	fkey[6].x = 265;
	fkey[6].y = 180;
	fkey[7].x = 469;
	fkey[7].y = 46;
	fkey[8].x = 823;
	fkey[8].y = 595;
	char *discription[9] = {"图片", "音乐", "电子书",
		"设置", "时间", "幻灯", "浏览", "关于", "退出"};
	int door2 = 1;

	/* loading ... */
	display_jpeg("loading.jpg", fb_inf);
	display_string("loading", 200, 450, fb_inf, 0x00ff55e3);
	/* initialize font */
	if (init_ft("x.ttf", 84) != 0){
		fprintf(stderr, "Error initial font\n")	;
		return 1;
	}
	int c = 3; /* loading time */	
	while (c)
	{
		int i;
		for (i=0; i<3; i++)
		{
			display_string(".", 550 + i *100, 450, fb_inf, 0x00ff0000);
			usleep(200000);
		}
		for (i=0; i<3; i++)
		{
			display_string(".", 550 + i *100, 450, fb_inf, 0x00ffff55);
			usleep(200000);
		}
		c--;
	}
	/* landing mainfframe  */
	/* initialize font */
	if (init_ft("x.ttf", 32) != 0){
		fprintf(stderr, "Error initial font\n")	;
		return 1;
	}
	display_jpeg("mainframe.jpg", fb_inf);

	while (1)
	{
		int n = read(mfd, buf, 8);
		if (n != -1)
		{
			mouse_parse(buf,&mevent);
			fb_restorecursor(fb_inf, m_x, m_y);

			m_x += mevent.x;
			m_y += mevent.y;
			int k = 1;
			if (m_x>0 && m_x<1024 && m_y>0 && m_y<752)
			{
				fb_drawcursor(fb_inf, m_x, m_y);
				int i;
				for (i=0; i<9; i++)
					if (m_x > fkey[i].x && m_x < fkey[i].x + 100 && m_y > fkey[i].y &&
						m_y < fkey[i].y + 100 )
					{
						display_string(discription[i], fkey[i].x + 120, fkey[i].y + 50, fb_inf, 0x00ff0000);
						int m, n;
						for (m=fkey[i].y; m< fkey[i].y + 120; m++ )
							for (n=fkey[i].x - 20; n< fkey[i].x + 100; n++ )
								fb_pixel(b_inf, n, m, buf32[n + m * b_inf.w]);
						k = 0;

						/* interface for effect */
						if (mevent.button == 1) /* if left button down ,when the cursor 
												   is being on the taiji ico occur */
						{
							if (i == 5)
							{
								/* initialize font */
								if (init_ft("x.ttf", 64) != 0){
									fprintf(stderr, "Error initial font\n")	;
									return 1;
								}

								char *f2[7] = {"虽","然", "哥", "不", "在", "江", "湖"};
								char *f3[12] = {"但", "江", "湖", "仍", "有", "哥", "的", "传", "说", ".", ".", ".",};
								fb_info fbinf;
								if (init_fb(&fbinf) < 0)
								{
									printf("Error init_fb\n");
									exit(1);
								}

								jpgdsp_door( "oba.jpg", fbinf );
								int i;
								for (i=0; i<7; i++)
								{
									display_string(f2[i], 240 + i*80, 400, fb_inf, 0x00fffb55);
									usleep(100000);
								}
								for (i=0; i<12; i++)
								{
									display_string(f3[i], 100 + i*80, 570, fb_inf, 0x00fffb55);
									usleep(100000);
								}
								sleep(2);

								/* recover font */
								if (init_ft("x.ttf", 32) != 0){
									fprintf(stderr, "Error initial font\n")	;
									return 1;
								}
								/* interface for you */

								fbb();
								/* write here */						
								mevent.button = 0; /* Avoid play again */
								display_jpeg("mainframe.jpg", fb_inf);/* back to mainframe */
							}
						if (i == 7 && door2)
							{
								display_jpeg("show.jpg", fb_inf);
								sleep(5);
								display_jpeg("show_us.jpg", fb_inf);
								sleep(5);
								door2 = 0;
								display_jpeg("mainframe.jpg", fb_inf);
							}
							if (i == 8)
							{
								/* initialize font */
								if (init_ft("x.ttf", 64) != 0){
									fprintf(stderr, "Error initial font\n")	;
									return 1;
								}
							//	move1("log-out.jpg", fb_inf);
								display_jpeg("log-out.jpg", fb_inf);
								int i;
								char *f1[5] = {"待","续", ".", ".", "."};
								for (i=0; i<5; i++)
								{
									display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000);
									usleep(100000);
								}
								int j = 4; /* replay ... tree times */
								while (j)
								{
									for (i=2; i<5; i++)
									{
										display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ffff55);
										usleep(200000);
									}
									for (i=2; i<5; i++)
									{
										display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000);
										usleep(200000);
									}
									j--;
								}
								/* initialize font */
								if (init_ft("x.ttf", 32) != 0){
									fprintf(stderr, "Error initial font\n")	;
									return 1;
								}
								display_string("雁留声工作室", 800, 720, fb_inf, 0x0055ffff);
								exit(1);
							}

						}
					}
			}
			else
			{
				m_x -= mevent.x;
				m_y -= mevent.y;
			}
			if (k)
			{
				display_jpeg("mainframe.jpg", fb_inf);
				mevent.button = 0;

			}

		}
	}

	free(buf24);
	free(scale_buf);
	free(buf32);


	return 0;
}
Пример #8
0
void efp_st_int(size_t n_atoms_i, const struct xr_atom *atoms_i,
		size_t n_atoms_j, const struct xr_atom *atoms_j,
		size_t stride, double *s, double *t)
{
	double xin[90];
	double yin[90];
	double zin[90];

	double ft[100], dij[100];
	double sblk[100], tblk[100];

	for (size_t iii = 0, loc_i = 0; iii < n_atoms_i; iii++) {
		const struct xr_atom *at_i = atoms_i + iii;

	/* shell i */
	for (size_t ii = 0; ii < at_i->n_shells; ii++) {
		const struct shell *sh_i = at_i->shells + ii;

		size_t type_i = get_shell_idx(sh_i->type);
		size_t start_i = get_shell_start(type_i);
		size_t end_i = get_shell_end(type_i);
		size_t sl_i = get_shell_sl(type_i);
		size_t count_i = end_i - start_i;

		for (size_t jjj = 0, loc_j = 0; jjj < n_atoms_j; jjj++) {
			const struct xr_atom *at_j = atoms_j + jjj;

		/* shell j */
		for (size_t jj = 0; jj < at_j->n_shells; jj++) {
			const struct shell *sh_j = at_j->shells + jj;

			size_t type_j = get_shell_idx(sh_j->type);
			size_t start_j = get_shell_start(type_j);
			size_t end_j = get_shell_end(type_j);
			size_t sl_j = get_shell_sl(type_j);
			size_t count_j = end_j - start_j;

			size_t count = count_i * count_j;

			memset(sblk, 0, count * sizeof(double));
			memset(tblk, 0, count * sizeof(double));

			init_ft(count_i, sh_j->type, ft);

			double rr = vec_dist_2(CVEC(at_i->x), CVEC(at_j->x));

			const size_t *shift_x = shift_table_x[type_i * 5 + type_j];
			const size_t *shift_y = shift_table_y[type_i * 5 + type_j];
			const size_t *shift_z = shift_table_z[type_i * 5 + type_j];

			const double *coef_i = sh_i->coef;

			/* primitive i */
			for (size_t ig = 0; ig < sh_i->n_funcs; ig++) {
				double ai = *coef_i++;

				double con_i[20];
				set_coef(con_i, sh_i->type, coef_i);

				coef_i++;
				if (sh_i->type == 'L')
					coef_i++;

				const double *coef_j = sh_j->coef;

				/* primitive j */
				for (size_t jg = 0; jg < sh_j->n_funcs; jg++) {
					double aj = *coef_j++;

					double aa = 1.0 / (ai + aj);
					double tmp = aj * ai * rr * aa;

					if (tmp > int_tol) {
						coef_j++;
						if (sh_j->type == 'L')
							coef_j++;

						continue;
					}

					double con_j[20];
					set_coef(con_j, sh_j->type, coef_j);

					coef_j++;
					if (sh_j->type == 'L')
						coef_j++;

					vec_t a = {
						(ai * at_i->x + aj * at_j->x) * aa,
						(ai * at_i->y + aj * at_j->y) * aa,
						(ai * at_i->z + aj * at_j->z) * aa
					};

					double fac = exp(-tmp);

					for (size_t i = start_i, idx = 0; i < end_i; i++)
						for (size_t j = start_j; j < end_j; j++, idx++)
							dij[idx] = fac * con_i[i] * int_norm[i] * con_j[j] * int_norm[j];

					double taa = sqrt(aa);
					double t1 = -2.0 * aj * aj * taa;
					double t2 = -0.5 * taa;

					for (size_t i = 0, idx = 0; i < sl_i; i++, idx += 5) {
						for (size_t j = 0; j < sl_j; j++) {
							vec_t iout;

							make_int(i, j, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout);
							xin[idx + j] = iout.x * taa;
							yin[idx + j] = iout.y * taa;
							zin[idx + j] = iout.z * taa;

							make_int(i, j + 2, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout);
							xin[idx + j + 30] = iout.x * t1;
							yin[idx + j + 30] = iout.y * t1;
							zin[idx + j + 30] = iout.z * t1;

							if (j >= 2) {
								make_int(i, j - 2, taa, &a, CVEC(at_i->x), CVEC(at_j->x), &iout);
								double t3 = j * (j - 1) * t2;
								xin[idx + j + 60] = iout.x * t3;
								yin[idx + j + 60] = iout.y * t3;
								zin[idx + j + 60] = iout.z * t3;
							}
							else {
								xin[idx + j + 60] = 0.0;
								yin[idx + j + 60] = 0.0;
								zin[idx + j + 60] = 0.0;
							}
						}
					}
					for (size_t i = 0; i < count; i++) {
						size_t nx = shift_x[i];
						size_t ny = shift_y[i];
						size_t nz = shift_z[i];
						double xyz = xin[nx] * yin[ny] * zin[nz];
						double add = (xin[nx + 30] + xin[nx + 60]) * yin[ny] * zin[nz] +
							     (yin[ny + 30] + yin[ny + 60]) * xin[nx] * zin[nz] +
							     (zin[nz + 30] + zin[nz + 60]) * xin[nx] * yin[ny];
						sblk[i] = sblk[i] + dij[i] * xyz;
						tblk[i] = tblk[i] + dij[i] * (xyz * aj * ft[i] + add);
					}
				}
			}

			/* store integrals */
			for (size_t i = 0, idx = 0; i < count_i; i++) {
				size_t idx2 = (loc_i + i) * stride + loc_j;

				for (size_t j = 0; j < count_j; j++, idx++, idx2++) {
					s[idx2] = sblk[idx];
					t[idx2] = tblk[idx];
				}
			}
			loc_j += count_j;
		}}
		loc_i += count_i;
	}}
}
Пример #9
0
int main (int argc, char **argv)
{
	if(argc > 1)
	{
		//fprintf(stdout,"%s\n",argv[1]);	
		int server_fd;
		unsigned short remote_port;
		remote_port = 8000;

		struct	sockaddr_in remote_ipv4_address;
		memset(&remote_ipv4_address,0,sizeof(remote_ipv4_address));	
		remote_ipv4_address.sin_family = AF_INET;
		remote_ipv4_address.sin_port = htons(remote_port);
		inet_pton(AF_INET,argv[1],&remote_ipv4_address.sin_addr);

		//pause();

		ssize_t receive;
		ssize_t total = 0;
		ssize_t send;
		char buffer[BUFFER_SIZE];
		while(1)
		{
			if((server_fd = socket(PF_INET,SOCK_STREAM,0)) < 0){
				fprintf(stderr,"socket create failed,%s\n",strerror(errno));	
				exit(1);
			}
			fprintf(stdout,"Socket create successed,server fd %d\n",server_fd);

			if(connect(server_fd,(struct sockaddr *)&remote_ipv4_address,sizeof(remote_ipv4_address)) < 0){
				fprintf(stderr,"connect to remote server %s : %d failed,%s\n",argv[1],remote_port,strerror(errno));	
				close(server_fd);
				exit(1);
			}
			fprintf(stdout,"Connected to %s:%d success.\n",argv[1],remote_port);

			receive = read(STDIN_FILENO,buffer,sizeof(buffer));
			if(strncmp(buffer,"ls",2) == 0){
				send = write(server_fd,buffer,receive);		
				if(send < 0){
					fprintf(stderr,"send command to server failed,%s\n",strerror(errno));	
					exit(2);
				}
				fprintf(stdout,"Send %d bytes to server successed.\n",send);
				while(1)
				{
					receive = read(server_fd,buffer,BUFFER_SIZE - 1);	
					if(receive < 0){
						if(errno == EINTR)	
							continue;
						fprintf(stderr,"receive data failed,%s\n",strerror(errno));
						exit(3);
					}else if(receive == 0){
						break;	
					}
					write(STDOUT_FILENO,buffer,receive);
					total += receive;
				}
				fprintf(stdout,"Received %d bytes.\n",total);
				total = 0;
			}else if(strncmp(buffer,"cp",2) == 0){
				total = 0;
				send = write(server_fd,buffer,receive);	
				if(send < 0){
					fprintf(stderr,"send command to server failed,%s\n",strerror(errno));	
					exit(2);
				}
				fprintf(stdout,"Send %d bytes to server successed.\n",send);
				char rbuffer[BUFFER_SIZE];
				receive = read(server_fd,rbuffer,BUFFER_SIZE - 1);
				if(strncmp(rbuffer,"Bad",3) == 0){
					write(STDOUT_FILENO,rbuffer,receive);	
					exit(3);
				}
				if(strncmp(rbuffer,"File",4) == 0){
					write(STDOUT_FILENO,rbuffer,receive);	
					exit(3);
				}
				char *ptr;
				buffer[send - 1] = '\0';
				fprintf(stdout,"%s\n",buffer);
				ptr = str_proc(buffer + 2);
				if(ptr == NULL){
					fprintf(stderr,"string process failed\n");	
					exit(3);
				}
				char path[4096];
				snprintf(path,sizeof(path),"./res/jpg/%s",ptr);
				fprintf(stdout,"path %s\n",path);
				int file_fd = open(path,O_RDWR | O_CREAT | O_TRUNC,0644);
				if(file_fd < 0){
					fprintf(stderr,"open file %s failed,%s\n",path,strerror(errno));	
					exit(3);
				}
				write(file_fd,rbuffer,receive);
				total += receive;
				while((receive = read(server_fd,rbuffer,BUFFER_SIZE - 1)) != 0)
				{
					write(file_fd,rbuffer,receive);	
					total += receive;
				}
				fprintf(stdout,"Download success.Received %d bytes.\n",total);
				close(file_fd);

			}else if(strncmp(buffer,"exit",4) == 0){
				break;	
			}
			close(server_fd);
		}
	}
	else{	
		if(init_fb(&fb_inf) < 0){
			fprintf(stderr,"init fb failed,%s\n",strerror(errno));	
			exit(1);
		}

		screen_size = fb_inf.w * fb_inf.h * fb_inf.bpp / 8;
		fprintf(stdout,"%d\n",screen_size);
		int err_code;

#if 1 
		pthread_t mou_tid;
		if((err_code = pthread_create(&mou_tid,NULL,mouse_ops,NULL)) != 0 )	{
			fprintf(stderr,"create pthread failed,%s\n",strerror(err_code));	
			exit(5);
		}
#endif

#if 1 
		char *file_desk[1024];


		int pic_num = 0;
		if(read_jpg_dir("./res/jpg",file_desk,&pic_num) < 0){
			fprintf(stderr,"read_jpg_dir failed.\n");	
			int pic_num = 0;
			if(read_jpg_dir("./res/jpg",file_desk,&pic_num) < 0){
				fprintf(stderr,"read_jpg_dir failed.\n");	
				exit(4);
			}
			exit(4);
		}
		tranves_file_desk(file_desk,pic_num);
		fprintf(stdout,"sum %d\n",pic_num);
#if 1 
		err_code = init_ft("./res/fonts/fanxinshu.TTF",36);
		if(err_code != 0){
			fprintf(stderr,"init_ft failed\n");	
			exit(1);
		}
#endif


		fun play_funs[DISPLAY_FUNS] = {disp_jpeg2,fang_picture_l,right_mid_left,fang_picture_h,down_in,right_in,bai_ye_chuang,up_down,left_right,rand_picture,crilepicture_big,crilepicture_small,up_mid_down,left_fix_right,Random,Box_radom,dissolve};
		unsigned int index = 0;
		unsigned int fun_ind = 0;
		int flag = 1;
		char pathname[1024];
welcome_menu:
		rool_flag = 0;
		welcome_flag = 1;
#if 1 
		err_code = init_ft("./res/fonts/fanxinshu.TTF",36);
		if(err_code != 0){
			fprintf(stderr,"init_ft failed\n");	
			exit(1);
		}
#endif

		pthread_mutex_lock(&mutex_lock);
		play_funs[0]("./res/welcome/welcome.jpg",fb_inf);
		display_string("自动播放",200,200,fb_inf,0x0930e); 
		display_string("手动播放",400,400,fb_inf,0xc9112d); 
		display_string("音乐播放",600,600,fb_inf,0xe68500); 
		display_string("退出",950,750,fb_inf,0x9f0521);
		memcpy(screen_save,fb_inf.fbmem,screen_size);
		pthread_mutex_unlock(&mutex_lock);
		while(!rool_flag)	
			sleep(1);

		welcome_flag = 0;

		while(flag == 1)
		{
			//fprintf(stdout,"%s,%d,flag %d\n",pathname,fun_ind,mouse_global_flag);
#if 1 
			switch(mouse_global_flag)
			{
			case 0:	
#if 1	
				snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]);

				pthread_mutex_lock(&mutex_lock);
				play_funs[fun_ind](pathname,fb_inf);
				init_ft("./res/fonts/fanxinshu.TTF",22);
				display_string(file_desk[index],10,20,fb_inf,0xaffff); 
				memcpy(screen_save,fb_inf.fbmem,screen_size);
				pthread_mutex_unlock(&mutex_lock);
				fun_ind++;
				fun_ind = fun_ind % DISPLAY_FUNS;
				index++;
				index = index % pic_num;

#endif	
				sleep(1);

				break;
			case 1:
				index++;
				index = index % pic_num;
				snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]);

				pthread_mutex_lock(&mutex_lock);
				play_funs[15](pathname,fb_inf);
				init_ft("./res/fonts/stsong.ttf",30);
				display_string("返回",950,750,fb_inf,0x9f0521); 
				init_ft("./res/fonts/fanxinshu.TTF",22);
				display_string(file_desk[index],10,20,fb_inf,0xaffff);
				memcpy(screen_save,fb_inf.fbmem,screen_size);
				pthread_mutex_unlock(&mutex_lock);


				mouse_global_flag = 10;
				sleep(1);

				break;
			case -1:
				index--;
				index = index % pic_num;
				snprintf(pathname,sizeof(pathname),"./res/jpg/%s",file_desk[index]);

				pthread_mutex_lock(&mutex_lock);
				play_funs[16](pathname,fb_inf);
				init_ft("./res/fonts/stsong.ttf",30);
				display_string("返回",950,750,fb_inf,0x9f0521); 
				init_ft("./res/fonts/fanxinshu.TTF",22);
				display_string(file_desk[index],10,20,fb_inf,0xaffff); 
				memcpy(screen_save,fb_inf.fbmem,screen_size);
				pthread_mutex_unlock(&mutex_lock);

				mouse_global_flag = 10;
				sleep(1);
				break;
			case 2:
				goto welcome_menu;
				break;
			case 3:
				flag = 0;
				break;
			default:
				break;
			}
#endif
		}

		pthread_mutex_lock(&mutex_lock);
		play_funs[9]("./res/end/end.jpg",fb_inf);
		init_ft("./res/fonts/fanxinshu.TTF",90);
		display_string("谢谢观赏",360,300,fb_inf,0xb8264a);
		memcpy(screen_save,fb_inf.fbmem,screen_size);
		pthread_mutex_unlock(&mutex_lock);

		pthread_mutex_destroy(&mutex_lock);	
		pthread_cancel(mou_tid);
		pthread_join(mou_tid,NULL);	

		destroy_file_desk(file_desk,pic_num);
#endif	
		if(munmap(fb_inf.fbmem,fb_inf.w * fb_inf.h * fb_inf.bpp / 8) < 0){
			fprintf(stderr,"mmunmap failed,%s\n",strerror(errno));	
			exit(5);
		}
	}

	return 0;
}
Пример #10
0
void *mouse_ops(void *arg)
{

	mouse_t mevent; 
	memset(&mevent,0,sizeof(mevent));
	fb_info mous_inf = fb_inf;;

	int mfd = open_mice(NULL);
	int pre_px,pre_py;
	sleep(1);
	while(1)
	{
		pre_px = mevent.px;
		pre_py = mevent.py;
		read_mice(mfd, &mevent, mous_inf);
		if(mevent.px != pre_px || mevent.py != pre_py){

			pthread_mutex_lock(&mutex_lock);
			memcpy(fb_inf.fbmem,screen_save,screen_size);		
			draw_mouse(mous_inf,mevent);
			pthread_mutex_unlock(&mutex_lock);

			usleep(20000);
		}
		//recover_mouse(mous_inf,mevent);
		if(welcome_flag == 1){
			if(mevent.button == 1)	{
				if(mevent.px > 200 && mevent.px < 336 && mevent.py > 176 && mevent.py < 200){
					pthread_mutex_lock(&mutex_lock);
					display_string("自动播放",200,200,fb_inf,0x777777); 
					pthread_mutex_unlock(&mutex_lock);
					rool_flag = 1;
					mevent.button = 0;
					mouse_global_flag = 0;
					usleep(100000);
				}else if(mevent.px > 406 && mevent.px < 530 && mevent.py > 373 && mevent.py < 400){

					pthread_mutex_lock(&mutex_lock);
					display_string("手动播放",400,400,fb_inf,0x777777); 
					pthread_mutex_unlock(&mutex_lock);
					rool_flag = 1;
					mevent.button = 0;
					mouse_global_flag = 1;

				}else if(mevent.px > 606 && mevent.px < 730 && mevent.py > 569 && mevent.py < 595){
					pthread_mutex_lock(&mutex_lock);
					display_string("音乐播放",600,600,fb_inf,0x777777); 
					pthread_mutex_unlock(&mutex_lock);
					rool_flag = 1;
					mevent.button = 0;
					mouse_global_flag = 2;
				}else if(mevent.px > 950 && mevent.px < 1000 && mevent.py > 725 && mevent.py < 753){
					pthread_mutex_lock(&mutex_lock);
					display_string("退出",950,750,fb_inf,0x777777); 
					pthread_mutex_unlock(&mutex_lock);
					rool_flag = 1;
					mevent.button = 0;
					mouse_global_flag = 3;
				}

			}
		}else{
			if(mevent.button == 1)	{
				if(mevent.px > 950 && mevent.px < 1000 && mevent.py > 725 && mevent.py < 753){
					init_ft("./res/fonts/stsong.ttf",30);
					display_string("返回",950,750,fb_inf,0x777777); 
					mevent.button = 0;
					mouse_global_flag = 2;
				}else{
					rool_flag = 1;
					mevent.button = 0;
					mouse_global_flag = 1;
				}
			}
			else if(mevent.button == 2){
				mouse_global_flag = -1;
				mevent.button = 0;
			}else if(mevent.button == 4){
				mouse_global_flag = 0;
				mevent.button = 0;

			}
		}
		usleep(10000);
	}
	return (void *)NULL;
}