8 #include "AccessoryLightMulti.hpp" 16 this->pMovingPositionBlinks = NULL;
19 #ifdef ACCESSORIES_DEBUG_MODE 20 void AccessoryLightMulti::CheckPort()
const 22 for (uint8_t i = 0; i < this->lightsSize; i++)
24 if (this->pLights[i].
GetPort() == NULL)
26 Serial.println(F(
"One light in a multilight accessory have no port !"));
34 this->lightsSize = inSize;
39 for (uint8_t i = 0; i < inSize; i++)
41 this->pLights[i].pOwner =
this;
47 this->pMovingPositionBlinks = NULL;
55 int *pNewMovingPositionBlinks =
new int[inNewSize];
57 pNewMovingPositionBlinks[i] = this->pMovingPositionBlinks[i];
58 for (; i < inNewSize; i++)
59 pNewMovingPositionBlinks[i] = 0;
60 if (this->pMovingPositionBlinks != NULL)
61 delete[] this->pMovingPositionBlinks;
62 this->pMovingPositionBlinks = pNewMovingPositionBlinks;
71 this->pMovingPositionBlinks[pos] = inBlinkMask;
77 this->pLights[inIndex].
begin(inpPort, inIntensity,
this);
83 for (uint8_t i = 0; i < this->lightsSize; i++)
89 for (uint8_t i = 0; i < this->lightsSize; i++)
95 for (uint8_t i = 0; i < this->lightsSize; i++)
99 bool AccessoryLightMulti::ActionEnded()
102 for (uint8_t i = 0; i < this->lightsSize; i++)
103 res |= this->ActionEnded(i);
108 ACC_STATE AccessoryLightMulti::Toggle()
110 ACC_STATE localState = ACC_STATE::STATE_NONE;
112 for (uint8_t i = 0; i < this->lightsSize; i++)
113 localState = this->Toggle(i);
118 void AccessoryLightMulti::Move(
int inPosition)
120 if (inPosition != -1)
122 for (uint8_t i = 0; i < this->lightsSize; i++)
123 if (inPosition & (1 << i))
124 this->SetState(i, LIGHTON);
126 this->SetState(i, LIGHTOFF);
130 void AccessoryLightMulti::MoveBlink(
int inOnMask,
int inBlinkMask)
134 for (uint8_t i = 0; i < this->lightsSize; i++)
137 if (inOnMask & (1 << i))
139 if (inBlinkMask & (1 << i))
142 this->SetState(i, LIGHTBLINK);
145 this->SetState(i, LIGHTON);
148 this->SetState(i, LIGHTOFF);
153 void AccessoryLightMulti::Move(
unsigned long inId)
157 if (positionIndex != -1)
160 if (this->pMovingPositionBlinks != NULL)
161 MoveBlink(position, this->pMovingPositionBlinks[positionIndex]);
167 for (uint8_t i = 0; i < this->lightsSize; i++)
174 int positionIndex = -1;
175 if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONID)
177 if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONINDEX)
178 positionIndex = inData;
180 if (positionIndex > -1)
187 this->pLights->
Event(inEvent, inData);
191 int AccessoryLightMulti::EEPROMSave(
int inPos,
bool inSimulate)
193 for (uint8_t i = 0; i < this->lightsSize; i++)
194 inPos = this->pLights[i].EEPROMSave(inPos, inSimulate);
199 int AccessoryLightMulti::EEPROMLoad(
int inPos)
201 for (uint8_t i = 0; i < this->lightsSize; i++)
202 inPos = this->pLights[i].EEPROMLoad(inPos);
207 #ifdef ACCESSORIES_PRINT_ACCESSORIES 208 void AccessoryLightMulti::printAccessory()
210 Serial.println(F(
" LightMulti"));
211 for (uint8_t i = 0; i < this->lightsSize; i++)
213 Serial.print(F(
" Light "));
215 Serial.print(F(
" : "));
216 this->pLights[i].printAccessory();
218 this->printMovingPositions();
221 void AccessoryLightMulti::printMovingPositions()
225 Serial.print(F(
" MovingPosition "));
227 Serial.print(F(
": id "));
229 Serial.print(F(
" / pos "));
231 Serial.print(F(
" / blink "));
232 Serial.println(this->pMovingPositionBlinks[i], BIN);
unsigned long GetMovingPositionIdByIndex(int inIndex) const
void Event(ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
void SetLastMovingPosition(uint8_t inLastPositionIndex)
int GetMovingPosition(unsigned long inId) const
uint8_t IndexOfMovingPosition(unsigned long inId) const
void SetBlinking(uint8_t inIndex, unsigned long inBlinkingDelay)
int GetMovingPositionByIndex(int inIndex) const
void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
void beginLight(uint8_t inIndex, Port *inpPort, int inIntensity = 255)
void begin(Port *inpPort, int inIntensity = 255, Accessory *inpOwner = 0)
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
unsigned long GetDuration() const
unsigned char AddMovingPosition(unsigned long inId, int inOnMask, int inBlinkMask = 0)
const uint8_t GetMovingPositionSize() const
void AdjustMovingPositionBlinksSize(uint8_t inNewSize)
void SetBlinking(unsigned long inBlinkingDelay)
void SetDuration(unsigned long inDuration)
void begin(unsigned long inId, uint8_t inSize, unsigned long inBlinkDuration)