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];
56 if (pMovingPositionBlinks != NULL)
58 pNewMovingPositionBlinks[i] = this->pMovingPositionBlinks[i];
60 for (; i < inNewSize; i++)
61 pNewMovingPositionBlinks[i] = 0;
63 if (this->pMovingPositionBlinks != NULL)
64 delete[] this->pMovingPositionBlinks;
65 this->pMovingPositionBlinks = pNewMovingPositionBlinks;
74 this->pMovingPositionBlinks[pos] = inBlinkMask;
81 this->pLights[inIndex].
begin(inpPort, inIntensity,
this);
87 for (uint8_t i = 0; i < this->lightsSize; i++)
93 for (uint8_t i = 0; i < this->lightsSize; i++)
99 for (uint8_t i = 0; i < this->lightsSize; i++)
103 bool AccessoryLightMulti::ActionEnded()
106 for (uint8_t i = 0; i < this->lightsSize; i++)
107 res |= this->ActionEnded(i);
112 ACC_STATE AccessoryLightMulti::Toggle()
114 ACC_STATE localState = ACC_STATE::STATE_NONE;
116 for (uint8_t i = 0; i < this->lightsSize; i++)
117 localState = this->Toggle(i);
122 void AccessoryLightMulti::Move(
int inPosition)
124 if (inPosition != -1)
126 for (uint8_t i = 0; i < this->lightsSize; i++)
127 if (inPosition & (1 << i))
128 this->SetState(i, LIGHTON);
130 this->SetState(i, LIGHTOFF);
134 void AccessoryLightMulti::MoveBlink(
int inOnMask,
int inBlinkMask)
138 for (uint8_t i = 0; i < this->lightsSize; i++)
141 if (inOnMask & (1 << i))
143 if (inBlinkMask & (1 << i))
146 this->SetState(i, LIGHTBLINK);
149 this->SetState(i, LIGHTON);
152 this->SetState(i, LIGHTOFF);
157 void AccessoryLightMulti::Move(
unsigned long inId)
161 if (positionIndex != -1)
164 if (this->pMovingPositionBlinks != NULL)
165 MoveBlink(position, this->pMovingPositionBlinks[positionIndex]);
171 for (uint8_t i = 0; i < this->lightsSize; i++)
178 int positionIndex = -1;
179 if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONID)
181 if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONINDEX)
182 positionIndex = inData;
184 if (positionIndex > -1)
188 if (this->pMovingPositionBlinks != NULL)
197 case ACCESSORIES_EVENT_TOGGLE:
201 case ACCESSORIES_EVENT_MOVE:
204 case ACCESSORIES_MOVE_STRAIGHT:
205 case ACCESSORIES_MOVE_TOP:
206 case ACCESSORIES_MOVE_LEFT:
207 case ACCESSORIES_MOVE_DIVERGE:
208 case ACCESSORIES_MOVE_BOTTOM:
209 case ACCESSORIES_MOVE_RIGHT:
210 case ACCESSORIES_MOVE_ON:
213 case ACCESSORIES_MOVE_OFF:
214 case ACCESSORIES_MOVE_STOP:
217 case ACCESSORIES_MOVE_MORE:
218 case ACCESSORIES_MOVE_LESS:
220 for (uint8_t i = 0; i < this->lightsSize; i++)
222 int oldValue = this->pLights[i].pPort->
GetSpeed();
223 this->pLights[i].pPort->
SetSpeed(oldValue + inData);
225 this->pLights[i].pPort->
SetSpeed(oldValue);
232 case ACCESSORIES_EVENT_MOVEPOSITION:
234 for (uint8_t i = 0; i < this->lightsSize; i++)
236 int oldValue = this->pLights[i].pPort->
GetSpeed();
237 this->pLights[i].pPort->
SetSpeed(inData);
239 this->pLights[i].pPort->
SetSpeed(oldValue);
244 case ACCESSORIES_EVENT_SETSPEED:
245 for (uint8_t i = 0; i < this->lightsSize; i++)
255 int AccessoryLightMulti::EEPROMSave(
int inPos,
bool inSimulate)
257 for (uint8_t i = 0; i < this->lightsSize; i++)
258 inPos = this->pLights[i].EEPROMSave(inPos, inSimulate);
263 int AccessoryLightMulti::EEPROMLoad(
int inPos)
265 for (uint8_t i = 0; i < this->lightsSize; i++)
266 inPos = this->pLights[i].EEPROMLoad(inPos);
271 #ifdef ACCESSORIES_PRINT_ACCESSORIES 272 void AccessoryLightMulti::printAccessory()
274 Serial.println(F(
" LightMulti"));
275 for (uint8_t i = 0; i < this->lightsSize; i++)
277 Serial.print(F(
" Light "));
279 Serial.print(F(
" : "));
280 this->pLights[i].printAccessory();
282 this->printMovingPositions();
285 void AccessoryLightMulti::printMovingPositions()
289 Serial.print(F(
" MovingPosition "));
291 Serial.print(F(
": id "));
293 Serial.print(F(
" / pos "));
295 if (this->pMovingPositionBlinks != NULL)
297 Serial.print(F(
" / blink "));
298 Serial.println(this->pMovingPositionBlinks[i], BIN);
unsigned long GetMovingPositionIdByIndex(uint8_t inIndex) const
virtual int SetSpeed(int inSpeed)
int GetMovingPositionValueByIndex(uint8_t inIndex) const
uint8_t IndexOfMovingPositionById(unsigned long inId) const
unsigned long GetDuration() const
void SetBlinking(uint8_t inIndex, unsigned long inBlinkingDelay)
void begin(Port *inpPort, int inIntensity = 255, Accessory *inpOwner = 0)
void SetLastMovingPosition(uint8_t inLastPositionIndex)
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)
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
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)
int GetMovingPositionValueById(unsigned long inId) const