这个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;
}