#ifndef USBPIC_H #define USBPIC_H // Version 1.1 Compatible with SDCC 3.x // Buffer Descriptor bit masks (from PIC datasheet) #define UOWN 0x80 // USB Own Bit #define DTS 0x40 // Data Toggle Synchronization Bit #define KEN 0x20 // BD Keep Enable Bit #define INCDIS 0x10 // Address Increment Disable Bit #define DTSEN 0x08 // Data Toggle Synchronization Enable Bit #define BSTALL 0x04 // Buffer Stall Enable Bit #define BC9 0x02 // Byte count bit 9 #define BC8 0x01 // Byte count bit 8 typedef struct _BDT { unsigned char STAT; unsigned char CNT; unsigned int ADDR; } BDT; //Buffer Descriptor Table // Every device request starts with an 8 unsigned char setup packet (USB 2.0, chap 9.3) // with a standard layout. The meaning of wValue and wIndex will // vary depending on the request type and specific request. typedef struct _setup_packet_struct { unsigned char bmrequesttype; // D7: Direction, D6..5: Type, D4..0: Recipient unsigned char brequest; // Specific request unsigned char wvalue0; // LSB of wValue unsigned char wvalue1; // MSB of wValue unsigned char windex0; // LSB of wIndex unsigned char windex1; // MSB of wIndex unsigned short wlength; // Number of unsigned chars to transfer if there's a data stage unsigned char extra[56]; // Fill out to same size as Endpoint 0 max buffer } setup_packet_struct; #define USTAT_IN (0x04) #define USTAT_OUT (0x00) //endpoints volatile BDT __at (0x0400+0*8) ep0_o; volatile BDT __at (0x0404+0*8) ep0_i; volatile BDT __at (0x0400+1*8) ep1_o; volatile BDT __at (0x0404+1*8) ep1_i; volatile BDT __at (0x0400+2*8) ep2_o; volatile BDT __at (0x0404+2*8) ep2_i; volatile BDT __at (0x0400+3*8) ep3_o; volatile BDT __at (0x0404+3*8) ep3_i; #endif