; Buffer Descriptor Byte Aliases
#define	Stat		0		; Buffer Descriptor Status Register
#define	Cnt		1		; Buffer Count
;#define ADR		2		; Buffer Address
#define	ADRL		2		; Buffer Address Low
#define	ADRH		3		; Buffer Address High

; Stat Bit Aliases
#define	BC8		0		; Upper Count Bit
#define	BC9		1		; Upper Count Bit
#define	BSTALL		2		; Buffer Stall Enable
#define	DTSEN		3		; Data Toggle Synch Enable
#define	INCDIS		4		; Address Increment Disable
#define	KEN		5		; BD Keep Enable
#define	DTS		6		; Data Toggle Synch Value
#define	UOWN		7		; USB Ownership
#define	PID		2		; Packet Identifier (4 bits)
;#define PID0		2
;#define PID1		3
;#define PID2		4
;#define PID3		5


SavedOrg equ	$			; Save current org
	org	0x400			; Bank 4

; Buffer Descriptor Table (BDT) RAM

#if(0 <= MAX_EP_NUMBER)			; (See usbmmap.c & usbmmap.h)
ep0Bo		res	4		; Endpoint #0 BD Out
ep0Bi		res	4		; Endpoint #0 BD In
#endif

#if(1 <= MAX_EP_NUMBER)
ep1Bo		res	4		; Endpoint #1 BD Out
ep1Bi		res	4		; Endpoint #1 BD In
#endif

#if(2 <= MAX_EP_NUMBER)
ep2Bo		res	4		; Endpoint #2 BD Out
ep2Bi		res	4		; Endpoint #2 BD In
#endif

#if(3 <= MAX_EP_NUMBER)
ep3Bo		res	4		; Endpoint #3 BD Out
ep3Bi		res	4		; Endpoint #3 BD In
#endif

#if(4 <= MAX_EP_NUMBER)
ep4Bo		res	4		; Endpoint #4 BD Out
ep4Bi		res	4		; Endpoint #4 BD In
#endif

#if(5 <= MAX_EP_NUMBER)
ep5Bo		res	4		; Endpoint #5 BD Out
ep5Bi		res	4		; Endpoint #5 BD In
#endif

#if(6 <= MAX_EP_NUMBER)
ep6Bo		res	4		; Endpoint #6 BD Out
ep6Bi		res	4		; Endpoint #6 BD In
#endif

#if(7 <= MAX_EP_NUMBER)
ep7Bo		res	4		; Endpoint #7 BD Out
ep7Bi		res	4		; Endpoint #7 BD In
#endif

#if(8 <= MAX_EP_NUMBER)
ep8Bo		res	4		; Endpoint #8 BD Out
ep8Bi		res	4		; Endpoint #8 BD In
#endif

#if(9 <= MAX_EP_NUMBER)
ep9Bo		res	4		; Endpoint #9 BD Out
ep9Bi		res	4		; Endpoint #9 BD In
#endif

#if(10 <= MAX_EP_NUMBER)
ep10Bo		res	4		; Endpoint #10 BD Out
ep10Bi		res	4		; Endpoint #10 BD In
#endif

#if(11 <= MAX_EP_NUMBER)
ep11Bo		res	4		; Endpoint #11 BD Out
ep11Bi		res	4		; Endpoint #11 BD In
#endif

#if(12 <= MAX_EP_NUMBER)
ep12Bo		res	4		; Endpoint #12 BD Out
ep12Bi		res	4		; Endpoint #12 BD In
#endif

#if(13 <= MAX_EP_NUMBER)
ep13Bo		res	4		; Endpoint #13 BD Out
ep13Bi		res	4		; Endpoint #13 BD In
#endif

#if(14 <= MAX_EP_NUMBER)
ep14Bo		res	4		; Endpoint #14 BD Out
ep14Bi		res	4		; Endpoint #14 BD In
#endif

#if(15 <= MAX_EP_NUMBER)
ep15Bo		res	4		; Endpoint #15 BD Out
ep15Bi		res	4		; Endpoint #15 BD In
#endif


; General RAM (in bank 4)
usb_temp	res	2		; Temporary storage
pSrc		res	2		; Source pointer
pDst		res	2		; Destination pointer

