Files
aqhomecontrol/avr/modules/sk6812/recv.asm
Martin Preuss 67be74d2ac avr: move timing control from ma_light to sk6812.
This allows for better control over the LED strip. We can now trigger the
LED strip externally (e.g. by setting a new RGBW value).
2026-03-24 23:13:28 +01:00

71 lines
1.9 KiB
NASM

; ***************************************************************************
; 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. *
; ***************************************************************************
; ---------------------------------------------------------------------------
; @routine SK6812_OnPacketReceived @global
;
; @clobbers any, !X
SK6812_OnPacketReceived:
ldi zl, LOW(sk6812MsgTable*2)
ldi zh, HIGH(sk6812MsgTable*2)
rjmp Main_HandleValueMsg
; @end
sk6812SetValueRGBW:
rcall SK6812_SetRGBW ; value is in R18-R21 (R16, R17, X)
rcall SK6812_Trigger
ldi r18, 1
rcall sk6812SetState
rjmp sk6812SetValueReturn
; @end
sk6812SetValueNumLeds:
sts sk6812NumLeds, r18
rjmp sk6812SetValueReturn
; @end
sk6812SetValueState:
rcall SK6812_SetState ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
rjmp sk6812SetValueReturn
; @end
sk6812SetValueMode:
rcall SK6812_SetMode ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
rjmp sk6812SetValueReturn
; @end
sk6812SetValueReturn:
ldi r23, NETMSG_CMD_VALUE_SET_ACK
sec
ret
; @end
sk6812MsgTable:
.db NETMSG_CMD_VALUE_SET, VALUE_ID_LED_RGBW_VALUE, LOW(sk6812SetValueRGBW), HIGH(sk6812SetValueRGBW)
.db NETMSG_CMD_VALUE_SET, VALUE_ID_LED_NUMLEDS, LOW(sk6812SetValueNumLeds), HIGH(sk6812SetValueNumLeds)
.db NETMSG_CMD_VALUE_SET, VALUE_ID_LED_STATE, LOW(sk6812SetValueState), HIGH(sk6812SetValueState)
.db NETMSG_CMD_VALUE_SET, VALUE_ID_LED_MODE, LOW(sk6812SetValueMode), HIGH(sk6812SetValueMode)
.db 0, 0, 0, 0