타겟보드에서 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)
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 카드 삽입
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;
}
}
출처: 인터넷 검색
