deviceiocontrol(求助使用DeviceIoControl控制摄像头属性)
大家好,感谢邀请,今天来为大家分享一下deviceiocontrol的问题,以及和求助使用DeviceIoControl控制摄像头属性的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!
求助使用DeviceIoControl控制摄像头属性
2440的开发板,编过摄像头的应用程序,就用DeviceIoControl函数对摄像头进行操作。记得IOCTL_CAM_CONT这个操作码是使能并初始化摄像头,CAM_IOCTL_GET_LATEST_FRAME这个是拍照,现在想问一下对于视频摄像,应该用哪个操作码?(想到一个很笨的方法就是不断循环拍照)谢谢
等下,为什么操作摄像头需要DEVICEIIOCONTROL?
自己实现想怎么整就怎么整!
我装了camera的驱动,里面提供了一些接口函数,如CIS_IOControl,可通过填入相应的操作码对摄像头进行控制。而DEVICEIIOCONTROL是应用层的接口函数,调用驱动函数CIS_IOControl实现对摄像头控制。所以需要DEVICEIIOCONTROL。不然的话应该怎样做呢?现在要在wince5.0下完成摄像功能,请高手指点一下,谢谢了。
你自己具体的看看头文件中的定义啊。。这些IO_code应该已经在头文件中定义好了的。。呵呵以我看应该是一个什么capture就是开始捕获图像了。
其实应用只是负责发送个命令给驱动而已,所有动作都在驱动完成,楼主仔细看看CIS_IOControl就明白了。至于摄像,没有做过。不过道理和拍照差不多吧。
驱动的头文件有很多操作码,这个我之前已经看过,但不知道‘摄像’对应的是哪个操作码?:// play#define IOCTL_CAM_CONT CTL_CODE( FILE_DEVICE_VIDEO, 4, METHOD_NEITHER,FILE_ANY_ACCESS)// stop#define IOCTL_CAM_STOP CTL_CODE( FILE_DEVICE_VIDEO, 5, METHOD_NEITHER,FILE_ANY_ACCESS)// Camera V-Sync Interrupt Handler Enable#define IOCTL_CAM_ENVINT CTL_CODE( FILE_DEVICE_VIDEO, 24, METHOD_NEITHER,FILE_ANY_ACCESS)// Camera V-Sync Interrupt Handler Disable#define IOCTL_CAM_DISVINT CTL_CODE( FILE_DEVICE_VIDEO, 25, METHOD_NEITHER,FILE_ANY_ACCESS)// copy camera image to pBufOut(RGB565 format)// dwLenIn= 0: top-down image// dwLenIn= 1: bottom-up image#define IOCTL_CAM_COPY CTL_CODE( FILE_DEVICE_VIDEO, 6, METHOD_OUT_DIRECT,FILE_ANY_ACCESS)…………………………………………还有:#define CAM_IOCTL_GETJPEG 0x500#define CAM_IOCTL_PRV_SETSIZE 0x501#define CAM_IOCTL_PREVIEW_ON 0x502#define CAM_IOCTL_PREVIEW_OFF 0x503#define CAM_IOCTL_PRV_POSITION 0x504#define CAM_IOCTL_ZOOM_ON 0x505#define CAM_IOCTL_ZOOM_OFF 0x506#define CAM_IOCTL_Y_FLIP 0x507#define CAM_IOCTL_X_FLIP 0x508#define CAM_IOCTL_MOVIE_START 0x509#define CAM_IOCTL_MOVIE_STOP 0x50A#define CAM_IOCTL_GET_LATEST_FRAME 0x50B#define CAM_IOCTL_POWER_RESUME 0x50C#define CAM_IOCTL_SET_SENSOR 0x510#define CAM_IOCTL_GET_SENSOR 0x511#define CAM_IOCTL_LM_PREVIEW 0x514#define CAM_IOCTL_SAMSUNG_CAM 0x520#define CAM_IOCTL_IMAGE_SIZE 0x521#define CAM_IOCTL_SAMSUNG_CAM_PR 0x522#define CAM_IOCTL_SAMSUNG_PREVIEW_START 0x523#define CAM_IOCTL_SAMSUNG_PREVIEW_STOP 0x524(列了其中的部分内容)
各位大哥,哪里能找到camera的驱动?学习一下
引用 7楼 guopeixin的回复:各位大哥,哪里能找到camera的驱动?学习一下网上都能找到,找不到的话留下邮箱我发给你吧。大家共同学习一下。
引用 6楼 larryk的回复:驱动的头文件有很多操作码,这个我之前已经看过,但不知道‘摄像’对应的是哪个操作码?:// play#define IOCTL_CAM_CONT CTL_CODE( FILE_DEVICE_VIDEO, 4, METHOD_NEITHER,FILE_ANY_ACCESS)// stop#define IOCTL_CAM_STOP CTL_CODE( FILE_DEVICE_VIDEO, 5, METHOD_NEITHER,FILE_ANY_ACCESS)// Camera V-Sync Interrupt Handler Enable
请教python中调用DeviceIoControl的一个问题
代码如下
##from winioctlcon import*
##from win32file import*
from ctypes import*
from ctypes.wintypes import*
import win32api
import win32file
import winioctlcon
import win32con
IDE_ATA_IDENTIFY= 0xEC
DFP_SEND_DRIVE_COMMAND= 0x0007c084
class _IDEREGS(Structure):
_fields_=[
("bFeaturesReg",BYTE),##特征寄存器(用于SMART命令)
("bSectorCountReg",BYTE),##扇区数目寄存器
("bSectorNumberReg",BYTE),##开始扇区寄存器
("bCylLowReg",BYTE),##开始柱面低字节寄存器
("bCylHighReg",BYTE),##开始柱面高字节寄存器
("bDriveHeadReg",BYTE),##驱动器/磁头寄存器
("bCommandReg",BYTE),##指令寄存器
("bReserved",BYTE),##保留
]
IDEREGS= _IDEREGS#*PIDEREGS,*LPIDEREGS;
##从驱动程序返回的状态
class _DRIVERSTATUS(Structure):
_fields_=[
("bDriverError",BYTE),##错误码
("bIDEStatus",BYTE),## IDE状态寄存器
("bReserved",BYTE*2),##保留
("dwReserved",DWORD*2),##保留
]
DRIVERSTATUS=_DRIVERSTATUS#*PDRIVERSTATUS,*LPDRIVERSTATUS;
## IDE设备IOCTL输入数据结构
class _SENDCMDINPARAMS(Structure):
_fields_=[
("cBufferSize",DWORD),##缓冲区字节数
("irDriveRegs",IDEREGS),## IDE寄存器组
("bDriveNumber",BYTE),##驱动器号
("bReserved",BYTE*3),##保留
("dwReserved",DWORD*4),##保留
("bBuffer[1]",BYTE),##输入缓冲区(此处象征性地包含1字节)
]
SENDCMDINPARAMS=_SENDCMDINPARAMS#*PSENDCMDINPARAMS,*LPSENDCMDINPARAMS;
## IDE设备IOCTL输出数据结构
class _SENDCMDOUTPARAMS(Structure):
_fields_=[
("cBufferSize",DWORD),##缓冲区字节数
("DriverStatus",DRIVERSTATUS),##驱动程序返回状态
("bBuffer[1]",BYTE),##输入缓冲区(此处象征性地包含1字节)
]
SENDCMDOUTPARAMS= _SENDCMDOUTPARAMS#*PSENDCMDOUTPARAMS,*LPSENDCMDOUTPARAMS;
## IDE的ID命令返回的数据
##共512字节(256个WORD),这里仅定义了一些感兴趣的项(基本上依据ATA/ATAPI-4)
USHORT= c_ushort
CHAR= c_char
ULONG= c_ulong
UCHAR= c_ubyte
class Capabilities(Structure):## WORD 49:一般能力
_fields_=[
("reserved1:8",USHORT),
("DMA:1",USHORT),## 1=支持DMA
("LBA:1",USHORT),## 1=支持LBA
("DisIORDY:1",USHORT),## 1=可不使用IORDY
("IORDY:1",USHORT),## 1=支持IORDY
("SoftReset:1",USHORT),## 1=需要ATA软启动
("Overlap:1",USHORT),## 1=支持重叠操作
("Queue:1",USHORT),## 1=支持命令队列
("InlDMA:1",USHORT),## 1=支持交叉存取DMA
]
class FieldValidity(Structure):## WORD 53:后续字段有效性标志
_fields_=[
("CHSNumber:1",USHORT),## 1=WORD 54-58有效
("CycleNumber:1",USHORT),## 1=WORD 64-70有效
("UnltraDMA:1",USHORT),## 1=WORD 88有效
("reserved:13",USHORT),
]
class MultSectorStuff(Structure):## WORD 59:多扇区读写设定
_fields_=[
("CurNumber:8",USHORT),##当前一次性可读写扇区数
("Multi:1",USHORT),## 1=已选择多扇区读写
("reserved1:7",USHORT),
]
class MultiWordDMA(Structure):## WORD 63:多字节DMA支持能力
_fields_=[
("Mode0:1",USHORT),## 1=支持模式0(4.17Mb/s)
("Mode1:1",USHORT),## 1=支持模式1(13.3Mb/s)
("Mode2:1",USHORT),## 1=支持模式2(16.7Mb/s)
("Reserved1:5",USHORT),
("Mode0Sel:1",USHORT),## 1=已选择模式0
("Mode1Sel:1",USHORT),## 1=已选择模式1
("Mode2Sel:1",USHORT),## 1=已选择模式2
("Reserved2:5",USHORT),
]
class PIOCapacity(Structure):## WORD 64:高级PIO支持能力
_fields_=[
("AdvPOIModes:8",USHORT),##支持高级POI模式数
("reserved:8",USHORT),
]class MajorVersion(Structure):## WORD 80:主版本
_fields_=[
("Reserved1:1",USHORT),
("ATA1:1",USHORT),## 1=支持ATA-1
("ATA2:1",USHORT),## 1=支持ATA-2
("ATA3:1",USHORT),## 1=支持ATA-3
("ATA4:1",USHORT),## 1=支持ATA/ATAPI-4
("ATA5:1",USHORT),## 1=支持ATA/ATAPI-5
("ATA6:1",USHORT),## 1=支持ATA/ATAPI-6
("ATA7:1",USHORT),## 1=支持ATA/ATAPI-7
("ATA8:1",USHORT),## 1=支持ATA/ATAPI-8
("ATA9:1",USHORT),## 1=支持ATA/ATAPI-9
("ATA10:1",USHORT),## 1=支持ATA/ATAPI-10
("ATA11:1",USHORT),## 1=支持ATA/ATAPI-11
("ATA12:1",USHORT),## 1=支持ATA/ATAPI-12
("ATA13:1",USHORT),## 1=支持ATA/ATAPI-13
("ATA14:1",USHORT),## 1=支持ATA/ATAPI-14
("Reserved2:1",USHORT),
]
class UltraDMA(Structure):## WORD 88: Ultra DMA支持能力
_fields_=[
("Mode0:1",USHORT),## 1=支持模式0(16.7Mb/s)
("Mode1:1",USHORT),## 1=支持模式1(25Mb/s)
("Mode2:1",USHORT),## 1=支持模式2(33Mb/s)
("Mode3:1",USHORT),## 1=支持模式3(44Mb/s)
("Mode4:1",USHORT),## 1=支持模式4(66Mb/s)
("Mode5:1",USHORT),## 1=支持模式5(100Mb/s)
("Mode6:1",USHORT),## 1=支持模式6(133Mb/s)
("Mode7:1",USHORT),## 1=支持模式7(166Mb/s)???
("Mode0Sel:1",USHORT),## 1=已选择模式0
("Mode1Sel:1",USHORT),## 1=已选择模式1
("Mode2Sel:1",USHORT),## 1=已选择模式2
("Mode3Sel:1",USHORT),## 1=已选择模式3
("Mode4Sel:1",USHORT),## 1=已选择模式4
("Mode5Sel:1",USHORT),## 1=已选择模式5
("Mode6Sel:1",USHORT),## 1=已选择模式6
("Mode7Sel:1",USHORT),## 1=已选择模式7
]
class _IDINFO(Structure):
_fields_=[
("wGenConfig",USHORT),## WORD 0:基本信息字
("wNumCyls",USHORT),## WORD 1:柱面数
("wReserved2",USHORT),## WORD 2:保留
("wNumHeads",USHORT),## WORD 3:磁头数
("wReserved4",USHORT),## WORD 4:保留
("wReserved5",USHORT),## WORD 5:保留
("wNumSectorsPerTrack",USHORT),## WORD 6:每磁道扇区数
("wVendorUnique",USHORT*3),## WORD 7-9:厂家设定值
("sSerialNumber",CHAR*20),## WORD 20:缓冲类型
("wBufferSize",USHORT),## WORD 21:缓冲大小
("wECCSize",USHORT),## WORD 22: ECC校验大小
("sFirmwareRev",CHAR*8),## WORD 23-26:固件版本
("sModelNumber",CHAR*40),## WORD 27-46:内部型号
("wMoreVendorUnique",USHORT),## WORD 47:厂家设定值
("wReserved48",USHORT),## WORD 48:保留
("wCapabilities",Capabilities),
("wReserved1",USHORT),## WORD 50:保留
("wPIOTiming",USHORT),## WORD 51: PIO时序
("wDMATiming",USHORT),## WORD 52: DMA时序
("wFieldValidity",FieldValidity),
("wNumCurCyls",USHORT),## WORD 54: CHS可寻址的柱面数
("wNumCurHeads",USHORT),## WORD 55: CHS可寻址的磁头数
("wNumCurSectorsPerTrack",USHORT),## WORD 56: CHS可寻址每磁道扇区数
("wCurSectorsLow",USHORT),## WORD 57: CHS可寻址的扇区数低位字
("wCurSectorsHigh",USHORT),## WORD 58: CHS可寻址的扇区数高位字
("wMultSectorStuff",MultSectorStuff),
("dwTotalSectors",ULONG),## WORD 60-61: LBA可寻址的扇区数
("wSingleWordDMA",USHORT),## WORD 62:单字节DMA支持能力
("wMultiWordDMA",MultiWordDMA),
("wPIOCapacity",PIOCapacity),
("wMinMultiWordDMACycle",USHORT),## WORD 65:多字节DMA传输周期的最小值
("wRecMultiWordDMACycle",USHORT),## WORD 66:多字节DMA传输周期的建议值
("wMinPIONoFlowCycle",USHORT),## WORD 67:无流控制时PIO传输周期的最小值
("wMinPOIFlowCycle",USHORT),## WORD 68:有流控制时PIO传输周期的最小值
("wReserved69[11]",USHORT),## WORD 69-79:保留
("wMajorVersion",MajorVersion),
("wMinorVersion",USHORT),## WORD 81:副版本
("wReserved82",USHORT*6),## WORD 82-87:保留
("wUltraDMA",UltraDMA),
("wReserved89",USHORT*167)# WORD 89-255
]
IDINFO= _IDINFO#*PIDINFO;
hDisk= win32file.CreateFile('\\\\.\\PhysicalDrive0',
win32file.GENERIC_READ| win32file.GENERIC_WRITE,
win32file.FILE_SHARE_READ|win32file.FILE_SHARE_WRITE,
None,
win32file.OPEN_EXISTING,
0,
None)
print(hDisk)
pSCIP=SENDCMDINPARAMS()
pSCOP=SENDCMDOUTPARAMS()
#print(pSCIP)
pSCIP.irDriveRegs.bCommandReg= IDE_ATA_IDENTIFY
#print(pSCIP.irDriveRegs.bCommandReg)
pSCIP.cBufferSize= 0
#pSCIP=create_string_buffer(pSCIP)
pSCOP.cBufferSize=sizeof(IDINFO)
Total=pSCOP.cBufferSize+ sizeof(pSCOP)
#print(pSCIP.irDriveRegs.bCommandReg)
#print(pSCIP)
#print(pSCOP)
#print(Total)
##IOCTL_DISK_GET_DRIVE_GEOMETRY=0x0007c084
##IOCTL_DISK_GET_MEDIA_TYPES= 0x70c00
info= win32file.DeviceIoControl(hDisk,
DFP_SEND_DRIVE_COMMAND,
pSCIP,
Total,#sizeof(SENDCMDOUTPARAMS)+ sizeof(IDINFO)- 1,
None)
print(info)
win32file.CloseHandle(hDisk)
帮忙转换为易语言(API DeviceIoControl)
.DLL命令 hmemcpy,,"kernel32","hmemcpy",
.参数 dst,整数型,,
.参数 src,整数型,,
.参数 bytecount,整数型,,
.DLL命令 DeviceIoControl,整数型,"kernel32","DeviceIoControl",对设备执行指定的操作非零表示成功,零表示失败。会设置GetLastError
.参数 hDevice,整数型,,设备句柄
.参数 dwIoControlCode,整数型,,带有 FSCTL_前缀的常数。参考设备控制选项的部分列表
.参数 lpInBuffer,整数型,,具体取决于dwIoControlCode参数。参考设备控制选项的部分列表
.参数 nInBufferSize,整数型,,输入缓冲区的长度
.参数 lpOutBuffer,整数型,,具体取决于dwIoControlCode参数。参考设备控制选项的部分列表
.参数 nOutBufferSize,整数型,,输出缓冲区的长度
.参数 lpBytesReturned,整数型,,实际装载到输出缓冲区的字节数量
.参数 lpOverlapped, OVERLAPPED,, OVERLAPPED,这个结构用于重叠操作。针对同步操作,请用ByVal As Long传递零值;
.数据类型 OVERLAPPED,重叠操作;
.成员 Internal,整数型,,,
.成员 InternalHigh,整数型,,,
.成员 offset,整数型,,,
.成员 OffsetHigh,整数型,,,
.成员 hEvent,整数型,,,
文章分享到这里,希望我们关于deviceiocontrol的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。