사양 설정을 H/W switch로 해두고, Driver를 만들까 하다가 쉬운 방법을 찾았습니다.
조금 응용하면, Application에서 간단하게 GPIO control하기 쉽습니다.
#include "Pkfuncs.h"
/****************************************/
/* Extract from "mes_cfg.h" */
/****************************************/
#define IOCTL_HAL_MES_GPIO CTL_CODE(FILE_DEVICE_HAL, 4071, METHOD_NEITHER, FILE_ANY_ACCESS)
/****************************************/
/* Extract from "mes_ioctl.h" */
/****************************************/
typedef struct kk {
DWORD cmd;
DWORD arg[16];
} MESIOControl;
#define MES_IOCTL_GPIO_SetOutputValue 0x05
#define MES_IOCTL_GPIO_SetOutputValueBit 0x06
#define MES_IOCTL_GPIO_GetInputValue 0x07
#define MES_IOCTL_GPIO_GetInputValueBit 0x08
extern "C" BYTE Get_DipSW(void)
{
MESIOControl InArg, OutArg;
BYTE cDipSw;
InArg.cmd = MES_IOCTL_GPIO_GetInputValue;
InArg.arg[0]= 2; //PORT C
KernelIoControl(IOCTL_HAL_MES_GPIO,
&InArg, sizeof(InArg),
&OutArg, sizeof(OutArg), NULL);
cDipSw = (BYTE)(OutArg.arg[0] >> 24) & 0x0f;
WCHAR szTemp[1024] = L"";
wsprintf(szTemp, L"nDipSw %02x",cDipSw );
OutputDebugString(szTemp);
return cDipSw;
}