⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lvhwuser.h

📁 相机传输图像程序源代码 拜耳模式(RAW格式文件)与RGB图像数据互相转换函数库
💻 H
字号:

#ifndef ___LVHWUSER_H
#define ___LVHWUSER_H

// Actual driver version
// #define _LVPPXVER_ 0x21E
#include <lvppxver.h>

//
// Define the maximum number of Pci controllers
// that this driver will support.
//
#define MAXIMUM_PCI_DEV_PER_MACHINE        128

#ifndef _NTDDK_
#ifndef __UNIX__
#include <devioctl.h>
#endif
#define PCI_TYPE0_ADDRESSES             6
#define PCI_TYPE1_ADDRESSES             2
#define PCI_TYPE2_ADDRESSES             5

typedef struct _PCI_COMMON_CONFIG {
    USHORT  VendorID;                   // (ro)
    USHORT  DeviceID;                   // (ro)
    USHORT  Command;                    // Device control
    USHORT  Status;
    UCHAR   RevisionID;                 // (ro)
    UCHAR   ProgIf;                     // (ro)
    UCHAR   SubClass;                   // (ro)
    UCHAR   BaseClass;                  // (ro)
    UCHAR   CacheLineSize;              // (ro+)
    UCHAR   LatencyTimer;               // (ro+)
    UCHAR   HeaderType;                 // (ro)
    UCHAR   BIST;                       // Built in self test
    union {
        struct _PCI_HEADER_TYPE_0 {
            ULONG   BaseAddresses[PCI_TYPE0_ADDRESSES];
            ULONG   CIS;
            USHORT  SubVendorID;
            USHORT  SubSystemID;
            ULONG   ROMBaseAddress;
            ULONG   Reserved2[2];

            UCHAR   InterruptLine;      //
            UCHAR   InterruptPin;       // (ro)
            UCHAR   MinimumGrant;       // (ro)
            UCHAR   MaximumLatency;     // (ro)
        } type0;

        struct _PCI_HEADER_TYPE_1 {
            ULONG   BaseAddresses[PCI_TYPE1_ADDRESSES];
            UCHAR   PrimaryBus;
            UCHAR   SecondaryBus;
            UCHAR   SubordinateBus;
            UCHAR   SecondaryLatency;
            UCHAR   IOBase;
            UCHAR   IOLimit;
            USHORT  SecondaryStatus;
            USHORT  MemoryBase;
            USHORT  MemoryLimit;
            USHORT  PrefetchBase;
            USHORT  PrefetchLimit;
            ULONG   PrefetchBaseUpper32;
            ULONG   PrefetchLimitUpper32;
            USHORT  IOBaseUpper16;
            USHORT  IOLimitUpper16;
            UCHAR   CapabilitiesPtr;
            UCHAR   Reserved1[3];
            ULONG   ROMBaseAddress;
            UCHAR   InterruptLine;
            UCHAR   InterruptPin;
            USHORT  BridgeControl;
        } type1;

        struct _PCI_HEADER_TYPE_2 {
            ULONG   SocketRegistersBaseAddress;
            UCHAR   CapabilitiesPtr;
            UCHAR   Reserved;
            USHORT  SecondaryStatus;
            UCHAR   PrimaryBus;
            UCHAR   SecondaryBus;
            UCHAR   SubordinateBus;
            UCHAR   SecondaryLatency;
            struct  {
                ULONG   Base;
                ULONG   Limit;
            }       Range[PCI_TYPE2_ADDRESSES-1];
            UCHAR   InterruptLine;
            UCHAR   InterruptPin;
            USHORT  BridgeControl;
        } type2;
    } u;

    UCHAR   DeviceSpecific[192];

} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;


typedef enum _INTERFACE_TYPE {
    If_InterfaceTypeUndefined = -1,
    If_Internal,
    If_Isa,
    If_Eisa,
    If_MicroChannel,
    If_TurboChannel,
    If_PCIBus,
    If_VMEBus,
    If_NuBus,
    If_PCMCIABus,
    If_CBus,
    If_MPIBus,
    If_MPSABus,
    If_ProcessorInternal,
    If_InternalPowerBus,
    If_PNPISABus,
    If_PNPBus,
    If_MaximumInterfaceType
}INTERFACE_TYPE, *PINTERFACE_TYPE;

typedef struct _PHYSICAL_ADDRESS {
    ULONG Lo;
    LONG Hi;
    } PHYSICAL_ADDRESS;


#endif

#ifdef _MSC_VER
#pragma pack(1)
#endif

typedef struct _tagLvHwPciInfo {
    ULONG BusNumber;
    ULONG DevNumber;
    ULONG FnNumber;
    PCI_COMMON_CONFIG PciCfg;
    UCHAR DeviceName[21];
    } LvHwPciInfo, *PLvHwPciInfo;

typedef struct _tagLvHwAllPciInfo {
    UCHAR NrPciDevice;
    LvHwPciInfo PciDevice[MAXIMUM_PCI_DEV_PER_MACHINE];
    } LvHwAllPciInfo, *PLvHwAllPciInfo;


// 33222222 22221111 11111100 00000000
// 10987654 32109876 54321098 76543210
// -----------------------------------
// uuuuuuuu uuuuuuuu uuuuuuSS RMXuPPPP
//
// u = unused
// P = protocol
// R = Read/write flag
// M = mask flag
// X = stop flag
// S = data size

// Flags
#define LvHw_Read   0x00
#define LvHw_Write  0x80

#define LvHw_Mask   0x40
#define LvHw_Stop   0x20

// Protocol
#define LvHw_Direct 0x00
#define LvHw_I2C    0x01
#define LvHw_Debi   0x02
#define LvHw_LCA    0x03
#define LvHw_ICS    0x04
#define LvHw_BNPar  0x05
#define LvHw_BNSer  0x06
#define LvHw_JTag   0x07

// Data size
#define LvHw_8Bit    0x000
#define LvHw_16Bit   0x100
#define LvHw_32Bit   0x200

// Field Mask definition
#define LvHw_SizeMask     0x300
#define LvHw_ProtocolMask 0x0f

#define _DefaultCPUBufferSize 32

typedef struct _tagLvHwScriptItem {
    ULONG  Access;
    ULONG  Address;
    ULONG  Value;
    ULONG  Mask;
    } LvHwScriptItem;

typedef struct _tagLvHwSetCounter {
    UCHAR WhichCounter;
    UCHAR CounterId;
    } LvHwSetCounter, *PLvHwSetCounter;


typedef struct _tagLvHwLMKParam {
    USHORT BmpLine;
    USHORT LmkLine;
    USHORT Height;
    USHORT Invert;
    } LvHwLMKParam;


typedef struct _tagPrvMemInfo {
    INTERFACE_TYPE   InterfaceType; // Isa, Eisa, etc....
    ULONG            BusNumber;     // Bus number
    PHYSICAL_ADDRESS BusAddress;    // Bus-relative address
    ULONG            AddressSpace;  // 0 is memory, 1 is I/O
    ULONG            Length;        // Length of section to map
    } PrvMemInfo;

// PrvSync definitions

#define LvHw_SyncT_Fld0     0x010
#define LvHw_SyncT_Fld1     0x020
#define LvHw_SyncT_Any      0x000

#define LvHw_SyncCmd_Live   0x100
#define LvHw_SyncCmd_Freeze 0x200
#define LvHw_SyncCmd_None   0x000


typedef struct _tagLvIntQueueData {
    ULONG  Irq[4];
    ULONG  TimeStamp[2];
    USHORT DmaIdx[16];
    ULONG  Reserved[2];
    } LvIntQueueData;


#ifdef _MSC_VER
#pragma pack()
#endif

#ifndef __UNIX__
// device type - we are a multimedia device, so for now we will be a sound device
#define DD_TYPE_LVHW    FILE_DEVICE_SOUND

// base for IOCTL requests - just above the sound requests
#define IOCTL_LVHW_BASE	0x300

// Ioctl set

//--- configuration ------

// Sets size, format of captured data. <IN CONFIG_INFO>
// #define IOCTL_LVHW_CONFIG_FORMAT	CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Set up source video (NTSC/PAL, source...)  <IN CONFIG_INFO>
// #define IOCTL_LVHW_CONFIG_SOURCE	CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x2, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Set up live display config.		<IN CONFIG_INFO>
// #define IOCTL_LVHW_CONFIG_DISPLAY	CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x3, METHOD_BUFFERED, FILE_ANY_ACCESS)



// Get Pci info.    <OUT LvHwAllPciInfo>
#define IOCTL_LVHW_PCI_INFO     CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Run script.    <IN OUT LvHwScriptItem[]>
#define IOCTL_LVHW_SCRIPT       CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x2, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get Perf data.    <IN OUT ULONG[]>
#define IOCTL_LVHW_GETPERFDATA  CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x3, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Set counter.    <IN OUT ULONG[]>
#define IOCTL_LVHW_SETCOUNTER  CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x4, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get LMK Page.    <OUT ULONG>
#define IOCTL_LVHW_GETLMKPAGE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x5, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Set LMK Param < IN LvHwLMKParam >
#define IOCTL_LVHW_SETLMKPARAM CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x6, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Update lock mask < IN Bmp buffer >  NOTE: Use output!!!
#define IOCTL_LVHW_UPDATELMK CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x7, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

