Added COM_EnqueuePing.
This commit is contained in:
41
avr/com.asm
41
avr/com.asm
@@ -25,6 +25,8 @@
|
||||
.equ COM_REPEAT_IMPORTANT = 64
|
||||
.equ COM_REPEAT_VITAL = 255
|
||||
|
||||
.equ COM_CMD_PING = 1
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; data
|
||||
@@ -153,6 +155,45 @@ COM_EnqueuePacket_error:
|
||||
ret
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; Enqueue a PING packet.
|
||||
;
|
||||
; IN:
|
||||
; - R17: destination address
|
||||
; OUT:
|
||||
; - CFLAG: set if okay, clear otherwise
|
||||
; MODIFIED REGS:
|
||||
|
||||
COM_EnqueuePing:
|
||||
ldi yl, LOW(comRingBuffer)
|
||||
ldi yh, HIGH(comRingBuffer)
|
||||
ldi r16, 3+2 ; 3 bytes for buffer length, flags and destination address, src address, cmd,
|
||||
push r17
|
||||
rcall RingBuffer_Alloc
|
||||
pop r17
|
||||
brcc COM_EnqueuePing_error
|
||||
mov r18, r16
|
||||
mov r20, r16 ; r20: start of packet in ring buffer
|
||||
ldd r19, y+RINGBUFFER_OFFS_MAXSIZE
|
||||
ldi r16, 3+2
|
||||
rcall RingBuffer_Write ; write length
|
||||
clr r16
|
||||
rcall RingBuffer_Write ; write flags
|
||||
mov r16, r17
|
||||
rcall RingBuffer_Write ; write dest addr
|
||||
ldi r16, COM_CMD_PING
|
||||
rcall RingBuffer_Write ; write cmd
|
||||
mov r18, r20
|
||||
ldi r20, COM_REPEAT_INFO
|
||||
rcall COM_EnqueuePacket
|
||||
brcc COM_EnqueuePing_error
|
||||
sec
|
||||
ret
|
||||
COM_EnqueuePing_error:
|
||||
clc
|
||||
ret
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; comHandleNextPacketInRingbuffer
|
||||
|
||||
Reference in New Issue
Block a user