WINCE修改分辨率有关文件

文章转自:http://1958.blog.163.com/blog/static/33449667200911251713920/

WINCE修改分辨率有关文件大至如下:

\SMDK2440\DRIVERS\DISPLAY\S3C2440LCD\s3c2440disp.cpp

\SMDK2440\DRIVERS\TOUCHP\tchpdd.cpp

\SMDK2440\INC\s2440.h

\SMDK2440\KERNEL\HAL\cfw.c

继续问一个显示驱动的问题:如何实现镜像显示

最近在搞一个屏的驱动,在这里找到不少资料,为答谢各位,先总结一下自己写这个屏的驱动的一些东东,然后在继续向大家问问提 G-1~PW ]  
O7u8.uZ  
我的这个是在原S3C2410 BSP的240320显示驱动的基础上修改成320240,首先,需要修改的文件有 /'dicKc2  
PLATFORM\SMDK2410\INC\s2410.h @kV)?]  
+ %"zG&  
PLATFORM\SMDK2410\KERNEL\HAL\cfw.c D" t8](  
($TPxA`Qq  
PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\s3c2410disp.cpp y/scM^y`K  
J)XQ'i  
PLATFORM\SMDK2410\DRIVERS\DISPLAY\S3C2410LCD\sources 1%UYmK  
z<%[G}[  
s2410.h中,需要定义屏的分辨率,比如320,240,以及VBPD,VSPW,VFPD,HBPD,HSPW,HFPD这几个值,一般lcd的手册都会给出来,如果找不到,最好的办法就是一个一个的试 0Z&*vJ"Rh  
q-B9+irj  
o\7ag|8  
jPz*Y  
cfw.c中,修改的是InitDisplay()函数,这个是屏的初始化部分。改成你要的东西就好了,同时还可以定义io口,用哪个口做PWR_EN,哪个口做背光控制 h?x-WL)  
M)uSz`?  
q&#_0*B  
a bT%wQ  
s3c2410disp.cpp中,修改红色字的部分 q /U7t%l  
X%4naf2hv  
WORD   TempBuffer[321][240]; S% dlR`'  
f% _4 ,y  
S3C2410DISP::S3C2410DISP (void) z" niex0f  
{ qAqJ>vS:  
  RETAILMSG(0, (TEXT("++S3C2410DISP::S3C2410DISP\r\n"))); JTtRdhcB  
  2|aa/@ko  
  // setup up display mode related constants Ir4h#1N3  
  m_nScreenWidth = 320; Hg)b;8UV3  
  m_nScreenHeight = 240;
