⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cls1.asm

📁 USB接口的键盘
💻 ASM
字号:
include			HT82K96e.inc
include			usbrf.inc	


EXTERN			bCMD_INDEX:BIT
extern			bAltkbProtocol	:bit
extern			baltmouseprotocol	:bit


extern			TempKBTime		:byte
extern			TempmouseTime	:byte	
extern			TempKBTime_L	:byte	
extern			TempmouseTime_L	:byte

extern			fifo_type		:byte	
extern			FIFO_Request	:byte
extern			fifo_wIndexl	:byte
extern			FIFO_wIndexH 	:byte
extern			FIFO_wValueL 	:byte
extern			FIFO_wValueH	:byte
extern			FIFO_wLengthH	:byte
extern			FIFO_wLengthL	:byte

extern			INT_temp2		:byte
extern			FIFO_OUT1		:byte
extern			FIFO_SendLen	:byte
extern			ReportkbTime	:byte
extern			ReportMouseTime	:byte
extern			setrpt_no		:byte


extern			movekeyboarddata	:near
Extern			ExitExt				:near
EXTERN			ToStallPipe0		:NEAR
EXTERN			SendFIFOOut			:NEAR
EXTERN			SendHandshake		:NEAR
;extern			moveacpidata		:near
;extern			moveMultidata		:near

TEMP			EQU			INT_TEMP2

CLS1			.SECTION  AT 1cbH  'code'

;----- Class-Specific request -----------------------------------------------


SetProtocol:	;
                ;Not Check bmRequestType direction because wLength = 0
                ;SZ      FIFO_Type.@Setup_D    	;Host to device ?
                ;JMP		ToStallPipe0           ;No: to stall
                
                MOV     A,FIFO_wLengthL       	;Length = 0
				ADD		A,FIFO_wLengthH
				SNZ		Z	
                JMP		ToStallPipe0            ;No: to stall
             
                SZ      FIFO_wValueH          	;wValueH = 0 ?
                JMP		ToStallPipe0            ;No: to stall

				sz		FIFO_wIndexL
				jmp		ToStallPipe0
				clr		bAltkbProtocol
				sz		FIFO_wValueL
				set		bAltkbProtocol
                JMP     SendHandshake           ;send handshake flag
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GetProtocol:
                ;Check bmRequestType direction
                SNZ     FIFO_Type.@Setup_D    	;Device to host ?
                JMP		ToStallPipe0            ;No: to stall

                SZ		FIFO_wValueL         	;default = 0 ?
				JMP		ToStallPipe0
				SZ		FIFO_wValueH
                JMP		ToStallPipe0            ;No: to stall
                
				SZ      FIFO_wLengthH         	;Length = 0
                JMP		ToStallPipe0            ;No: to stall
                MOV     A,FIFO_wLengthL       	;Length = 1 ?
                XOR     A,01H                   ;
                SNZ     Z                       ;
                JMP		ToStallPipe0            ;No: to stall

				clr		acc
				sz		FIFO_wIndexL
                JMP		ToStallPipe0
				sz		bAltkbProtocol
				set		acc.0
				jmp		ReportVL

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SetIdle:
;maybe need support
               	sz		FIFO_wLengthL         ;Length = 0
				jmp		Tostallpipe0
				sz		FIFO_wLengthH
                JMP		ToStallPipe0            ;No: to stall
                							
				clr		TempKBTime
				clr		TempmouseTime
				clr		TempKBTime_L
				clr		TempmouseTime_L
	
				MOV		A,offset ReportkbTime
				SZ		FIFO_wIndexL			;0-KB,	1-Mouse
                JMP		ToStallPipe0 
write_idle_rate:
				MOV		MP0,A			
              	MOV     A,FIFO_wValueH          ;Get particular report time
              	MOV     R0,A              		;

   ;Set particular report flag
               	JMP     SendHandshake          	;send handshake flag

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GetIdle:		;Report_ID=0, 
                ;Check bmRequestType direction
                SNZ     FIFO_Type.@Setup_D    	;Device to host ?
                JMP		ToStallPipe0            ;No: to stall

				SZ		FIFO_wValueH
                JMP		ToStallPipe0            ;No: to stall
              
				SZ      FIFO_wLengthH         	;Length = 0
                JMP		ToStallPipe0            ;No: to stall
                MOV     A,FIFO_wLengthL       	;Length = 1 ?
                XOR     A,01H                   ;
                SNZ     Z                       ;
                JMP		ToStallPipe0            ;No: to stall

				MOV		A,ReportkbTime			;KB
                SZ		FIFO_wIndexL			;0-KB, 1-Mouse
				jmp		ToStallPipe0
                JMP     ReportVL                ;Responde

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



get_kb_input:
;KB
				MOV     A,FIFO_wLengthL     	;check format no.
                XOR     A,REPORT_KB_SIZE       	;
                SNZ     Z                   	;
                JMP		ToStallPipe0        	;
				call	movekeyboarddata
				mov		a,8
				JMP		Reportl
;----------------------------------------------------------------------------

