平台:s3c6410
我参考摄像头里面的代码,在驱动里面调用iic,可以正常读写。
可是在应用程序里面直接调用同样的代码,createfile没有问题,但是读写都不行。
DeviceIoControl返回TURE,但是读到字节数都为0.
难道iic驱动只能被其他驱动调用,而不能被应用程序调用吗?
------解决方案--------------------
如果有条件的话,使用示波器观察通讯信号,一般通讯程序出问题有五成是硬件或外部原因导致通讯信号异常造成的。
------解决方案--------------------
driver改一下這樣行不行
BOOL
IIC_IOControl(PHW_OPEN_INFO pOpenContext,
DWORD dwCode, PBYTE pBufIn,
DWORD dwLenIn, PBYTE pBufOut, DWORD dwLenOut,
PDWORD pdwActualOut)
{
BOOL RetVal = TRUE; // Initialize to success
PHW_INIT_INFO pInitContext;
IIC_IO_DESC IoDescIn;
IIC_IO_DESC IoDescOut;
PVOID pUnMarshalledInBuf = NULL;
PVOID pUnMarshalledOutBuf = NULL;
//if caller is not kernel mode, do not allow setting power state
if (GetDirectCallerProcessId() != GetCurrentProcessId()){
return ERROR_ACCESS_DENIED;
}
if (pOpenContext==NULL) {
SetLastError (ERROR_INVALID_HANDLE);
return(FALSE);
}
pInitContext = pOpenContext->pInitContext;
if ( pInitContext == NULL )
{
SetLastError (ERROR_INVALID_HANDLE);
return(FALSE);
}
DEBUGMSG (ZONE_FUNCTION,
(TEXT("+IIC_IOControl(0x%X, %d, 0x%X, %d, 0x%X, %d, 0x%X)\r\n"),
pOpenContext, dwCode, pBufIn, dwLenIn, pBufOut,
dwLenOut, pdwActualOut));
if ( !pInitContext->OpenCnt ) {
DEBUGMSG (ZONE_ERROR,
(TEXT(" IIC_IOControl - device was closed\r\n")));
SetLastError (ERROR_INVALID_HANDLE);
return(FALSE);
}
switch ( dwCode ) {
case IOCTL_POWER_CAPABILITIES:
if ( !pdwActualOut