63 lines
1.9 KiB
NASM
63 lines
1.9 KiB
NASM
; ***************************************************************************
|
|
; copyright : (C) 2023 by Martin Preuss
|
|
; email : martin@libchipcard.de
|
|
;
|
|
; ***************************************************************************
|
|
; * This file is part of the project "AqHome". *
|
|
; * Please see toplevel file COPYING of that project for license details. *
|
|
; ***************************************************************************
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; code
|
|
|
|
|
|
.cseg
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; Handle FLASH DATA packet.
|
|
;
|
|
; IN:
|
|
; - X : buffer containing the message
|
|
; OUT:
|
|
; - CFLAG: set if message is for us, cleared otherwise
|
|
; REGS: R0, R1, R15, R16, R17, R18, R19, R20, R21, R24, R25, X, Z
|
|
|
|
flashHandleFlashData:
|
|
adiw xh:xl, FLASH_MSG_OFFS_MSGLEN
|
|
ld r18, X ; length (subtract 6
|
|
cpi r18, 6 ; cmd(1), src(1), addr(4)
|
|
brcs flashHandleFlashData_badData
|
|
subi r18, 6 ; remaining length
|
|
adiw xh:xl, FLASH_PACKET_DATA_OFFS_ADDR-FLASH_MSG_OFFS_MSGLEN
|
|
ld zl, X+ ; address (low)
|
|
ld zh, X+ ; address (high)
|
|
adiw xh:xl, 2 ; ignore high bytes, points to first data byte now
|
|
|
|
; rcall Flash_StartPage ; (R0, R1, R16, R20, R24, R25)
|
|
push zl
|
|
push zh
|
|
flashHandleFlashData_loop:
|
|
ld r0, X+
|
|
ld r1, X+
|
|
rcall Flash_WriteIntoPage ; (R15, R16, Z+)
|
|
subi r18, 2
|
|
brne flashHandleFlashData_loop
|
|
pop zh
|
|
pop zl
|
|
rcall Flash_FinishPage ; (R15, R16, R20)
|
|
clr r16
|
|
rjmp flashHandleFlashData_sendResponse
|
|
flashHandleFlashData_badData:
|
|
ldi r16, FLASH_ERROR_MSGERROR
|
|
flashHandleFlashData_sendResponse:
|
|
rcall flashSendFlashResponse ; (R15, R16, R17, R18, R19, R20, R21, R22, X)
|
|
sec
|
|
ret
|
|
|
|
|
|
|