COMPROTO: Added CPRO_EnqueueNeedAddress

This commit is contained in:
Martin Preuss
2023-02-04 16:01:48 +01:00
parent 1c08bcb1ba
commit 910bb78e52

View File

@@ -323,6 +323,63 @@ CPRO_EnqueueValue_error:
; ---------------------------------------------------------------------------
; Enqueue a NEEDADDRESS packet.
;
; IN:
; - R16: destination address
; OUT:
; - CFLAG: set if okay, clear otherwise
; MODIFIED REGS: R16, R18, R19, R20, R21, X, Y (R15, R17)
CPRO_EnqueueNeedAddress:
push r16
rcall COM_AllocBufferAndGetXY ; (r16, r17, r21)
pop r16
brcc CPRO_EnqueueNeedAddress_error
clr r1 ; r1: XOR byte
; write header (dest address, msg length)
st X+, r16 ; destination address
eor r1, r16
ldi r16, 6 ; 6 bytes payload
st X+, r16 ; msglen
eor r1, r16
; write payload
ldi r16, CPRO_CMD_NEED_ADDRESS ; 0: msg type
st X+, r16
eor r1, r16
clr r16 ; dummy src address
st X+, r16
eor r1, r16
push xh ; 2-5: UID
push xl
rcall Utils_ReadUid ; (R16, X)
pop xl
pop xh
st X+, r18
eor r1, r18
st X+, r19
eor r1, r19
st X+, r20
eor r1, r20
st X+, r21
eor r1, r21
; store XOR byte
mov r16, r1
st X+, r16
; mark buffer as enqueued with PRIO "important" (higher retry count)
ldi r20, COM_BUFFER_PRIO_IMPORTANT
rcall COM_EnqueuePacket ; (R15, R16)
brcc CPRO_EnqueueNeedAddress_error
sec
ret
CPRO_EnqueueNeedAddress_error:
clc
ret
; ---------------------------------------------------------------------------
; Enqueue a simple packet with payload only CMD and source address.
;