case IOCTL_I2C_WRITE:
if ( (dwLenIn < sizeof(I2C_IO_DESC)) || !pBufIn || !((PI2C_IO_DESC)pBufIn)->Data) {
dwErr = ERROR_INVALID_PARAMETER;
bRc = FALSE;
break;
}
puc = (PUCHAR)MapPtrToProcess(((PI2C_IO_DESC)pBufIn)->Data, pI2C->hProc ); {
//中断中不能访问puc,故用临时变量ptemp
DWORD size = ((PI2C_IO_DESC)pBufIn)->Count;
LPVOID ptemp = NULL;
if(size)
{
ptemp = malloc(size);
memcpy(ptemp,puc,size);
}
dwErr = HW_Write(pI2C,
((PI2C_IO_DESC)pBufIn)->SlaveAddr,
((PI2C_IO_DESC)pBufIn)->WordAddr,
ptemp,
size);
if(ptemp)
{
free(ptemp);
}
}
UnMapPtr(puc);
if ( ERROR_SUCCESS == dwErr ) {
if (pdwActualOut)
*pdwActualOut = ((PI2C_IO_DESC)pBufIn)->Count;
} else
bRc = FALSE;
break;
上面代码是PB包wince6.0中的IIC驱动。其中的“puc = (PUCHAR)MapPtrToProcess(((PI2C_IO_DESC)pBufIn)->Data, pI2C->hProc );”这句代码中的函数MapPtrToProcess貌似在wince6.0中不被支持。那wince6.0中要实现结构体中指针的传递,该如何??
注:pBufIn是传递给xxx_IOControl()函数的的结构体指针。
谢谢! |