📄 usb_cls_hid.lis
字号:
0000 ;-----------------------------------------------
0000 ; 1st Tier Dispatch--Standard Requests
0000 ;-----------------------------------------------
0001 USB_CB_h2d_std_dev: equ 1
0001 USB_CB_h2d_std_ifc: equ 1
0001 USB_CB_h2d_std_ep: equ 1
0000 USB_CB_h2d_std_oth: equ 0
0001 USB_CB_d2h_std_dev: equ 1
0001 USB_CB_d2h_std_ifc: equ 1
0001 USB_CB_d2h_std_ep: equ 1
0000 USB_CB_d2h_std_oth: equ 0
0000
0000 ;-----------------------------------------------
0000 ; 1st Tier Dispatch--Class Requests
0000 ;-----------------------------------------------
0000 USB_CB_h2d_cls_dev: equ 0
0001 USB_CB_h2d_cls_ifc: equ 1
0000 USB_CB_h2d_cls_ep: equ 0
0000 USB_CB_h2d_cls_oth: equ 0
0000 USB_CB_d2h_cls_dev: equ 0
0001 USB_CB_d2h_cls_ifc: equ 1
0000 USB_CB_d2h_cls_ep: equ 0
0000 USB_CB_d2h_cls_oth: equ 0
0000
0000 ;-----------------------------------------------
0000 ; 1st Tier Dispatch--Vendor Specific Requests
0000 ;-----------------------------------------------
0000 USB_CB_h2d_vnd_dev: equ 0
0000 USB_CB_h2d_vnd_ifc: equ 0
0000 USB_CB_h2d_vnd_ep: equ 0
0000 USB_CB_h2d_vnd_oth: equ 0
0000 USB_CB_d2h_vnd_dev: equ 0
0000 USB_CB_d2h_vnd_ifc: equ 0
0000 USB_CB_d2h_vnd_ep: equ 0
0000 USB_CB_d2h_vnd_oth: equ 0
0000
0000 ;-----------------------------------------------
0000 ; 1st Tier Dispatch--Reserved Requests
0000 ;-----------------------------------------------
0000 USB_CB_h2d_rsv_dev: equ 0
0000 USB_CB_h2d_rsv_ifc: equ 0
0000 USB_CB_h2d_rsv_ep: equ 0
0000 USB_CB_h2d_rsv_oth: equ 0
0000 USB_CB_d2h_rsv_dev: equ 0
0000 USB_CB_d2h_rsv_ifc: equ 0
0000 USB_CB_d2h_rsv_ep: equ 0
0000 USB_CB_d2h_rsv_oth: equ 0
0000
0000 ;-----------------------------------------------
0000 ; Endpoint event flags
0000 ;-----------------------------------------------
0002 NO_EVENT_ALLOWED: equ 2
0001 EVENT_PENDING: equ 1
0000 NO_EVENT_PENDING: equ 0
0000
0000 IN_BUFFER_FULL: equ NO_EVENT_PENDING
0001 IN_BUFFER_EMPTY: equ EVENT_PENDING
0001 OUT_BUFFER_FULL: equ EVENT_PENDING
0000 OUT_BUFFER_EMPTY: equ NO_EVENT_PENDING
0000
0000 ;-----------------------------------------------
0000 ; HID Descriptor Types
0000 ;-----------------------------------------------
0021 DESCR_TYPE_HID_CLASS: equ 0x21
0009 DESCR_SIZE_HID_CLASS: equ 9
0022 DESCR_TYPE_HID_REPORT: equ 0x22
0023 DESCR_TYPE_HID_PHYSICAL: equ 0x23
0000
0000 ;-----------------------------------------------
0000 ; Transfer Completion Notification
0000 ;-----------------------------------------------
0000 USB_XFER_IDLE: equ 0x00
0001 USB_XFER_STATUS_ACK: equ 0x01
0002 USB_XFER_PREMATURE: equ 0x02
0003 USB_XFER_ERROR: equ 0x03
0000
0000 ; This macro is used to allocate a completion status block
0000 ; for all Requests. The macro parameter is used
0000 ; to prefix the two data elements.
0000 USB_XFER_STATUS: equ 0
0001 USB_XFER_LENGTH: equ 1
0000 MACRO USB_XFER_STATUS_BLOCK
0000 BLK 1 ; Completion Status
0000 BLK 2 ; Transfer Length
0000 USB_VSR_SUPPORT: EQU 0
IF USB_CB_h2d_vnd_dev
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_h2d_vnd_ifc
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_h2d_vnd_ep
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_h2d_vnd_oth
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_d2h_vnd_dev
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_d2h_vnd_ifc
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_d2h_vnd_ep
USB_VSR_SUPPORT: EQU 1
ENDIF
IF USB_CB_d2h_vnd_oth
USB_VSR_SUPPORT: EQU 1
ENDIF
; end of file USB.inc
;-----------------------------------------------
; Global Symbols
;-----------------------------------------------
EXPORT USB_UpdateHIDTimer
EXPORT _USB_UpdateHIDTimer
EXPORT USB_bGetProtocol
EXPORT _USB_bGetProtocol
AREA bss (RAM,REL)
;-----------------------------------------------
; Constant Definitions
;-----------------------------------------------
;-----------------------------------------------
; Variable Allocation
;-----------------------------------------------
;----------------------------------------------------------------------------
; Interface Setting
;----------------------------------------------------------------------------
0000 USB_IdleReload: BLK 1 ; Idle Timer Reload Value
0001 USB_IdleTimer: BLK 1 ; Idle Timers
0002 USB_Protocol: BLK 1 ; Active Protocol
0003
AREA UserModules (ROM, REL)
;-----------------------------------------------------------------------------
; FUNCTION NAME: USB_bGetProtocol
;
; DESCRIPTION: Returns the selected protocol value to the application
;
;-----------------------------------------------------------------------------
;
; ARGUMENTS: A: Interface number
;
; RETURNS: A: Protocol values
;
; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
;
; THEORY of OPERATION or PROCEDURE:
;
;-----------------------------------------------------------------------------
0000 .SECTION
0000 USB_bGetProtocol:
0000 _USB_bGetProtocol:
0000 5C MOV X, A ; Argument is the index
0001 5202 MOV A, [X + USB_Protocol] ; Return the protocol
0003 7F RET
0004 .ENDSECTION
0004 ;-----------------------------------------------------------------------------
0004 ; FUNCTION NAME: USB_UpdateHIDTimer
0004 ;
0004 ; DESCRIPTION: Updates the HID report timer and reloads it if it expires
0004 ;
0004 ;-----------------------------------------------------------------------------
0004 ;
0004 ; ARGUMENTS: A: Interface number
0004 ;
0004 ; RETURNS: A: USB_IDLE_TIMER_EXPIRED, if the timer is running and expired
0004 ; USB_IDLE_TIMER_RUNNING, if the timer is running
0004 ; USB_IDLE_TIMER_INDEFINITE, if the report should be made on change
0004 ;
0004 ; SIDE EFFECTS: REGISTERS ARE VOLATILE: THE A AND X REGISTERS MAY BE MODIFIED!
0004 ;
0004 ; THEORY of OPERATION or PROCEDURE:
0004 ;
0004 ;-----------------------------------------------------------------------------
0004 .SECTION
0004 USB_UpdateHIDTimer:
0004 _USB_UpdateHIDTimer:
0004 5C MOV X, A ; Make the argument the index
0005 ; Flow here to check if the timer is "indefinite"
0005 3D0000 CMP [X + USB_IdleReload], 0 ; Indefinite?
0008 A00F JZ .indefinite ; Jump if Indefinite?
000A ; Flow here to check the timers
000A 7B01 DEC [X + USB_IdleTimer] ; Decrement the timer
000C C004 JC .expired
000E ; Flow here if the timer has not expired
000E 5002 MOV A, USB_IDLE_TIMER_RUNNING ; Return value (not expired)
0010 7F RET ; Quick exit
0011 ; Jump here if the timer expired
0011 .expired:
0011 5200 MOV A, [X + USB_IdleReload] ; Reload the timer
0013 5401 MOV [X + USB_IdleTimer], A ;
0015 5001 MOV A, USB_IDLE_TIMER_EXPIRED ; Return value (expired)
0017 7F RET ; Quick exit
0018 ; Jump here to make return "on change/indefinite"
0018 .indefinite:
0018 5000 MOV A, USB_IDLE_TIMER_INDEFINITE; Return value (change/indefinite)
001A 7F RET ; Exit
001B .ENDSECTION
001B ;-----------------------------------------------------------------------------
001B ; FUNCTION NAME: USB_CB_d2h_std_ifc_06
001B ;
001B ; DESCRIPTION: Get Interface Descriptor
001B ;
001B ;****************************************************************
001B ; STANDARD INTERFACE IN REQUEST: Get_Interface_Descriptor
001B ;****************************************************************
001B ;
001B ; bmRequestType : (IN | STANDARD | INTERFACE) = 81h
001B ; bRequest : GET_DESCRIPTOR = 06h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -