; ***************************************************************************
; copyright   : (C) 2024 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/tn84def.inc" ; Define device ATtiny84
.list

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

.include "devices/all/defs.asm"

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



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

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

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



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

#define MODULES_CLOCK
#define MODULES_LED1
#define MODULES_NETWORK
#define MODULES_COM2W
#define MODULES_TWI_MASTER
;#define MODULES_LCD
;#define LCD_MINIMAL_FONT
#define MODULES_SI7021
;#define MODULES_STATS
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
#define MODULES_MOTION
#define MODULES_TCRT1000
;#define MODULES_CCS811

#define APPS_NETWORK
#define APPS_MOTION
#define APPS_DOOR
#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_TCRT1K           = 0x08

;.equ VALUE_ID_REED_CONF    = 0x81
.equ VALUE_ID_LEDSIMPLE_TIMING = 0x88



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

.cseg
.org 000000



; ---------------------------------------------------------------------------
; Reset and interrupt vectors (will be removed as soon as we can flash data over COM)

;	rjmp main ; Reset vector
        rjmp BOOTLOADER_ADDR ; Reset vector  ; use this for flashed system
	reti ; EXT_INT0
        rjmp com2wPcintIsr         ; PCI0
	reti ; PCI1
	reti ; WATCHDOG
	reti ; ICP1
	reti ; OC1A
	reti ; OC1B
	reti ; OVF1
        rjmp baseTimerIrqOC0A ; OC0A
	reti ; OC0B
	reti ; OVF0
	reti ; ACI
        reti ; ADCC
	reti ; ERDY
	reti ; USI_STR
	reti ; USI_OVF


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_tn84.asm"
.include "devices/all/includes.asm"



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

.equ netInterfaceData = com2w_iface



deviceCodeEnd:
  .if deviceCodeEnd >= BOOTLOADER_ADDR
    .warning "Code reaches into boot loader!"
  .endif

