ssdefs.h

来自「用于查询PC机上的USB端口是否有设备挂接上」· C头文件 代码 · 共 509 行 · 第 1/2 页

H
509
字号
#define DMA_CHAN12              0xc0    //Get/SetSocket
#define DMA_CHAN13              0xd0    //Get/SetSocket
#define DMA_CHAN14              0xe0    //Get/SetSocket
#define DMA_CHAN15              0xf0    //Get/SetSocket

//Speed bits
#define SPEED_SIGN              0x80
#define SPEED_MANTISSA          0x78
#define SPEED_EXPONENT          0x07

//Socket bits
#define SKT_NUMMASK		0x0f
#define SKT_WIDTH16		0x00
#define SKT_WIDTH32		0x10

//Misc. Constants
#define EFLAGS_CARRY    0x00000001
#define EFLAGS_IF       0x00000200
#define NUM_PWR_ENTRIES	4
#define NUM_IF_ENTRIES	1

//Custom Interface index
#define IFID_ZV		0x00000141

/*** Type and Structure Definitions
 */

/*XLATOFF*/
typedef BYTE  ADP;
typedef WORD  BASE16;
typedef DWORD BASE32;
typedef WORD  BCD;
typedef BYTE  COUNT;
typedef BYTE  EDC;
typedef BYTE  FLAGS8;
typedef WORD  FLAGS16;
typedef DWORD FLAGS32;
typedef BYTE  IRQ;
typedef WORD  COFFSET;
typedef BYTE  WPAGE;
typedef BYTE  PWRINDEX;
typedef BYTE  RETCODE;
typedef WORD  SIG;
typedef WORD  WSIZE16;
typedef DWORD WSIZE32;
typedef BYTE  SOCKET;
typedef BYTE  SPEED;
typedef BYTE  WINDOW;
typedef WORD  SKTBITS;

typedef struct pwrentry_s       //power level and valid signals (InqAdapter)
{
    PWRINDEX bPowerLevel;
    FLAGS8   bValidSignals;
} PWRENTRY;

typedef struct achartbl_s       //InqAdapter
{
    FLAGS16 wAdpCaps;
    FLAGS32 dwActiveHi;
    FLAGS32 dwActiveLo;
} ACHARTBL;

typedef struct schartbl_s       //InqSocket
{
    FLAGS16 wSktCaps;
    FLAGS32 dwActiveHi;
    FLAGS32 dwActiveLo;
    FLAGS16 wDMAChannels;
    WORD    wNumCustomIF;
    DWORD   CustomIFTable[NUM_IF_ENTRIES];
} SCHARTBL;

typedef struct adapterinfo_s    //InqAdapter
{
    struct achartbl_s ACharTable;
    WORD wNumPwrEntries;
    struct pwrentry_s PwrTable[NUM_PWR_ENTRIES];
} ADAPTERINFO;

typedef struct memwintbl_s      //InqWindow for memory windows
{
    FLAGS16 wMemWndCaps;        //windows capabilities flags
    BASE16  wFirstByte;         //system address of first byte
    BASE16  wLastByte;          //system address of last byte
    WSIZE16 wMinSize;           //minimum window size
    WSIZE16 wMaxSize;           //maximum window size
    WSIZE16 wReqGran;           //size granularity
    WSIZE16 wReqBase;           //window base alignment requirement
    WSIZE16 wReqOffset;         //alignment requirement for offsets
    SPEED   bSlowest;           //slowest access speed for window
    SPEED   bFastest;           //fastest access speed for window
} MEMWINTBL;

typedef struct memwin32tbl_s	//InqWindow for big memory windows
{
    FLAGS16 wMemWndCaps;        //windows capabilities flags
    BASE32  dwFirstByte;        //system address of first byte
    BASE32  dwLastByte;         //system address of last byte
    WSIZE32 dwMinSize;          //minimum window size
    WSIZE32 dwMaxSize;          //maximum window size
    WSIZE32 dwReqGran;          //size granularity
    WSIZE32 dwReqBase;          //window base alignment requirement
    WSIZE32 dwReqOffset;        //alignment requirement for offsets
    SPEED   bSlowest;           //slowest access speed for window
    SPEED   bFastest;           //fastest access speed for window
} MEMWIN32TBL;

typedef struct iowintbl_s       //InqWindow for I/O windows
{
    FLAGS16 wIOWndCaps;         //windows capabilities flags
    BASE16  wFirstByte;         //system address of first byte
    BASE16  wLastByte;          //system address of last byte
    WSIZE16 wMinSize;           //minimum window size
    WSIZE16 wMaxSize;           //maximum window size
    WSIZE16 wReqGran;           //size granularity
    COUNT   bAddrLines;         //address lines decoded by window
    FLAGS8  bEISASlot;          //upper 4 I/O address lines for EISA
} IOWINTBL;