; (See usbctrltrf.c)
ctrl_trf_state	res	1		; Control Transfer State
ctrl_trf_session_owner res 1		; Current transfer session owner
wCount		res	2		; Data counter

; (See usbmmap.c)
usb_device_state res	1		; Device States: DETACHED, ATTACHED, ...
usb_active_cfg	res	1		; Value of current configuration
usb_alt_intf	res	MAX_NUM_INT	; Array to keep track of the current alternate setting for each interface ID
usb_stat	res	1

; usb_stat bit aliases
#define	RemoteWakeup	0		; [0]Disabled [1]Enabled
#define	ctrl_trf_mem	1		; [0]RAM      [1]ROM
#define	cdc_mem_type	2		; [0]RAM      [1]ROM

; Endpoint 0 buffers
SetupPkt	res	EP0_BUFF_SIZE	; (See usbmmap.c & usbdefs_ep0_buff.h - CTRL_TRF_SETUP)
CtrlTrfData	res	EP0_BUFF_SIZE	; (See usbmmap.c & usbdefs_ep0_buff.h - CTRL_TRF_DATA)

; SetupPkt Byte and Bit Aliases
#define	bmRequestType	0
#define	bRequest	1
#define	wValue		2
#define	wIndex		4
#define	wLength		6

#define	Recipient	0		; Device,Interface,Endpoint,Other (5 bits)
#define	RequestType	5		; Standard,Class,Vendor,Reserved (2 bits)
#define	DataDir		7		; Host-to-device,Device-to-host
#define	bFeature	2		; DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT

#define	bReportID	2		; In a SET_REPORT or GET_REPORT request
#define	bReportType	3		; In a SET_REPORT or GET_REPORT request

#define	bDscIndex	2		; For Configuration and String DSC Only
#define	bDscType	3		; Device,Configuration,String
#define	wLangID		4		; Language ID

#define	bDevADR		2		; Device Address 0-127
#define	bDevADRH	3		; Must equal zero

#define	bCfgValue	2		; Configuration Value 0-255
#define	bCfgRSD		3		; Must equal zero (Reserved)

#define	bAltID		2		; Alternate Setting Value 0-255
#define	bAltID_H	3		; Must equal zero (Reserved)
#define	bIntfID		4		; Interface Number Value 0-255
#define	bIntfID_H	5		; Must equal zero

#define	bEPID		4		; Endpoint ID (Number & Direction)
#define	bEPID_H		5		; Must equal zero

#define	EPNum		0		; Endpoint Number 0-15 (4 bits)
#define	EPDir		7		; Endpoint Direction: 0-OUT, 1-IN


; HID RAM (in bank 4)

#ifdef USB_USE_HID
idle_rate	res	1
active_protocol	res	1		; [0] Boot Protocol [1] Report Protocol
#endif


; CDC RAM (in bank 4)

#ifdef USB_USE_CDC			; (See usbmmap.c & usbmmap.h)
line_coding	res	LINE_CODING_LENGTH
control_signal_bitmap res 1
dummy_encapsulated_cmd_response res dummy_length

; line_coding Byte and Bit Aliases
#define	dwDTERate	0		; Complex data structure
#define	bCharFormat	4
#define	bParityType	5
#define	bDataBits	6

; control_signal_bitmap Byte and Bit Aliases
#define	DTE_PRESENT	0		; [0] Not Present  [1] Present
#define	CARRIER_CONTROL	1		; [0] Deactivate   [1] Activate
#endif


; All previous RAM must be in bank 4
; The following buffers may be in any dual-port RAM bank

; HID Buffer RAM

#ifdef USB_USE_HID
hid_report_out	res	HID_INT_OUT_EP_SIZE + 1	; (See usbmmap.c & usbmmap.h)
hid_report_in	res	HID_INT_IN_EP_SIZE + 1	; +1 for size at front
#endif


; CDC Buffer RAM
	
#ifdef USB_USE_CDC			; (See usbmmap.c & usbmmap.h)
cdc_notice	res	CDC_INT_EP_SIZE + 1	; +1 for size at front
cdc_data_rx	res	CDC_BULK_OUT_EP_SIZE + 1	; +1 for size at front
cdc_data_tx	res	CDC_BULK_IN_EP_SIZE + 1	; +1 for size at front
#endif


	org	SavedOrg		; Restore previous org
