diff --git a/0BUILD b/0BUILD
index 1ebbd0c..c6780a5 100644
--- a/0BUILD
+++ b/0BUILD
@@ -2,7 +2,7 @@
-
+
$(project_name)
$(project_vmajor).$(project_vminor).$(project_vpatchlevel)
diff --git a/avr/devices/all/0BUILD b/avr/devices/all/0BUILD
index d06b95e..b63c66d 100644
--- a/avr/devices/all/0BUILD
+++ b/avr/devices/all/0BUILD
@@ -8,6 +8,7 @@
defs.asm
hw_tn84.asm
hw_tn85.asm
+ hw_tn841.asm
includes.asm
main.asm
modules.asm
diff --git a/avr/devices/t03/boot.asm b/avr/devices/t03/boot.asm
deleted file mode 100644
index eaf6e46..0000000
--- a/avr/devices/t03/boot.asm
+++ /dev/null
@@ -1,161 +0,0 @@
-; ***************************************************************************
-; Source file for base system node on AtTiny 84
-;
-; This is for the maintenance system (i.e. the flash 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 "defs_all.asm"
-
-
-
-; ***************************************************************************
-; defines
-
-; ---------------------------------------------------------------------------
-; generic
-
-.include "common/utils_wait.asm"
-.include "modules/com2/defs.asm"
-.include "modules/comproto/defs.asm"
-
-
-
-; ---------------------------------------------------------------------------
-; firmware settings
-
-.equ FIRMWARE_VERSION_MAJOR = 0
-.equ FIRMWARE_VERSION_MINOR = 0
-.equ FIRMWARE_VERSION_PATCHLEVEL = 1
-
-
-;#define COM_ACCEPT_ALL_DEST 1
-
-
-
-; ---------------------------------------------------------------------------
-; LED
-
-.equ LED_DDR = DDRB
-.equ LED_PORT = PORTB
-.equ LED_PIN = PINB
-.equ LED_PINNUM = PORTB2
-
-
-; ***************************************************************************
-; code segment
-
-.cseg
-.org 0x0000
-
-
-
-; ---------------------------------------------------------------------------
-; Reset and interrupt vectors
-
- rjmp main ; 1: RESET Reset vector use this for flashed system
- reti ; 2: INT0 External Interrupt Request 0
- reti ; 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
- reti ; 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
- 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
- reti ; 27: USART1_RXC USART1 Rx Complete
- reti ; 28: USART1_DRE USART1 Data Register Empty
- reti ; 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_BOOT, FIRMWARE_VERSION_MAJOR
- .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL
-
-firmwareStart:
- rjmp main ; will be overwritten when flashing
-
-
-
-; ***************************************************************************
-; main code
-
-
-.org BOOTLOADER_ADDR
-
-
-main:
- rjmp bootLoader ; this routine is in modules/bootloader/main.asm
-
-
-
-
-; ***************************************************************************
-; includes
-
-.include "common/utils_wait_fixed.asm"
-.include "common/utils_copy_from_flash.asm"
-.include "common/utils_copy_sdram.asm"
-.include "modules/flash/defs.asm"
-.include "modules/flash/eeprom.asm"
-.include "modules/flash/io.asm"
-.include "modules/flash/io_uart1.asm"
-.include "modules/flash/flashxp.asm"
-.include "modules/flash/flash4p.asm"
-.include "modules/flash/flashprocess.asm"
-.include "modules/flash/wait.asm"
-.include "modules/bootloader/main.asm"
-.include "modules/network/msg/defs.asm"
-.include "modules/network/msg/crc.asm"
-
-
-
-systemSetSpeed:
-.if clock == 1000000
- ldi r17, 0xd8
- ldi r16, (1<r16)
- brcc checkRecvdMsg_end ; no msg, jmp
- rcall NET_Buffer_Locate ; (R17)
- ld r17, X
- andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT)
- rcall reverseInterfaceNum ; (R17)
-; ldi r17, TTYONUART1_IFACENUM ; DEBUG: send everything to uart1 to test that code first
- rcall addMsgToInterface
- brcc checkRecvdMsg_end ; could not add, jmp
- rcall NET_GetNextIncomingMsgNum ; take off the queue
- rjmp checkRecvdMsg
-checkRecvdMsg_end:
- ret
-
-
-
-freeRecvdMsg:
- rcall NET_GetNextIncomingMsgNum ; take off the queue
- brcc freeRecvdMsg_end
- rcall NET_Buffer_ReleaseByNum ; delete
-freeRecvdMsg_end:
- ret
-
-
-
-; @return r17 reversed interface number
-; @param r17 buffer num
-; @clobbers r17
-
-reverseInterfaceNum:
- cpi r17, COMONUART0_IFACENUM
- brne reverseInterfaceNum_notUart0
- ldi r17, TTYONUART1_IFACENUM
- ret
-reverseInterfaceNum_notUart0:
- ldi r17, COMONUART0_IFACENUM
- ret
-; @end
-
-
-
-; @param r16 buffer num
-; @param r17 interface num
-
-addMsgToInterface:
- cpi r17, COMONUART0_IFACENUM
- brne addMsgToInterface_notUart0
- ldi yl, LOW(comOnUart0_iface)
- ldi yh, HIGH(comOnUart0_iface)
- rjmp NET_Interface_AddOutgoingMsgNum ; try to add msg to interface
-addMsgToInterface_notUart0:
- cpi r17, TTYONUART1_IFACENUM
- brne addMsgToInterface_end
- ldi yl, LOW(ttyOnUart1_iface)
- ldi yh, HIGH(ttyOnUart1_iface)
- rjmp NET_Interface_AddOutgoingMsgNum ; try to add msg to interface
-addMsgToInterface_end:
- clc
- ret
-; @end
-
-
-#ifdef WITH_SEND_DEBUG
-sendDebug:
- ldi yl, LOW(ttyOnUart1_iface)
- ldi yh, HIGH(ttyOnUart1_iface)
-
- lds r24, debugMsgCounter
- lds r25, debugMsgCounter+1
- sbiw r25:r24, 1
- brne sendDebug_storeCounter
- ; send device msg
- rcall NET_Buffer_Alloc ; (R16, R17, X)
- brcc sendDebug_end
- push r16
- adiw xh:xl, 1
- rcall writeDebugMsg
- sbiw xh:xl, 1
- pop r16
- rcall NET_Interface_AddOrReleaseOutMsg ; (R16, R17, R18, X)
- brcc sendDebug_end
- ; reset counter
-sendDebug_resetCounter:
- ldi r24, LOW(SEND_DEBUG_EVERY)
- ldi r25, HIGH(SEND_DEBUG_EVERY)
-sendDebug_storeCounter:
- sts debugMsgCounter, r24
- sts debugMsgCounter+1, r25
-sendDebug_end:
- ret
-
-
-writeDebugMsg:
- push yl
- push yh
- ldi yl, LOW(netBuffers)
- ldi yh, HIGH(netBuffers)
-
- rcall writeBufferInfoToRegs
- mov r0, r17
- mov r1, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r2, r17
- mov r3, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r4, r17
- mov r5, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r6, r17
- mov r7, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r8, r17
- mov r9, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r10, r17
- mov r11, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- clr r12
- clr r13
-
- push xl
- push xh
- rcall NET_Buffer_CountUsed
- pop xh
- pop xl
- mov r14, r16
- pop yh
- pop yl
-
- rcall NETMSG_Debug_Write ; (R16, R17, R18, R19, R20, R21, Z)
- ret
-
-
-
-writeBufferInfoToRegs:
- ldi r17, 0xff
- ldi r18, 0xff
- ld r16, Y
- andi r16, 0x80
- breq writeBufferInfoToRegs_end
- ldd r17, Y+(1+2) ; cmd code
- ldd r18, Y+(1+3) ; source addr
-writeBufferInfoToRegs_end:
- ret
-#endif
-
-
-
-DEBUG1:
- ldi r19, 10
- ldi r20, 2
- ldi r21, 8
- rcall blinkLed
- rjmp DEBUG1
-
-
-DEBUG2:
- ldi r19, 50
- ldi r20, 1
- ldi r21, 1
- rcall blinkLed
- rjmp DEBUG2
-
-
-
-; @param r19 loop count
-; @param r20 on time
-; @param r21 off time
-; @clobbers (R16, R18, R22, R24, R25)
-
-blinkLed:
- cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on
- mov r22, r20
- rcall waitForMultiple100ms ; (R252
- sbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; off
- mov r22, r21
- rcall waitForMultiple100ms ; (R22)
- dec r19
- brne blinkLed
- ret
-
-
-; @param r22 number of 100ms periods to wait
-waitForMultiple100ms:
-waitForMultiple100ms_loop:
- push r22
- rcall waitFor100ms
- pop r22
- dec r22
- brne waitForMultiple100ms_loop
- ret
-
-
-waitFor100ms:
- ldi r22, 10
-waitFor100ms_loop:
- push r22
- rcall waitFor10ms
- pop r22
- dec r22
- brne waitFor100ms_loop
- ret
-
-waitFor10ms:
- ldi r22, 100
-waitFor10ms_loop:
- push r22
- rcall Utils_WaitFor100MicroSecs
- pop r22
- dec r22
- brne waitFor10ms_loop
- ret
-
-
-; ***************************************************************************
-; data in SRAM
-
-.dseg
-
-programRamBegin:
- flashUid: .byte 4
- deviceCounter: .byte 2
- sendTStatsCounter: .byte 2
- sendRStatsCounter: .byte 2
- sendMStatsCounter: .byte 2
-#ifdef WITH_SEND_DEBUG
- debugMsgCounter: .byte 2
-#endif
-programRamEnd:
-
-
-
diff --git a/avr/devices/t03/main/0BUILD b/avr/devices/t03/main/0BUILD
index 66bcf48..0488c40 100644
--- a/avr/devices/t03/main/0BUILD
+++ b/avr/devices/t03/main/0BUILD
@@ -13,7 +13,7 @@
- main2.asm
+ main.asm
@@ -25,7 +25,6 @@
- data.asm
diff --git a/avr/devices/t03/main/data.asm b/avr/devices/t03/main/data.asm
deleted file mode 100644
index 52a7265..0000000
--- a/avr/devices/t03/main/data.asm
+++ /dev/null
@@ -1,17 +0,0 @@
-; ***************************************************************************
-; 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. *
-; ***************************************************************************
-
-
-.dseg
-
-
-programRamBegin:
- flashUid: .byte 4
-programRamEnd:
-
diff --git a/avr/devices/t03/main/main.asm b/avr/devices/t03/main/main.asm
index ed1d398..43e61dd 100644
--- a/avr/devices/t03/main/main.asm
+++ b/avr/devices/t03/main/main.asm
@@ -24,14 +24,6 @@
;.equ clock=1000000 ; Define the clock frequency
.equ clock=8000000 ; Define the clock frequency
-;.equ SEND_DEVICE_EVERY = 3000
-.equ SEND_DEVICE_EVERY = 3000 ; every 5mins
-.equ SEND_STATS_EVERY = 3100 ; about every 5mins
-;.equ SEND_STATS_EVERY = 300 ; every 30s
-;.equ SEND_DEBUG_EVERY = 110
-
-;#define WITH_SEND_DEBUG
-
.nolist
.include "include/tn841def.inc" ; Define device ATtiny841
@@ -60,7 +52,9 @@
.equ FIRMWARE_VERSION_PATCHLEVEL = 1
-;#define MODULES_TIMER
+#define MAIN_WITHOUT_MSG_HANDLING ; we do message handling ourselfes
+
+#define MODULES_CLOCK
;#define MODULES_COM
;#define MODULES_COM_WITH_ADDR_PROTO
;#define MODULES_LED
@@ -75,6 +69,11 @@
;#define MODULES_OWI_MASTER
;#define MODULES_DS18B20
;#define MODULES_MOTION
+#define MODULES_NETWORK
+#define MODULES_TTYONUART1
+#define MODULES_COMONUART0
+#define APPS_STATS
+
.equ NET_BUFFERS_NUM = 8
@@ -138,375 +137,80 @@ firmwareVersion: .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR
+; ---------------------------------------------------------------------------
+; @routine firmwareStart @global
+
firmwareStart:
- cli
- ; setup stack
- .ifdef SPH ; if SPH is defined
- ldi r16, High(RAMEND)
- out SPH, r16 ; init MSB stack pointer
- .endif
- ldi r16, Low(RAMEND)
- out SPL, r16 ; init LSB stack pointer
+ rjmp main
+; @end
- rcall systemSetSpeed
- rcall initHardware
-; rcall watchdogOff ; turn off watchdog timer (sometimes it stays on after reboot)
- rcall Utils_Init
- rcall Utils_SetupUid
- rcall initModules
-
- sbi LED_SIMPLE_DDR, LED_SIMPLE_PINNUM ; out
- sbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; off
+; ---------------------------------------------------------------------------
+; @routine onSystemStart
- sei
-main_loop:
- rcall BaseTimer_Run
- rcall TtyOnUart1_Run
- rcall ComOnUart0_Run
-
- ; check incoming msg
- rcall checkRecvdMsg
-; rcall freeRecvdMsg
-
- ; only modify SE, SM1 and SM0
- cli
- in r16, MCUCR
- ldi r17, (1<r16)
brcc checkRecvdMsg_end ; no msg, jmp
rcall NET_Buffer_Locate ; (R17)
+ ; let system handle incoming messages
+ push xl
+ push xh
+ rcall onMessageReceived
+ rcall mainModulesOnPacketReceived
+ rcall mainAppsOnPacketReceived
+ pop xh
+ pop xl
+
+ ; forward to other interface
ld r17, X
andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT)
rcall reverseInterfaceNum ; (R17)
@@ -517,20 +221,15 @@ checkRecvdMsg:
rjmp checkRecvdMsg
checkRecvdMsg_end:
ret
+; @end
-freeRecvdMsg:
- rcall NET_GetNextIncomingMsgNum ; take off the queue
- brcc freeRecvdMsg_end
- rcall NET_Buffer_ReleaseByNum ; delete
-freeRecvdMsg_end:
- ret
-
-
-
-; @return r17 reversed interface number
+; ---------------------------------------------------------------------------
+; @routine reverseInterfaceNum
+;
; @param r17 buffer num
+; @return r17 reversed interface number
; @clobbers r17
reverseInterfaceNum:
@@ -545,6 +244,8 @@ reverseInterfaceNum_notUart0:
+; ---------------------------------------------------------------------------
+; @routine addMsgToInterface
; @param r16 buffer num
; @param r17 interface num
@@ -566,184 +267,23 @@ addMsgToInterface_end:
; @end
-#ifdef WITH_SEND_DEBUG
-sendDebug:
- ldi yl, LOW(ttyOnUart1_iface)
- ldi yh, HIGH(ttyOnUart1_iface)
-
- lds r24, debugMsgCounter
- lds r25, debugMsgCounter+1
- sbiw r25:r24, 1
- brne sendDebug_storeCounter
- ; send device msg
- rcall NET_Buffer_Alloc ; (R16, R17, X)
- brcc sendDebug_end
- push r16
- adiw xh:xl, 1
- rcall writeDebugMsg
- sbiw xh:xl, 1
- pop r16
- rcall NET_Interface_AddOrReleaseOutMsg ; (R16, R17, R18, X)
- brcc sendDebug_end
- ; reset counter
-sendDebug_resetCounter:
- ldi r24, LOW(SEND_DEBUG_EVERY)
- ldi r25, HIGH(SEND_DEBUG_EVERY)
-sendDebug_storeCounter:
- sts debugMsgCounter, r24
- sts debugMsgCounter+1, r25
-sendDebug_end:
- ret
-writeDebugMsg:
- push yl
- push yh
- ldi yl, LOW(netBuffers)
- ldi yh, HIGH(netBuffers)
-
- rcall writeBufferInfoToRegs
- mov r0, r17
- mov r1, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r2, r17
- mov r3, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r4, r17
- mov r5, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r6, r17
- mov r7, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r8, r17
- mov r9, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- rcall writeBufferInfoToRegs
- mov r10, r17
- mov r11, r18
- adiw yh:yl, NET_BUFFERS_SIZE
-
- clr r12
- clr r13
-
- push xl
- push xh
- rcall NET_Buffer_CountUsed
- pop xh
- pop xl
- mov r14, r16
- pop yh
- pop yl
-
- rcall NETMSG_Debug_Write ; (R16, R17, R18, R19, R20, R21, Z)
- ret
-
-
-
-writeBufferInfoToRegs:
- ldi r17, 0xff
- ldi r18, 0xff
- ld r16, Y
- andi r16, 0x80
- breq writeBufferInfoToRegs_end
- ldd r17, Y+(1+2) ; cmd code
- ldd r18, Y+(1+3) ; source addr
-writeBufferInfoToRegs_end:
- ret
-#endif
-
-
-
-DEBUG1:
- ldi r19, 10
- ldi r20, 2
- ldi r21, 8
- rcall blinkLed
- rjmp DEBUG1
-
-
-DEBUG2:
- ldi r19, 50
- ldi r20, 1
- ldi r21, 1
- rcall blinkLed
- rjmp DEBUG2
-
-
-
-; @param r19 loop count
-; @param r20 on time
-; @param r21 off time
-; @clobbers (R16, R18, R22, R24, R25)
-
-blinkLed:
- cbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; on
- mov r22, r20
- rcall waitForMultiple100ms ; (R252
- sbi LED_SIMPLE_PORT, LED_SIMPLE_PINNUM ; off
- mov r22, r21
- rcall waitForMultiple100ms ; (R22)
- dec r19
- brne blinkLed
- ret
-
-
-; @param r22 number of 100ms periods to wait
-waitForMultiple100ms:
-waitForMultiple100ms_loop:
- push r22
- rcall waitFor100ms
- pop r22
- dec r22
- brne waitForMultiple100ms_loop
- ret
-
-
-waitFor100ms:
- ldi r22, 10
-waitFor100ms_loop:
- push r22
- rcall waitFor10ms
- pop r22
- dec r22
- brne waitFor100ms_loop
- ret
-
-waitFor10ms:
- ldi r22, 100
-waitFor10ms_loop:
- push r22
- rcall Utils_WaitFor100MicroSecs
- pop r22
- dec r22
- brne waitFor10ms_loop
- ret
; ***************************************************************************
-; data in SRAM
+; includes
-.dseg
-
-programRamBegin:
- flashUid: .byte 4
- deviceCounter: .byte 2
- sendTStatsCounter: .byte 2
- sendRStatsCounter: .byte 2
- sendMStatsCounter: .byte 2
-#ifdef WITH_SEND_DEBUG
- debugMsgCounter: .byte 2
-#endif
-programRamEnd:
+.include "devices/all/hw_tn841.asm"
+.include "devices/all/includes.asm"
+
+
+
+
+; ---------------------------------------------------------------------------
+; defines for network interface
+
+.equ netInterfaceData = ttyOnUart1_iface
diff --git a/avr/devices/t03/main/main2.asm b/avr/devices/t03/main/main2.asm
deleted file mode 100644
index 43e61dd..0000000
--- a/avr/devices/t03/main/main2.asm
+++ /dev/null
@@ -1,289 +0,0 @@
-; ***************************************************************************
-; 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/tn841def.inc" ; Define device ATtiny841
-.list
-
-.include "../defs.asm"
-.include "defs_all.asm"
-
-
-
-; ***************************************************************************
-; defines
-
-; ---------------------------------------------------------------------------
-; generic
-
-
-.include "common/utils_wait.asm"
-
-
-; ---------------------------------------------------------------------------
-; firmware settings including list of modules used
-
-.equ FIRMWARE_VERSION_MAJOR = 0
-.equ FIRMWARE_VERSION_MINOR = 0
-.equ FIRMWARE_VERSION_PATCHLEVEL = 1
-
-
-#define MAIN_WITHOUT_MSG_HANDLING ; we do message handling ourselfes
-
-#define MODULES_CLOCK
-;#define MODULES_COM
-;#define MODULES_COM_WITH_ADDR_PROTO
-;#define MODULES_LED
-#define MODULES_LED_SIMPLE
-;#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_TTYONUART1
-#define MODULES_COMONUART0
-#define APPS_STATS
-
-
-
-.equ NET_BUFFERS_NUM = 8
-.equ NET_BUFFERS_SIZE = 32
-
-.equ UART_HW_MSGNUMINBUF_SIZE = 8
-.equ UART_HW_MSGNUMOUTBUF_SIZE = 8
-
-
-; ***************************************************************************
-; 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 ComOnUart0_AttnChangeIsr ; 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
- rjmp ComOnUart0_TxUdreIsr ; 24: USART0_DRE USART0 Data Register Empty
- rjmp ComOnUart0_TxCharIsr ; 25: USART0_TXC USART0 Tx Complete
- reti ; 26: USART1_RXS USART1 Rx Start
- rjmp TtyOnUart1_RxCharIsr ; 27: USART1_RXC USART1 Rx Complete
- rjmp TtyOnUart1_TxUdreIsr ; 28: USART1_DRE USART1 Data Register Empty
- rjmp TtyOnUart1_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:
- ret
-; @end
-
-
-
-
-
-
-
-onEvery100ms:
-onEverySecond:
-onEveryMinute:
-onEveryHour:
-onEveryDay:
- ret
-
-
-
-; ---------------------------------------------------------------------------
-; @routine onEveryLoop
-;
-; Called on every loop (i.e. after awakening from sleep).
-
-onEveryLoop:
- rcall checkRecvdMsg
- ret
-; @end
-
-
-
-; ---------------------------------------------------------------------------
-; @routine onMessageReceived
-;
-; Called on every message received
-
-onMessageReceived:
- clc
- ret
-; @end
-
-
-
-; ---------------------------------------------------------------------------
-; @routine checkRecvdMsg
-;
-; Read messages from either interface and forward to the other one.
-
-checkRecvdMsg:
- rcall NET_PeekNextIncomingMsgNum ; check read queue (bufNum->r16)
- brcc checkRecvdMsg_end ; no msg, jmp
- rcall NET_Buffer_Locate ; (R17)
- ; let system handle incoming messages
- push xl
- push xh
- rcall onMessageReceived
- rcall mainModulesOnPacketReceived
- rcall mainAppsOnPacketReceived
- pop xh
- pop xl
-
- ; forward to other interface
- ld r17, X
- andi r17, (NET_IFACE_BUFFER_IFACENUM1_BIT | NET_IFACE_BUFFER_IFACENUM0_BIT)
- rcall reverseInterfaceNum ; (R17)
-; ldi r17, TTYONUART1_IFACENUM ; DEBUG: send everything to uart1 to test that code first
- rcall addMsgToInterface
- brcc checkRecvdMsg_end ; could not add, jmp
- rcall NET_GetNextIncomingMsgNum ; take off the queue
- rjmp checkRecvdMsg
-checkRecvdMsg_end:
- ret
-; @end
-
-
-
-; ---------------------------------------------------------------------------
-; @routine reverseInterfaceNum
-;
-; @param r17 buffer num
-; @return r17 reversed interface number
-; @clobbers r17
-
-reverseInterfaceNum:
- cpi r17, COMONUART0_IFACENUM
- brne reverseInterfaceNum_notUart0
- ldi r17, TTYONUART1_IFACENUM
- ret
-reverseInterfaceNum_notUart0:
- ldi r17, COMONUART0_IFACENUM
- ret
-; @end
-
-
-
-; ---------------------------------------------------------------------------
-; @routine addMsgToInterface
-; @param r16 buffer num
-; @param r17 interface num
-
-addMsgToInterface:
- cpi r17, COMONUART0_IFACENUM
- brne addMsgToInterface_notUart0
- ldi yl, LOW(comOnUart0_iface)
- ldi yh, HIGH(comOnUart0_iface)
- rjmp NET_Interface_AddOutgoingMsgNum ; try to add msg to interface
-addMsgToInterface_notUart0:
- cpi r17, TTYONUART1_IFACENUM
- brne addMsgToInterface_end
- ldi yl, LOW(ttyOnUart1_iface)
- ldi yh, HIGH(ttyOnUart1_iface)
- rjmp NET_Interface_AddOutgoingMsgNum ; try to add msg to interface
-addMsgToInterface_end:
- clc
- ret
-; @end
-
-
-
-
-
-
-; ***************************************************************************
-; includes
-
-.include "devices/all/hw_tn841.asm"
-.include "devices/all/includes.asm"
-
-
-
-
-; ---------------------------------------------------------------------------
-; defines for network interface
-
-.equ netInterfaceData = ttyOnUart1_iface
-
-
-
diff --git a/avr/modules/0BUILD b/avr/modules/0BUILD
index ec3eaaf..c5d7f25 100644
--- a/avr/modules/0BUILD
+++ b/avr/modules/0BUILD
@@ -27,9 +27,12 @@
twimaster
network
uart_bitbang
+ uart_bitbang2
uart_irq
uart_hw
bootloader
+ f_keepup
+ valsched
diff --git a/avr/modules/motion/0BUILD b/avr/modules/motion/0BUILD
index febd367..e93f9da 100644
--- a/avr/modules/motion/0BUILD
+++ b/avr/modules/motion/0BUILD
@@ -4,6 +4,7 @@
main.asm
+ main2.asm
diff --git a/avr/modules/sk6812/0BUILD b/avr/modules/sk6812/0BUILD
index febd367..cf9c612 100644
--- a/avr/modules/sk6812/0BUILD
+++ b/avr/modules/sk6812/0BUILD
@@ -4,6 +4,7 @@
main.asm
+ recv.asm
diff --git a/avr/modules/tcrt1000/0BUILD b/avr/modules/tcrt1000/0BUILD
index febd367..e93f9da 100644
--- a/avr/modules/tcrt1000/0BUILD
+++ b/avr/modules/tcrt1000/0BUILD
@@ -4,6 +4,7 @@
main.asm
+ main2.asm
diff --git a/avr/modules/uart_bitbang2/0BUILD b/avr/modules/uart_bitbang2/0BUILD
index 71d9bfa..47e3e92 100644
--- a/avr/modules/uart_bitbang2/0BUILD
+++ b/avr/modules/uart_bitbang2/0BUILD
@@ -3,10 +3,10 @@
- bytelevel.asm
defs.asm
+ iface.asm
+ lowlevel.asm
main.asm
- packetlevel.asm