这个Mplayer项目的核心,主函数。
这算是一篇连载,都是自己一个个辛苦写的。由多个.c的函数组成。
分别有touch.c,play.c,lrc.c,readname.c,readpip.c,key.c。
/*============================================ //*******函数功能:整个Mplayer项目的主函数**** // //************修改时间:2012.11.22************ =============================================*/ #include"main.h" WIN_HANDLE window[10]; char *title[4]; int fifo_fd[2],lrc_i=0,fd,fifo_cmd; //全屏的主窗口、歌词窗口、歌曲信息部分窗口==// WIN_HANDLE windowHZ; WIN_HANDLE windowLrc; WIN_HANDLE windowPosition; /****************************/ //输出汉字 //第一个参数是窗口的句柄 //第二个参数是需要显示的汉字字符串地址 /********************************************************/ //功能:打印编码为ansi码 // /********************************************************/ void printHZ(WIN_HANDLE windows,char *p,int x,int y){ TFT_SetColor(windows, COLOR_GREEN); //设置窗口前景颜色(方法一) set_tft_print_ansi(); //设置编码格式 TFT_SetTextPos(windows, x, y); //后边两个参数是相对窗口的坐标 TFT_Print(windows, "%s", p); //打印字符 set_tft_print_utf8(); } /******************************************************/ //功能:打印编码格式为utf8码 // /******************************************************/ void printNAME(WIN_HANDLE windows,char *p,int x,int y){ TFT_SetColor(windows, COLOR_GREEN); set_tft_print_utf8(); TFT_SetTextPos(windows, x, y); TFT_Print(windows, "%s", p); set_tft_print_ansi(); } /*********************************************************/ //功能:打印另一种前景色的字体 /*********************************************************/ void printHZ_color(WIN_HANDLE windows,char *p,int x,int y){ TFT_SetColor(windows, COLOR_WHITE); set_tft_print_utf8(); TFT_SetTextPos(windows, x, y); TFT_Print(windows, "%s", p); set_tft_print_ansi(); } /*=====================================*/ //函数功能:整个系统的初始化函数 //函数名:init_pic() /*=====================================*/ void init_pic(){ int X=20; voice_flag=0; TFT_Init("/dev/fb0");//初始化触屏 //============创建三个窗口,并清屏一下==========// windowHZ=TFT_CreateWindowEx(0,0,800,480,COLOR_BLACK); TFT_ClearWindow(windowHZ); windowLrc=TFT_CreateWindowEx(400,0,400,480,COLOR_BLACK); TFT_ClearWindow(windowLrc); windowPosition=TFT_CreateWindowEx(25,88,240,17,COLOR_RED); TFT_ClearWindow(windowPosition); //=========初始化各个模块的图片================// TFT_File_Picture(windowHZ, 0, 0, "./picture/back.bmp", 1); TFT_File_Picture(windowHZ, X, 189, "./picture/1.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/2.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/3.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/4.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/5.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/voice.bmp", 1); TFT_File_Picture(windowHZ, X+=49, 189, "./picture/voice3.bmp", 1); } int main(void) { pid_t pid; int i=0; struct dirent *ptr; char s[10]; unlink("fifo_cmd"); init_pic(); //初始化 fifo_cmd=mkfifo("./fifo_cmd",0666);//创建一个有名管道 if(fifo_cmd!=0){ perror("mkfifo"); } int erro=pipe(fifo_fd); //创建一个管道 if(erro!=0){ perror("pipe"); exit(0); } pid=fork(); //创建进程 if(pid<0){ perror("fork"); exit(0); } /*******************父进程*******************************/ else if(pid>0){ pthread_t disp_song_lrc,pthread_touch,pthread_read_pip,pthread_read_key; //创建一个显示歌词的线程 int error_lrc=pthread_create(&disp_song_lrc,NULL,disp_lrc,NULL); if(error_lrc!=0){ perror("pthread_creat_lrc"); exit(0); } //创建读取管道的线程 int error_pip=pthread_create(&pthread_read_pip,NULL,readpip,NULL); if(error_pip!=0){ perror("pthread_read_pip"); exit(0); } //创建一个触摸屏的线程; int error_touch=pthread_create(&pthread_touch,NULL,touch_screen,NULL); if(error_touch!=0){ perror("pthread_creat_touch"); exit(0); } //创建一个物理按键的线程 int error_key=pthread_create(&pthread_read_key,NULL,key,NULL); if(error_key!=0){ perror("pthread_read_key"); exit(0); } //等待线程的结束 pthread_join(disp_song_lrc,NULL); pthread_join(pthread_touch,NULL); pthread_join(pthread_read_pip,NULL); pthread_join(pthread_read_key,NULL); } /**********************子进程**************************/ else { play(); //播放函数 } return 0; }