diff --git a/avr/modules/sk6812/main.asm b/avr/modules/sk6812/main.asm index 250cfbc..15561a6 100644 --- a/avr/modules/sk6812/main.asm +++ b/avr/modules/sk6812/main.asm @@ -83,41 +83,6 @@ SK6812_Fini: -; --------------------------------------------------------------------------- -; @routine SK6812_OnPacketReceived @global -; -; @clobbers any, -X - -SK6812_OnPacketReceived: - adiw xh:xl, 2 ; command - ld r16, X - sbiw xh:xl, 2 - cpi r16, CPRO_CMD_VALUE_SET - breq SK6812_OnPacketReceived_set - clc ; unexpected msg - ret -SK6812_OnPacketReceived_set: - rcall CPRO_ReadValue ; (none) - cpi r17, VALUE_ID_LED_RGBW_VALUE - breq SK6812_OnPacketReceived_setRGBW - cpi r17, VALUE_ID_LED_NUMLEDS - breq SK6812_OnPacketReceived_setNumLeds - clc - ret -SK6812_OnPacketReceived_setRGBW: - rcall SK6812_SetAllColor ; value is in R18-R21 - rjmp SK6812_OnPacketReceived_sendAck -SK6812_OnPacketReceived_setNumLeds: - sts sk6812NumLeds, r18 -SK6812_OnPacketReceived_sendAck: - ldi r16, CPRO_CMD_VALUE_SET_ACK - rcall CPRO_SendSetValueResponse - sec - ret -; @end - - - ; --------------------------------------------------------------------------- ; @routine SK6812_SetAllColor @global ; diff --git a/avr/modules/sk6812/recv.asm b/avr/modules/sk6812/recv.asm new file mode 100644 index 0000000..6092c83 --- /dev/null +++ b/avr/modules/sk6812/recv.asm @@ -0,0 +1,51 @@ +; *************************************************************************** +; 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, 2 ; command + ld r16, X + sbiw xh:xl, 2 + 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 + clc + ret +SK6812_OnPacketReceived_setRGBW: + rcall SK6812_SetAllColor ; value is in R18-R21 (r16, r17, r23) + rjmp SK6812_OnPacketReceived_sendAck +SK6812_OnPacketReceived_setNumLeds: + sts sk6812NumLeds, r18 +SK6812_OnPacketReceived_sendAck: + push xl + push xh + mov r16, r22 ; src address + ldi r23, NETMSG_CMD_VALUE_SET_ACK + clr r17 + rcall Main_SendValueResponse + pop xh + pop xl + sec + ret +; @end + +