'fw\8L*bn  
  m_colorDepth = 16; ]+EgG?l  
  m_cbScanLineLength = m_nScreenWidth * 2; ,<;W K>p  
  m_FrameBufferSize = m_nScreenHeight * m_cbScanLineLength; U8HdG7xDJ  
  ,wl|TX}r[  
  // memory map register access window, frame buffer, and program LCD controller _\@a@  
  InitializeHardware(); HJVG% S  
jQUx5$#  
@R;* L:no  
Bm)t.j>uv  
}_TLP0\  
这样改完后,一般一个240320的屏就可以转成320240显示了 px? *%  
EN1,^5^  
注意一下,有的朋友显示只有1/3或2/3,或者显示很虚,或者花屏,主要是TempBuffer这里没改,改了就不会了, }z6PDO  
^s >ny8?  
如果改了TempBuffer还不行,那就是你的初始化有问题,重点修改lcd的那几个寄存器以及hbpd,hfpd,hspw,vbpd,vfpd,vspw这几个值 )y?mR|s:]  
gHhO. =;6  
Vf1Kc^Z-c  
另外,有人想实现旋转的功能,这个我也实现了 s?p50  
Ix5$:GpQb  
操作是这样的 v;]cx<.  
s2410.h中,在最上面添加 #define ROTATE 1 !"YAOk  
sources中,在开始的地方添加 ROTATE=1 mk<, )@  
然后,在s3c2410disp.cpp中,修改几个地方 2xut7{F  
1) 红色部分改成你要旋转的角度 ep]t!%)  
S3C2410DISP::S3C2410DISP (void) =jf3p-j  
{ pQb *Q2f4  
  RETAILMSG(0, (TEXT("++S3C2410DISP::S3C2410DISP\r\n"))); v,"\9>Lt?  
  !ET1e  
  // setup up display mode related constants N?]<dGOy  
  m_nScreenWidth = 320; Ecy?TN  
  m_nScreenHeight = 240; y-44hm1;  
  m_colorDepth = 16; 8B KY(  
  m_cbScanLineLength = m_nScreenWidth * 2; v1", x0K  
  m_FrameBufferSize = m_nScreenHeight * m_cbScanLineLength; Ha?O:r :tH  
  }7<ec6_  
  // memory map register access window, frame buffer, and program LCD controller )Jpb=P@  
  InitializeHardware(); .Sb:a05m=  
m(F\2Qx  
#ifdef ROTATE L2MGX[SE@$  
  m_iRotate = DMDO_180; {.Xk#1.^(  
  SetRotateParms(); XW$7Te 0Q  
#endif //ROTATE v+ ~Q{nN  
__G^Jv{Q  
Ke_VKO uc  
"^a Y!Q[  
2)这里有两个方法,先说我试过且成功了的 这个是论坛网友 uniper 的方法 FM?\'! p  
  在 DrvEscape()中,加上红字部分 q{S[iteQD!  
ULONG S3C2410DISP::DrvEscape( ^L7d  
                SURFOBJ *pso, 2!,{'Wrf  
                ULONG   iEsc, $,1n).!?1  
                ULONG   cjIn, S1tV|(  
                PVOID   pvIn, eiH6|?%z'  
                ULONG   cjOut, P{R4?r2L  
                PVOID   pvOut) F[mZi>R;  
{ y(J0"k}  
/* N{=xiu36M  
  if (iEsc == DRVESC_GETGAMMAVALUE) \qu~#8?w2  
  { ks<x,C  
  return GetGammaValue((ULONG *)pvOut); #&g20AtUj  
  } 9U\1SJb  
  else if (iEsc == DRVESC_SETGAMMAVALUE) ~O-9:(.s_  
  { pbC eqG  
  return SetGammaValue(cjIn, *(BOOL *)pvIn); .R3;L8  
  } dn!$-??T  
*/ #5u\Bz-  
#ifdef ROTATE wMp'K?Jx  
ZJSkPk!S  
;j3slI!?*1  
GPESurfRotate *pSurf = (GPESurfRotate *)m_pPrimarySurface; kW+_.<XZ  
`,K?q  
switch (m_iRotate) { o'H!mEl!ue  
  case DMDO_0:   k21<A$8kQ  
  case DMDO_180: oZk6?Ra+N8  
    m_nScreenHeight = m_nScreenHeightSave; <DN-usm  
    m_nScreenWidth = m_nScreenWidthSave; nP:-{tgu-  
    break; UUlgnX21N  
F I6Pgt7  
  case DMDO_90: "zRd%  
  case DMDO_270: [Ojw0y  
    m_nScreenWidth = m_nScreenHeightSave; m2hIzj(R  
    m_nScreenHeight = m_nScreenWidthSave; =zxn5~9_i  
    break; ,L)i*o  
  } .m%JE?m  
m_pMode->width = m_nScreenWidth; ^+k:^C  
m_pMode->height = m_nScreenHeight; :tCtWXZ`  
#<rKFmwD{  
pSurf->SetRotation(m_nScreenWidth, m_nScreenHeight, m_iRotate);
nx;G* R  
afFeV}:D  
(nks/:aU  
BAO&n  
  if (iEsc == DRVESC_GETSCREENROTATION) SX8[t~ n  
  { K3pM6 a  
    *(int *)pvOut = ((DMDO_0 | DMDO_90 | DMDO_180 | DMDO_270) << 8) | ((BYTE)m_iRotate); dX"_Mx  
    return DISP_CHANGE_SUCCESSFUL; 1}Rtk3*~U  
  } @?)]8P~(R=  
  else if (iEsc == DRVESC_SETSCREENROTATION) 4. _VD gn  
  { +0%pK  
    if ((cjIn == DMDO_0) || QJ0g\ g  
      (cjIn == DMDO_90) || WWn>w #  
      (cjIn == DMDO_180) || {%ky.YI  
      (cjIn == DMDO_270) ) lBK%/L  
      { 6stR]8  
          return DynRotate(cjIn); xAca=+m%WG  
      } 7~BZ$u<;l=  
    return DISP_CHANGE_BADMODE; r /@hS4kt  
  } ? cT,A<2B  
#endif //ROTATE & ROTATE &1cU6:\NhQ  
  iUb<2-m  
  return 0; kLsq"(]pJ  
} UI"T?YJ3G  
8';77 8HL  
` 7Y#q<  
v-?S +\h_  
*\h+-mLx{  
Hv.X,7t  
另外一个方法,这个我没做过实验,感觉也还可以,论坛网友 sliverzhou 的方法 A7QVQJ{rxM  
将S3C2410DISP::S3C2410DISP (void) 中的 '"!1L ?.  
#ifdef     ROTATE pg-nR POTs  
  m_pPrimarySurface = new GPESurfRotate(m_nScreenWidthSave, m_nScreenHeightSave, (void*)(m_VirtualFrameBuffer), m_cbScanLineLength, m_ModeInfo.format); I@S"3+  
#else v) L gR?i  
  m_pPrimarySurface = new GPESurf(m_nScreenWidth, m_nScreenHeight, (void*)(m_VirtualFrameBuffer), m_cbScanLineLength, m_ModeInfo.format);     b?2wP #  
#endif //!ROTATE '2CVO  
修改为 rUZu/CnLcO  
#ifdef     ROTATE g9XwN/N  
  m_pPrimarySurface = new GPESurfRotate(m_nScreenWidthSave, m_nScreenHeightSave, (void*)(m_VirtualFrameBuffer), m_cbScanLineLength, m_ModeInfo.format); o oJ7.YOf  
  ((GPESurfRotate *)m_pPrimarySurface)->SetRotation(m_nScreenWidth, m_nScreenHeight, m_iRotate);     // init cursor related vars ,T&g5  
#else ?wMyS;  
  m_pPrimarySurface = new GPESurf(m_nScreenWidth, m_nScreenHeight, (void*)(m_VirtualFrameBuffer), m_cbScanLineLength, m_ModeInfo.format);     1-U^BEq  
#endif //!ROTATE ND["8~p  
+;<1M_Cl~  
2css/9<)  
有网友反映,改了后图象屏幕没翻转,鼠标坐标翻转了,其实是没有加 ~IpdmM  
pSurf->SetRotation(m_nScreenWidth, m_nScreenHeight, m_iRotate);   2 ~{;.  
的原因,因为刚好我也碰到过这种情况 Q&{t<(8V<  
:;YXW}F  
_CL(Z wqT  
j$?imI3B  
(,A "5  
------------------ 3 0\5  
当我完成上面的操作时,屏幕已经可以按照320240清楚的显示了,鼠标坐标也正常。但我的问题还没有得到彻底解决。就是显示镜像的问题。显示画面要从lcd的背面看才能看到正常的画面 /zt\n5_m  
TRh vwk  
我在很多论坛,很多地方都是提到了显示翻转的,而不是显示镜像的, SN/isjT3  
_jLT ayD  
有网友提到的GXStartDraw的方法,这个我感觉适合应用程序,而不是驱动部分的,所以我就没再按这个方法继续下去。 j:07<r>  
V<D[~n  
那现在唯一能做的就是修改驱动程序。无奈小弟我接触wince没一个星期,这么高级的东西怎么可能搞定,所以来求助各位了 .2@AI[  
*qER2/ 6S  
/!uQ1@MH  
如果是修改驱动程序,具体是要改哪些地方啊?
 

 

在你的PB中,在你加入的显卡驱动的注册表中(在comman.reg or platform.reg or project.reg中,具体要看你的显卡驱动注册加在哪个文件里的,你不要说这你都不知那我就没法了!),找到如下的语句,修改就行了: ; Width & Height values must be hex (分辨率) USlF+RY@3L  
; 1024x768 : 400h x 300h  
; 800x600 : 320h x 258h
; 720x576 : 2D0h x 240h (Use this with a refresh rate of 50 Hz.)
; 720x480 : 2D0h x 1E0h
; 640x480 : 280h x 1E0h
;-----------------------------------------------------------------------------
"Width"=dword:2D0  //改为你的设置要求
"Height"=dword:240  //改为你的设置要求    

;-----------------------------------------------------------------------------
; Bit depth must be one of:(色彩地支持位设置)
; 8bpp : 8   
; 16bpp : 10
; 24bpp : 18   
; 32bpp : 20   
; (815 does not support 32 bpp)
;-----------------------------------------------------------------------------    

已标记关键词 清除标记
相关推荐
wince6.0模拟器是一个车载式PC模拟器,英文全称为:windows embedded ce6.0,主要是使用在3D地图及软件模拟方面,像车载凯立德导航就可以完全的在wince6.0模拟器中使用。另外它集成了GPS模拟器(Virace GPS),可以非常轻松方便的去调试程序,且还有三种分辨率功用户选择,分别为:Skin_400x234、Skin_640X480、Skin_800X480,有需要的用户,可以来下载wince6.0模拟器在您的机车上使用哦! wince6.0模拟器 使用方法 1、下载好软件压缩包,节气解压好,双击运行里面的“先运行我进行注册.bat”,随后它就会提示注册成功。 2、然后就可以双击“Skin_400x234.bat”、“Skin_640X480.bat”、“Skin_800X480.BAT”三个中的其中一个,这三个本质上是一样的,只要分辨率的大小不同。 3、点击“文件”-“配置”-“常规”-“共享文件夹”。 4、点击"...",弹出选择文件夹,选择“凯立德地图文件夹”点击“确定”。 6、点击wince6.0模拟器界面中“我的设备”图标。 7、双击“SDMMC”(SDMMC就相当于你导航里面的一个SD卡或者说是导航仪的内置卡) 8、打开后,你就可以看到凯立德导航3D地图了。大功告成! 9、不知道大家发现没有,屏幕没有完全显示,被遮挡了一栏。遮盖怎么办呢?这也好办,没有我一箭穿心解决不了的。点击“开始”。 10、接下来点击“设置”“任务栏和开始菜单”,勾选“自动隐藏”“OK”。 怎样连接网络教程 1、打开VisualStudio 2008—>工具-->设备仿真器管理器-->选择安装的SDK(如图一)右键-->连接 2、配置模拟器文件-->配置-->网络-->勾选“启用NE2000 PCMCIA 网络适配器并绑定到(N)”在下拉框中选择“连接的网卡”或者PC机正在使用的网卡(如图二)-->确定 3、配置Windows Mobile 设备中心(Windows 7系统),XP系统是Microsott ActiveSync,配置都一样。 移动设备设置-->连接设置—>勾选所有的选择框-->允许连接到以下任一端口选择“DMA”—>这台计算机已连接到选择“自动”(这个地方要注意下有时候重新打开软件时这个配置可能没保存,所有需要重复选择“自动”、“单位网络”、“Internet”来测试是否能上网) 4、设备仿真器管理器-->选择连接的SDK右键-->插入底座(如图四) 配置完成在PC机的计算机中就能看到这个设备了 测试 在wince6.0模拟器中打开IE输入网址就能上网了 注意现在还不能上网的话请在设备中心的配置中“这台计算机已连接到”选择任意的选择项来测试 常见问题 一、wince6.0模拟器怎么打开地图? 答:xp用户需先安装Windows Installer 4.5和.NET Framework 2.0 SP2 已经安装过因为注册列表已注入WINDOWS,有些版本限制了重复安装,只有重做系统。 bluestacks app player版本不一,最新版最新版 BlueStacks App Player 0.7.7.813_RELXP/Win7版 100.1 M 这个模拟器对系统和电脑配置要求都很挑剔,有时安装成功未必可以运行应用,能否成功还是要看电脑配置 二、wince6.0模拟器怎么在vs上调试? 答:环境配置:启动Jenkins? 1、安装jdk 从略,建议1.6或以上版本,配置好环境变量。 2、安装tomcat 从略,安装完调试下tomcat是否正常。 3、安装ant 下载zip包,解压后配置好环境变量。 4、安装jenkins 下载war包,命名为Jenkins,拷贝到tomcat 一个独立的部署系统需要包括的内容是非常丰富的(绝对不仅仅是Jenkins部署插件要做的那些事情)。部署系统需要连接项目中涉及的人、环境、制品库以及构建环境等,只不过这种连接的目的是打通从制品到最终服务的整个流程 。 三、wince模拟器怎么修改分辨率 答:点右键-编辑-修改最后一句cd C:\Program Files\Microsoft Device Emulator\1.0 DeviceEmulator.exe CE50_ARM_CHS.bin /memsize 128 /s TMP.dess /video 320x300x16 3.5的是320x300x16 4.3的是480x300x16
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页