avr: re-introduce UID to new VALUE messages, set UID in VALUE response messages.
This commit is contained in:
@@ -185,15 +185,13 @@ Utils_Fini:
|
|||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; Utils_FillSram
|
; @routine Utils_FillSram @global
|
||||||
;
|
;
|
||||||
; IN:
|
; @return X points directly behind filled memory
|
||||||
; - x: pointer to SRAM to fill
|
; @param X pointer to SRAM to fill
|
||||||
; - r16: value to fill the SRAM with
|
; @param r16 value to fill the SRAM with
|
||||||
; - r17: size of area to fill
|
; @param r17 size of area to fill
|
||||||
; OUT:
|
; @clobbers r17
|
||||||
; - nothing
|
|
||||||
; MODIFIED REGISTERS: r17, x
|
|
||||||
|
|
||||||
Utils_FillSram:
|
Utils_FillSram:
|
||||||
tst r17
|
tst r17
|
||||||
@@ -205,6 +203,7 @@ Utils_FillSram_loop:
|
|||||||
brne Utils_FillSram_loop
|
brne Utils_FillSram_loop
|
||||||
Utils_FillSram_end:
|
Utils_FillSram_end:
|
||||||
ret
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -357,9 +357,9 @@ onPacketReceived_l1:
|
|||||||
|
|
||||||
|
|
||||||
onSetValueReceived:
|
onSetValueReceived:
|
||||||
adiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUEID
|
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUEID
|
||||||
ld r16, X
|
ld r16, X
|
||||||
sbiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUEID
|
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUEID
|
||||||
cpi r16, VALUE_ID_REED_CONF
|
cpi r16, VALUE_ID_REED_CONF
|
||||||
brne onSetValueReceived_l1
|
brne onSetValueReceived_l1
|
||||||
rjmp onSetReedConf
|
rjmp onSetReedConf
|
||||||
@@ -370,9 +370,9 @@ onSetValueReceived_l1:
|
|||||||
|
|
||||||
onSetReedConf:
|
onSetReedConf:
|
||||||
; get new value
|
; get new value
|
||||||
adiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUE
|
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
|
||||||
ld r16, X
|
ld r16, X
|
||||||
sbiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUE
|
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
|
||||||
; set config
|
; set config
|
||||||
rcall REED_SetConfig
|
rcall REED_SetConfig
|
||||||
; send ACK
|
; send ACK
|
||||||
|
|||||||
@@ -220,6 +220,25 @@ COM2_BeginMsgWithVariablePayload_l1:
|
|||||||
lsr r3 ; shift out COM2_PAYLOAD_FLAGS_UID
|
lsr r3 ; shift out COM2_PAYLOAD_FLAGS_UID
|
||||||
brcc COM2_BeginMsgWithVariablePayload_l2
|
brcc COM2_BeginMsgWithVariablePayload_l2
|
||||||
; write uid
|
; write uid
|
||||||
|
rcall COM2_AddUidToBuffer
|
||||||
|
COM2_BeginMsgWithVariablePayload_l2:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine COM2_AddUidToBuffer @global
|
||||||
|
;
|
||||||
|
; Write UID into buffer given by X.
|
||||||
|
;
|
||||||
|
; @return X points to behind written uid
|
||||||
|
; @param R16 destination address
|
||||||
|
; @param R17 flags
|
||||||
|
; @param R18 command (e.g. CPRO_CMD_PING)
|
||||||
|
; @param X pointer to packet buffer
|
||||||
|
; @clobbers: r18, r19, r20, r21 (r16)
|
||||||
|
|
||||||
|
COM2_AddUidToBuffer:
|
||||||
push xh
|
push xh
|
||||||
push xl
|
push xl
|
||||||
rcall Utils_ReadUid ; (R16, X)
|
rcall Utils_ReadUid ; (R16, X)
|
||||||
@@ -229,8 +248,8 @@ COM2_BeginMsgWithVariablePayload_l1:
|
|||||||
st X+, r19
|
st X+, r19
|
||||||
st X+, r20
|
st X+, r20
|
||||||
st X+, r21
|
st X+, r21
|
||||||
COM2_BeginMsgWithVariablePayload_l2:
|
|
||||||
ret
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -100,13 +100,14 @@ Offset Length Meaning
|
|||||||
2 1 command code (REPORT_VALUE, REQ_SET_VALUE, RSP_SET_VALUE)
|
2 1 command code (REPORT_VALUE, REQ_SET_VALUE, RSP_SET_VALUE)
|
||||||
3 1 source address
|
3 1 source address
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
4 2 msg id/ref msg id
|
4 4 UID of the sending node
|
||||||
6 1 value id
|
8 2 msg id/ref msg id
|
||||||
7 1 value type
|
10 1 value id
|
||||||
8 2 value
|
11 1 value type
|
||||||
10 2 denom
|
12 2 value
|
||||||
|
14 2 denom
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
12 1 CRC8 byte
|
15 1 CRC8 byte
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -54,9 +54,11 @@
|
|||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; offsets in CPRO_CMD_VALUE_* messages
|
; offsets in CPRO_CMD_VALUE_* messages
|
||||||
|
|
||||||
.equ CPRO_PACKET_SETVALUE_OFFS_VALUEID = 6
|
.equ CPRO_PACKET_VALUE_OFFS_UID = 4
|
||||||
.equ CPRO_PACKET_SETVALUE_OFFS_VALUE = 8
|
.equ CPRO_PACKET_VALUE_OFFS_MSGID = 8
|
||||||
.equ CPRO_PACKET_SETVALUE_OFFS_DENOM = 10
|
.equ CPRO_PACKET_VALUE_OFFS_VALUEID = 10
|
||||||
|
.equ CPRO_PACKET_VALUE_OFFS_VALUE = 12
|
||||||
|
.equ CPRO_PACKET_VALUE_OFFS_DENOM = 14
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -27,29 +27,34 @@
|
|||||||
; @param R21:R20 denom (e.g. 100, meaning value must be divided by 100)
|
; @param R21:R20 denom (e.g. 100, meaning value must be divided by 100)
|
||||||
; @param R22 value type
|
; @param R22 value type
|
||||||
; @param X buffer to write to
|
; @param X buffer to write to
|
||||||
; @clobbers R6, R7, R8, R9, R10, R11, R12, R16, R17, X, Y (R3, R4, R15, R16, R17, R18, R19, R20, R21)
|
; @clobbers R16 (R17, R18, R19, R20, R21)
|
||||||
|
|
||||||
CPRO_WriteReportValue:
|
CPRO_WriteReportValue:
|
||||||
st X+, r16 ; dest address
|
st X+, r16 ; dest address
|
||||||
ldi r16, 10 ; msg code+src address+8 payload bytes
|
ldi r16, 14 ; msg code+src address+12 payload bytes
|
||||||
st X+, r16 ; msg len
|
st X+, r16 ; msg len
|
||||||
ldi r16, CPRO_CMD_VALUE_REPORT
|
ldi r16, CPRO_CMD_VALUE_REPORT
|
||||||
st X+, r16 ; msg code
|
st X+, r16 ; msg code
|
||||||
ldi r16, com2Address
|
ldi r16, com2Address
|
||||||
st X+, r16 ; src address
|
st X+, r16 ; src address
|
||||||
clr r16
|
clr r16
|
||||||
st X+, r16 ; msg id/ref id, low
|
push r17
|
||||||
st X+, r16 ; msg id/ref id, high
|
ldi r17, 6 ; uid (4 bytes), msg/ref id (2 bytes)
|
||||||
st X+, r17 ; value id
|
rcall Utils_FillSram ; (R17)
|
||||||
st X+, r22 ; value type
|
pop r17
|
||||||
st X+, r18 ; value (low)
|
st X+, r17 ; value id
|
||||||
st X+, r19 ; value (high)
|
st X+, r22 ; value type
|
||||||
st X+, r20 ; denom (low)
|
st X+, r18 ; value (low)
|
||||||
st X+, r21 ; denom (high)
|
st X+, r19 ; value (high)
|
||||||
|
st X+, r20 ; denom (low)
|
||||||
|
st X+, r21 ; denom (high)
|
||||||
|
|
||||||
|
sbiw xh:xl, 12 ; go back to UID (12=16 back, 4 forward)
|
||||||
|
rcall COM2_AddUidToBuffer ; (r16, r18, r19, r20, r21)
|
||||||
|
sbiw xh:xl, 8 ; go back to beginning of message
|
||||||
|
|
||||||
sbiw xh:xl, 12 ; go back to beginning of message
|
|
||||||
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
||||||
sbiw xh:xl, 13 ; go back to beginning of message
|
sbiw xh:xl, 16 ; go back to beginning of message
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -70,7 +75,7 @@ CPRO_WriteSetValueResponse:
|
|||||||
|
|
||||||
; add checksum byte
|
; add checksum byte
|
||||||
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
||||||
sbiw xh:xl, 13 ; go back to beginning of message
|
sbiw xh:xl, 16 ; go back to beginning of message
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -86,7 +91,7 @@ CPRO_WriteSetValueResponse:
|
|||||||
; @param R21:R20 denom (e.g. 100, meaning value must be divided by 100, 0=don't change)
|
; @param R21:R20 denom (e.g. 100, meaning value must be divided by 100, 0=don't change)
|
||||||
; @param X buffer to write to
|
; @param X buffer to write to
|
||||||
; @param Y buffer with received setValueRequest message
|
; @param Y buffer with received setValueRequest message
|
||||||
; @clobbers R16, R17, R18, R19, (Y)
|
; @clobbers R16, R17, R18, R19, (R20, R21, Y)
|
||||||
|
|
||||||
CPRO_WriteGetValueResponse:
|
CPRO_WriteGetValueResponse:
|
||||||
push r18
|
push r18
|
||||||
@@ -96,12 +101,12 @@ CPRO_WriteGetValueResponse:
|
|||||||
pop r18
|
pop r18
|
||||||
|
|
||||||
; replace values
|
; replace values
|
||||||
adiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUE
|
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE
|
||||||
st X+, r18 ; value (low)
|
st X+, r18 ; value (low)
|
||||||
st X+, r19 ; value (high)
|
st X+, r19 ; value (high)
|
||||||
st X+, r20 ; denom (low)
|
st X+, r20 ; denom (low)
|
||||||
st X+, r21 ; denom (high)
|
st X+, r21 ; denom (high)
|
||||||
sbiw xh:xl, CPRO_PACKET_SETVALUE_OFFS_VALUE+4
|
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_VALUE+4
|
||||||
|
|
||||||
; add checksum byte
|
; add checksum byte
|
||||||
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
rcall com2CalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
||||||
@@ -124,9 +129,9 @@ CPRO_WriteGetValueResponse:
|
|||||||
cproInvertValueMsg:
|
cproInvertValueMsg:
|
||||||
; copy received message into new message
|
; copy received message into new message
|
||||||
mov r19, r16
|
mov r19, r16
|
||||||
ldi r18, 12 ; message size without checksum byte
|
ldi r18, 16 ; message size without checksum byte
|
||||||
rcall Utils_Copy_SDRAM ; (R17, R18, X, Y)
|
rcall Utils_Copy_SDRAM ; (R17, R18, X, Y)
|
||||||
sbiw xh:xl, 12 ; go back to beginning of message
|
sbiw xh:xl, 16 ; go back to beginning of message
|
||||||
|
|
||||||
; exchange src and dest address
|
; exchange src and dest address
|
||||||
adiw xh:xl, 3 ; src address
|
adiw xh:xl, 3 ; src address
|
||||||
@@ -140,7 +145,14 @@ cproInvertValueMsg:
|
|||||||
adiw xh:xl, 2 ; msg code
|
adiw xh:xl, 2 ; msg code
|
||||||
st X, r19
|
st X, r19
|
||||||
sbiw xh:xl, 2
|
sbiw xh:xl, 2
|
||||||
|
|
||||||
|
; replace UID
|
||||||
|
adiw xh:xl, CPRO_PACKET_VALUE_OFFS_UID
|
||||||
|
rcall COM2_AddUidToBuffer ; (r16, r18, r19, r20, r21)
|
||||||
|
sbiw xh:xl, CPRO_PACKET_VALUE_OFFS_UID+4 ; go back to beginning of message
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user