// Disable lock mask <  >
#define IOCTL_LVHW_DISABLELMK CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x8, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get CPU Page.    <OUT ULONG>
#define IOCTL_LVHW_GETCPUPAGE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x9, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Update CPU Page < IN CPU buffer >  NOTE: Use output!!!
#define IOCTL_LVHW_UPDATECPUPAGE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xa, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

// Lock user buffer < IN CPU buffer >  NOTE: Use output!!!
#define IOCTL_LVHW_LOCKBUFFER CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xb, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

// Unlock user buffer < IN CPU buffer >  NOTE: Use output!!!
#define IOCTL_LVHW_UNLOCKBUFFER CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xc, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

// Get RPS Page.    <OUT ULONG>
#define IOCTL_LVHW_GETRPSPAGE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xd, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Copy Rps code.    <IN ULONG[]>
#define IOCTL_LVHW_SETRPSCODE  CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xe, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get Last int mask.    <OUT ULONG[4] -> 0=ISR 1=PSR 2=SSR 3=IER>
#define IOCTL_LVHW_GETLASTINT CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0xf, METHOD_BUFFERED, FILE_ANY_ACCESS)

#define IOCTL_LVHW_SETINTEVENT CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x10, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Poke Rps code.    <IN ULONG[2] 0=Offset 1=Value>
#define IOCTL_LVHW_POKERPSCODE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x11, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get Physical Address of the input buffer.    <IN OUT ULONG[2]> 0=InLinear 1=OutPhysical
#define IOCTL_LVHW_GETPHYSICALADDRESS CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x12, METHOD_BUFFERED, FILE_ANY_ACCESS)

// #define _LVPPXVER_ 0x150
// Report status data.  <IN OUT ULONG[Nr]>
#define IOCTL_LVHW_REPORTSTATUS CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x13, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Dump Rps code. <IN OUT ULONG[]>
#define IOCTL_LVHW_DUMPRPSCODE  CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x14, METHOD_BUFFERED, FILE_ANY_ACCESS)

// #define _LVPPXVER_ 0x15A
// Get CPU Size.    <OUT ULONG>
#define IOCTL_LVHW_GETCPUSIZE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x15, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Get RPS Size.    <OUT ULONG>
#define IOCTL_LVHW_GETRPSSIZE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x16, METHOD_BUFFERED, FILE_ANY_ACCESS)

// Lock user buffer and update CPU page < IN CPU buffer >  NOTE: Use output!!!
#define IOCTL_LVHW_LOCKBUFFERUPDATE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x17, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)

// #define _LVPPXVER_ 0x15B
// #define _LVPPXVER_ 0x160
// #define _LVPPXVER_ 0x200

// Map io/mem to user space < IN PrvMemInfo > < Out ptr >
#define IOCTL_LVHW_MAPIOMEM CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x18, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_LVHW_PRVIO CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x19, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Wait video sync < IN ULONG > < OUT ULONG Timeout >
#define IOCTL_LVHW_PRVSYNC CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1a, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Peek Rps code.    <IN ULONG Offset OUT ULONG Value>
#define IOCTL_LVHW_PEEKRPSCODE CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1b, METHOD_BUFFERED, FILE_ANY_ACCESS)

// #define _LVPPXVER_ 0x210
#define IOCTL_LVHW_WAITINT CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1c, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Map io/mem to user space < IN ptr >
#define IOCTL_LVHW_UNMAPIOMEM CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1d, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Get IrQ page ptr < OUT ULONG ptr >
#define IOCTL_LVHW_GETIRQPAGEPTR CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1e, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Reset RS232 fifo < IN ULONG >
#define IOCTL_LVHW_SER_RESET CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x1f, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Get RS232 chars < OUT UCHAR ptr >
#define IOCTL_LVHW_SER_GETCHARS CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x20, METHOD_BUFFERED, FILE_ANY_ACCESS)
// Send RS232 chars < IN UCHAR ptr >
#define IOCTL_LVHW_SER_SENDCHARS CTL_CODE(DD_TYPE_LVHW, IOCTL_LVHW_BASE+0x21, METHOD_BUFFERED, FILE_ANY_ACCESS)
#endif // ndef __UNIX__
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -