simplified message handling, switch from XOR checksum to CRC8 with polynomial 0x97.
0x97 allows for detection of all 1-3 bit errors in a message of up to 119 bytes (see https://www.faa.gov/aircraft/air_cert/design_approvals/air_software/media/TC-14-49.pdf)
This commit is contained in:
@@ -23,26 +23,30 @@ CPRO_EnqueueComSendStats:
|
||||
pop r16
|
||||
brcc CPRO_EnqueueComSendStats_error
|
||||
|
||||
ldi r17, CPRO_PAYLOAD_FLAGS_UID | (6<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM) ; seconds + 6 bytes payload
|
||||
ldi r17, CPRO_PAYLOAD_FLAGS_UID | (8<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM) ; seconds + 8 bytes payload
|
||||
ldi r18, CPRO_CMD_COMSENDSTATS
|
||||
push xh
|
||||
push xl
|
||||
rcall cproBeginMsgWithVariablePayload ; (R3, R4, R16, R17, R18, R19, R20, R21, X)
|
||||
lds r16, comStatsPacketsOut ; 6: packets out
|
||||
lds r16, comStatsPacketsOut ; packets out
|
||||
st X+, r16
|
||||
lds r16, comStatsPacketsOut+1
|
||||
st X+, r16
|
||||
lds r16, comStatsCollisions ; 8: collisions
|
||||
lds r16, comStatsCollisions ; collisions
|
||||
st X+, r16
|
||||
lds r16, comStatsCollisions+1
|
||||
st X+, r16
|
||||
lds r16, comStatsAborted ; 10: aborted
|
||||
lds r16, comStatsAborted ; aborted
|
||||
st X+, r16
|
||||
lds r16, comStatsAborted+1
|
||||
st X+, r16
|
||||
lds r16, comStatsSendNoBuffer ; sendNoBuffer
|
||||
st X+, r16
|
||||
lds r16, comStatsSendNoBuffer+1
|
||||
st X+, r16
|
||||
pop xl
|
||||
pop xh
|
||||
rcall comCalcAndAddChecksumByte
|
||||
rcall comCalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
||||
|
||||
; mark buffer as enqueued with PRIO "important" (higher retry count)
|
||||
ldi r20, COM_BUFFER_PRIO_IMPORTANT
|
||||
@@ -78,26 +82,38 @@ CPRO_EnqueueComRecvStats:
|
||||
pop r16
|
||||
brcc CPRO_EnqueueComRecvStats_error
|
||||
|
||||
ldi r17, CPRO_PAYLOAD_FLAGS_UID | (6<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM) ; seconds + 6 bytes payload
|
||||
ldi r17, CPRO_PAYLOAD_FLAGS_UID | (12<<CPRO_PAYLOAD_FLAGS_SHIFT_NUM) ; seconds + 6 bytes payload
|
||||
ldi r18, CPRO_CMD_COMRECVSTATS
|
||||
push xh
|
||||
push xl
|
||||
rcall cproBeginMsgWithVariablePayload ; (R3, R4, R16, R17, R18, R19, R20, R21, X)
|
||||
lds r16, comStatsPacketsIn ; 6: packets in
|
||||
lds r16, comStatsPacketsIn ; packets in
|
||||
st X+, r16
|
||||
lds r16, comStatsPacketsIn+1
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvCrcErrs ; 8: CRC errors
|
||||
lds r16, comStatsRecvCrcErrs ; CRC errors
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvCrcErrs+1
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvErrs ; 10: IO errors
|
||||
lds r16, comStatsRecvErrs ; IO errors
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvErrs+1
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvNoBuffer ; no buffer
|
||||
st X+, r16
|
||||
lds r16, comStatsRecvNoBuffer+1
|
||||
st X+, r16
|
||||
lds r16, comStatsHandled ; handled
|
||||
st X+, r16
|
||||
lds r16, comStatsHandled+1
|
||||
st X+, r16
|
||||
lds r16, comStatsMissed ; missed
|
||||
st X+, r16
|
||||
lds r16, comStatsMissed+1
|
||||
st X+, r16
|
||||
pop xl
|
||||
pop xh
|
||||
rcall comCalcAndAddChecksumByte
|
||||
rcall comCalcAndAddChecksumByte ; (R16, R17, R18, R19, X)
|
||||
|
||||
; mark buffer as enqueued with PRIO "important" (higher retry count)
|
||||
ldi r20, COM_BUFFER_PRIO_IMPORTANT
|
||||
|
||||
Reference in New Issue
Block a user