So Tired !_! 逆水行舟, 不进则退!

25May/10

定制mini2440 wince启动界面

Posted by Nick Xu

定制mini2440 wince启动界面过程

我的显示屏是3.5寸的,所以应该按照分辨率制作一张240*320像素的图片。

详细步骤如下:

1、我用photoshop的制作的,如下图:

2、用bmp2T.exe转换这个图片,在命令符下输入bmp2T空格图片名称,如

>bmp2T forhibaidu.bmp

很快就能转换好,生成同名的forhibaidu.H文件

内容格式如:

static const unsigned short FORHIBAIDU[]={
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000还有很多字符

3、修改*:WINCE500PLATFORMsmdk2440KERNELHAL下 的samsung_n35.c内容

*代表你装pb的盘符。

只要修改const unsigned short ScreenBitmap_A70[]={以下内容即可,可以直接从forhibaidu.H里复制的。

保存后,打开PB编译你的OS。

然后在烧录到你的开发版即可。

其他尺寸的显示屏,只要制作相符的图片,修改*:WINCE500PLATFORM smdk2440KERNELHAL下相应的.c文件即可,samsung_a70.c(7寸屏)   samsung_n35.c(3.5寸) samsung_vga1024x768.c(VGA)

goodluck :)

Tagged as: , No Comments
25May/10

WINCE启动桌面的定制(转贴)

Posted by Nick Xu

Windows CE.NET的桌面确实漂亮,但是如果我们的嵌入式系统使用微软的桌面,总让我感觉不伦不类。因此,要想个办法,让我们的程序开机启动,把微软的那个桌面 给替换掉。
其中使用startup的快捷方式再加上隐藏任务栏的方法,效果非常的好,但是每次启动的时候,总是微软的桌面先出来,再启动我们的程序,感觉还是不爽。
最近发现一种方法,
1) 首先新建工程,把你的应用程序放到内核里面去(前面介绍了如何做);
2) 编译平台;
3) 修改shell.reg的文件 :
在文件中有这样一行:
[HKEY_LOCAL_MACHINEinit]
"Launch50"="explorer.exe"
"Depend50"=hex:14,00, 1e,00
把这个explorer.exe改成你的应用程序(比如:MyApp.exe)就可以了;
4) Platform Builder IDE:【Build】->【Make Image】(记得千万不要Build或者Rebuild)
5) 成功后,得到的NK.bin(或NK.nb0)就包含了应用程序MyApp.exe和MyApp.lnk,当把相应的内核烧入开发板MyApp程序就会在 系统启动时自动运行。

至此,随心所欲的让自己的程序在Windows CE系统启动时自动运行了,一个字,爽!

注意:如果自己的程序有关闭退出之类的按钮,切忌不要点击,最后做到让其消失!!!

25May/10

详解WINCE的控制面板(转)

Posted by Nick Xu

//========================================================================
//TITLE:
//    详解WINCE的控制面板
//AUTHOR:
//    norains
//DATE:
//    Tuesday  29-August-2006
//========================================================================
曾经在我的一篇《控制面板的创建》中介绍过WinCE控制面板的结构,不过由于那篇文章其目的只在于控制面板如何调用EXE程序,故对控制面板也仅是泛泛 而谈.不过在这篇文章中,我们将对WinCE的使用方法来个整体的详解.
1.控制面板的结构
控制面板其实也是个动态链接库,区别只在于后缀名为.cpl,以及对外接口为CPlApplet().
接口的原型为:
LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
在接口函数中我们需要实现特定几个消息的响应,控制面板才能正常运作.为方便观察,在这里直接贴出消息的响应结构:

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// The entry point to the Control Panel application.
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
extern "C"  LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
  switch (message)
  {
    case CPL_INIT:
          // Perform global initializations, especially memory
          // allocations, here.
          // Return 1 for success or 0 for failure.
          // Control Panel does not load if failure is returned.
          return 1;
    case CPL_GETCOUNT:
          // The number of actions supported by this Control
          // Panel application.
          return 1;
    case CPL_NEWINQUIRE:
        {
              // This message is sent once for each dialog box, as
              // determined by the value returned from CPL_GETCOUNT.
              // lParam1 is the 0-based index of the dialog box.
              // lParam2 is a pointer to the NEWCPLINFO structure.
                return 0; //means CPLApplet succeed
                return 1;  // Nonzero value means CPlApplet failed.
            }
    case CPL_DBLCLK:
            {
              // The user has double-clicked the icon for the
              // dialog box in lParam1 (zero-based).
                return 0;     // CPlApplet succeed.
                return 1;     // CPlApplet failed.
            }
    case CPL_STOP:
                // Called once for each dialog box. Used for cleanup.
    case CPL_EXIT:
                // Called only once for the application. Used for cleanup.
    default:
          return 0;
  }
  return 1;  // CPlApplet failed.
}  // CPlApplet

