Mplayer--touch.c

本文详细介绍了在Mplayer中如何实现对触摸屏的控制和交互功能,包括关键代码分析和程序逻辑流程。
摘要由CSDN通过智能技术生成

触摸屏程序

#include"main.h"

/*********定义三个宏,歌曲、模式、控制**********/
#define SONG    1;
#define MOD     2;
#define CONTORL 3;

char cmd[200]="loadfile ./song/the_dream_up.mp3";
int fp,voice=40,pic_flag=0,voice_flag,N=0;
SONGNAME *namehead;

/*******************************************/
//函数功能:显示歌取名字,打印在屏幕上
//参数: 	歌曲名链表的头指针
//返回值:	void
/********************************************/
void disp_song_name(SONGNAME *head){//显示歌曲名字
	int i;
	char *temp;
	SONGNAME *pa=head;
	TFT_File_Picture(windowHZ, 97, 289, "./picture/song_back.bmp", 1);
	for(i=0;i<8&&pa!=NULL;i++){
		temp=pa->songname+7;
		if(i==0)
			printHZ_color(windowHZ,temp,110,300+25*i);
		else
			printNAME(windowHZ,temp,110,300+25*i);
		pa=pa->next;
	}
}
/*******************************************/
//函数功能:判断触摸位置
//参数: 	触摸点的坐标(x,y)
//返回值:	void
/********************************************/
void judge_place(int x,int y){
	int place;
	char second[20];
	char *voice_table[6]={"./picture/voice0.bmp","./picture/voice1.bmp",
		"./picture/voice2.bmp","./picture/voice3.bmp",
		"./picture/voice4.bmp","./picture/voice5.bmp",};
	
	if(x>=741&&x<800&&y>=0&&y<=35){// 右上角的关机部位
		TFT_ClearWindow(windowHZ);
		execlp("poweroff","poweroff",NULL);
	}						
	
	if((x>=105&&x<380)&&(y>=300&&y<=460)){//歌曲栏
		place=SONG;
		SONGNAME *namecmd=namehead;
		printf("%d\n",place);
		char p[255]="loadfile ";
		int fp=open("./fifo_cmd",O_WRONLY);
		if(x>=110&&x<370&&y>=300&&y<325){		/*******1*********/
			while(namecmd!=NULL){
				if(namecmd->num==N){
					strcat(p,namecmd->songname);
					disp_song_name(namecmd);//歌曲名字显示
					break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=325&&y<350){	/***********2***********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+1)){
					N=N+1;
					strcat(p,namecmd->songname);
					disp_song_name(namecmd);//歌曲名字显示
					break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=350&&y<375){	/*************3***********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+2)){N=N+2;
				strcat(p,namecmd->songname);
				disp_song_name(namecmd);//歌曲名字显示
				break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=375&&y<400){	/************4***********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+3)){N=N+3;
				strcat(p,namecmd->songname);
				disp_song_name(namecmd);//歌曲名字显示
				break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=400&&y<425){	/************5*********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+4)){N=N+4;
				strcat(p,namecmd->songname);
				disp_song_name(namecmd);//歌曲名字显示
				break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=425&&y<450){	/***********6***********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+5)){N=N+5;
				strcat(p,namecmd->songname);
				disp_song_name(namecmd);//歌曲名字显示
				break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		if(x>=110&&x<370&&y>=450&&y<475){	/************7**********/
			while(namecmd!=NULL){
				if(namecmd->num==(N+6)){N=N+6;
				strcat(p,namecmd->songname);
				disp_song_name(namecmd);//歌曲名字显示
				break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
		}
		
	}
	//=====================歌曲模式==========================/
	else if((x>=20&&x<=380)&&(y>=260&&y<=280)){
		place=MOD;
		printf("%d\n",place);
	}
	//=====================歌曲控制==========================/
	else if((x>=20&&x<=375)&&(y>195&&y<=250)){//歌曲控制
		place=CONTORL;
		printf("%d\n",place);
		
		/*********按键的坐标********************/
		//	快退:(69,189)-(118,241)
		//	快进:(118,189)-(167,241)
		//	上一曲:(167,189)-(216,241)
		//	下一曲:(216,189)-(265,241)
		/****************************************/
		if(x>=20&&x<=69&&y>195&&y<=250){		//暂停键
			write(fp,"pause\n",strlen("pause\n"));
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			if(!pic_flag){
				pic_flag=~pic_flag;
				TFT_File_Picture(windowHZ, 20, 189, "./picture/11.bmp", 1);
			}
			else {
				pic_flag=~pic_flag;
				TFT_File_Picture(windowHZ, 20, 189, "./picture/1.bmp", 1);
			}
		}
		else if(x>69&&x<118&&y>195&&y<=250){	//快退
			write(fp,"seek -5\n",strlen("seek -5\n"));
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			TFT_File_Picture(windowHZ, 69, 189, "./picture/21.bmp", 1);
			if(!voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			TFT_File_Picture(windowHZ, 69, 189, "./picture/2.bmp", 1);
		}
		else if(x>118&&x<167&&y>195&&y<=250){	//快进
			write(fp,"seek 5\n",strlen("seek 5\n"));
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			TFT_File_Picture(windowHZ, 118, 189, "./picture/31.bmp", 1);
			if(!voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			TFT_File_Picture(windowHZ, 118, 189, "./picture/3.bmp", 1);
			
		}
		else if(x>167&&x<216&&y>195&&y<=250){	//上一曲
			N--;
			if(N<0)N=10;
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			TFT_File_Picture(windowHZ, 167, 189, "./picture/41.bmp", 1);
			SONGNAME *namecmd;
			if(N>10)N=0;
			if(!voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			char p[255]="loadfile ";
			namecmd=namehead;
			while(namecmd!=NULL){
				if(namecmd->num==N){
					strcat(p,namecmd->songname);
					disp_song_name(namecmd);//歌曲名字显示
					break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
			TFT_File_Picture(windowHZ, 167, 189, "./picture/4.bmp", 1);
		}
		else if(x>216&&x<265&&y>195&&y<=250){	//下一曲
			N++;
			SONGNAME *namecmd;
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			if(N>10)N=0;
			TFT_File_Picture(windowHZ, 216, 189, "./picture/51.bmp", 1);
			if(!voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			char p[255]="loadfile ";
			namecmd=namehead;
			while(namecmd!=NULL){
				if(namecmd->num==N){
					strcat(p,namecmd->songname);
					disp_song_name(namecmd);//歌曲名字显示
					break;
				}
				namecmd=namecmd->next;
			}
			strcat(p,"\n");
			write(fp,p,strlen(p));
			TFT_File_Picture(windowHZ, 400, 0, "./picture/lrc.bmp", 1);
			TFT_File_Picture(windowHZ, 25, 106, "./picture/title.bmp", 1);
			TFT_File_Picture(windowHZ, 216, 189, "./picture/5.bmp", 1);
		}
		else if(x>=270&&x<=314&&y>195&&y<=250){//静音键
			
			if(voice_flag){
				voice_flag=~voice_flag;
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
				write(fp,"mute 0\n",strlen("mute 0\n"));
			}
			else {
				voice_flag=~voice_flag;
				TFT_File_Picture(windowHZ, 265, 189, "./picture/no_voice.bmp", 1);
				write(fp,"mute 1\n",strlen("mute 1\n"));
			}
		}
		
		else if(x>=314&&x<=375&&y>195&&y<=250){//调节音量
			
			voice=voice+20;
			if(voice_flag){
				TFT_File_Picture(windowHZ,265, 189, "./picture/voice.bmp", 1);
			}
			if(voice>100){
				voice=0;
				write(fp,"volume  0\n",strlen("volume  0\n"));
			}
			printf("voice= %d\n",voice);
			TFT_File_Picture(windowHZ, 314, 189, voice_table[voice/20], 1);
			if(voice==0)
				write(fp,"volume  0 1\n",strlen("volume  0 1\n"));
			if(voice==20)
				write(fp,"volume  20 1\n",strlen("volume  20 1\n"));
			if(voice==40)
				write(fp,"volume  40 1\n",strlen("volume  40 1\n"));
			if(voice==60)
				write(fp,"volume  60 1\n",strlen("volume  60 1\n"));
			if(voice==80)
				write(fp,"volume  80 1\n",strlen("volume  80 1\n"));
			if(voice==100)
				write(fp,"volume  100 1\n",strlen("volume  100 1\n"));
		}
		
	}
}

void *touch_screen(void *p){
	int x,y,up_down;
	CUR_VAL val_single;	
	//打开触摸屏设备文件
	int touch_fd = open_touch_dev("/dev/event1"); 
	
	x = val_single.current_x;
	y = val_single.current_y;
	up_down = val_single.key;
	
	namehead=readsongname();
	//voice=60;
	
	while(1){
		//the_next_song();
		//scond=time((time_t*) NULL);
		analysis_event_single(touch_fd, &val_single);//返回值为当前触摸点的坐标
		x = val_single.current_x;
		y = val_single.current_y;
		
		up_down = val_single.key;
		fp=open("./fifo_cmd",O_WRONLY);
		up_down=val_single.key;//按下,up_down为1
		if(up_down){
			usleep(100*1000);//去抖
			analysis_event_single(touch_fd, &val_single);
			up_down=val_single.key;//按下,up_down为1
			if(up_down){
				judge_place(x,y);
				
				while(up_down){//判断松手
					analysis_event_single(touch_fd, &val_single);
					up_down=val_single.key;
				}
			}
			
		}
		
	}
	
	
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值