首页编程deviceiocontrol(求助使用DeviceIoControl控制摄像头属性)

deviceiocontrol(求助使用DeviceIoControl控制摄像头属性)

编程之家2023-11-02110次浏览

大家好,感谢邀请,今天来为大家分享一下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就明白了。至于摄像,没有做过。不过道理和拍照差不多吧。

deviceiocontrol(求助使用DeviceIoControl控制摄像头属性)

驱动的头文件有很多操作码,这个我之前已经看过,但不知道‘摄像’对应的是哪个操作码?:// 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*

deviceiocontrol(求助使用DeviceIoControl控制摄像头属性)

##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的内容能够给您带来一些新的认识和思考。如果您还有其他问题,欢迎继续探索我们的网站或者与我们交流,我们将尽力为您提供满意的答案。

百度联系方式(百度知道回答可以带联系方式吗)建网站公司(中国十大网站建设公司)