赞
踩
电子相册功能:滑动切换、自动播放、无操作自动播放
音乐播放器:上下首、播放、停止、音乐播放过程实时调节音量(alsa库)
- struct input_event ts;//触摸屏结构体
- typedef struct lian
- {
- char* date;
- struct lian* next;
- struct lian* to;
- }pnode;
- pnode* p;
- int fd,f;//屏幕,触摸屏
- //初始化
- pnode* chu()
- {
- pnode* p;
- p=(pnode*)malloc(sizeof(pnode));
- if(p==NULL)
- {
- printf("创建失败\n");
- return NULL;
- }
- p->date="1";
- p->next=p->to=NULL;
- return p;
- }
- //创建节点
- pnode* jie(char* ch)
- {
- pnode* h;
- h=(pnode*)malloc(sizeof(pnode));
- h->date=(char*)malloc(strlen(ch)+1);
- strcpy(h->date,ch);
- h->next=NULL;
- h->to=NULL;
- return h;
- }
- //插入
- void cha(pnode* p,char* ch)
- {
- pnode* hp;
- pnode* s;
- hp=p;
- s=jie(ch);
-
- while(hp->next!=NULL)
- {
- hp=hp->next;
- }
- s->next=hp->next;
- s->to=hp;
- hp->next=s;
- }
- //便利
- void bian(pnode* p)
- {
- pnode* hnode;
- hnode=p->next;
- while(hnode!=NULL)
- {
- printf("%s\n",hnode->date);
- hnode=hnode->next;
- }
- }
- //文件
- int file_s(char* ch,pnode* p)
- {
-
- char* k;
- k=strrchr(ch,'.');
- if(k==NULL)
- return -1;
-
- if(strcmp(k,".bmp")==0||strcmp(k,".jpeg")==0||strcmp(k,".jpg")==0||strcmp(k,".mp3")==0)
- {
- cha(p,ch);
-
- }
- return 0;
- }
-
- //文件夹
- int dir_s(char* ch,pnode* p)
- {
- char src[N];
- DIR* d;
- d=opendir(ch);
- if(d==NULL)
- {
- printf("文件夹打开失败\n");
- return -1;
- }
- struct dirent* di=NULL;
- while(di=readdir(d))
- {
- if(strncmp(di->d_name,".",1)==0)
- continue;
- memset(src,0,sizeof(N));
- sprintf(src,"%s/%s",ch,di->d_name);
- if(di->d_type==DT_DIR)
- {
- dir_s(src,p);
- }
- else
- {
- file_s(src,p);
- }
- }
- closedir(d);
- return 0;
- }
- //检测文件类型
- int jian_dir(char* jia,pnode* p)
- {
- struct stat st;
- stat(jia,&st);//获取文件信息
- if(S_ISDIR(st.st_mode))
- {
- printf("文件夹\n");
- dir_s(jia,p);
- }
- else
- {
- printf("文件\n");
- file_s(jia,p);
- }
- return 0;
- }