这几个消息的作用分别是:
CPL_INIT:初始化,可以在这分配内存等等.
CPL_GETCOUNT:返回控制面板程序的个数.因为一个.cpl文件中,可能包含多个Applets.
CPL_NEWINQUIRE:返回包含程序名和图标信息的NEWCPLINFO结构
CPL_DBLCLK:双击时响应
CPL_STOP:单个组件退出时响应,用来清除资源内存等
CPL_EXIT:退出整个cpl程序时响应
这些消息的定义可以在cpl.h中找到
2.在explorer中使用
如果定制的系统中带有explorer UI,只要把编译好的文件放进"windows",然后再打开"控制面板"就可以看到.
3.如何调用.cpl
就像PC机中.dll文件不能直接运行,需要借助rundll32.exe来运行一样,WinCE下的.cpl也需要相应的程序来调用,这个程序就 是:"ctlpnl.exe".
比如我们需要调用系统自带的cplmain.cpl的"电源管理",只要在开始菜单的运行中输入:"ctlpnl.exe windowscplmain.cpl,5".在路径后面紧跟的"5"只是因为"电源管理"在cplmain.cpl中输入第五个Applet而已.
由此我们不难得出在程序中运用ShellExecuteEx()函数调用控制面板的Applet的方法.以下这段代码,效果和在命令行中输入命令一样,也 是调用"电源管理".

    SHELLEXECUTEINFO info;    
    TCHAR szControlPanelCmdLine[ 200 ];
    swprintf( szControlPanelCmdLine, L"\windows\cplmain.cpl,5");
    info.cbSize = sizeof( info );
    info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
    info.lpVerb = NULL;
    info.lpFile = TEXT("ctlpnl.exe");
    info.lpParameters = szControlPanelCmdLine;
    info.lpDirectory = NULL;
    info.nShow = SW_SHOW;
    info.hInstApp = NULL;
    ShellExecuteEx( &info );

如果想调用cplmain.cpl的其它Applet,只要把数字改为相对应的即可.
以下所列的第一项序号为0,接下的为1,其后的继续递增.
0        CPL_Comm
1        CPL_Dialing
2        CPL_Keyboard
3        CPL_Password
4        CPL_Owner
5        CPL_Power
6        CPL_System
7        CPL_Screen
8        CPL_Mouse
9        CPL_Stylus
10        CPL_Sounds
11        CPL_SIP
12        CPL_Remove
13        CPL_DateTime
14        CPL_Certs
15        CPL_Accessib
4.系统自带控制面板的代码
微软对控制面板的代码是完全公开的,如果安装的是PB4.2,代码可以在"PUBLICWCESHELLFEOAKCTLPNL"中找到.
CTLPNL文件夹中有九个文件夹,分别对应不同的CPL文件:
ADVBACKLIGHT:高级背光灯管理
BTHPNL:蓝牙
CONNPNL:拨号网络
CONTROL:主控制台,我们在explorer中看到的"控制面板"应该就是这个
CPLMAIN:会生成cplmain.cpl,控制面板的大多数选项均源自于此
CTLPNL:和CONTROL相关联的
DMPNL:没使用过,不太清楚.不过查看rc文件应该是设置上网的.
INTL2:区域和语言设置
STGUI:存储器管理

25May/10

基于Armv4I WINCE 5.0 应用程序开发环境搭建(C# VS2005或者VS2008)

Posted by Nick Xu

这里说的开发环境是指:VS2005或者2008这样的IDE,开发语言C#,也就是在WINCE上进行.NET CF开发

主要分为两步:

a.准备必要的目标平台SDK;针对目标硬件平台通过Platform生成的SDK或者是厂商提供SDK(本文主要针对 Armv4i 平台,因此SDK是定制生成的)

b.安装该SDK,在VS2005等进行一些设置即可.

1.这里先提下目标平台SDK的生成(通过PB5.0),作为备忘吧.WINCE 应用程序开发可以并不需要了解SDK的生成,只需要知道用现成的SDK(由平台开发人员通过PB生成或者厂商提供的SDK)配合vs2005或者2008 进行一些配置即可.这个步骤主要是供给PB DEVELOPER 参考用,说不定哪天俺也开发这个哈

前提条件是wince5.0相关开发环境的要安装好.这里主要只PB5.0,安装wince5.0过程中会自带安装好pb5.0,这一步很简单,可 以直接看wince5.0的安装文档说明或者网上资源;安装的时候勾选arm 和x86两个平台就足够了.

有了wince5.0的开发环境后.就需要安装相应的 Device Emulator BSP(这里主要指 ARM平台)Device Emulator BSP 下载;

安装好这个BSP后,在%winceroot%/PLATFORMDeviceemulator 这个目录下有这个文件Using the CE DeviceEmulator.rtf.如图:

Using the CE deviceEmulator

按照这个文件的操作一步步执行即可完成相应的SDK的制作,按照 这个文件制作出来的只是一个演示SDK,实际的SDK要根据相应的开发版进行OS定制.其中需要注意的是:

为了支持托管代码.net cf和ActiveSync需要

1.For supporting the managed app development experience in VS 2005, SYSGEN_WCELOAD is required

Catalog View: Core OS->Windows CE Devices->Applications – End User->CAB File Installer/Uninstaller

2.Adding ActiveSync is optional (SYSGEN_AS_BASE)

另外作为演示俺也是选择默认的Microsoft DeviceEmulator:Armv4i,而不是开发版对应的SamSung SMDK2410 :ArmV4i

其他就是配置 Configure your Device Emulation device settings文件,俺会提供一 个俺修改的文件,里面有注释更加好找.

配置这个文件ExportSdk.sdkcfg的时候需要用到Guid生成工具.MS的开发工具一般都有带guidgen.exe,搜索一下就有. 或者直接这边找一个http://www.guidgen.com/Index.aspx

另外参考文档中作者说不能选择Enterprise Web Pad这样的模板工程,俺就是选择这样的工程生成俺的SDK,没有发现任何问题,呵呵看来很多都是都是要实践啊~~~~ 啊~~~~-_-!!!smile_tongue

最后就是按照Using the CE DeviceEmulator.rtf 这个文档生成SDK即可.

2.有了SDK就可以开始配置应用程序开发环境了.For App developer

a.首先安装SDK(这里俺生成的为"mytest_SDK.msi")

Generator SDK

在选择Features项目时候,可以不选择'Embedded VC++'毕竟这个是用C++进行开发.如下图所示:

SETUP sdk

b.安装好SDK后.就可以开始配置VS2005了(说明这里以2005为例,2008类似设置,俺测试通过)

1.运行vs2005,Goto Tools->Options. Expand the “Device Tools” node on left and select “Devices”,选择你对应的平台,这里俺的是"mytest",同时选择相应的设备,俺这里是"airwolf2026Test"如下图所示:

deviceSetting

2.选择上图中的"属性",并保证"传输"选择"DMA传输",如下图:

deviceProperty

这里有个问题,就是俺如果把"传输"选择 TCP/IP,VS2005就无法启动模拟器了....会提示说'设备未就绪'等.这个不知道该怎么解决...有知道的麻烦告诉俺下哈.谢谢.smile_wink

3.在"仿真器选项"中设置颜色和屏幕分辨率等,如下:

deviceProperty2

其他几个选项比如'网络',外网设备'等俺还没有研究...初学...

然后就可以关闭这个相应的对话框了,ok接下来可以写一个Demo程序跑一下,看看环境是否搭好了.

4.从vs2005 '文件'菜单->>新建项目,选择'智能设备'-->WINCE 5.0,选择项目类型:设备应用程序,名字这里叫'DEMOTest",如下图:

NewProject

然后和普通Winform开发类似,放置一个Button,在它的单击事件出show出一句话.顺便测试下俺这个添加了中文支持的SDK是否可以正 常显示中文哈.然后就是启动调试,程序编译好,会弹出对 话框要求选择'部署位置',俺这边就选择airwolf2026Test,如下:

deployment

看看相应的模拟器和程序有没有起来.如果有起来,那么恭喜,环境搭建成功

最后看看效果吧:

runState

呃,看来俺添加的中文支持没有效果....这 个...smile_angry

最后附上参考文档:

原创]终于制作出WinCE 5.0的ARM模拟器收藏

How to locate core operating system fixes for Microsoft Windows CE Platform Builder products这 个KB说明了WinCE更新包相关的一些策略,比如它发布年更新包的时候,会把该年份之前的月更新包移除下载站点,因此为了给PB5.0添加.NET CF2.0或者3.5支持.只需要安装2007年全年更新包,或者另加2008,01月更新包即可.原来在一些论坛上很多人说要先安装之前的更新包... 找的半死都没有找到....

修改后的ExportSDK.sdkcfg在默认皮肤这节可能重复了.呵呵

   
site
site