typedef struct iowin32tbl_s     //InqWindow for I/O windows
{
    FLAGS16 wIOWndCaps;         //windows capabilities flags
    BASE32  dwFirstByte;        //system address of first byte
    BASE32  dwLastByte;         //system address of last byte
    WSIZE32 dwMinSize;          //minimum window size
    WSIZE32 dwMaxSize;          //maximum window size
    WSIZE32 dwReqGran;          //size granularity
    COUNT   bAddrLines;         //address lines decoded by window
    FLAGS8  bEISASlot;          //upper 4 I/O address lines for EISA
} IOWIN32TBL;
/*XLATON*/

typedef struct dwframe_s {
    DWORD r_edi;
    DWORD r_esi;
    DWORD r_ebp;
    DWORD r_esp;
    DWORD r_ebx;
    DWORD r_edx;
    DWORD r_ecx;
    DWORD r_eax;
    DWORD r_eflags;
} DWFRAME;

typedef struct wframe_s {
    WORD  r_di;
    WORD  wh_di;
    WORD  r_si;
    WORD  wh_si;
    WORD  r_bp;
    WORD  wh_bp;
    WORD  r_sp;
    WORD  wh_sp;
    WORD  r_bx;
    WORD  wh_bx;
    WORD  r_dx;
    WORD  wh_dx;
    WORD  r_cx;
    WORD  wh_cx;
    WORD  r_ax;
    WORD  wh_ax;
    WORD  r_flags;
    WORD  wh_flags;
} WFRAME;

typedef struct bframe_s {
    DWORD b_edi;
    DWORD b_esi;
    DWORD b_ebp;
    DWORD b_esp;
    BYTE  r_bl;
    BYTE  r_bh;
    WORD  bh_bx;
    BYTE  r_dl;
    BYTE  r_dh;
    WORD  bh_dx;
    BYTE  r_cl;
    BYTE  r_ch;
    WORD  bh_cx;
    BYTE  r_al;
    BYTE  r_ah;
    WORD  bh_ax;
    DWORD b_eflags;
} BFRAME;

/*XLATOFF*/
typedef union paramframe_s
{
    struct dwframe_s dw;
    struct wframe_s  w;
    struct bframe_s  b;
} PARAMFRAME;
typedef PARAMFRAME *PPARAMFRAME;


/*** Macros
 */

//Register bindings for socket services parameters
#define P_EFLAGS(p)             ((p)->dw.r_eflags)

#define P_FUNC(p)               ((p)->b.r_ah)
#define P_RETCODE(p)            ((p)->b.r_ah)
#define P_ADP(p)                ((p)->b.r_al)

#define P_COMPLIANCE(p)         ((p)->w.r_bx)
#define P_WINDOW(p)             ((p)->b.r_bh)
#define P_NUMWINS(p)            ((p)->b.r_bh)
#define P_SCINTCAPS(p)          ((p)->b.r_bh)
#define P_SCINTMASK(p)          ((p)->b.r_bh)
#define P_CARDSTATE(p)          ((p)->b.r_bh)
#define P_NUMSKTS(p)            ((p)->b.r_bl)
#define P_WINCAPS(p)            ((p)->b.r_bl)
#define P_SOCKET(p)             ((p)->b.r_bl)
#define P_PAGE(p)               ((p)->b.r_bl)
#define P_TYPE(p)               ((p)->b.r_bl)

#define P_NUMEDCS(p)            ((p)->w.r_cx)
#define P_SOCKETS(p)            ((p)->w.r_cx)
#define P_WINSIZE(p)            ((p)->dw.r_ecx)
#define P_NUMADPS(p)            ((p)->b.r_ch)
#define P_VCONTROL(p)           ((p)->b.r_ch)
#define P_FIRSTADP(p)           ((p)->b.r_cl)
#define P_VPPLEVELS(p)          ((p)->b.r_cl)

#define P_NUMBWINS(p)           ((p)->w.r_dx)
#define P_RELEASE(p)            ((p)->w.r_dx)
#define P_WIN32(p)		((p)->b.r_dh)
#define P_STATE(p)              ((p)->b.r_dh)
#define P_SCRPTCAPS(p)          ((p)->b.r_dh)
#define P_SPEED(p)              ((p)->b.r_dl)
#define P_CTLINDCAPS(p)         ((p)->b.r_dl)
#define P_CTLIND(p)             ((p)->b.r_dl)
#define P_PAGESTATE(p)          ((p)->b.r_dl)

#define P_SCROUTING(p)          ((p)->w.r_di)
#define P_BASE(p)               ((p)->dw.r_edi)
#define P_OFFSET(p)             ((p)->w.r_di)
#define P_IF_ROUTING(p)         ((p)->w.r_di)
#define P_PBUFFER(p)            ((p)->dw.r_edi)

#define P_IFINDEX(p)		((p)->w.r_bp)

#define SETUPCARRY(p)   {                                               \
                            if (P_RETCODE(p) == SSERR_SUCCESS)          \
                                P_EFLAGS(p) &= ~EFLAGS_CARRY;           \
                            else                                        \
                                P_EFLAGS(p) |= EFLAGS_CARRY;            \
                        }
/*XLATON*/

#endif  //ifndef _SSDEFS_H

⌨️ 快捷键说明

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