89 lines
2.2 KiB
NASM
89 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:
|
|
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 sk6812SetValueACK
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueNumLeds:
|
|
sts sk6812NumLeds, r18
|
|
rjmp sk6812SetValueACK
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueState:
|
|
rcall SK6812_SetState ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
|
|
rjmp sk6812SetValueACK
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueMode:
|
|
rcall SK6812_SetMode ; value is in R18 (r16, r17, r18, r19, r20, r21, r23, r24, r25)
|
|
rjmp sk6812SetValueACK
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueType:
|
|
cpi r18, SK6812_TYPE_NUM
|
|
brcc sk6812SetValueNACK
|
|
sts sk6812Type, r18
|
|
rjmp sk6812SetValueACK
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueACK:
|
|
ldi r23, NETMSG_CMD_VALUE_SET_ACK
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
sk6812SetValueNACK:
|
|
ldi r23, NETMSG_CMD_VALUE_SET_NACK
|
|
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 NETMSG_CMD_VALUE_SET, VALUE_ID_LED_TYPE, LOW(sk6812SetValueType), HIGH(sk6812SetValueType)
|
|
.db 0, 0, 0, 0
|
|
|
|
|