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

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



.nolist
.include "include/m8515def.inc" ; Define device ATmega8515
.list

.include "version.asm"
.include "../defs.asm"
.include "./data.asm"

.include "devices/all/defs.asm"
.include "common/calls.asm"
.include "common/utils_wait.asm"
.include "common/utils_io.asm"



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

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

.equ NET_BUFFERS_NUM              = 8
.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)



; ---------------------------------------------------------------------------
; heap

.equ HEAP_START = 0x260
.equ HEAP_SIZE  = 32768-0x260




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

; #define MODULES_TIMER
#define MODULES_CLOCK
#define MODULES_XRAM
#define MODULES_HEAP
#define MODULES_LED1
#define MODULES_NETWORK
;#define MODULES_COMONUART0
;#define MODULES_UART_HW
;#define MODULES_UART_BITBANG
#define MODULES_COM2W
#define MODULES_SPI_HW
;#define MODULES_ILI9341
;#define MODULES_FONT_8X8
;#define MODULES_FONT_6X8
;#define MODULES_UART_BITBANG
;#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
;#define MODULES_SI7021
;#define MODULES_SGP30
;#define MODULES_SGP40
;#define MODULES_STATS
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
;#define MODULES_MOTION
;#define MODULES_CCS811

#define APPS_NETWORK
;#define APPS_MOTION
;#define APPS_REPORTSENSORS
#define APPS_STATS



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

.equ VALUE_ID_SI7021_TEMP      = 0x01
.equ VALUE_ID_SI7021_HUM       = 0x02

.equ VALUE_ID_ADC              = 0x03
;.equ VALUE_ID_DS18B20_TEMP     = 0x06
.equ VALUE_ID_MOTION           = 0x07

.equ VALUE_ID_SGP40_TVOC       = 0x08

.equ VALUE_ID_SGP30_TVOC       = 0x09
.equ VALUE_ID_SGP30_CO2        = 0x0a

;.equ VALUE_ID_REED_CONF    = 0x81

.equ VALUE_ID_DEBUG            = 0x7f

.equ VALUE_ID_LEDSIMPLE_TIMING = 0x88





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

.cseg
.org 000000



; ---------------------------------------------------------------------------
; Reset and interrupt vectors
  rjmp BOOTLOADER_ADDR          ;  1: Reset vector   RESET
  rjmp com2wPcintIsr            ;  2: INT0           External Interrupt Request 0
  reti                          ;  3: INT1           External Interrupt Request 1
  reti                          ;  4: TIMER1_CAPT    Timer/Counter1 Capture Event
  reti                          ;  5: TIMER1_COMPA   Timer/Counter1 Compare Match A
  reti                          ;  6: TIMER1_COMPB   Timer/Counter1 Compare Match B
  reti                          ;  7: TIMER1_OVF     Timer/Counter1 Overflow
  reti                          ;  8: TIMER0_OVF     Timer/Counter0 Overflow
  reti                          ;  9: SPI_STC        Serial Transfer Complete
  reti                          ; 10: USART_RXC      USART Rx Complete
  reti                          ; 11: USART_UDRE     USART Data Register Empty
  reti                          ; 12: USART_TXC      USART Tx Complete
  reti                          ; 13: ANA_COMP       Analog Comparator
  reti                          ; 14: INT2           External Interrupt Request 2
  rjmp baseTimerIrqOC0A         ; 15: TIMER0_COMP    Timer/Counter0 Compare Match
  reti                          ; 16: EE_RDY         EEPROM Ready
  reti                          ; 17: SPM_RDY        Store Program Memory Ready



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:
  ret
; @end



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

onMessageReceived:
  clc
  ret
; @end



; ---------------------------------------------------------------------------
; @routine onEvery100ms
;
; Called every 100ms. Add your routine calls here. No arguments, no results.

onEvery100ms:
onEverySecond:
onEveryMinute:
onEveryHour:
onEveryDay:
  ret
; @end



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





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

.include "devices/all/hw_m8515.asm"
.include "devices/all/includes.asm"

.include "common/debug.asm"



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

;.equ netInterfaceData = netUartIface
;.equ netInterfaceData = uart_bitbang_iface
.equ netInterfaceData = com2w_iface