- //触摸屏点击
- void get_dian(int* x,int* y)
- {
- while(1)
- {
- read(f,&ts,sizeof(struct input_event));
- if(ts.type==3&&ts.code==0)
- *x=ts.value;
- if(ts.type==3&&ts.code==1)
- *y=ts.value;
- if(ts.type==3&&ts.code==ABS_PRESSURE&&ts.value==0)
- {
- printf("%d %d",*x,*y);
- break;
- }
- }
- }
- //触摸屏左右滑
- int get_xy(int* x1,int* y1,int* x2,int* y2)
- {
- int cnt=0;
- while(1)
- {
- read(f,&ts,sizeof(struct input_event));
- if(ts.type==3&&ts.code==0&&cnt==0)
- *x1=ts.value;
- if(ts.type==3&&ts.code==1&&cnt==0)
- {
- *y1=ts.value;
- cnt=1;
- }
-
- if(ts.type==3&&ts.code==0&&cnt==1)
- *x2=ts.value;
- if(ts.type==3&&ts.code==1&&cnt==1)
- {
- *y2=ts.value;
- }
- if(ts.type==3&&ts.code==ABS_PRESSURE&&ts.value==0)
- {
- break;
- }
- }
- return 0;
- }
- //自动播放函数
- void* zi()
- {
- printf("开始自动播放\n");
- char* j;
- int dpan;
- zshi=1;
- if(p->next==NULL)
- {
- printf("已是最后一张\n");
- return NULL;
- }
- while(p->next!=NULL)
- {
-
- if(nao==1)
- {
- bmp_s("./fan.bmp",0,0);
- zshi=0;
- nao=0;
- break;
- }
- sleep(2);
- p=p->next;
- j=strrchr(p->date,'.');
- if(strcmp(j,".bmp")==0)
- {
- printf("打开bmp\n");
- sleep(2);
- if(nao==1)
- {
- zshi=0;
- nao=0;
- break;
- }
- bai();
- bmp_s(p->date,0,0);
- }
- else if(strcmp(j,".jpg")==0)
- {
- sleep(2);
- if(nao==1)
- {
- zshi=0;
- nao=0;
- break;
- }
- bai();
- jpeg_s(p->date);
- }
- }
- printf("退出自动播放\n");
- bmp_s("./fan.bmp",0,0);
- zshi=0;
-
- }
- //定时器处理函数
- void sig()
- {
- printf("判定\n");
- if(nao==0&&zshi==0)
- {
- zi();
- }
- else if(nao==1)
- {
- nao=0;
- }
- printf("nao=%d\n",nao);
- }
- //定时器
- void* ding_s()
- {
- printf("定时器生成\n");
- //int ret;
- //dx=pthread_self();
- while(1)
- {
- signal(SIGALRM,sig);
- alarm(5);
- sleep(5);
- }
- }
- //图片左右滑动切换
- int qie(pnode** p)
- {
- bai();
- pthread_t zd;//自动播放线程
- char* jk;
- if((*p)->date=="1")
- *p=(*p)->next;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- //注册定时器
- pthread_create(&dx,NULL,ding_s,NULL);
- while(1)
- {
- get_xy(&hx1,&hy1,&hx2,&hy2);
- nao=1;
- printf("hx1=%d hx2=%d hy1=%d hy2=%d\n",hx1,hx2,hy1,hy2);
- if(hy1-hy2>=150&&(hx1-hx2>=-30||hx1-hx2<=30))
- {
- nao=0;
- pthread_create(&zd,NULL,zi,NULL);
- //zi(p);
- }
- if(hy1-hy2<=-150)
- {
- break;
- }
- if(hx1>0&&hx1<80&&hy1>0&&hy1<80)
- {
- break;
- }
- if(hx1<hx2)
- {
-
- if((*p)->to==NULL||(*p)->to->date=="1")
- {
- printf("已是第一张图片\n");
- continue;
- }
- printf("上一张\n");
- (*p)=(*p)->to;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bai();
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- bai();
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- }
-
-
- else if(hx1>hx2)
- {
- if((*p)->next==NULL)
- {
- printf("已是最后一张\n");
- continue;
- }
- printf("下一张\n");
- *p=(*p)->next;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bai();
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- bai();
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- }
- }
- pthread_cancel(dx);
- return 0;
- }

