diff --git a/avr/devices/all/modules_include.asm b/avr/devices/all/modules_include.asm index 5e74145..3b8a6a3 100644 --- a/avr/devices/all/modules_include.asm +++ b/avr/devices/all/modules_include.asm @@ -230,6 +230,7 @@ .include "modules/sk6812/main.asm" #ifdef MODULES_NETWORK .include "modules/sk6812/recv.asm" + .include "devices/all/handlevaluemsg.asm" #endif #endif diff --git a/avr/modules/sk6812/recv.asm b/avr/modules/sk6812/recv.asm index f77df90..d9a5ee0 100644 --- a/avr/modules/sk6812/recv.asm +++ b/avr/modules/sk6812/recv.asm @@ -15,63 +15,54 @@ ; @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 + 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) + ldi r23, NETMSG_CMD_VALUE_SET_ACK sec ret ; @end + +sk6812SetValueNumLeds: + sts sk6812NumLeds, r18 + ldi r23, NETMSG_CMD_VALUE_SET_ACK + sec + ret +; @end + + + +sk6812SetValueState: + rcall SK6812_SetState ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25) + ldi r23, NETMSG_CMD_VALUE_SET_ACK + sec + ret +; @end + + + +sk6812SetValueMode: + rcall SK6812_SetMode ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25) + 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 + +