avr: share code (use Main_HandleValueMsg)

This commit is contained in:
Martin Preuss
2026-03-20 22:28:58 +01:00
parent c2dc819aec
commit d877508e85
2 changed files with 47 additions and 55 deletions

View File

@@ -230,6 +230,7 @@
.include "modules/sk6812/main.asm" .include "modules/sk6812/main.asm"
#ifdef MODULES_NETWORK #ifdef MODULES_NETWORK
.include "modules/sk6812/recv.asm" .include "modules/sk6812/recv.asm"
.include "devices/all/handlevaluemsg.asm"
#endif #endif
#endif #endif

View File

@@ -15,63 +15,54 @@
; @clobbers any, -X ; @clobbers any, -X
SK6812_OnPacketReceived: SK6812_OnPacketReceived:
adiw xh:xl, NETMSG_OFFS_CMD ; command ldi zl, LOW(sk6812MsgTable*2)
ld r16, X ldi zh, HIGH(sk6812MsgTable*2)
sbiw xh:xl, NETMSG_OFFS_CMD rjmp Main_HandleValueMsg
cpi r16, NETMSG_CMD_VALUE_SET ; @end
breq SK6812_OnPacketReceived_set
clc ; unexpected msg
ret
SK6812_OnPacketReceived_set: sk6812SetValueRGBW:
rcall NETMSG_ValueRead ; (none) rcall SK6812_SetRGBW ; value is in R18-R21 (R16, R17, X)
cpi r17, VALUE_ID_LED_RGBW_VALUE ldi r23, NETMSG_CMD_VALUE_SET_ACK
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 sec
ret ret
; @end ; @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