📄 cls1.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 + -