2009年2月5日 星期四

time.h on windows ce

在Porting libpng 1.2.34到wince時,發現time.h並沒有在wince被實作!

後來找到Windows CE Networking Team Blog, 微軟的人(應該是吧)說沒有time.h以及time相關的functions是因為rom的大小限制的關係. 有人就寫了一個簡單的wince版的time(), 如下.

Fredrik said:This is a very annoying shortcoming of WindowsCE, here's my eMbedded Visual C++ solution:

time_t time( time_t *inTT )
{
SYSTEMTIME sysTimeStruct;
FILETIME fTime;
ULARGE_INTEGER int64time;
time_t locTT = 0;
if ( inTT == NULL ) {
inTT = &locTT;
}
GetSystemTime( &sysTimeStruct );
if ( SystemTimeToFileTime( &sysTimeStruct, &fTime ) ) {
memcpy( &int64time, &fTime, sizeof( FILETIME ) );
/* Subtract the value for 1970-01-01 00:00 (UTC) */
int64time.QuadPart -= 0x19db1ded53e8000;
/* Convert to seconds. */
int64time.QuadPart /= 10000000;
*inTT = int64time.QuadPart;
}
return *inTT;
}

Would a small function like this really break the ROM limits form WinCE?
/Fredrik
September 4, 2006 5:19 AM

全文的網址下:
time.h on Windows CE
http://blogs.msdn.com/cenet/archive/2006/04/29/time-h-on-windows-ce.aspx

另外該網誌建議了另外一個連結,有time.h及相關函數的實作

OpenTimeCE from OpenNETCF Consulting
http://www.opennetcf.com/SharedSource/OpenTimeCE/tabid/247/Default.aspx

最後來一個猛一點的, portin openssl會用到
wcecompat (v1.2) - plugs the holes in the eMbedded Visual C++ C Runtime Library, making it more compatible with ANSI C.Licensed under the GNU LGPL
Happy porting

2009年2月4日 星期三

Porting from windows to windows mobile

很多open source的software都有embedded visual c++的版本以及Windows XP上的版本. 但是要把這些software porting到windows mobile 6.0上,經常要把專案檔改成vs2005的格式.

eVC++ 到 VS2005專案檔的轉換, 微軟有一個網頁在說明.
Migrating Microsoft eMbedded Visual C++ Projects to Visual Studio 2005
http://msdn.microsoft.com/en-us/library/ms838254.aspx

Step by Step: Migrating an eMbedded Visual C++ Application to Visual Studio 2005
http://msdn.microsoft.com/en-us/library/aa454893.aspx


另外還有一個問題就是open source software使用到很多GNU的C程式庫(套一句行話, GNU Platform SDK), 很多標頭檔(header file), APIs有可能在Windows CE/Mobile上面並沒有實作.
所以要想辦法去補齊這些缺漏的部分.

例如, time.h, struct tm資料結構以及gmtime()在CE上就沒有支援.

2009年1月28日 星期三

WebKit初探

我開發過很多Windows CE的裝置,每次用到瀏覽器總是覺得少了些什麼.
直到用了Opera的瀏覽器,才發現在可攜式裝置上看網頁也可以是很愉快的一件事.

後來Google推出了Android平台,玩過了gphone之後發現她們的瀏覽器都很好用.相形之下windows mobile的瀏覽器很難用,每次都要為了文字的大小調半天,還有亂掉的網頁以及出不來的的內容讓上網的過程很不舒服.

研究了一下android的瀏覽器規格,它是使用webkit當作它的rendering engine, 我就開始去尋找相關的資訊, 發現了更多的東西.

例如, Apple的Safari也是用webkit以及iphone上的safari也是用webkit.而且webkit是一個open source的project. 如果我可以把它用到windows ce上面不就可以解決我對windows ce上舒舒服服的上網了!

所以我開始到網路上找webkit的相關資訊,發現其實有很多把它porting到windows上的工作已經做好了,我只要在想辦法把它porting到windows ce上就好了.

所以我的第一部就是抓下原始碼然後建立開發環境, 起初花了很多時間, build一直會有error,我想可能是最新的source code所以難免會有些問題, 搞了半天終於build過了debug版的webkit並在安裝windows版的safari之後可以開始測試.

恩! 果然是open source可以run!

繼續在網路上瀏覽後發現Brent Fulgham有一個windows cairo port, 原來webkit雖然可以再windows上面編譯與執行, 但是還是需要一些apple的專屬程式庫,如 CFNetwork, CoreGraphics以及CoreFoundation. Cairo port就是要把這些專屬的程式庫都給替代掉, 這樣webkit在windows上就是一個真正的open source project了.

下一篇,我會以Cairo port作為主題.