- //混音器
- void volume1(int vol)
- {
- snd_mixer_t* mixer;
- snd_mixer_selem_id_t* sid;
- snd_mixer_elem_t* elem;
- long min,max,volume;
- int err;
- //打开设备
- err=snd_mixer_open(&mixer,0);
- if(err<0)
- {
- printf("打开失败\n");
- exit(1);
- }
- //打开默认的混音器控制器
- err=snd_mixer_attach(mixer,"default");
- if(err<0)
- {
- printf("打开控制器失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //加载混音器控制器
- err=snd_mixer_load(mixer);
- if(err<0)
- {
- printf("加载失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //获取控制器元素
- snd_mixer_selem_id_alloca(&sid);
- snd_mixer_selem_id_set_index(sid,0);
- snd_mixer_selem_id_set_name(sid,"Master");
- elem=snd_mixer_find_selem(mixer,sid);
- if(!elem)
- {
- printf("获取元素失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //获取音量范围
- snd_mixer_selem_get_playback_volume_range(elem,&min,&max);
- //设置音量
- volume=(vol*max)/100;
- snd_mixer_selem_set_playback_volume_all(elem,volume);
- snd_mixer_close(mixer);
- }
- //播放器
- void bo(pnode** mp,char* m,pnode* mm)
- {
- bmp_s("./bao.bmp",0,0);
- int x2,y2;
- int i=0;
- char mh[1024]={0};
- if(boqi==0)
- {
- system("madplay music/*.mp3 -z &");
- boqi=1;
- }
- *mp=(*mp)->next;
- while(1)
- {
- get_dian(&x2,&y2);
- //播放
- if(x2>236&&x2<316&&y2>400&&y2<473)
- {
- system("killall -CONT madplay &");
- }
- //暂停
- if(x2>707&&x2<792&&y2>400&&y2<476)
- {
- system("killall -STOP madplay &");
- }
- //上一首
- else if(x2>23&&x2<78&&y2>402&&y2<469)
- {
- if((*mp)->to==NULL||(*mp)->to->date=="1")
- {
- printf("已是第一首\n");
- }
- else
- {
- bzero(mh,sizeof(mh));
- (*mp)=(*mp)->to;
- sprintf(mh,"killall madplay && madplay -z %s &",(*mp)->date);
- system(mh);
- }
- }
- //下一首
- else if(x2>146&&x2<204&&y2>400&&y2<467)
- {
-
- if((*mp)->next==NULL)
- {
- printf("已是最后一首\n");
- }
- else
- {
- system("killall -9 madplay &");
- usleep(10000);
- bzero(mh,sizeof(mh));
- (*mp)=(*mp)->next;
- sprintf(mh,"madplay %s &",(*mp)->date);
- system(mh);
- }
- }
- //加音量
- else if(x2>403&&x2<477&&y2>400&&y2<471)
- {
- vol+=5;
- printf("加音量\n");
- volume1(vol);
- }
- //减音量
- else if(x2>557&&x2<634&&y2>396&&y2<471)
- {
- vol-=5;
- printf("减音量\n");
- volume1(vol);
- }
- //退出音乐界面
- else if(x2>0&&x2<80&&y2>0&&y2<80)
- {
- break;
- }
- //关闭退出
- else if(x2>696&&x2<800&&y2>0&&y2<102)
- {
- boqi=0;
- system("killall -9 madplay &");
- break;
- }
-
- }
- }

- #include<stdio.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- #include<linux/input.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<fcntl.h>
- #include<sys/mman.h>
- #include<unistd.h>
- #include<signal.h>
- #include<dirent.h>
- #include<errno.h>
- #include<sys/ioctl.h>
- #include<linux/ioctl.h>
- #include<sys/soundcard.h>
- #include<alsa/asoundlib.h>
- #include<signal.h>
- #include<pthread.h>
- #include"jpeglib.h"
- #define N 10000
- pthread_t dx;
- int f;
- int hx1,hx2,hy1,hy2;
- int boqi=0;
- int vol=50;
- int nao=0,zshi=0;
- struct input_event ts;//触摸屏结构体
- typedef struct lian
- {
- char* date;
- struct lian* next;
- struct lian* to;
- }pnode;
- pnode* p;
- int fd,f;//屏幕,触摸屏
- //初始化
- pnode* chu()
- {
- pnode* p;
- p=(pnode*)malloc(sizeof(pnode));
- if(p==NULL)
- {
- printf("创建失败\n");
- return NULL;
- }
- p->date="1";
- p->next=p->to=NULL;
- return p;
- }
- //创建节点
- pnode* jie(char* ch)
- {
- pnode* h;
- h=(pnode*)malloc(sizeof(pnode));
- h->date=(char*)malloc(strlen(ch)+1);
- strcpy(h->date,ch);
- h->next=NULL;
- h->to=NULL;
- return h;
- }
- //插入
- void cha(pnode* p,char* ch)
- {
- pnode* hp;
- pnode* s;
- hp=p;
- s=jie(ch);
-
- while(hp->next!=NULL)
- {
- hp=hp->next;
- }
- s->next=hp->next;
- s->to=hp;
- hp->next=s;
- }
- //便利
- void bian(pnode* p)
- {
- pnode* hnode;
- hnode=p->next;
- while(hnode!=NULL)
- {
- printf("%s\n",hnode->date);
- hnode=hnode->next;
- }
- }
- //全白
- void bai()
- {
- int* m_p;
- m_p=(int*)mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
- int i;
- for(i=0;i<800*480;i++)
- *(m_p+i)=0xffffffff;
- munmap(m_p,800*480*4);
- return ;
- }
- //混音器
- void volume1(int vol)
- {
- snd_mixer_t* mixer;
- snd_mixer_selem_id_t* sid;
- snd_mixer_elem_t* elem;
- long min,max,volume;
- int err;
- //打开设备
- err=snd_mixer_open(&mixer,0);
- if(err<0)
- {
- printf("打开失败\n");
- exit(1);
- }
- //打开默认的混音器控制器
- err=snd_mixer_attach(mixer,"default");
- if(err<0)
- {
- printf("打开控制器失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //加载混音器控制器
- err=snd_mixer_load(mixer);
- if(err<0)
- {
- printf("加载失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //获取控制器元素
- snd_mixer_selem_id_alloca(&sid);
- snd_mixer_selem_id_set_index(sid,0);
- snd_mixer_selem_id_set_name(sid,"Master");
- elem=snd_mixer_find_selem(mixer,sid);
- if(!elem)
- {
- printf("获取元素失败\n");
- snd_mixer_close(mixer);
- exit(1);
- }
- //获取音量范围
- snd_mixer_selem_get_playback_volume_range(elem,&min,&max);
- //设置音量
- volume=(vol*max)/100;
- snd_mixer_selem_set_playback_volume_all(elem,volume);
- snd_mixer_close(mixer);
- }
- //音量函数
- void volume(int vols)
- {
- int MIX_fd;//文件描述符
- int iLeft=vols;//左声道
- int iRight=vols;//右声道
- int Lev;
- Lev=(iRight<<8)+iLeft;
- printf("%d\n",Lev);
- MIX_fd=open("/dev/mixer",O_RDWR);//打开混音器
- if(MIX_fd==-1)
- {
- printf("打开混音器失败\n");
- exit(1);
- }
- //设置
- if(ioctl(MIX_fd,MIXER_WRITE(SOUND_MIXER_VOLUME),&Lev)==-1)
- {
- printf("设置失败\n");
- exit(1);
- }
-
- //读取
- if(ioctl(MIX_fd,MIXER_READ(SOUND_MIXER_VOLUME),&Lev)==-1)
- {
- printf("读取失败\n");
- exit(1);
- }
- close(MIX_fd);
- }
- //文件
- int file_s(char* ch,pnode* p)
- {
-
- char* k;
- k=strrchr(ch,'.');
- if(k==NULL)
- return -1;
-
- if(strcmp(k,".bmp")==0||strcmp(k,".jpeg")==0||strcmp(k,".jpg")==0||strcmp(k,".mp3")==0)
- {
- cha(p,ch);
-
- }
- return 0;
- }
-
- //文件夹
- int dir_s(char* ch,pnode* p)
- {
- char src[N];
- DIR* d;
- d=opendir(ch);
- if(d==NULL)
- {
- printf("文件夹打开失败\n");
- return -1;
- }
- struct dirent* di=NULL;
- while(di=readdir(d))
- {
- if(strncmp(di->d_name,".",1)==0)
- continue;
- memset(src,0,sizeof(N));
- sprintf(src,"%s/%s",ch,di->d_name);
- if(di->d_type==DT_DIR)
- {
- dir_s(src,p);
- }
- else
- {
- file_s(src,p);
- }
- }
- closedir(d);
- return 0;
- }
- //检测文件类型
- int jian_dir(char* jia,pnode* p)
- {
- struct stat st;
- stat(jia,&st);//获取文件信息
- if(S_ISDIR(st.st_mode))
- {
- printf("文件夹\n");
- dir_s(jia,p);
- }
- else
- {
- printf("文件\n");
- file_s(jia,p);
- }
- return 0;
- }
- //bmp图片
- int bmp_s(char* ch,int x,int y)
- {
-
-
- int b,w,h;
- int * m_p;
- char* b_p;
- b=open(ch,O_RDWR);
- if(b==-1)
- {
- perror("open error");
- return -1;
- }
- lseek(b,18,SEEK_SET);
- read(b,&w,4);
-
- lseek(b,22,SEEK_SET);
- read(b,&h,4);
- //printf("w=%d h=%d\n",w,h);
- //映射屏幕
- m_p=(int *)mmap(NULL,800*480*4,PROT_READ|PROT_WRITE|PROT_EXEC,MAP_SHARED,fd,0);
-
- //映射图片
- b_p=(char*)mmap(NULL,w*h*3+54,PROT_READ|PROT_WRITE,MAP_SHARED,b,0);
- int i,j;
- int bm[w*h];
- for(i=0;i<w*h;i++)
- {
- bm[i]=*(b_p+54+3*i+0)|*(b_p+54+3*i+1)<<8|*(b_p+54+3*i+2)<<16;
- }
- //颠倒
- for(i=0;i<h;i++)
- {
- if(i+y<0)
- continue;
- if(i+y>=480||i+y==(h+y))
- break;
- for(j=0;j<w;j++)
- {
- if(j+x<0)
- continue;
- if(j+x>=800||j+x==(w+x))
- break;
- *(m_p+(y+i)*800+j+x)=bm[(h-1-i)*w+j];
- }
- }
- munmap(m_p,800*480*4);
- munmap(b_p,w*h*3+54);
- close(b);
- return 0;
- }
- //jpeg图片
- //jpeg图片
- int jpeg_s(char* che)
- {
-
- FILE* j;
- int i;
- unsigned char* buf;
- int (*j_mp)[800];
- //屏幕映射
- j_mp=(int (*)[800])mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);
- struct jpeg_decompress_struct jp;
- struct jpeg_error_mgr jer;
-
- jp.err=jpeg_std_error(&jer);
- jpeg_create_decompress(&jp);
-
- j=fopen(che,"rb");
- if(j==NULL)
- {
- printf("无法打开\n");
- return -1;
- }
- jpeg_stdio_src(&jp,j);
-
- jpeg_read_header(&jp,TRUE);
- //设置
- jp.scale_num=1;
- jp.scale_denom=1;
- jp.out_color_space=JCS_RGB;
- jpeg_start_decompress(&jp);
- buf=(unsigned char*)malloc(jp.output_width*jp.output_components);
- int kk[jp.output_width][jp.output_height];
- while(jp.output_height>jp.output_scanline)
- {
- memset(buf,0,sizeof(buf));
- jpeg_read_scanlines(&jp,&buf,1);
- for(i=0;i<jp.output_width;i++)
- {
- kk[jp.output_scanline-1][i]=*(buf+3*i+0)<<16|*(buf+3*i+1)<<8|*(buf+3*i+2);
- }
- if(jp.output_scanline-1<480&&jp.output_height>(jp.output_scanline-1))
- {
- for(i=0;i<jp.output_width&&i<800;i++)
- j_mp[jp.output_scanline-1][i]=kk[jp.output_scanline-1][i];
- }
- }
- jpeg_finish_decompress(&jp);
- jpeg_destroy_decompress(&jp);
- munmap(j_mp,480*800*4);
- fclose(j);
- return 0;
-
- }
- //检测链表的mp3文件,然后进行图片的映射
- void mp3_s(pnode* mp,pnode* bmp_m)
- {
- char mp_s[100];
- int x=0,y=80;
- while(mp->next!=NULL)
- {
- bzero(mp_s,sizeof(mp_s));
- mp=mp->next;
- int len=strlen(mp->date)-4;
- strncpy(mp_s,mp->date,len);
- printf("%s\n",mp_s);
- while(bmp_m->next!=NULL)
- {
- y+=45;
- bmp_m=bmp_m->next;
- if(strncmp(mp_s,bmp_m->date,len)==0)
- {
- bmp_s(bmp_m->date,x,y);
- }
- }
- }
- }
- //触摸屏点击
- void get_dian(int* x,int* y)
- {
- while(1)
- {
- read(f,&ts,sizeof(struct input_event));
- if(ts.type==3&&ts.code==0)
- *x=ts.value;
- if(ts.type==3&&ts.code==1)
- *y=ts.value;
- if(ts.type==3&&ts.code==ABS_PRESSURE&&ts.value==0)
- {
- printf("%d %d",*x,*y);
- break;
- }
- }
- }
- //触摸屏左右滑
- int get_xy(int* x1,int* y1,int* x2,int* y2)
- {
- int cnt=0;
- while(1)
- {
- read(f,&ts,sizeof(struct input_event));
- if(ts.type==3&&ts.code==0&&cnt==0)
- *x1=ts.value;
- if(ts.type==3&&ts.code==1&&cnt==0)
- {
- *y1=ts.value;
- cnt=1;
- }
-
- if(ts.type==3&&ts.code==0&&cnt==1)
- *x2=ts.value;
- if(ts.type==3&&ts.code==1&&cnt==1)
- {
- *y2=ts.value;
- }
- if(ts.type==3&&ts.code==ABS_PRESSURE&&ts.value==0)
- {
- break;
- }
- }
- return 0;
- }
- //播放器
- void bo(pnode** mp,char* m,pnode* mm)
- {
- bmp_s("./bao.bmp",0,0);
- int x2,y2;
- int i=0;
- char mh[1024]={0};
- if(boqi==0)
- {
- system("madplay music/*.mp3 -z &");
- boqi=1;
- }
- *mp=(*mp)->next;
- while(1)
- {
- get_dian(&x2,&y2);
- //播放
- if(x2>236&&x2<316&&y2>400&&y2<473)
- {
- system("killall -CONT madplay &");
- }
- //暂停
- if(x2>707&&x2<792&&y2>400&&y2<476)
- {
- system("killall -STOP madplay &");
- }
- //上一首
- else if(x2>23&&x2<78&&y2>402&&y2<469)
- {
- if((*mp)->to==NULL||(*mp)->to->date=="1")
- {
- printf("已是第一首\n");
- }
- else
- {
- bzero(mh,sizeof(mh));
- (*mp)=(*mp)->to;
- sprintf(mh,"killall madplay && madplay -z %s &",(*mp)->date);
- system(mh);
- }
- }
- //下一首
- else if(x2>146&&x2<204&&y2>400&&y2<467)
- {
-
- if((*mp)->next==NULL)
- {
- printf("已是最后一首\n");
- }
- else
- {
- system("killall -9 madplay &");
- usleep(10000);
- bzero(mh,sizeof(mh));
- (*mp)=(*mp)->next;
- sprintf(mh,"madplay %s &",(*mp)->date);
- system(mh);
- }
- }
- //加音量
- else if(x2>403&&x2<477&&y2>400&&y2<471)
- {
- vol+=5;
- printf("加音量\n");
- volume1(vol);
- }
- //减音量
- else if(x2>557&&x2<634&&y2>396&&y2<471)
- {
- vol-=5;
- printf("减音量\n");
- volume1(vol);
- }
- //退出音乐界面
- else if(x2>0&&x2<80&&y2>0&&y2<80)
- {
- break;
- }
- //关闭退出
- else if(x2>696&&x2<800&&y2>0&&y2<102)
- {
- boqi=0;
- system("killall -9 madplay &");
- break;
- }
-
- }
- }
- //自动播放函数
- void* zi()
- {
- printf("开始自动播放\n");
- char* j;
- int dpan;
- zshi=1;
- if(p->next==NULL)
- {
- printf("已是最后一张\n");
- return NULL;
- }
- while(p->next!=NULL)
- {
-
- if(nao==1)
- {
- bmp_s("./fan.bmp",0,0);
- zshi=0;
- nao=0;
- break;
- }
- sleep(2);
- p=p->next;
- j=strrchr(p->date,'.');
- if(strcmp(j,".bmp")==0)
- {
- printf("打开bmp\n");
- sleep(2);
- if(nao==1)
- {
- zshi=0;
- nao=0;
- break;
- }
- bai();
- bmp_s(p->date,0,0);
- }
- else if(strcmp(j,".jpg")==0)
- {
- sleep(2);
- if(nao==1)
- {
- zshi=0;
- nao=0;
- break;
- }
- bai();
- jpeg_s(p->date);
- }
- }
- printf("退出自动播放\n");
- bmp_s("./fan.bmp",0,0);
- zshi=0;
-
- }
- //定时器处理函数
- void sig()
- {
- printf("判定\n");
- if(nao==0&&zshi==0)
- {
- zi();
- }
- else if(nao==1)
- {
- nao=0;
- }
- printf("nao=%d\n",nao);
- }
- //定时器
- void* ding_s()
- {
- printf("定时器生成\n");
- //int ret;
- //dx=pthread_self();
- while(1)
- {
- signal(SIGALRM,sig);
- alarm(5);
- sleep(5);
- }
- }
- //图片左右滑动切换
- int qie(pnode** p)
- {
- bai();
- pthread_t zd;//自动播放线程
- char* jk;
- if((*p)->date=="1")
- *p=(*p)->next;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- //注册定时器
- pthread_create(&dx,NULL,ding_s,NULL);
- while(1)
- {
- get_xy(&hx1,&hy1,&hx2,&hy2);
- nao=1;
- printf("hx1=%d hx2=%d hy1=%d hy2=%d\n",hx1,hx2,hy1,hy2);
- if(hy1-hy2>=150&&(hx1-hx2>=-30||hx1-hx2<=30))
- {
- nao=0;
- pthread_create(&zd,NULL,zi,NULL);
- //zi(p);
- }
- if(hy1-hy2<=-150)
- {
- break;
- }
- if(hx1>0&&hx1<80&&hy1>0&&hy1<80)
- {
- break;
- }
- if(hx1<hx2)
- {
-
- if((*p)->to==NULL||(*p)->to->date=="1")
- {
- printf("已是第一张图片\n");
- continue;
- }
- printf("上一张\n");
- (*p)=(*p)->to;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bai();
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- bai();
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- }
-
-
- else if(hx1>hx2)
- {
- if((*p)->next==NULL)
- {
- printf("已是最后一张\n");
- continue;
- }
- printf("下一张\n");
- *p=(*p)->next;
- jk=strrchr((*p)->date,'.');
- if(strcmp(jk,".bmp")==0)
- {
- bai();
- bmp_s((*p)->date,0,0);
- bmp_s("./fan.bmp",0,0);
- }
- else
- {
- bai();
- jpeg_s((*p)->date);
- bmp_s("./fan.bmp",0,0);
- }
- }
- }
- pthread_cancel(dx);
- return 0;
- }
-
- int main(int argc,char* argv[])
- {
- if(argc<4)
- {
- printf("文件不足\n");
- return -1;
- }
- char* h=argv[1];
- char* m=argv[2];
- char* b_m=argv[3];
- //音乐图片链表
- pnode* bmp_m;
- //pnode* p;
- pnode* mp;
- //音乐链表
- bmp_m=chu();
- mp=chu();
- //图片链表
- p=chu();
- jian_dir(b_m,bmp_m);
- jian_dir(h,p);
- //音乐文件夹
- jian_dir(m,mp);
- bian(p);
- bian(mp);
- bian(bmp_m);
- fd=open("/dev/fb0",O_RDWR);
- if(fd==-1)
- {
- printf("打开屏幕失败\n");
- return -1;
- }
- f=open("/dev/event0",O_RDWR);
- if(f==-1)
- {
- printf("打开触摸屏失败\n");
- return -1;
- }
- int zx,zy;
- //多功能
- while(1)
- {
- bmp_s("./zhu.bmp",0,0);
- get_dian(&zx,&zy);
-
- //相册
- if(zx>140&&zx<237&&zy>300&&zy<400)
- {
- qie(&p);
- }
- //音乐器
- if(zx>557&&zx<653&&zy>314&&zy<402)
- {
- bo(&mp,m,bmp_m);
- }
- }
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。