##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來控制紅藍燈了
我讓紅燈亮啦 我讓藍燈亮啦 我讓他們全滅啦 我又讓他們亮起來啦
打我啊笨蛋 (冷.....-_-)

沒有留言: