Files
aqhomecontrol/avr/modules/sk6812/recv.asm
Martin Preuss 81e9078b80 avr: add MODE variable to sk6812 module.
this allows for better control over led strips.

Modes:
- AUTO: allow other modules to switch LED strip
- OFF:  force LED strip off
- ON:   force LED strip on
2025-10-01 23:24:50 +02:00

78 lines
2.2 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:
adiw xh:xl, NETMSG_OFFS_CMD ; command
ld r16, X
sbiw xh:xl, NETMSG_OFFS_CMD
cpi r16, NETMSG_CMD_VALUE_SET
breq SK6812_OnPacketReceived_set
clc ; unexpected msg
ret
SK6812_OnPacketReceived_set:
rcall NETMSG_ValueRead ; (none)
cpi r17, VALUE_ID_LED_RGBW_VALUE
breq SK6812_OnPacketReceived_setRGBW
cpi r17, VALUE_ID_LED_NUMLEDS
breq SK6812_OnPacketReceived_setNumLeds
cpi r17, VALUE_ID_LED_STATE
breq SK6812_OnPacketReceived_setState
cpi r17, VALUE_ID_LED_MODE
breq SK6812_OnPacketReceived_setMode
clc
ret
SK6812_OnPacketReceived_setRGBW:
push r17
push r24
push r25
rcall SK6812_SetRGBW ; value is in R18-R21 (R16, R17, X)
pop r25
pop r24
pop r17
rjmp SK6812_OnPacketReceived_sendAck
SK6812_OnPacketReceived_setState:
push r17
push r24
push r25
rcall SK6812_SetState ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
pop r25
pop r24
pop r17
rjmp SK6812_OnPacketReceived_sendAck
SK6812_OnPacketReceived_setMode:
push r17
push r24
push r25
rcall SK6812_SetMode ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
pop r25
pop r24
pop r17
rjmp SK6812_OnPacketReceived_sendAck
SK6812_OnPacketReceived_setNumLeds:
sts sk6812NumLeds, r18
SK6812_OnPacketReceived_sendAck:
push xl
push xh
ldi r23, NETMSG_CMD_VALUE_SET_ACK
rcall Main_SendValueResponse
pop xh
pop xl
sec
ret
; @end