ClassRequest:
                MOV     A,FIFO_Type
                AND     A,Setup_Rev
                MOV     TEMP,A
                SUB     A,04H               ;Over 4 item ?
                SZ      C                   ;
                JMP		ToStallPipe0        ;Yes
                MOV     A,TEMP
class_request_pcl_5:
                ADDM    A,PCL
                JMP		ToStallPipe0        ;Invalid Device
                JMP     InterfaceRev        ;Invalid Interface
                JMP     ToStallPipe0        ;Endpoint
                JMP		ToStallPipe0        ;Invalid Other

InterfaceRev:
				SZ      FIFO_wIndexH        ;High byte for endpoint == 0 ?
                JMP		ToStallPipe0        ;No
				MOV		A,FIFO_wIndexL	
				SUB		A,INTERFACE_NO		;2
				SZ		C
				JMP		ToStallPipe0

;Check bRequest		
                MOV     A,FIFO_Request    	;bRequest
                SUB     A,CLASS_REQUEST_NO  ;Over 12 item ?
                SZ      C                   ;
                JMP		ToStallPipe0        ;Yes
                MOV     A,FIFO_Request
;!!!!! Need in same page
class_cmd_pcl_13:
                ADDM    A,PCL
                JMP		ToStallPipe0        ;0
                JMP     GetReport           ;1
                JMP     GetIdle             ;2
                JMP     GetProtocol         ;3
                JMP		ToStallPipe0        ;4
                JMP		ToStallPipe0        ;5
                JMP		ToStallPipe0        ;6
                JMP		ToStallPipe0        ;7
                JMP		ToStallPipe0        ;8
                JMP     SetReport           ;9
                JMP     SetIdle             ;A
                JMP     SetProtocol         ;B

;////////////////////////////////////////////////////////////////////////////
;Class Specific Request

ReportVL:
                MOV     FIFO_OUT1,A       		;
                MOV     A,KB_OUTPUT_SIZE       	;FIFO data length = 1

ReportL:
				jmp		SendFIFOOut
;                MOV     FIFO_SendLen,A    		;
;                jmp	    RequestResponse     	;Responde


;----------------------------------------------------------------------------

GetReport:		;Report_type, Report_ID=0, Report_Length 
				;no Feature Report
                ;Check bmRequestType direction
                SNZ     FIFO_Type.@Setup_D    	;device to host ?
                JMP		ToStallPipe0            ;No:Error
               	MOV     A,FIFO_wValueH        	;Get report type (Only 3 kind)
                SUB     A,REPORT_TYPE_NO	    ;Over 4 item ?
                SZ      C                       ;
                JMP		ToStallPipe0            ;Yes
                MOV     A,FIFO_wValueH
get_report_pcl_5:
                ADDM    A,PCL
                JMP		ToStallPipe0            ;No this report type
                JMP     GetInputReport
                JMP     Tostallpipe0
GetFeatureReport:                               ;No support GetFeatureReport
                JMP		ToStallPipe0
;----------------------------------------------------------------------------
GetInputReport:
                SZ      FIFO_wLengthH     		;wLength = 8 ?
                JMP		ToStallPipe0        	;No
				
				mov		a,FIFO_wIndexL
get_input_pcl_4:
				addm	a,pcl
				jmp		get_KB_input			;0
				jmp		Tostallpipe0			;1
;----------------------------------------------------------------------------


SetReport:		;Report_Type, Report_ID=0, 
                ;Check bmRequestType direction
				;No Feature Report, Input Report
                SZ      FIFO_Type.@Setup_D    	;Host to device ?
                JMP		ToStallPipe0            ;No:Error
                MOV     A,FIFO_wValueH        	;Get report type (Only 3 kind)
                SUB     A,04H                   ;Over 4 item ?
                SZ      C                       ;
                JMP		ToStallPipe0            ;Yes
                MOV     A,FIFO_wValueH
setreport_pcl_5:
                ADDM    A,PCL
                JMP		ToStallPipe0            ;No this report type
                JMP		ToStallPipe0            ;No support SetInputReport

				inc		setrpt_no
				mov		a, 05h
				sub		a, setrpt_no
				sz		acc
				jmp		$+2
				nop
                JMP     SetOutputReport
SetFeatureReport:                               ;No support SetFeatureReport
                JMP		ToStallPipe0
SetOutputReport:
				SZ		FIFO_wIndexL			;0-KB,	1-Mouse
				JMP		ToStallPipe0
;KB					
				SZ      FIFO_wLengthH         	;wLength = 1 ?
                JMP		ToStallPipe0            ;No
                MOV     A,FIFO_wLengthL       	;1 byte report
                XOR     A,KB_Output_SIZE    	;
                SNZ     Z                       ;
    	        JMP		ToStallPipe0            ;No
                set     bCMD_INDEX    


                JMP     ExitExt        	                

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



PUBLIC		ClassRequest
public		class_request_pcl_5
public		class_cmd_pcl_13
public		get_report_pcl_5
public		get_input_pcl_4
public		setreport_pcl_5
				END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -