; ***************************************************************************
; 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.   *
; ***************************************************************************




; ***************************************************************************
; Source file for temperature sensor node on AtTiny 84
;
; This is for the full system (i.e. not the boot loader).
;
; All definitions and changes should go into this file.
;
;
; ***************************************************************************


;.equ clock=1000000 ; Define the clock frequency
.equ clock=8000000 ; Define the clock frequency


.nolist
.include "include/tn841def.inc" ; Define device ATtiny841
.list

.include "../defs.asm"
.include "version.asm"
;.include "defs_all.asm"

.include "devices/all/defs.asm"

.include "common/calls.asm"
.include "common/utils_wait.asm"
.include "common/utils_io.asm"



; ***************************************************************************
; defines

; ---------------------------------------------------------------------------
; generic

.equ COMONUART0_IFACENUM = 1
.equ TTYONUART1_IFACENUM = 2


; debug

;.equ T03_FLAGS_ALLOC        = 0x01
;.equ T03_FLAGS_I1_SKIPPING  = 0x02
;.equ T03_FLAGS_I1_RESTARTED = 0x04
;.equ T03_FLAGS_ADDIN        = 0x08
;.equ T03_FLAGS_I1_ADDOUT    = 0x10
;.equ T03_FLAGS_I2_ADDOUT    = 0x20



; ---------------------------------------------------------------------------
; firmware settings including list of modules used


#define MAIN_WITHOUT_MSG_HANDLING ; we do message handling ourselfes
#define APP_STATS_NETDEV2
#define APP_ROUTER_NO_ADDR_MGR
#define COM_ACCEPT_ALL_DEST       ; accept all messages!

#define MODULES_CLOCK
;#define MODULES_COM
;#define MODULES_COM_WITH_ADDR_PROTO
#define MODULES_LED1
;#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
;#define MODULES_SI7021
;#define MODULES_STATS
;#define MODULES_CNY70
;#define MODULES_REED
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
;#define MODULES_MOTION
#define MODULES_NETWORK
#define MODULES_COM2W
;#define MODULES_COMONUART0
;#define MODULES_TTYONUART1
#define MODULES_UARTFD1
#define APPS_STATS
;#define APPS_NETWORK
;#define APPS_ROUTER
#define APPS_FORWARDER



.equ NET_BUFFERS_NUM           = 10
.equ NET_MSGNUMINBUF_SIZE      =  8 ; max buffer nums in ringbuffer (global incoming)
.equ NET_IFACE_OUTMSGBUF_SIZE  =  8 ; max buffer nums in ringbuffer (per interface outbound)

.equ UART_HW_MSGNUMINBUF_SIZE  = 8
.equ UART_HW_MSGNUMOUTBUF_SIZE = 8



; ---------------------------------------------------------------------------
; defines for values

.equ VALUE_ID_DS18B20_TEMP     = 0x06

.equ VALUE_ID_ROUTER_SETRANGE  = 0x89



.equ COM_DATA0_DDR      = COM_DATA_DDR
.equ COM_DATA0_INPUT    = COM_DATA_INPUT
.equ COM_DATA0_OUTPUT   = COM_DATA_OUTPUT
.equ COM_DATA0_PUE      = COM_DATA_PUE
.equ COM_DATA0_PIN      = COM_DATA_PIN

.equ COM_CLK0_DDR       = COM_CLK_DDR
.equ COM_CLK0_INPUT     = COM_CLK_INPUT
.equ COM_CLK0_OUTPUT    = COM_CLK_OUTPUT
.equ COM_CLK0_PUE       = COM_CLK_PUE
.equ COM_CLK0_PIN       = COM_CLK_PIN

.equ COM_IRQ_ADDR_CLK0  = COM_IRQ_ADDR_CLK
.equ COM_IRQ_BIT_CLK0   = COM_IRQ_BIT_CLK
.equ COM_IRQ_GIFR_CLK0  = COM_IRQ_GIFR_CLK
.equ COM_IRQ_GIMSK_CLK0 = COM_IRQ_GIMSK_CLK


; ***************************************************************************
; code segment

.cseg
.org 000000



; ---------------------------------------------------------------------------
; Reset and interrupt vectors

        rjmp BOOTLOADER_ADDR          ;  1: RESET             Reset vector  use this for flashed system
	reti                          ;  2: INT0              External Interrupt Request 0
        rjmp com2wPcintIsr            ;  3: PCINT0            Pin Change Interrupt 0
	reti                          ;  4: PCINT1            Pin Change Interrupt 1
	reti                          ;  5: WDT               Watchdog Time-out
	reti                          ;  6: TIM1_CAPT         Timer/Counter1 Capture Event
	reti                          ;  7: TIM1_COMPA (OC1A) Timer/Counter1 Compare Match A
	reti                          ;  8: TIM1_COMPB (OC1B) Timer/Counter1 Compare Match B
	reti                          ;  9: TIM1_OVF (OVF1)   Timer/Counter1 Overflow
        rjmp baseTimerIrqOC0A         ; 10: TIM0_COMPA (OC0A) Timer/Counter0 Compare Match A
	reti                          ; 11: TIM0_COMPB (OC0B) Timer/Counter0 Compare Match B
	reti                          ; 12: TIM0_OVF (OVF0)   Timer/Counter0 Overflow
	reti                          ; 13: ANA_COMP0         Analog Comparator 0
        reti                          ; 14: ADC_READY         ADC Conversion Complete
        reti                          ; 15: EE_RDY (ERDY)     EEPROM Ready
        reti                          ; 16: ANA_COMP1         Analog Comparator 1
        reti                          ; 17: TIM2_CAPT         Timer/Counter2 Capture Event
        reti                          ; 18: TIM2_COMPA (OC2A) Timer/Counter2 Compare Match A
        reti                          ; 19: TIM2_COMPB (OC2B) Timer/Counter2 Compare Match B
        reti                          ; 20: TIM2_OVF (OVF2)   Timer/Counter2 Overflow
        reti                          ; 21: SPI               SPI Serial Transfer Complete
        reti                          ; 22: USART0_RXS        USART0 Rx Start
;        rjmp ComOnUart0_RxCharIsr     ; 23: USART0_RXC        USART0 Rx Complete
        reti                          ; 23: USART0_RXC        USART0 Rx Complete
        reti                          ; 24: USART0_DRE        USART0 Data Register Empty
        reti                          ; 25: USART0_TXC        USART0 Tx Complete
        reti                          ; 26: USART1_RXS        USART1 Rx Start
        rjmp UARTFD1_RxCharIsr        ; 27: USART1_RXC        USART1 Rx Complete
        rjmp UARTFD1_TxUdreIsr        ; 28: USART1_DRE        USART1 Data Register Empty
        rjmp UARTFD1_TxCharIsr        ; 29: USART1_TXC        USART1 Tx Complete
        reti                          ; 30: TWI               Two-Wire-Interface
        reti                          ; 31: RESERVED          reserved



devInfoBlock:        ; 12 bytes
devInfoManufacturer: .db 'A', 'Q', 'U', 'A'
devInfoId:           .db DEVICEINFO_ID, 0
devInfoVersion:      .db DEVICEINFO_VERSION, DEVICEINFO_REVISION             ; version, revision
firmwareVersion:     .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR
                     .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL



; ---------------------------------------------------------------------------
; @routine firmwareStart @global

firmwareStart:
  rjmp main
; @end



; ---------------------------------------------------------------------------
; @routine onSystemStart

onSystemStart:
  ldi r16, 0xf0
  sts netInterfaceData+NET_IFACE_OFFS_ADDRESS, r16
  sts netInterfaceData2+NET_IFACE_OFFS_ADDRESS, r16
  ret
; @end



onEvery100ms:
onEverySecond:
onEveryMinute:
onEveryHour:
onEveryDay:
  ret



; ---------------------------------------------------------------------------
; @routine onEveryLoop
;
; Called on every loop (i.e. after awakening from sleep).

onEveryLoop:
  ret
; @end



; ---------------------------------------------------------------------------
; @routine onMessageReceived
;
; Called on every message received

onMessageReceived:
  clc
  ret
; @end






; ***************************************************************************
; includes

.include "devices/all/hw_tn841.asm"
.include "devices/all/includes.asm"
.include "common/debug.asm"




; ---------------------------------------------------------------------------
; defines for network interface

.equ netInterfaceData  = uartFd1_iface
.equ netInterfaceData2 = com2w_iface


