; ***************************************************************************
; copyright   : (C) 2025 by Martin Preuss
; email       : martin@libchipcard.de
;
; ***************************************************************************
; * This file is part of the project "AqHome".                              *
; * Please see toplevel file COPYING of that project for license details.   *
; ***************************************************************************

#ifndef AQH_AVR_NETWORK_MAIN_ASM
#define AQH_AVR_NETWORK_MAIN_ASM


.cseg



; ---------------------------------------------------------------------------
; @routine NET_Init
;
; Initializes buffers.
;
; @clobbers R16, R17, X

NET_Init:
  rcall NET_Buffer_Init                       ; (R16, R17, X)

  ldi r16, NET_MSGNUMINBUF_SIZE
  ldi yl, LOW(netRingBufferMsgNumIn)
  ldi yh, HIGH(netRingBufferMsgNumIn)
  rcall RingBufferY_Init                        ; (R17)

  sec
  ret
; @end



; ---------------------------------------------------------------------------
; @routine NET_AddIncomingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @param R16 buffer number of the next incoming message
; @clobbers R17, R18, X

NET_AddIncomingMsgNum:
  push yl
    push yh
      ldi yl, LOW(netRingBufferMsgNumIn)
      ldi yh, HIGH(netRingBufferMsgNumIn)
      rcall RingBufferY_WriteByteGuarded        ; R17, R18, X
    pop yh
  pop yl
  ret
; @end



; ---------------------------------------------------------------------------
; @routine NET_GetNextIncomingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @return R16 buffer number of the next incoming message
; @clobbers R17, R18, X

NET_GetNextIncomingMsgNum:
  push yl
    push yh
      ldi yl, LOW(netRingBufferMsgNumIn)
      ldi yh, HIGH(netRingBufferMsgNumIn)
      rcall RingBufferY_ReadByteGuarded         ; R17, R18, X
    pop yh
  pop yl
  ret
; @end



; ---------------------------------------------------------------------------
; @routine NET_GetPeekIncomingMsgNum @global
;
; @return CFLAG on success, cleared on error
; @return R16 buffer number of the next incoming message
; @param Y pointer to start of interface data
; @clobbers R17, R18, X

NET_PeekNextIncomingMsgNum:
  push yl
    push yh
      ldi yl, LOW(netRingBufferMsgNumIn)
      ldi yh, HIGH(netRingBufferMsgNumIn)
      rcall RingBufferY_PeekByteGuarded         ; R17, R18, X
    pop yh
  pop yl
  ret
; @end




#endif

