📄 upsd3400_usb_app.src
字号:
; SOURCE LINE # 688
RET
; END OF OnModeSense6
;
; void OnModeSelect10(void)
RSEG ?PR?OnModeSelect10?UPSD3400_USB_APP
OnModeSelect10:
; SOURCE LINE # 690
; /******************************************************************************
; Function : void OnModeSelect10()
; Parameters : (void)
; Description: The MODE SELECT(10) command provides a means for
; the application client to specify medium,
; logical unit, or peripheral device parameters to the device server.
; Application clients should issue MODE SENSE(10) prior
; to each MODE SELECT(10) to determine supported mode pages,
; mode page lengths, and other parameters.
; Device servers that implement the MODE SELECT(10) command shall
; also implement the MODE SENSE(10) command.
; ******************************************************************************/
; {
; SOURCE LINE # 703
; gbCSWStatus = FAIL;
; SOURCE LINE # 704
MOV gbCSWStatus,#01H
; ReturnCSW(); // return status
; SOURCE LINE # 705
LJMP ReturnCSW
; END OF OnModeSelect10
; }
;
; void OnModeSense10(void)
RSEG ?PR?OnModeSense10?UPSD3400_USB_APP
OnModeSense10:
; SOURCE LINE # 708
; /******************************************************************************
; Function : void OnModeSense10()
; Parameters : none
; Description: Handler for ModeSense10 command
; ******************************************************************************/
; {
; SOURCE LINE # 714
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 715
MOV USEL,#01H
;
; USB_FIFO[ 0] = 0x00;
; SOURCE LINE # 717
MOV DPTR,#07000H
CLR A
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x06;
; SOURCE LINE # 718
INC DPTR
MOV A,#06H
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x00;
; SOURCE LINE # 719
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 3] = 0x00;
; SOURCE LINE # 720
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 4] = 0x00;
; SOURCE LINE # 721
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 5] = 0x00;
; SOURCE LINE # 722
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 6] = 0x00;
; SOURCE LINE # 723
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 7] = 0x00;
; SOURCE LINE # 724
INC DPTR
MOVX @DPTR,A
;
; USIZE = 8;
; SOURCE LINE # 726
MOV USIZE,#08H
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 728
MOV gbBulkPipeStage,#02H
; }
; SOURCE LINE # 729
RET
; END OF OnModeSense10
;
; void DoReadCapacity(void)
RSEG ?PR?DoReadCapacity?UPSD3400_USB_APP
DoReadCapacity:
; SOURCE LINE # 731
; /*--------------------------------------------------------------------
; Function : void DoReadCapacity()
; Parameters : none
; Description: Handler for ReadCapacity command
; This routine returns real capacity of the device-1
; ---------------------------------------------------------------------*/
; {
; SOURCE LINE # 738
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 739
MOV USEL,#01H
;
; USB_FIFO[ 0] = 0x00; //Last logical block
; SOURCE LINE # 741
MOV DPTR,#07000H
CLR A
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x00;
; SOURCE LINE # 742
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x01;
; SOURCE LINE # 743
INC DPTR
INC A
MOVX @DPTR,A
; USB_FIFO[ 3] = 0xBF; //7*32768B
; SOURCE LINE # 744
INC DPTR
MOV A,#0BFH
MOVX @DPTR,A
;
; USB_FIFO[ 4] = 0x00; //block length
; SOURCE LINE # 746
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 5] = 0x00;
; SOURCE LINE # 747
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 6] = 0x02; //512B
; SOURCE LINE # 748
INC DPTR
MOV A,#02H
MOVX @DPTR,A
; USB_FIFO[ 7] = 0x00;
; SOURCE LINE # 749
INC DPTR
CLR A
MOVX @DPTR,A
;
; USIZE = 8;
; SOURCE LINE # 751
MOV USIZE,#08H
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 753
MOV gbBulkPipeStage,#02H
; }
; SOURCE LINE # 754
RET
; END OF DoReadCapacity
;
; void DoReadFormatCapacity(void)
RSEG ?PR?DoReadFormatCapacity?UPSD3400_USB_APP
DoReadFormatCapacity:
; SOURCE LINE # 756
; /*--------------------------------------------------------------------
; Function : void DoReadFormatCapacity()
; Parameters : none
; Description: Handler for ReadFormatCapacity command
; ---------------------------------------------------------------------*/
; {
; SOURCE LINE # 762
; USEL = INDIR | UMSC_IN_ENDPOINT; //Select EP1 IN
; SOURCE LINE # 763
MOV USEL,#01H
;
; USB_FIFO[ 0] = 0x00;
; SOURCE LINE # 765
MOV DPTR,#07000H
CLR A
MOVX @DPTR,A
; USB_FIFO[ 1] = 0x00;
; SOURCE LINE # 766
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 2] = 0x00;
; SOURCE LINE # 767
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 3] = 0x08; //capacity list length
; SOURCE LINE # 768
INC DPTR
MOV A,#08H
MOVX @DPTR,A
;
; /* The following values are used during disk format */
; USB_FIFO[ 4] = 0x00; //block count
; SOURCE LINE # 771
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 5] = 0x00;
; SOURCE LINE # 772
INC DPTR
MOVX @DPTR,A
; USB_FIFO[ 6] = 0x01;
; SOURCE LINE # 773
INC DPTR
INC A
MOVX @DPTR,A
; USB_FIFO[ 7] = 0xBB;
; SOURCE LINE # 774
INC DPTR
MOV A,#0BBH
MOVX @DPTR,A
; USB_FIFO[ 8] = 0x00; //block length
; SOURCE LINE # 775
INC DPTR
CLR A
MOVX @DPTR,A
; USB_FIFO[ 9] = 0x00;
; SOURCE LINE # 776
INC DPTR
MOVX @DPTR,A
; USB_FIFO[10] = 0x02; //512B
; SOURCE LINE # 777
INC DPTR
MOV A,#02H
MOVX @DPTR,A
; USB_FIFO[11] = 0x00;
; SOURCE LINE # 778
INC DPTR
CLR A
MOVX @DPTR,A
;
; USIZE = 12;
; SOURCE LINE # 780
MOV USIZE,#0CH
;
; gbBulkPipeStage = BS_CSW_PHASE;
; SOURCE LINE # 782
MOV gbBulkPipeStage,#02H
; }
; SOURCE LINE # 783
RET
; END OF DoReadFormatCapacity
;
; void CheckReceiveCBW(void)
RSEG ?PR?CheckReceiveCBW?UPSD3400_USB_APP
CheckReceiveCBW:
USING 0
; SOURCE LINE # 785
; /******************************************************************************
; Function : void CheckReceiveCBW()
; Parameters : none
; Description: Handle CBW package.
; Command Block Wrapper (CBW) shall start on a packet boundary
; and shall end as a short packet with exactly 31 (1Fh)
; bytes transferred. Fields appear aligned to byte offsets equal to
; a multiple of their byte size. All subsequent data and the CSW
; shall start at a new packet boundary.
; All CBW transfers shall be ordered with the LSB (byte 0) first
; (little endian).
; ******************************************************************************/
; {
; SOURCE LINE # 798
; data unsigned char i; // FOR variable
;
; USEL = OUTDIR | UMSC_OUT_ENDPOINT; // Select EP OUT
; SOURCE LINE # 801
MOV USEL,#081H
;
; /* dCBWSignature:
; Signature that helps identify this data packet as a CBW. The signature field
; shall contain the value 43425355h (little endian), indicating a CBW.*/
; if((USB_FIFO[0]==0x55) && (USB_FIFO[1]==0x53) &&
; (USB_FIFO[2]==0x42) && (USB_FIFO[3]==0x43))
; SOURCE LINE # 807
MOV DPTR,#07000H
MOVX A,@DPTR
XRL A,#055H
JZ $ + 5H
LJMP ?C0065
INC DPTR
MOVX A,@DPTR
XRL A,#053H
JZ $ + 5H
LJMP ?C0065
INC DPTR
MOVX A,@DPTR
XRL A,#042H
JZ $ + 5H
LJMP ?C0065
INC DPTR
MOVX A,@DPTR
XRL A,#043H
JZ $ + 5H
LJMP ?C0065
; {
; SOURCE LINE # 808
; /* dCBWTag:
; A Command Block Tag sent by the host. The device shall echo the contents of
; this field back to the host in the dCSWTag field of the associated CSW. The
; dCSWTag positively associates a CSW with the corresponding CBW.*/
; *((uchar *)&gdwCBWTag+3) = USB_FIFO[4]; // LSB first
; SOURCE LINE # 813
INC DPTR
MOVX A,@DPTR
MOV gdwCBWTag+03H,A
; *((uchar *)&gdwCBWTag+2) = USB_FIFO[5];
; SOURCE LINE # 814
INC DPTR
MOVX A,@DPTR
MOV gdwCBWTag+02H,A
; *((uchar *)&gdwCBWTag+1) = USB_FIFO[6];
; SOURCE LINE # 815
INC DPTR
MOVX A,@DPTR
MOV gdwCBWTag+01H,A
; *((uchar *)&gdwCBWTag+0) = USB_FIFO[7];
; SOURCE LINE # 816
INC DPTR
MOVX A,@DPTR
MOV gdwCBWTag,A
; /* dCBWDataTransferLength:
; The number of bytes of data that the host expects to transfer on the Bulk-In
; or Bulk-Out endpoint (as indicated by the Direction bit) during the execution
; of this command. If this field is zero, the device and the host shall transfer
; no data between the CBW and the associated CSW, and the device shall ignore
; the value of the Direction bit in bmCBWFlags.*/
; *((uchar *)&gdwCBWDataTransferLength+3) = USB_FIFO[ 8]; // LSB first
; SOURCE LINE # 823
INC DPTR
MOVX A,@DPTR
MOV gdwCBWDataTransferLength+03H,A
; *((uchar *)&gdwCBWDataTransferLength+2) = USB_FIFO[ 9];
; SOURCE LINE # 824
INC DPTR
MOVX A,@DPTR
MOV gdwCBWDataTransferLength+02H,A
; *((uchar *)&gdwCBWDataTransferLength+1) = USB_FIFO[10];
; SOURCE LINE # 825
INC DPTR
MOVX A,@DPTR
MOV gdwCBWDataTransferLength+01H,A
; *((uchar *)&gdwCBWDataTransferLength+0) = USB_FIFO[11];
; SOURCE LINE # 826
INC DPTR
MOVX A,@DPTR
MOV gdwCBWDataTransferLength,A
; /* bmCBWFlags:
; The bits of this field are defined as follows:
; Bit 7 Direction - the device shall ignore this bit if the dCBWDataTransferLength
; field is zero, otherwise:
; 0 = Data-Out from host to the device, 1 = Data-In from the device to the host.
; Bit 6 Obsolete. The host shall set this bit to zero.
; Bits 5..0 Reserved - the host shall set these bits to zero.*/
; gbCBWFlags = USB_FIFO[12];
; SOURCE LINE # 834
INC DPTR
MOVX A,@DPTR
MOV gbCBWFlags,A
; /* bCBWLUN:
; The device Logical Unit Number (LUN) to which the command block is being sent.
; For devices that support multiple LUNs, the host shall place into this field
; the LUN to which this command block is addressed. Otherwise, the host shall
; set this field to zero. */
; gbCBWLUN = USB_FIFO[13];
; SOURCE LINE # 840
INC DPTR
MOVX A,@DPTR
MOV gbCBWLUN,A
; /* bCBWCBLength:
; The valid length of the CBWCB in bytes. This defines the valid length of the
; command block. The only legal values are 1 through 16 (01h through 10h). All
; other values are reserved. */
; gbCBWCBLength = USB_FIFO[14];
; SOURCE LINE # 845
INC DPTR
MOVX A,@DPTR
MOV gbCBWCBLength,A
;
; if (gbCBWCBLength>16)
; SOURCE LINE # 847
SETB C
SUBB A,#010H
JC ?C0066
; {
; SOURCE LINE # 848
; gbCBWCBLength = 16;
; SOURCE LINE # 849
MOV gbCBWCBLength,#010H
; }
; SOURCE LINE # 850
?C0066:
; /* CBWCB:
; The command block to be executed by the device. The device shall interpret
; the first bCBWCBLength bytes in this field as a command block as defined by
; the command set identified by bInterfaceSubClass. If the command set supported
; by the device uses command blocks of fewer than 16 (10h) bytes in
; length, the significant bytes shall be transferred first, beginning with the
; byte at offset 15 (Fh). The device shall ignore the content of the CBWCB field
; past the byte at offset (15 + bCBWCBLength - 1).
; */
; for(i = 0; i<gbCBWCBLength; i++)
; SOURCE LINE # 860
;---- Variable 'i?1556' assigned to Register 'R7' ----
CLR A
MOV R7,A
?C0067:
MOV A,R7
CLR C
SUBB A,gbCBWCBLength
JNC ?C0068
; {
; SOURCE LINE # 861
; gbCBWCB[i] = USB_FIFO[15+i];
; SOURCE LINE # 862
MOV A,#0FH
ADD A,R7
MOV DPL,A
CLR A
ADDC A,#070H
MOV DPH,A
MOVX A,@DPTR
MOV R6,A
MOV A,#LOW (gbCBWCB)
ADD A,R7
MOV R0,A
XCH A,@R0
MOV A,R6
XCH A,@R0
; }
; SOURCE LINE # 863
INC R7
SJMP ?C0067
?C0068:
;
; UCON |= EPFIFO_BSY;
; SOURCE LINE # 865
ORL UCON,#01H
;
;
;
; gbCSWStatus = PASS; // default CSW Status
; SOURCE LINE # 869
CLR A
MOV gbCSWStatus,A
; gbBulkPipeStage = BS_DATA_PHASE;
; SOURCE LINE # 870
MOV gbBulkPipeStage,#01H
;
; if (gbCBWCBLength>0)
; SOURCE LINE # 872
MOV A,gbCBWCBLength
SETB C
SUBB A,#00H
JC ?C0070
; {
; SOURCE LINE # 873
; /* Now decode the CBWCB; the command block to be executed by the device. */
; switch (gbCBWCB[0])
; SOURCE LINE # 875
MOV A,gbCBWCB
LCALL ?C?CCASE
DW ?C0074
DB 00H
DW ?C0075
DB 03H
DW ?C0076
DB 012H
DW ?C0080
DB 015H
DW ?C0079
DB 01AH
DW ?C0083
DB 01EH
DW ?C0082
DB 023H
DW ?C0081
DB 025H
DW ?C0072
DB 028H
DW ?C0073
DB 02AH
DW ?C0083
DB 02FH
DW
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -