N23 basically works now.

This commit is contained in:
Martin Preuss
2025-04-26 11:04:01 +02:00
parent feabc76e36
commit 8925ce23e9
4 changed files with 258 additions and 102 deletions

View File

@@ -201,15 +201,18 @@ appNetworkHandleStateUp:
; @clobbers R16, R19 (R17, R18, R20, R21, X)
appNetworkSendMsgNextState:
ldd r19, NET_IFACE_OFFS_RANGE_BEGIN
ldd r19, Y+NET_IFACE_OFFS_RANGE_BEGIN
rcall appNetworkSendAddrMsg ; (R16, R17, R18, R19, R20, R21, X)
brcc appNetworkSendMsgNextState_end
brcc appNetworkSendMsgNextState_retry
ldd r16, Y+NET_IFACE_OFFS_STATUS
inc r16
std Y+NET_IFACE_OFFS_STATUS, r16
ldi r16, APP_NETWORK_TIMER_100MS
std Y+NET_IFACE_OFFS_STATETIMER, r16
appNetworkSendMsgNextState_end:
ret
appNetworkSendMsgNextState_retry:
ldi r16, 1
std Y+NET_IFACE_OFFS_STATETIMER, r16
ret
; @end
@@ -299,7 +302,7 @@ appNetworkHandleMsgDenyAddr:
rcall appNetworkResetState
ldi r16, 200 ; wait for 20s before trying whole process again
std Y+NET_IFACE_OFFS_STATETIMER, r16
rjmp appNetworkHandleMsgClaimAddr_end
rjmp appNetworkHandleMsgDenyAddr_end
appNetworkHandleMsgDenyAddr_claimNext:
; send CLAIM_ADDR for next address (new state: APP_NETWORK_STATE_NEEDADDRESS+1)
std Y+NET_IFACE_OFFS_RANGE_BEGIN, r16
@@ -307,7 +310,7 @@ appNetworkHandleMsgDenyAddr_claimNext:
std Y+NET_IFACE_OFFS_STATUS, r16
ldi r18, NETMSG_CMD_CLAIM_ADDRESS
rjmp appNetworkSendMsgNextState
appNetworkHandleMsgClaimAddr_end:
appNetworkHandleMsgDenyAddr_end:
ret
; @end
@@ -353,9 +356,36 @@ appNetworkResetState:
std Y+NET_IFACE_OFFS_STATETIMER, r16
ldi r16, APP_NETWORK_ADDRESS_RANGE_BEGIN
std Y+NET_IFACE_OFFS_RANGE_BEGIN, r16
rcall appNetworkGetAddressFromEeprom ; R16=addr (R15, X)
tst r16
breq appNetworkResetState_setRangeEnd
cpi r16, 0xff
breq appNetworkResetState_setRangeEnd
std Y+NET_IFACE_OFFS_RANGE_BEGIN, r16
appNetworkResetState_setRangeEnd:
ldi r16, APP_NETWORK_ADDRESS_RANGE_END ; last possible address+1
std Y+NET_IFACE_OFFS_RANGE_END, r16
ret
; @end
; ---------------------------------------------------------------------------
; @routine appNetworkGetAddressFromEeprom
;
; @return R16 address from EEPROM
; @clobbers R15, X
appNetworkGetAddressFromEeprom:
ldi xl, LOW(EEPROM_OFFS_COMADDR)
ldi xh, HIGH(EEPROM_OFFS_COMADDR)
in r15, SREG
push r15
cli
rcall Utils_ReadEepromIncr ; (R16)
pop r15
out SREG, r15
ret
; @end