Files
aqhomecontrol/avr/modules/network/msg/time-r.asm
2026-03-15 20:24:48 +01:00

106 lines
2.2 KiB
NASM

; ***************************************************************************
; copyright : (C) 2026 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. *
; ***************************************************************************
#ifndef AQH_AVR_NETMSG_TIME_R_ASM
#define AQH_AVR_NETMSG_TIME_R_ASM
.include "common/divide8.asm"
; ---------------------------------------------------------------------------
; @routine netMsgTimeWrite @global
; Write a packet (including the checksum byte).
;
; @return r22 source address
; @return r23 command
; @return r25:r24 message id
; @param X buffer to read from
; @param Z pointer to buffer for RTC DS3231 format of time
netMsgTimeRead:
adiw xh:xl, NETMSG_OFFS_MSGDATA ; skip DEST, LEN 0
ld r23, X+ ; command 2
ld r22, X+ ; src address 3
adiw xh:xl, 4 ; skip uid
ld r24, X+ ; msg id
ld r25, X+
; X=payload
adiw zh:zl, 7 ; point to one byte behind year
; read year (only last two digits)
ld r16, X+
ld r17, X+
ldi r18, LOW(2000)
ldi r19, HIGH(2000)
sub r16, r18
sbc r17, r19
rcall toBcd
st -Z, r16
; read month
ld r16, X+
rcall toBcd
st -Z, r16
; read day of month
ld r16, X+
rcall toBcd
st -Z, r16
; read day of week
ld r16, X+
rcall toBcd
st -Z, r16
; read hours
ld r16, X+
rcall toBcd
st -Z, r16
; read minutes
ld r16, X+
rcall toBcd
st -Z, r16
; read seconds
ld r16, X+
rcall toBcd
st -Z, r16
sbiw xh:xl, NETMSG_TIME_SIZE ; go back to beginning of message
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine toBcd
;
; Write a packet (including the checksum byte).
;
; @param r16 bin value
; @return r16 BCD value
; @clobbers r17, r18
toBcd:
mov r18, r16
ldi r19, 10
bigcall Utils_Divu8_8_8 ; r16=result, r17=remainder (R25)
lsl r16
lsl r16
lsl r16
lsl r16
add r16, r17
ret
; @end
#endif