Top secrets sources NedoPC zxusbnet

Rev

Rev 151 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?


#define BYTE unsigned char
#define WORD unsigned short
#define ISO_BIT     0x10
#define MAX_EP          0x05     // maximum number of endpoints (Ep0 + max of 4 data endpoints)
 
//*****************************************************************************************
// Constant Defines
//*****************************************************************************************
 
#define TIMEOUT_RETRY           0x06    // Maximum no. of timeout retry during USB xfer
 
typedef struct
{
    WORD  wVID, wPID;       // Vendor ID and Product ID
    BYTE  bClass;           //  
    BYTE  bNumOfEPs;        // actual number endpoint from slave
    BYTE  iMfg;                         // Manufacturer ID
    BYTE  iPdt;                         // Product ID
    BYTE  bId1;
    BYTE  bId2;
    BYTE  bEPAddr[MAX_EP];   // bit 7 = 1 = use PID_IN,  
    BYTE  bAttr[MAX_EP];     // ISO | Bulk | Interrupt | Control
    WORD  wPayLoad[MAX_EP];  // ISO range: 1-1023, Bulk: 1-64, etc
    WORD  bInterval[MAX_EP]; // polling interval (for LS)
    BYTE  bData1[MAX_EP];    // DataToggle value
} pUSBDEV;
 
typedef struct
{
    BYTE bmRequest;
    BYTE bRequest;
    WORD wValue;
    WORD wIndex;
    WORD wLength;
} SetupPKG;
 
typedef struct
{
    unsigned char usbaddr;
    unsigned char endpoint;
    unsigned char pid;
    unsigned char wPayload;
    unsigned int wLen;
    unsigned char *buffer;       
    SetupPKG setup;
    unsigned char epbulkin;
    unsigned char epbulkout;
 
} PKG;
 
//------------------------------------------------------------------------
// EP0 use for configuration and Vendor Specific command interface
//------------------------------------------------------------------------
#define EP0_Buf             0x10        // define start of EP0 64-byte buffer
#define EP1_Buf             0x40        // define start of EP1 64-byte buffer
 
/*-------------------------------------------------------------------------
 * SL811H Register Control memory map
 * --Note:  
 *      --SL11H only has one control register set from 0x00-0x04
 *      --SL811H has two control register set from 0x00-0x04 and 0x08-0x0c
 *------------------------------------------------------------------------*/

 
#define EP0Control      0x00
#define EP0Address      0x01
#define EP0XferLen      0x02
#define EP0Status       0x03
#define EP0Counter      0x04
 
#define EP1Control      0x08
#define EP1Address      0x09
#define EP1XferLen      0x0a
#define EP1Status       0x0b
#define EP1Counter      0x0c
 
#define CtrlReg         0x05
#define IntEna          0x06
                               // 0x07 is reserved
#define IntStatus       0x0d
#define cDATASet        0x0e
#define cSOFcnt         0x0f   // Master=1 Slave=0, D+/D-Pol Swap=1 0=not [0-5] SOF Count  
                               // 0xAE = 1100 1110
                               // 0xEE = 1110 1110
 
#define IntMask         0x57   /* Reset|DMA|EP0|EP2|EP1 for IntEna */
#define HostMask        0x47   /* Host request command  for IntStatus */
#define ReadMask        0xd7   /* Read mask interrupt   for IntStatus */
 
//Interrupt Status Mask
#define USB_A_DONE              0x01
#define USB_B_DONE              0x02
#define BABBLE_DETECT           0x04
#define INT_RESERVE             0x08
#define SOF_TIMER               0x10
#define INSERT_REMOVE           0x20
#define USB_RESET               0x40
#define USB_DPLUS               0x80
#define INT_CLEAR               0xFF
 
//EP0 Status Mask
#define EP0_ACK                 0x01    // EPxStatus bits mask during a read
#define EP0_ERROR               0x02
#define EP0_TIMEOUT             0x04
#define EP0_SEQUENCE    0x08
#define EP0_SETUP               0x10
#define EP0_OVERFLOW    0x20
#define EP0_NAK                 0x40
#define EP0_STALL               0x80
 
/*-------------------------------------------------------------------------
 * Standard Chapter 9 definition
 *-------------------------------------------------------------------------
 */

#define GET_STATUS      0x00                                                                                                                               
#define CLEAR_FEATURE   0x01
#define SET_FEATURE     0x03
#define SET_ADDRESS     0x05
#define GET_DESCRIPTOR  0x06
#define SET_DESCRIPTOR  0x07
#define GET_CONFIG      0x08
#define SET_CONFIG      0x09
#define GET_INTERFACE   0x0a
#define SET_INTERFACE   0x0b
#define SYNCH_FRAME     0x0c
 
 
#define DEVICE          0x01
#define CONFIGURATION   0x02
#define STRING          0x03
#define INTERFACE       0x04
#define ENDPOINT        0x05
 
#define STDCLASS        0x00
 
/*-------------------------------------------------------------------------
 * SL11H/SL811H definition
 *-------------------------------------------------------------------------
 */

 
                           // USB-A, USB-B Host Control Register [00H, 08H]
                           // Pre  Reserved
                           //  DatT Dir [1=Trans, 0=Recv]
                           //   SOF Enable
                           //    ISO  Arm  
#define DATA0_WR    0x07   // 0000 0111 (      Data0 +       OUT + Enable + Arm)
#define sDATA0_WR   0x27   // 0010 0111 (      Data0 + SOF + OUT + Enable + Arm)
 
#define DATA0_RD    0x03   // 0000 0011 (      Data0 +       IN +  Enable + Arm)
#define sDATA0_RD   0x23   // 0010 0011 (      Data0 + SOF + IN +  Enable + Arm)
 
#define PID_SETUP   0xD0  
#define PID_IN      0x90
#define PID_OUT     0x10
 
 
unsigned char SL811_GetRev(void);
void USBReset(void);
unsigned char usbXfer(void);
unsigned char ep0Xfer(void);
unsigned char epBulkSend(unsigned char *pBuffer,unsigned int len);
unsigned char epBulkRcv(unsigned char *pBuffer,unsigned int len);
unsigned char SetAddress(unsigned char addr);
unsigned char Set_Configuration(void);
 
unsigned char EnumUsbDev(BYTE usbaddr);
void SL811_Init(void);
 
//void check_key_LED(void);