##HIDEME##

2008-04-28

wince LED (2)App篇


繼上回的無腦driver心得之後
這次來講講app心得
原本我是寫了四個測試用的應用程式來測試這兩個led
全亮 全暗 紅亮 藍亮       不過老實說 這樣子很麻煩!!!

每一次都要點一次程式 這樣子一點都沒有專業的感覺
所以就在想 如果能做成一個大對話視窗
我敲一個button 它就一種動作
這樣子我做四個button就好了
於是繼大鳥育成計畫之後 又一個無聊的修練正在進行...

思考完畢 就拿了書裡的範例程式來改
原本的測試程式是從網頁上參考來的 : WinCE 5.0邊做邊學(8)

除了參照範例程式之外 原本的driver要在 XXX_Write()裡加入修改GPBDAT的程式碼 DWORD dwret=min(BUFSIZE,BufferLength);
wcsncpy(buffer,(LPWSTR)pBuffer,dwret);

EnterCriticalSection(&pGLD->RegCS);
pGLD->pIOPReg->GPBDAT &= ~(0x07<<1);
pGLD->pIOPReg->GPBDAT |= (*pBuffer<<2);
LeaveCriticalSection(&pGLD->RegCS);
接著是直接把範例程式做大修改
參考範本 WINDOWS CE.NET 程式設計 第三版 Chap4-CtlView

主要是利用按鈕視窗 所以先修改CtlView.cpp將後面幾個視窗關掉
[Line 34] TCHAR *szBtnTitle[] = {TEXT ("Buttons")};
TCHAR *szCtlWnds[] = {BTNWND};
不過這只是暫時性的修改 所以其它看似用不到的檔案還是有link到的樣子
要從其它地方修改的樣子

接下來是修改BtnWnd.cpp
[Line 26] CTLWNDSTRUCT Btns [] = {
   {TEXT ("BUTTON"), IDC_PUSHBTN_ALLCLEAR, TEXT ("LED Clear"),
   10, 10, 120, 23, BS_PUSHBUTTON | BS_NOTIFY},
   {TEXT ("BUTTON"), IDC_PUSHBTN_ALLON, TEXT ("LED All"),
   10, 40, 120, 23, BS_PUSHBUTTON | BS_NOTIFY},
   {TEXT ("BUTTON"), IDC_PUSHBTN_BLUEON, TEXT ("LED Blue"),
   10, 70, 120, 23, BS_PUSHBUTTON | BS_NOTIFY},
   {TEXT ("BUTTON"), IDC_PUSHBTN_REDON, TEXT ("LED RED"),
   10, 100, 120, 23, BS_PUSHBUTTON | BS_NOTIFY}, };
其餘Mark掉
[Line 142]for (i = 0; i < dim(nlBtn); i++) {
  if (HIWORD (wParam) == nlBtn[i].wNotification) {
    HANDLE handle=CreateFile(_T("GLD1:"),GENERIC_READ|GENERIC_WRITE,
                             0,NULL,OPEN_EXISTING,0,NULL);
    ASSERT(handle);
    DWORD ret=0;
    TCHAR pstr[1];  
      switch(LOWORD (wParam)){
          case IDC_PUSHBTN_ALLCLEAR:
               pstr[0]=0;             
               break;          
          case IDC_PUSHBTN_ALLON:
               pstr[0]=3;
               break;
          case IDC_PUSHBTN_BLUEON:
               pstr[0]=2;
               break;
          case IDC_PUSHBTN_REDON:
               pstr[0]=1;
               break;
      }
    WriteFile(handle,pstr,(_tcslen(pstr)+1)*sizeof(TCHAR),&ret,NULL);
    CloseHandle(handle);      
  lstrcpy (szOut, nlBtn[i].pszLabel);
  break;
  }
}
將整個for迴圈改寫成上述樣子即可

最後,還要修改CtlView.h
[Line 39]#define  IDC_PUSHBTN_ALLCLEAR   100
#define  IDC_PUSHBTN_ALLON   101
#define  IDC_PUSHBTN_BLUEON   102
#define  IDC_PUSHBTN_REDON   103
將原本的 101~106Mark起來 改用自行定義的四個button狀態

這樣子修改後 應該就可以利用四個button來控制紅藍燈了
我讓紅燈亮啦 我讓藍燈亮啦 我讓他們全滅啦 我又讓他們亮起來啦
打我啊笨蛋 (冷.....-_-)

