From d70c673b8a1f2642d793779f46269ad3018bed2a Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Sun, 29 Sep 2024 15:05:33 +0200 Subject: [PATCH] avr: introduced screens. --- avr/modules/com2/screen.asm | 166 ++++++++++++++++++++++++++++++++ avr/modules/comproto/addr2.asm | 9 ++ avr/modules/comproto/main.asm | 3 + avr/modules/comproto/screen.asm | 125 ++++++++++++++++++++++++ 4 files changed, 303 insertions(+) create mode 100644 avr/modules/com2/screen.asm create mode 100644 avr/modules/comproto/screen.asm diff --git a/avr/modules/com2/screen.asm b/avr/modules/com2/screen.asm new file mode 100644 index 0000000..c2bd3ce --- /dev/null +++ b/avr/modules/com2/screen.asm @@ -0,0 +1,166 @@ +; *************************************************************************** +; 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. * +; *************************************************************************** + + +; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +; This file contains timer handlers for the address protocol +; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +; + + +; *************************************************************************** +; code + +.cseg + + + +COM2_Screen_RecvStats: + in r15, SREG + push r15 + cli + + ldi r16, 0 + rcall LCD_Fill + + ldi r18, 0 + ldi r19, 0 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_title) + ldi zh, HIGH(com2ScreenRecvText_title) + rcall LCD_PrintFromFlash + + ldi r18, 0 + ldi r19, 2 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_packetsIn) + ldi zh, HIGH(com2ScreenRecvText_packetsIn) + rcall LCD_PrintFromFlash + lds r18, com2StatsPacketsIn + lds r19, com2StatsPacketsIn+1 + rcall LCD_PrintHexWord + ldi r16, 32 + rcall LCD_PrintChar + lds r18, com2StatsNotForMe + lds r19, com2StatsNotForMe+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 3 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_handled) + ldi zh, HIGH(com2ScreenRecvText_handled) + rcall LCD_PrintFromFlash + lds r18, com2StatsHandled + lds r19, com2StatsHandled+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 4 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_contentErrs) + ldi zh, HIGH(com2ScreenRecvText_contentErrs) + rcall LCD_PrintFromFlash + lds r18, com2StatsContentError + lds r19, com2StatsContentError+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 5 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_IoErrs) + ldi zh, HIGH(com2ScreenRecvText_IoErrs) + rcall LCD_PrintFromFlash + lds r18, com2StatsIoError + lds r19, com2StatsIoError+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 6 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenRecvText_NoBufErrs) + ldi zh, HIGH(com2ScreenRecvText_NoBufErrs) + rcall LCD_PrintFromFlash + lds r18, com2StatsNoBufferError + lds r19, com2StatsNoBufferError+1 + rcall LCD_PrintHexWord + + pop r15 + out SREG, r15 + ret + + +#if 0 +COM2_Screen_SendStats: + in r15, SREG + push r15 + cli + + ldi r16, 0 + rcall LCD_Fill + + ldi r18, 0 + ldi r19, 0 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenSendText_title) + ldi zh, HIGH(com2ScreenSendText_title) + rcall LCD_PrintFromFlash + + ldi r18, 0 + ldi r19, 2 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenSendText_packetsOut) + ldi zh, HIGH(com2ScreenSendText_packetsOut) + rcall LCD_PrintFromFlash + lds r18, com2StatsPacketsOut + lds r19, com2StatsPacketsOut+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 3 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenSendText_collisions) + ldi zh, HIGH(com2ScreenSendText_collisions) + rcall LCD_PrintFromFlash + lds r18, com2StatsCollisions + lds r19, com2StatsCollisions+1 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 4 + rcall LCD_SetCursor + ldi zl, LOW(com2ScreenSendText_busy) + ldi zh, HIGH(com2ScreenSendText_busy) + rcall LCD_PrintFromFlash + lds r18, com2StatsBusyError + lds r19, com2StatsBusyError+1 + rcall LCD_PrintHexWord + + pop r15 + out SREG, r15 + ret +#endif + + +com2ScreenRecvText_title: .db "COM2 Recv Stats", 0 +com2ScreenRecvText_packetsIn: .db "In : ", 0 +com2ScreenRecvText_handled: .db "Hdl : ", 0 +com2ScreenRecvText_contentErrs: .db "ECon : ", 0 +com2ScreenRecvText_IoErrs: .db "EIO : ", 0 +com2ScreenRecvText_NoBufErrs: .db "ENBuf: ", 0 + + +#if 0 +com2ScreenSendText_title: .db "COM2 Send Stats", 0 +com2ScreenSendText_packetsOut: .db "Out : ", 0 +com2ScreenSendText_collisions: .db "E Coll : ", 0 +com2ScreenSendText_busy: .db "E Busy : ", 0 +#endif + + diff --git a/avr/modules/comproto/addr2.asm b/avr/modules/comproto/addr2.asm index 658d250..c874e6c 100644 --- a/avr/modules/comproto/addr2.asm +++ b/avr/modules/comproto/addr2.asm @@ -39,6 +39,11 @@ CPRO_Address_OnPacketReceived: ld r16, x sbiw xh:xl, COM2_MSG_OFFS_CMD + sts cproLastAddrCmd, r16 + lds r18, cproCountAddr + inc r18 + sts cproCountAddr, r18 + cpi r16, CPRO_CMD_NEED_ADDRESS brcs CPRO_Address_OnPacketReceived_nc ; smaller than 60 @@ -147,6 +152,10 @@ cproHandleClaimAddr_done: cproHandleDenyAddr: + lds r16, cproCountDeny + inc r16 + sts cproCountDeny, r16 + ; check mode lds r17, cproMode cpi r17, CPRO_MODE_CLAIMING_ADDR1 diff --git a/avr/modules/comproto/main.asm b/avr/modules/comproto/main.asm index be97724..72d0d86 100644 --- a/avr/modules/comproto/main.asm +++ b/avr/modules/comproto/main.asm @@ -20,6 +20,9 @@ cproDataBegin: cproMode: .byte 1 + cproCountAddr: .byte 1 + cproCountDeny: .byte 1 + cproLastAddrCmd: .byte 1 cproDataEnd: diff --git a/avr/modules/comproto/screen.asm b/avr/modules/comproto/screen.asm new file mode 100644 index 0000000..54a997a --- /dev/null +++ b/avr/modules/comproto/screen.asm @@ -0,0 +1,125 @@ +; *************************************************************************** +; 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. * +; *************************************************************************** + + +; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +; This file contains timer handlers for the address protocol +; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +; + + +; *************************************************************************** +; code + +.cseg + + + +CPRO_Screen: + in r15, SREG ; debug + push r15 + cli + + ldi r16, 0 + rcall LCD_Fill + + ldi r18, 0 + ldi r19, 0 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_title) + ldi zh, HIGH(cproScreenText_title) + rcall LCD_PrintFromFlash + + ldi r18, 0 + ldi r19, 2 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_uid) + ldi zh, HIGH(cproScreenText_uid) + rcall LCD_PrintFromFlash + push xh ; 1-4: UID + push xl + rcall Utils_ReadUid ; (R16, X) + pop xl + pop xh + push r18 + push r19 + mov r18, r20 + mov r19, r21 + rcall LCD_PrintHexWord + pop r19 + pop r18 + rcall LCD_PrintHexWord + + ldi r18, 0 + ldi r19, 3 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_addr) + ldi zh, HIGH(cproScreenText_addr) + rcall LCD_PrintFromFlash + lds r16, com2Address + rcall LCD_PrintHexByte + ldi r16, 32 + rcall LCD_PrintChar + lds r16, cproMode + rcall LCD_PrintHexByte + ldi r16, 32 + rcall LCD_PrintChar + lds r16, cproAddrRangeBegin + rcall LCD_PrintHexByte + + ldi r18, 0 + ldi r19, 4 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_bitmap) + ldi zh, HIGH(cproScreenText_bitmap) + rcall LCD_PrintFromFlash + lds r16, cproUsedAddresses + rcall LCD_PrintHexByte + lds r16, cproUsedAddresses+1 + rcall LCD_PrintHexByte + lds r16, cproUsedAddresses+2 + rcall LCD_PrintHexByte + lds r16, cproUsedAddresses+3 + rcall LCD_PrintHexByte + + ldi r18, 0 + ldi r19, 5 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_msgs) + ldi zh, HIGH(cproScreenText_msgs) + rcall LCD_PrintFromFlash + lds r16, cproCountAddr + rcall LCD_PrintHexByte + ldi r16, 32 + rcall LCD_PrintChar + lds r16, cproLastAddrCmd + rcall LCD_PrintHexByte + + ldi r18, 0 + ldi r19, 6 + rcall LCD_SetCursor + ldi zl, LOW(cproScreenText_deny) + ldi zh, HIGH(cproScreenText_deny) + rcall LCD_PrintFromFlash + lds r16, cproCountDeny + rcall LCD_PrintHexByte + + pop r15 + out SREG, r15 + ret + + +cproScreenText_title: .db "CPRO Screen", 0 +cproScreenText_uid: .db "UID : ", 0 +cproScreenText_addr: .db "Address: ", 0 +cproScreenText_bitmap: .db "BITMAP : ", 0 +cproScreenText_msgs: .db "nADDR : ", 0 +cproScreenText_deny: .db "nDENY : ", 0 + + \ No newline at end of file