split uart_bitbang2 into multiple files.

This commit is contained in:
Martin Preuss
2025-05-30 17:03:35 +02:00
parent f1c858e3a7
commit 0b8cb929b7
6 changed files with 205 additions and 172 deletions

View File

@@ -123,7 +123,7 @@ uartBitBang_sendNextPkg:
rcall NET_Buffer_Locate ; get pointer to buffer (R17)
brcc uartBitBang_sendNextPkg_end
adiw xh:xl, 1 ; skip buffer header
rcall uartBitbang_SendPacket ; (R16, R17, R21, R22, X)
rcall uartBitbang_SendMsg ; (R16, R17, R21, R22, X)
brcc uartBitBang_sendNextPkg_error
rcall NET_Interface_GetNextOutgoingMsgNum ; remove from stack (R17, R18, X)
rcall NET_Buffer_ReleaseByNum ; release buffer (R16, X)
@@ -144,73 +144,38 @@ uartBitBang_sendNextPkg_end:
;
; Receive packet.
;
; @return CFLAG set if okay (packet received), cleared on error
; @clobbers R16, R17, X (R18, R19, R20, R21, R22, R24, R25)
; @param Y pointer to start of interface data
; @clobbers R16, R17, R18, R19, R20, R21, R22, R24, R25, X
uartBitbang_receiveNextPkg:
rcall NET_Buffer_Alloc ; (R16, R17, X)
rcall NET_Buffer_Alloc ; R16=buffer num (R16, R17, X)
brcs uartBitbang_receiveNextPkg_gotBuffer
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
rcall NET_Interface_IncCounter16 ; (R24, R25)
clc
rjmp uartBitbang_receiveNextPkg_end
uartBitbang_receiveNextPkg_gotBuffer:
push r16 ; buffer number
adiw xh:xl, 1
rcall uartBitbang_receiveAndCheckPkg ; (r16, r17, r18, r19, r20, r21, r22, X)
pop r17 ; pop buffer number to R17
brcs uartBitbang_receiveNextPkg_gotPkg
tst r16 ; error code=0: pkg not for me
breq uartBitbang_receiveNextPkg_RelBuffer
uartBitbang_receiveNextPkg_incCntRelBuffer:
rcall NET_Interface_IncCounter16 ; (R24, R25)
uartBitbang_receiveNextPkg_RelBuffer:
mov r16, r17
rcall NET_Buffer_ReleaseByNum ; (R16, X)
clc
rjmp uartBitbang_receiveNextPkg_end
uartBitbang_receiveNextPkg_gotPkg:
mov r16, r17
ldd r18, Y+NET_IFACE_OFFS_ADDRESS
ldi r19, NET_BUFFERS_SIZE-1
rcall uartBitbang_ReceiveAndCheckMsg ; (R16, R17, R19, R20, R21, R22, R24, R25)
pop r16
brcc uartBitbang_receiveNextPkg_relBuffer
rcall NET_AddIncomingMsgNum ; (R17, R18, X)
ldi r16, NET_IFACE_OFFS_ERR_NOBUF_LOW
brcc uartBitbang_receiveNextPkg_incCntRelBuffer
ldi r16, NET_IFACE_OFFS_PACKETSIN_LOW
rcall NET_Interface_IncCounter16 ; (R24, R25)
sec
brcs uartBitbang_receiveNextPkg_end
push r16
ldi r16, NET_IFACE_OFFS_ERR_MISSED_LOW
rcall NET_Interface_IncCounter16 ; (R24, R25)
pop r16
; fall-through to release buffer
uartBitbang_receiveNextPkg_relBuffer:
rcall NET_Buffer_ReleaseByNum ; (R16, X)
uartBitbang_receiveNextPkg_end:
ret
; @end
; ---------------------------------------------------------------------------
; @routine uartBitbang_receiveAndCheckPkg
;
; Receive a packet into buffer pointed to by X and CRC check it.
; Expects interrupts to be disabled.
;
; @param X buffer to receive to
; @param Y pointer to start of interface data
; @return CFLAG set if okay (packet received), cleared on error
; @return R16 error var offset if CFLAG is cleared
; @clobbers: r16 (r17, r18, r19, r20, r21, r22, X)
uartBitbang_receiveAndCheckPkg:
ldd r16, Y+NET_IFACE_OFFS_ADDRESS
ldi r17, (NET_BUFFERS_SIZE-4)
push xl
push xh
rcall uartBitbang_ReceivePacketIntoBuffer ; (r16, r17, r18, r19, r20, r21, r22, X)
pop xh
pop xl
brcc uartBitbang_receiveAndCheckPkg_end
rcall NETMSG_CheckMessageInBuffer ; (R16, R17, R18, R19, R20, X)
ldi r16, NET_IFACE_OFFS_ERR_CONTENT_LOW
uartBitbang_receiveAndCheckPkg_end:
ret
; @end