📄 d12ci.h
字号:
//*************************************************************************
// File Name: D12CI.H
//*************************************************************************
#define D12_NOLAZYCLOCK 0x02
#define D12_CLOCKRUNNING 0x04
#define D12_INTERRUPTMODE 0x08
#define D12_SOFTCONNECT 0x10
#define D12_ENDP_NONISO 0x00
#define D12_ENDP_ISOOUT 0x40
#define D12_ENDP_ISOIN 0x80
#define D12_ENDP_ISOIO 0xC0
#define D12_CLOCK_12M 0x03 //采用12M时钟工作
#define D12_CLOCK_4M 0x0b
#define D12_SETTOONE 0x40
#define D12_SOFONLY 0x80
#define D12_DMASINGLE 0x00
#define D12_BURST_4 0x01
#define D12_BURST_8 0x02
#define D12_BURST_16 0x03
#define D12_DMAENABLE 0x04
#define D12_DMA_INTOKEN 0x08
#define D12_AUTOLOAD 0x10
#define D12_NORMALPLUSSOF 0x20
#define D12_ENDP4INTENABLE 0x40
#define D12_ENDP5INTENABLE 0x80 // bug fixed in V2.1
#define D12_INT_ENDP0OUT 0x01
#define D12_INT_ENDP0IN 0x02
#define D12_INT_ENDP1OUT 0x04
#define D12_INT_ENDP1IN 0x08
#define D12_INT_ENDP2OUT 0x10
#define D12_INT_ENDP2IN 0x20
#define D12_INT_BUSRESET 0x40
#define D12_INT_SUSPENDCHANGE 0x80
#define D12_INT_EOT 0x0100
#define D12_SETUPPACKET 0x20
#define D12_BUFFER0FULL 0x20
#define D12_BUFFER1FULL 0x40
#define D12_FULLEMPTY 0x01
#define D12_STALL 0x02
#define IN_TOKEN_DMA 1
#define OUT_TOKEN_DMA 0
#define DMA_BUFFER_SIZE 256
#define DMA_IDLE 0
#define DMA_RUNNING 1
#define DMA_PENDING 2
typedef struct _TWAIN_FILEINFO {
unsigned char bPage; // bPage bit 7 - 5 map to uSize bit 18 - 16
unsigned char uSizeH; // uSize bit 15 - 8
unsigned char uSizeL; // uSize bit 7 - 0
} TWAIN_FILEINFO, *PTWAIN_FILEINFO;
#define DISABLE asm(" ssbx INTM")
#define ENABLE asm(" rsbx INTM")
#define outportb(a, b) a=b&0x00ff //输出数据
#define inportb(address) address&0x00ff //输入数据
//*************************************************************************
// basic #defines
//*************************************************************************
#define MAX_ENDPOINTS (unsigned char)0x3
#define EP0_TX_FIFO_SIZE 16
#define EP0_RX_FIFO_SIZE 16
#define EP0_PACKET_SIZE 16
#define EP1_TX_FIFO_SIZE 16
#define EP1_RX_FIFO_SIZE 16
#define EP1_PACKET_SIZE 16
#define EP2_TX_FIFO_SIZE 64
#define EP2_RX_FIFO_SIZE 64
#define EP2_PACKET_SIZE 64
#define USB_IDLE 0
#define USB_TRANSMIT 1
#define USB_RECEIVE 2
#define USB_CLASS_CODE_TEST_CLASS_DEVICE 0xdc
#define USB_SUBCLASS_CODE_TEST_CLASS_D12 0xA0
#define USB_PROTOCOL_CODE_TEST_CLASS_D12 0xB0
/*
*************************************************************************
masks
*************************************************************************
*/
#define USB_RECIPIENT (unsigned char)0x1F
#define USB_RECIPIENT_DEVICE (unsigned char)0x00
#define USB_RECIPIENT_INTERFACE (unsigned char)0x01
#define USB_RECIPIENT_ENDPOINT (unsigned char)0x02
#define USB_REQUEST_TYPE_MASK (unsigned char)0x60
#define USB_STANDARD_REQUEST (unsigned char)0x00
#define USB_CLASS_REQUEST (unsigned char)0x20
#define USB_VENDOR_REQUEST (unsigned char)0x40
#define USB_REQUEST_MASK (unsigned char)0x0F
#define DEVICE_ADDRESS_MASK 0x7F
/*
************************************************************************
macros
*************************************************************************
*/
#define SWAP(x) ((((x)>>16&0xFF)) | (((x) & 0xFF)<<8))
#define MSB(x) (((x) >> 8) & 0xFF)
#define LSB(x) ((x) & 0xFF)
#define FALSE 0
#define TRUE (!FALSE)
/*
*************************************************************************
basic typedefs
*************************************************************************
*/
typedef unsigned char UCHAR;
typedef unsigned short USHORT;
typedef unsigned long ULONG;
typedef unsigned char BOOL;
/*
*************************************************************************
structure and union definitions
*************************************************************************
*/
typedef union _epp_flags
{
struct _flags
{
unsigned char timer ;//: 1;
unsigned char bus_reset ;//: 1;
unsigned char suspend ;//: 1;
unsigned char setup_packet ;//: 1;
unsigned char remote_wakeup ;//: 1;
unsigned char in_isr ;//: 1;
unsigned char control_state ;//: 2;
unsigned char configuration ;//: 1;
unsigned char verbose ;//: 1;
unsigned char ep1_rxdone ;//: 1;
unsigned char ep2_rxdone ;//: 1;
unsigned char setup_dma ;//: 2; // V2.3
unsigned char dma_state ;//: 2;
unsigned char power_down ;//: 1; // Smart Board
} bits;
// unsigned long value;
} EPPFLAGS;
typedef struct _device_request
{
unsigned char bmRequestType;
unsigned char bRequest;
unsigned long wValue;
unsigned long wIndex;
unsigned long wLength;
} DEVICE_REQUEST;
typedef struct _IO_REQUEST {
unsigned long uAddressL;
unsigned char bAddressH;
unsigned long uSize;
unsigned char bCommand;
} IO_REQUEST, *PIO_REQUEST;
#define MAX_CONTROLDATA_SIZE 8
typedef struct _control_xfer
{
DEVICE_REQUEST DeviceRequest;
unsigned long wLength;
unsigned long wCount;
unsigned char * pData;
unsigned char dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable);
void D12_SetEndpointEnable(unsigned char bEnable);
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv);
void D12_SetDMA(unsigned char bMode);
unsigned char D12_GetDMA(void);
unsigned short D12_ReadInterruptRegister(void);
unsigned char D12_SelectEndpoint(unsigned char bEndp);
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp);
unsigned char D12_ReadEndpointStatus(unsigned char bEndp);
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled);
void D12_SendResume(void);
unsigned short D12_ReadCurrentFrameNumber(void);
unsigned short D12_ReadChipID(void);
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf);
void D12_AcknowledgeEndpoint(unsigned char endp);
unsigned char D12_ReadMainEndpoint(unsigned char * buf); // V2.2
void control_handler();
void code_transmit(unsigned char *pRomData, unsigned short len);
void single_transmit(unsigned char * buf, unsigned char len);
void init_config(void);
void init_unconfig(void);
void reconnect_USB(void);
void connect_USB(void);
void disconnect_USB(void);
void stall_ep0(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -