avr: fixed some bugs in address handling code
- fixed bugs in jumptable code and calls NOTE to self: addresses in flash are WORD addresses, so we need to double the address difference when working with bytes! - correctly set params for call to cproAddressSetTimer
This commit is contained in:
@@ -39,13 +39,20 @@ CPRO_Address_OnPacketReceived:
|
|||||||
ld r16, x
|
ld r16, x
|
||||||
sbiw xh:xl, COM2_MSG_OFFS_CMD
|
sbiw xh:xl, COM2_MSG_OFFS_CMD
|
||||||
|
|
||||||
ldi r17, (cproPacketTypeTransTableEnd-cproPacketTypeTransTableBegin) & 0xff
|
cpi r16, CPRO_CMD_NEED_ADDRESS
|
||||||
|
brcs CPRO_Address_OnPacketReceived_nc ; smaller than 60
|
||||||
|
|
||||||
|
cpi r16, (CPRO_CMD_ADDRESS_RANGE+1)
|
||||||
|
brcc CPRO_Address_OnPacketReceived_nc
|
||||||
|
|
||||||
|
CPRO_Address_OnPacketReceived_debug2:
|
||||||
|
ldi r17, (cproPacketTypeTransTableEnd-cproPacketTypeTransTableBegin)*2
|
||||||
ldi zl, LOW(cproPacketTypeTransTableBegin)
|
ldi zl, LOW(cproPacketTypeTransTableBegin)
|
||||||
ldi zh, HIGH(cproPacketTypeTransTableBegin)
|
ldi zh, HIGH(cproPacketTypeTransTableBegin)
|
||||||
rcall Utils_FindBytePositionInTable
|
rcall Utils_FindBytePositionInTable
|
||||||
brcc CPRO_Address_OnPacketReceived_nc
|
brcc CPRO_Address_OnPacketReceived_nc
|
||||||
|
|
||||||
ldi r17, (cproPacketTypeTransTableEnd-cproPacketTypeTransTableBegin) & 0xff
|
ldi r17, (cproPacketTypeTransTableEnd-cproPacketTypeTransTableBegin)*2
|
||||||
ldi zl, LOW(cproPacketTypeHandleTable)
|
ldi zl, LOW(cproPacketTypeHandleTable)
|
||||||
ldi zh, HIGH(cproPacketTypeHandleTable)
|
ldi zh, HIGH(cproPacketTypeHandleTable)
|
||||||
rcall Utils_TableJump
|
rcall Utils_TableJump
|
||||||
@@ -58,12 +65,12 @@ CPRO_Address_OnPacketReceived_nc:
|
|||||||
|
|
||||||
|
|
||||||
cproPacketTypeTransTableBegin:
|
cproPacketTypeTransTableBegin:
|
||||||
.db CPRO_CMD_PING, CPRO_CMD_NEED_ADDRESS, CPRO_CMD_HAVE_ADDRESS, CPRO_CMD_ADDRESS_RANGE, CPRO_CMD_DENY_ADDRESS, CPRO_CMD_CLAIM_ADDRESS
|
.db CPRO_CMD_NEED_ADDRESS, CPRO_CMD_HAVE_ADDRESS, CPRO_CMD_ADDRESS_RANGE, CPRO_CMD_DENY_ADDRESS, CPRO_CMD_CLAIM_ADDRESS, CPRO_CMD_PING
|
||||||
cproPacketTypeTransTableEnd:
|
cproPacketTypeTransTableEnd:
|
||||||
|
|
||||||
; position within table must be in same order as in table above!
|
; position within table must be in same order as in table above!
|
||||||
cproPacketTypeHandleTable:
|
cproPacketTypeHandleTable:
|
||||||
.dw cproHandlePing, cproHandleNeedAddr, cproHandleHaveAddr, cproHandleAddrRange, cproHandleDenyAddr, cproHandleClaimAddr
|
.dw cproHandleNeedAddr, cproHandleHaveAddr, cproHandleAddrRange, cproHandleDenyAddr, cproHandleClaimAddr, cproHandlePing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -80,6 +87,8 @@ cproHandleNeedAddr:
|
|||||||
lds r24, com2Address
|
lds r24, com2Address
|
||||||
clr r25
|
clr r25
|
||||||
adiw r25:r24, 3
|
adiw r25:r24, 3
|
||||||
|
mov r18, r24
|
||||||
|
mov r19, r25
|
||||||
rjmp cproAddressSetTimer
|
rjmp cproAddressSetTimer
|
||||||
cproHandleNeedAddr_done:
|
cproHandleNeedAddr_done:
|
||||||
sec
|
sec
|
||||||
@@ -111,18 +120,20 @@ cproHandleHaveAddr_done:
|
|||||||
cproHandleClaimAddr:
|
cproHandleClaimAddr:
|
||||||
adiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS
|
adiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS
|
||||||
ld r16, x
|
ld r16, x
|
||||||
tst r16
|
sbiw xh:xl, CPRO_PACKET_CLAIMADDR_OFFS_ADDRESS
|
||||||
|
tst r16 ; dont handle claim addr 0
|
||||||
breq cproHandleClaimAddr_done
|
breq cproHandleClaimAddr_done
|
||||||
cpi r16, 0xff
|
cpi r16, 0xff ; dont handle claim addr 0
|
||||||
breq cproHandleClaimAddr_done
|
breq cproHandleClaimAddr_done
|
||||||
lds r17, com2Address
|
lds r17, com2Address
|
||||||
tst r17
|
tst r17
|
||||||
breq cproHandleClaimAddr_done
|
breq cproHandleClaimAddr_done ; we have no address, yet
|
||||||
cp r16, r17
|
cp r16, r17
|
||||||
brne cproHandleClaimAddr_done
|
brne cproHandleClaimAddr_done ; not our address
|
||||||
ldi r16, CPRO_MODE_SEND_DENY_ADDR
|
ldi r16, CPRO_MODE_SEND_DENY_ADDR
|
||||||
sts cproMode, r16
|
sts cproMode, r16
|
||||||
rcall cproAddressSetTimer1s
|
rcall cproAddressSetTimer1s
|
||||||
|
|
||||||
cproHandleClaimAddr_done:
|
cproHandleClaimAddr_done:
|
||||||
sec
|
sec
|
||||||
ret
|
ret
|
||||||
|
|||||||
Reference in New Issue
Block a user