📄 main.src
字号:
?C0017:
;
; if (index == 0) // First segment needs 0 command byte to indicate data
; SOURCE LINE # 415
MOV DPTR,#index?449
MOVX A,@DPTR
JNZ ?C0018
; {
; SOURCE LINE # 416
; cbData = min(currentCmd.u.rw.nBytes, EP0_SIZE - 1);
; SOURCE LINE # 417
CLR C
MOV DPTR,#currentCmd+05H
MOVX A,@DPTR
SUBB A,#07H
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
SUBB A,#00H
JNC ?C0019
INC DPTR
MOVX A,@DPTR
MOV R7,A
SJMP ?C0020
?C0019:
MOV R7,#07H
?C0020:
MOV cbData?450,R7
; index = 1;
; SOURCE LINE # 418
MOV DPTR,#index?449
MOV A,#01H
MOVX @DPTR,A
; txReport.u.cmd = 0;
; SOURCE LINE # 419
CLR A
MOV DPTR,#txReport
MOVX @DPTR,A
; }
; SOURCE LINE # 420
SJMP ?C0021
?C0018:
; else
; {
; SOURCE LINE # 422
; cbData = min(currentCmd.u.rw.nBytes, EP0_SIZE);
; SOURCE LINE # 423
CLR C
MOV DPTR,#currentCmd+05H
MOVX A,@DPTR
SUBB A,#08H
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
SUBB A,#00H
JNC ?C0022
INC DPTR
MOVX A,@DPTR
MOV R7,A
SJMP ?C0023
?C0022:
MOV R7,#08H
?C0023:
MOV cbData?450,R7
; }
; SOURCE LINE # 424
?C0021:
;
; ReadBufferFromFlash(
; SOURCE LINE # 426
MOV DPTR,#currentCmd+02H
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DPTR,#index?449
MOVX A,@DPTR
ADD A,#LOW (txReport)
MOV R1,A
CLR A
ADDC A,#HIGH (txReport)
MOV R2,A
MOV R3,#01H
MOV DPTR,#?_ReadBufferFromFlash?BYTE+05H
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,cbData?450
MOVX @DPTR,A
LCALL _ReadBufferFromFlash
; currentCmd.u.rw.address,
; txReport.u.buffer + index,
; cbData);
;
; currentCmd.u.rw.address += cbData;
; SOURCE LINE # 431
MOV R7,cbData?450
MOV R6,#00H
MOV DPTR,#currentCmd+03H
MOVX A,@DPTR
ADD A,R7
MOVX @DPTR,A
MOV DPTR,#currentCmd+02H
MOVX A,@DPTR
ADDC A,R6
MOVX @DPTR,A
; if ((currentCmd.u.rw.nBytes -= cbData) == 0)
; SOURCE LINE # 432
CLR C
MOV DPTR,#currentCmd+05H
MOVX A,@DPTR
SUBB A,R7
MOV R7,A
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
SUBB A,R6
MOV R6,A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
ORL A,R6
JNZ ?C0015
; {
; SOURCE LINE # 433
; currentCmd.u.cmd = 0; // All done
; SOURCE LINE # 434
MOV DPTR,#currentCmd
MOVX @DPTR,A
; }
; SOURCE LINE # 435
;
; break;
; SOURCE LINE # 437
RET
;
; default:
; SOURCE LINE # 439
?C0025:
;
; for (i = 0; i < EP0_SIZE; i++)
; SOURCE LINE # 441
CLR A
MOV i?451,A
?C0026:
; {
; SOURCE LINE # 442
; txReport.u.buffer[index + i] = 0;
; SOURCE LINE # 443
MOV DPTR,#index?449
MOVX A,@DPTR
ADD A,i?451
ADD A,#LOW (txReport)
MOV DPL,A
CLR A
ADDC A,#HIGH (txReport)
MOV DPH,A
CLR A
MOVX @DPTR,A
; }
; SOURCE LINE # 444
INC i?451
MOV A,i?451
CJNE A,#08H,?C0026
;
; break;
; SOURCE LINE # 446
; }
; SOURCE LINE # 447
; }
; SOURCE LINE # 448
?C0015:
RET
; END OF _PrepareTransmitSegment
;
;
;
;
;
; static void OnReportTransmitted()
RSEG ?PR?OnReportTransmitted?MAIN
OnReportTransmitted:
USING 0
; SOURCE LINE # 454
; /******************************************************************************
; Function : static void OnReportTransmitted()
; Parameters : none
; Description: A complete feature report has been successfully transmitted.
; ******************************************************************************/
; {
; SOURCE LINE # 460
; if (returnStatus)
; SOURCE LINE # 461
MOV A,returnStatus
JZ ?C0029
; {
; SOURCE LINE # 462
; returnStatus = FALSE;
; SOURCE LINE # 463
CLR A
MOV returnStatus,A
; }
; SOURCE LINE # 464
?C0029:
;
; if (currentCmd.u.cmd) // If there's more data to go ...
; SOURCE LINE # 466
MOV DPTR,#currentCmd
MOVX A,@DPTR
JZ ?C0031
; {
; SOURCE LINE # 467
; PrepareTransmitSegment(0); // Prepare first segment of next report
; SOURCE LINE # 468
CLR A
MOV R7,A
LCALL _PrepareTransmitSegment
;
; }
; SOURCE LINE # 470
; }
; SOURCE LINE # 471
?C0031:
RET
; END OF OnReportTransmitted
;
;
;
;
;
;
;
;
;
;
;
;
;
;
; static void OnReportSegmentReceived(uchar cbReceived)
RSEG ?PR?_OnReportSegmentReceived?MAIN
_OnReportSegmentReceived:
USING 0
; SOURCE LINE # 486
;---- Variable 'cbReceived?652' assigned to Register 'R7' ----
; /******************************************************************************
; Function : static void OnReportSegmentReceived()
; Parameters : (uchar cbReceived)
; Description: Called as each EP0_SIZE segment of a report is received.
; ******************************************************************************/
; {
; SOURCE LINE # 492
; data uchar cbData;
; data uchar index;
; // If this is data coming in (not a new command) ...
; if (rcvReport.u.cmd == 0)
; SOURCE LINE # 496
MOV DPTR,#rcvReport
MOVX A,@DPTR
JZ $ + 5H
LJMP ?C0037
; {
; SOURCE LINE # 497
; // Process the incoming data based on the current command
; switch (currentCmd.u.cmd)
; SOURCE LINE # 499
MOV DPTR,#currentCmd
MOVX A,@DPTR
ADD A,#0FDH
JZ $ + 5H
LJMP ?C0037
; {
; SOURCE LINE # 500
; case CMD_WRITE:
; SOURCE LINE # 501
?C0034:
;
; if (rcvIndex == 0) // Skip over command byte in first packet
; SOURCE LINE # 503
MOV A,rcvIndex
JNZ ?C0035
; {
; SOURCE LINE # 504
; if (cbReceived <= 1)
; SOURCE LINE # 505
MOV A,R7
SETB C
SUBB A,#01H
JNC $ + 5H
LJMP ?C0037
; {
; SOURCE LINE # 506
; return; // Error
; }
; SOURCE LINE # 508
?C0036:
;
; cbData = min(currentCmd.u.rw.nBytes, cbReceived - 1);
; SOURCE LINE # 510
MOV A,R7
ADD A,#0FFH
MOV R5,A
CLR A
ADDC A,#0FFH
MOV R4,A
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
CLR C
SUBB A,R5
MOV A,R2
SUBB A,R4
JNC ?C0038
XCH A,R4
MOV A,R2
XCH A,R4
XCH A,R5
MOV A,R3
XCH A,R5
SJMP ?C0039
?C0038:
MOV A,R7
ADD A,#0FFH
MOV R5,A
?C0039:
MOV cbData?653,R5
; index = rcvIndex + 1;
; SOURCE LINE # 511
MOV A,rcvIndex
INC A
MOV index?654,A
; }
; SOURCE LINE # 512
SJMP ?C0040
?C0035:
; else
; {
; SOURCE LINE # 514
; cbData = min(currentCmd.u.rw.nBytes, cbReceived);
; SOURCE LINE # 515
MOV A,R7
MOV R5,A
CLR C
MOV DPTR,#currentCmd+05H
MOVX A,@DPTR
SUBB A,R5
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
SUBB A,#00H
JNC ?C0041
INC DPTR
MOVX A,@DPTR
MOV R7,A
SJMP ?C0042
?C0041:
?C0042:
MOV cbData?653,R7
; index = rcvIndex;
; SOURCE LINE # 516
MOV index?654,rcvIndex
; }
; SOURCE LINE # 517
?C0040:
;
; WriteBufferToFlash(
; SOURCE LINE # 519
MOV DPTR,#currentCmd+02H
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV A,#LOW (rcvReport)
ADD A,index?654
MOV R1,A
CLR A
ADDC A,#HIGH (rcvReport)
MOV R2,A
MOV R3,#01H
MOV DPTR,#?_WriteBufferToFlash?BYTE+06H
CLR A
MOVX @DPTR,A
INC DPTR
MOV A,cbData?653
MOVX @DPTR,A
MOV DPTR,#currentCmd+01H
MOVX A,@DPTR
MOV R7,A
LCALL _WriteBufferToFlash
; currentCmd.u.rw.flash,
; currentCmd.u.rw.address,
; rcvReport.u.buffer + index,
; cbData);
;
; currentCmd.u.rw.address += cbData;
; SOURCE LINE # 525
MOV R7,cbData?653
MOV R6,#00H
MOV DPTR,#currentCmd+03H
MOVX A,@DPTR
ADD A,R7
MOVX @DPTR,A
MOV DPTR,#currentCmd+02H
MOVX A,@DPTR
ADDC A,R6
MOVX @DPTR,A
; currentCmd.u.rw.nBytes -= cbData;
; SOURCE LINE # 526
CLR C
MOV DPTR,#currentCmd+05H
MOVX A,@DPTR
SUBB A,R7
MOV R7,A
MOV DPTR,#currentCmd+04H
MOVX A,@DPTR
SUBB A,R6
MOV R6,A
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @DPTR,A
; if (currentCmd.u.rw.nBytes == 0)
; SOURCE LINE # 527
ORL A,R6
JNZ ?C0037
; {
; SOURCE LINE # 528
; currentCmd.u.cmd = 0; // All done
; SOURCE LINE # 529
MOV DPTR,#currentCmd
MOVX @DPTR,A
; if (currentCmd.u.rw.flash == PRIMARY_FLASH)
; SOURCE LINE # 530
INC DPTR
MOVX A,@DPTR
JNZ ?C0044
; {
; SOURCE LINE # 531
; flash_reset();
; SOURCE LINE # 532
LJMP flash_reset
; }
; SOURCE LINE # 533
?C0044:
; else
; {
; SOURCE LINE # 535
; flash_boot_reset();
; SOURCE LINE # 536
LCALL flash_boot_reset
; }
; SOURCE LINE # 537
; }
; SOURCE LINE # 538
;
; break;
; SOURCE LINE # 540
;
; default:
; SOURCE LINE # 542
;
; break;
; SOURCE LINE # 544
; }
; SOURCE LINE # 545
; }
; SOURCE LINE # 546
; }
; SOURCE LINE # 547
?C0037:
RET
; END OF _OnReportSegmentReceived
;
;
;
;
;
;
;
;
; static void OnReportReceived()
RSEG ?PR?OnReportReceived?MAIN
OnReportReceived:
USING 0
; SOURCE LINE # 556
; /******************************************************************************
; Function : static void OnReportReceived()
; Parameters : none
; Description: Called after all segments of a report have been received.
; ******************************************************************************/
; {
; SOURCE LINE # 562
; // Here you can have SRC routine long as you want ..
;
;
; if (rcvReport.u.cmd) // If this is a new command coming in ...
; SOURCE LINE # 566
MOV DPTR,#rcvReport
MOVX A,@DPTR
JZ ?C0056
; {
; SOURCE LINE # 567
; if (rcvReport.u.cmd == CMD_STATUS)
; SOURCE LINE # 568
CJNE A,#05H,?C0048
; {
; SOURCE LINE # 569
; // For CMD_GET_STATUS, don't overwrite current cmd we're working on
; returnStatus = TRUE;
; SOURCE LINE # 571
MOV returnStatus,#01H
; }
; SOURCE LINE # 572
SJMP ?C0049
?C0048:
; else
; {
; SOURCE LINE # 574
; // Copy into 'current command' global variable
; memcpy(currentCmd.u.buffer, rcvReport.u.buffer, sizeof(rcvReport));
; SOURCE LINE # 576
MOV R0,#LOW (currentCmd)
MOV R4,#HIGH (currentCmd)
MOV R5,#01H
MOV R3,#01H
MOV R2,#HIGH (rcvReport)
MOV R1,#LOW (rcvReport)
MOV R6,#00H
MOV R7,#040H
LCALL ?C?COPY
; memset((uchar*)&status, 0, sizeof(status));
; SOURCE LINE # 577
MOV R6,#00H
MOV R7,#040H
MOV R5,#00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -