티스토리 툴바


Windows CE2010/08/25 13:38

타겟보드에서 SD 카드 모듈의 삽입/제거 를 제어하기 위한 코드.
SD 카드를 이용한 응용 프로그램에 사용가능하다.


1. 선언부
//디바이스 제어를 위한 define 및 structure 선언
/*
* BroadcastSpecialMessage constants.
*/
#define WM_DEVICECHANGE                 0x0219
/*
* The following messages are for WM_DEVICECHANGE. The immediate list
* is for the wParam. ALL THESE MESSAGES PASS A POINTER TO A STRUCT
* STARTING WITH A DWORD SIZE AND HAVING NO POINTER IN THE STRUCT.
*/
#define DBT_DEVICEARRIVAL               0x8000  // system detected a new device
#define DBT_DEVICEREMOVECOMPLETE        0x8004  // device is gone
#define DBT_DEVTYP_PORT                 0x00000003  // serial, parallel
/*
* Device broadcast header
*/
struct _DEV_BROADCAST_HDR {     /* */
             DWORD       dbch_size;
             DWORD       dbch_devicetype;
             DWORD       dbch_reserved;
};
typedef struct  _DEV_BROADCAST_HDR      DEV_BROADCAST_HDR;
typedef         DEV_BROADCAST_HDR       *PDEV_BROADCAST_HDR;


2. 메시지 맵 추가
BEGIN_MESSAGE_MAP(CHCM_STATEDlg, CDialog)
  ON_MESSAGE(WM_DEVICECHANGE, &xxx::OnDeviceChange)
END_MESSAGE_MAP()

3. 메시지 함수
LRESULT xxx::OnDeviceChange(WPARAM  wParam , LPARAM lParam)
{
 PDEV_BROADCAST_HDR lpdb;
     switch(wParam) //device-change event
     {
     case DBT_DEVICEARRIVAL:
                   lpdb = (PDEV_BROADCAST_HDR) lParam;
                   if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT)
                   {
                       // SD 카드 삽입
           RETAILMSG(DBG_STATE, (_T("[HCS: SD Insert]\r\n")));
                   }
                   break;
     case DBT_DEVICEREMOVECOMPLETE:
                   lpdb = (PDEV_BROADCAST_HDR) lParam;
                   if (lpdb->dbch_devicetype == DBT_DEVTYP_PORT)
                   {
                       // SD 카드 제거
                       RETAILMSG(DBG_STATE, (_T("[HCS: SD Remove]\r\n")));
                   }
                   break;
     }
 return 0;
}

출처: 인터넷 검색


저작자 표시 비영리
Posted by 레드비
Windows CE2010/08/24 20:31


S/W 업데이트를 위한 디렉토리 복사 함수

BOOL XCopy(TCHAR *src, TCHAR *dest)
{
 HANDLE hSearch = NULL;
 WIN32_FIND_DATA wfd;

 BOOL bResult = TRUE;
 TCHAR wsrc[MAX_PATH]={0};
 TCHAR csrc[MAX_PATH]={0};
 TCHAR cdest[MAX_PATH]={0};
 
 if (CreateDirectory(dest, NULL) == FALSE) {
  RETAILMSG(1, (_T("[Warning]CreateDirectoryA\r\n")));
  return FALSE;
 }
 wsprintf(wsrc, _T("%s\\*.*"), src);
 hSearch = FindFirstFile(wsrc, &wfd);
 if (hSearch == INVALID_HANDLE_VALUE) {
  RETAILMSG(1, (_T("[Warning]FindFirstFileA\r\n")));
  return FALSE;
 }

 while (bResult)
 {
  wsprintf(csrc, _T("%s\\%s"), src, wfd.cFileName);
  wsprintf(cdest, _T("%s\\%s"), dest, wfd.cFileName);

  if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
  {
   if (wcscmp(wfd.cFileName, _T(".")) && wcscmp(wfd.cFileName, _T("..")))
   {
    RETAILMSG(1, (_T("[Directory]: %s\r\n"), wfd.cFileName));
    XCopy(csrc, cdest); // 재귀호출
   }
  }else
  {
   RETAILMSG(1, (_T("[File]: %s csrc:%s, cdest:%s\r\n"), wfd.cFileName, csrc, cdest));
   CopyFile(csrc, cdest, FALSE);
  }

  bResult = FindNextFile(hSearch, &wfd);
 }

 FindClose(hSearch);

 return TRUE;
}

출처: 인터넷 검색, WinCE 포팅(UNICODE)

Posted by 레드비