xxxx.c文件解析

来源:互联网 发布:应届毕业生找工作知乎 编辑:程序博客网 时间:2024/06/01 18:37
#include "winmedic.h"#include "forlinx.h"#include <bsp.h>//头文件包含,不用多说,xxxx。h为声明文件头文件//forlinx为飞凌的启动画面 图片数组头文件,当然,是被修改的,类似的图片数组文件好几个,不过很多都是没用的,目前不想改DWORDg_dwScrWidth;DWORDg_dwScrHeight;unsigned char*g_pDrawAddr;//顾名思义,屏幕的宽度,高度, 起始地址//全局变量,dword类型,参数命名的这个习惯很好,学习了//扩展一下,医疗行业中的W/L 为窗宽和窗位,与一般的不同/#define LOGO_Y_PERCENT(0.3)#define PROGRESS_Y_PERCENT(0.85)//设置logo的位置,Y起始位置为屏幕的0.3比例处//设置logo的进度条位置,Y起始位置为屏幕的0.85比例处void Winmedic_DisplayInit(DWORD ScrWidth, DWORD ScrHeight, unsigned char* pDrawAddr){g_dwScrWidth = ScrWidth;g_dwScrHeight = ScrHeight;g_pDrawAddr = pDrawAddr;}//初始化logo屏幕,主要为获取屏幕参数,//g_pDrawAddr= =  EBOOT_FRAMEBUFFER_UA_START;  //EBOOT_FRAMEBUFFER_UA_START是显示器显示图片的地址。我只知道把图片的数据放到flash地址里面就可以显示了。//这里 LcdWidth 为系统设置的,程序默认改为了1024//相应的LcdHeight为768,也就是程序默认是高清模式,因为我使用的是外接显示器,使用了HDMI模块void Winmedic_DrawBootPic(){unsigned int BootPicWidth; //启动图片宽度unsigned int BootPicHeigth;//启动图片高度unsigned int PicWidth; //进度条图片宽度unsigned int PicHeigth;//进度条图片高度unsigned int OffsetX;//X 横向偏移值unsigned int OffsetY;//Y 纵向偏移值unsigned int y, n;/***************************绘制白色背景*****************************************************/BootPicWidth = 458;//设置BOOT图片宽度BootPicHeigth = 472;//设置BOOT图片高度OffsetX = (unsigned int)((g_dwScrWidth - BootPicWidth) * 0.5);//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY = (unsigned int)((g_dwScrHeight - BootPicHeigth) * LOGO_Y_PERCENT);//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量for (y = 0; y < 13; ++y) {memcpy((void *)(g_pDrawAddr + ((y + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_forlinx + (y * BootPicWidth * 2)), BootPicWidth * 2  );}for (n = 13; n < 378; ++n){memcpy((void *)(g_pDrawAddr + ((n + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_forlinx + (y * BootPicWidth * 2)), BootPicWidth * 2  );}for (n = 378; n < BootPicHeigth; ++n){memcpy((void *)(g_pDrawAddr + ((n + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_forlinx + (y * BootPicWidth * 2)), BootPicWidth * 2  );++y;}//memcpy是内存复制函数//      原型: //            void * memcpy(void *dest, void const *src, unsigned int length); //      功能:从src的起始位置复制length个字节到dst的内存起始位置。你可以用这种//            方法复制任何类型的值,第3个参数指定复制值的长度(以字节计)。/***************************绘制中心LOGO*****************************************************/BootPicWidth = 189;//设置BOOT图片宽度BootPicHeigth = 332;//设置BOOT图片高度OffsetX += 134;//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY += 28;//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量for(y = 0; y < BootPicHeigth; y++) {memcpy((void *)(g_pDrawAddr + ((y + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_winmedic + (y * BootPicWidth * 2)), BootPicWidth * 2  );}/***************************绘制进度条不变部分*************************************************/PicWidth = 247;//设置BOOT图片宽度PicHeigth = 15;//设置BOOT图片高度OffsetX = (unsigned int)((g_dwScrWidth - PicWidth) * 0.5);//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY = (unsigned int)((g_dwScrHeight - PicHeigth) * PROGRESS_Y_PERCENT);//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量/***************************绘制进度条底部*************************************************///for (y = 0; y < PicHeigth; ++y) {memcpy((void *)(g_pDrawAddr + ((y + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_bar_back + (y * PicWidth * 2)), PicWidth * 2  );}/***************************绘制Loading*************************************************///PicWidth = 67;//设置BOOT图片宽度PicHeigth = 16;//设置BOOT图片高度OffsetX = (unsigned int)((g_dwScrWidth - PicWidth) * 0.5);//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY += 18;//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量for (y = 0; y < PicHeigth; ++y) {memcpy((void *)(g_pDrawAddr + ((y + OffsetY) * g_dwScrWidth + OffsetX) * 2),(void *)(gImage_loading + (y * PicWidth * 2)), PicWidth * 2  );}}static unsigned int ForePos = 0;//用于绘制启动时的进度条,Pos取值0~100void Winmedic_DrawProgressBar(unsigned int Pos){unsigned int PicWidth;unsigned int PicHeigth;unsigned int OffsetX;unsigned int OffsetY;unsigned int y, s, n;//绘制进度条不变部分PicWidth = 247;//设置BOOT图片宽度PicHeigth = 15;//设置BOOT图片高度OffsetX = (unsigned int)((g_dwScrWidth - PicWidth) * 0.5);//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY = (unsigned int)((g_dwScrHeight - PicHeigth) * PROGRESS_Y_PERCENT);//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量if ((0 == ForePos) && (0 == Pos)) {return;}else {//绘制进度条可变部分PicWidth = 235;//设置BOOT图片宽度PicHeigth = 4;//设置BOOT图片高度OffsetX += 6;//设置BOOT图片显示位置,原点在左上角,向右为正方向的X轴的偏移量OffsetY += 6;//设置BOOT图片显示位置,原点在左上角,向下为正方向的Y轴的偏移量s = PicWidth * ForePos / 100;n = PicWidth * Pos / 100;// RETAILMSG(1, (TEXT("\r\n[ProgressBar] Strat(%d), Pos(%d), DrawS(%d), DrawN(%d)\r\n"), Start, Pos, s, n));for (y = 0; y < PicHeigth; ++y) {memcpy((void *)(g_pDrawAddr + ((y + OffsetY) * g_dwScrWidth + OffsetX + s) * 2),(void *)(gImage_bar_fore + ((y * PicWidth + s) * 2)), (n - s) * 2);}ForePos = Pos;}}// int ProgressBarThread()// {// HANDLE hBarEvent;// DWORD dwRet;// // //设置进度条的初值,初值之前部分的在bootpart1.cpp中绘制// unsigned int Persent = 20;// unsigned long DelayTime = 2;//延时时间,根据实际情况调节// // hBarEvent = CreateEvent(NULL, FALSE, FALSE, _T("FLprogressbar"));// while(TRUE)// {// dwRet = WaitForSingleObject(hBarEvent, DelayTime);// if (dwRet == WAIT_TIMEOUT) {// //进度条处理// if(Persent < 90) {// Winmedic_DrawProgressBar(Persent);// }// else {// continue; //break;// }// }// else {// Winmedic_DrawProgressBar(100);// break;// }// ++Persent;// }// CloseHandle(hBarEvent);// return 0;// }// // void Winmedic_AutoProgressBarStart()// {// HANDLE hThread;// DWORD  dwThreadID;// // hThread = CreateThread(0, 2048,(LPTHREAD_START_ROUTINE)ProgressBarThread, (LPVOID)0,// 0, &dwThreadID);// }

原创粉丝点击