2008-04-25

wince LED (1)driver篇


之前在研究GPIO driver的時候
利用LED來當做測試的標的
然後很無聊地寫了四個測試用app.....
不過一次點一個app很麻煩 所以就很無聊地想再把它們合起來

先來談談這個LED的driver
============================================
CoAsia43的板子有三個LED -> 綠 紅 藍
藉由Port B來控制其亮暗
  GPB1 --> Green 
  GPB2 --> Red 
  GPB3 --> Blue

因為Green好像受到其它程式的控制 只要系統開機就會亮
你不管要他亮或暗它都不會鳥你
所以不理它 來玩弄剩下兩個LED
在driver的Init下設定Port B的相關參數 以下只提到重點  實際寫法請自行揣摩
GPBCON = (0x50<<0)or(0x5<<4)  -> 設定為output
GPBUP  = (0x0<<0) or(0x00<<4) -> pull up enable
GPBDAT = (0xc<<0) or(0x3<<2)  
0xc = 1100  : 由於GPBUP 設定成pull-up 所以1是亮 
故上面這個就是讓R B都亮起來 
我的測試用驅動主要是要測試它是否有被掛載起來
所以至少讓它亮其中一個會比較好

接下來是CEPB的設定
開一個新的DLL專案之後 修改*.def *.reg
直接在專案名稱上按右鍵
Make Run-Time Image After Build 選取之後
再對其進行build 等他跑完後 記得修改ce.bib -> romimage ce.bib -> 燒錄kernel

沒意外的話 開機時就會看到綠燈以外的兩個燈亮了!!! (看怎麼設定的)
這篇先這樣 下一篇再來寫寫如何用App去控制亮暗

2008-04-22

其實 我只是....


其實 我只是.....



很單純地 很努力地在學大家
想和大夥一同歡笑
不過就目前的狀況看來 努力的方法有點問題

我不知道哪個環節出了問題
但是既然有人感到不滿 那一定我的方法有問題

所以 我決定從頭開始
繞了一大圈 還是回到原點 真是可笑

スーパーロボット大戦Z


一度以為OGs系列會是PS2上最後的機戰
就在上週 有雜誌放出PS2上的新機戰報導
スーパーロボット大戦Z !!!
真是有種讓人熱血沸騰的感動啊~~~~ XD

SRW Z Official Site

以下為參戰作品一覽

  ☆OVERMANキングゲイナー
     THEビッグオー
  ☆THEビッグオー 2nd SEASON
     無敵超人ザンボット3
     無敵鋼人ダイターン3
     戰鬥メカ ザブングル
     機動戰士Ζガンダム [劇場版]
     機動戰士ガンダム 逆襲のシャア
     機動新世紀ガンダムX
     ターンAガンダム
     機動戰士ガンダムSEED DESTINY
     マジンガーZ
     グレートマジンガー
     ゲッターロボG
     UFOロボ グレンダイザー
  ☆宇宙大帝ゴッドシグマ
  ☆創聖のアクエリオン
  ☆交響詩篇エウレカセブン
  ☆超時空世紀オーガス
  ☆宇宙戰士バルディオス
  ☆超重神グラヴィオン
  ☆超重神グラヴィオン・ツヴァイ
     ☆為新規參戰
  
哦哦 有種命剛  有死小孩可以殺了(驚)  還有DX+G-bit可以期待(打滾)
我全身都熱起來啦 哈哈哈

真希望有寺田有一天把エルドラン四部曲納入機戰中
我想看仁和拳一一同熱血地吶喊啊啊啊啊啊啊 

2008-04-21

EBOOT-Logo圖修改


這幾天 又陷入所謂的  不知所謂倦怠期
剛好看這CoAsia的圖看得很不順眼
向正哥請教一些eboot的修改經驗之後
就開始進行大鳥育成計畫

基本要點就是把想要放的圖檔轉成hex即可
再對程式進行一點小修改就好了

只要利用bmp2hex可以輕鬆地得到hex資料

LCD的size為 480x272
bppmode預設為16bpp

因為程式利用到的是memcpy這個func
如果不想動太多腦的話 基本上就是使用 480xN 的圖檔
這個N還不能太大 不然產生的eboot.bin就會爆掉(囧)

開始嘗試各種不用動腦的改法
480x272x16bpp --> 爆
480x25?x12bpp --> 沒這種bppmode可以選 硬幹會變成一隻綠綠鳥
480x272x8bpp  --> 應該可以 但是轉檔程式沒有8bpp-_-
240x  N x16bpp --> 用了很蠢的方法 不過圖太小
擴大eboot size   --> 被板子討厭 完全沒變大的跡象

320x240x16bpp --> 用蠢方法一定爆的  只好搏感情了

最後在一陣絕望與煩悶的亂改之下 成功了!!! 大鳥再現 +_+
現在改成天然呆巫女娘佐久夜(サクヤ)

=====================================================
DisplaySample_320_240.h裡的圖檔hex做陣列定義    
const UINT16    prayer16bpp[]
--->
const UINT16    prayer16bpp[240][320]

並對main.c做些微的修改
[Line 689]
for (a=0;a<240:a++)
{
memcpy((void *)(IMAGE_FRAMEBUFFER_UA_BASE + a * 480 * 2 + N),
               prayer16bpp[a], 320 * 2);
}
好像是因為這是在#define裡的程式
所以記得要在前面宣告全域變數 int a 不然你將會被PB討厭

基本精神就是每次取320x2bytes之後就換行
那個N是起始點基本位移量 就是決定要從哪一點開始繪圖
如果N=0的話 就是從左上角開始

對於320x240x16bpp的圖而言 如果想讓圖看起來在中間
N = 480*16*2+80*2 = 15520

上面動不動就有個惱人的 x2  這個應該是與16bpp有關 [4bytes = 2pixels]
少了這個 圖的樣子會完全跟你想的不一樣 XDD
=====================================================

不過 因為自己編出來的eboot在燒寫kernel時會有問題 但是launch卻是ok的
所以就索性把自己編的eboot.bin燒進去之後 再利用CoAisa給的eboot.nb0
來進行kernel的寫入作業

2008-04-14

近期ACG購物清單


唉.... 有些網頁真的是千萬別在沒錢的時候點下去
前幾天沒事就逛了一下日雅 台雅 和 ego官網
看著看著 腦中又想起那個被我遺忘好一陣子的
izumo系列=_=

花了一點時間整理了一下預計收復的東西
01. izumo 3 特別版 (希望是新品)
02. izumo 3 visual fans book
03. izumo 2 學園狂想曲 ダブルタクト 限定版 (突然又想買)
04. izumo 2 學園狂想曲 visual fans book
05. History of Izumo
--------------------------------------------
以上是izumo系列 / 全部發售中 XD
--------------------------------------------
06. PS2主機 SCPH-90007SS (我瘋了我)
07. 彩雲國物語 青嵐月草 / 五月預定
08. 犬神! 8 川平家最長的一日 / 五月預定
09. 銀盤萬花筒 vol.7 敘情詩花式滑冰:
      Be in love with your miracle
/ 五月預定
10. AHEAD Series 終焉的年代記 01 下 / 發售中
11. 英雄傳說 空之軌跡 Special Collection II
      ~the 3rd~ 編
/ 發售中
12. The King of Fighters `98 Ultimate Match / 六月預定

在此之前 似乎應該要先搞定畢業.....(抱頭亂竄)

2008-04-10

WinCE Driver心得


最近在研究wince的driver
原本是想利用工具書的基本框架和參考BSP內附程式碼
然後設計出一個可以簡單操作控制板子led的基本驅動程式
不過兩邊的語法不太一樣 囧 c vs c++ 我程式沒那麼強 so...

最後就直接拿I2C的程式來大改造了 (汗)

大概花了一個下午的時間把該改的東西改一改
很辛苦地把該改的東西都改完
也很心虛地把覺得可以刪的東西都刪光光了
然後 很緊張地準備接受震撼

失敗!!!! (淚奔)

很沮喪地de了一天的bug之後....發現到問題所在

我把driver的Prefix設為 GGG
但程式內的框架卻是用GIO_xxxx!!!! -_-"
難怪即使它已經在Builtin了 但是完全不理會我的debug訊息
因為它找不到GGG_xxxx 囧

至於小黑碰到的問題 似乎是因為要保護暫存器
所以要先把它mapping到別的地方再進行資料的存取
沒mapping的話就不會有動作