8 #include "ActionsStack.hpp" 13 Accessory *Accessory::pFirstAccessory = NULL;
18 this->movingPositionsSize = 0;
19 this->movingPositionsAddCounter = 0;
20 this->pMovingPositions = NULL;
21 this->lastMovingPosition = 255;
25 this->startingMillis = 0;
31 if (inNewSize <= this->movingPositionsSize)
36 for (; i < this->movingPositionsSize; i++)
37 pNewList[i] = this->pMovingPositions[i];
39 for (; i < inNewSize; i++)
40 pNewList[i].Id = UNDEFINED_ID;
42 this->movingPositionsSize = inNewSize;
43 if (this->pMovingPositions != NULL)
44 delete[] this->pMovingPositions;
45 this->pMovingPositions = pNewList;
53 this->pMovingPositions[this->movingPositionsAddCounter].
Id = inId;
54 this->pMovingPositions[this->movingPositionsAddCounter++].
Position = inPosition;
56 return this->movingPositionsAddCounter - 1;
61 for (
int i = 0; i < this->movingPositionsSize; i++)
62 if (this->pMovingPositions[i].Id == inId)
70 for (
int i = 0; i < this->movingPositionsSize; i++)
71 if (this->pMovingPositions[i].Id == inId)
72 return this->pMovingPositions[i].
Position;
79 if (this->duration > 0)
80 this->startingMillis = millis();
82 #ifdef ACCESSORIES_DEBUG_MODE 83 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 84 Serial.print(F(
"Accessory start action "));
85 Serial.println(this->startingMillis);
92 if (this->duration > 0)
93 this->startingMillis = millis();
96 #ifdef ACCESSORIES_DEBUG_MODE 97 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 98 Serial.print(F(
"Accessory start action at "));
99 Serial.print(this->startingMillis);
100 Serial.print(F(
"ms for state "));
101 Serial.print(inState);
103 if (this->startingMillis == 0)
104 Serial.println(
" ended");
111 #ifdef ACCESSORIES_DEBUG_MODE 112 void Accessory::CheckPort()
const 116 Serial.println(F(
"One accessory have no port !"));
121 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 124 Serial.print(F(
"End (reset) action at "));
125 Serial.print(millis() - this->startingMillis);
126 Serial.print(F(
"ms for "));
127 Serial.print(this->duration);
128 Serial.println(F(
"ms"));
130 this->startingMillis = 0;
136 if (this->startingMillis <= 0)
139 if ((
unsigned long)(millis() - this->startingMillis) > this->duration)
141 #ifdef ACCESSORIES_DEBUG_MODE 142 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 143 Serial.print(F(
"End action at "));
144 Serial.print(millis() - this->startingMillis);
145 Serial.print(F(
"ms for "));
146 Serial.print(this->duration);
147 Serial.println(F(
"ms"));
150 this->startingMillis = 0;
159 this->lastMovingPosition = inLastPositionIndex;
161 Accessories::EEPROMSave();
167 if (this->state != inNewState)
169 this->state = inNewState;
171 Accessories::EEPROMSave();
181 EEPROM.write(inPos, this->state);
191 this->state = (ACC_STATE)EEPROM.read(inPos++);
199 #ifdef ACCESSORIES_PRINT_ACCESSORIES 200 void Accessory::printMovingPositions()
202 for (
int i = 0; i < this->movingPositionsSize; i++)
205 Serial.print(F(
": id "));
206 Serial.print(this->pMovingPositions[i].Id);
207 Serial.print(F(
" / pos "));
208 Serial.println(this->pMovingPositions[i].Position);
215 void Accessory::Add(
Accessory *inpAccessory)
217 if (Accessory::pFirstAccessory == NULL)
219 Accessory::pFirstAccessory = inpAccessory;
224 Accessory *pCurr = Accessory::pFirstAccessory;
235 uint8_t accCount = 0;
236 Accessory *pCurr = Accessory::pFirstAccessory;
237 while (pCurr != NULL)
246 Accessory *Accessory::GetById(
unsigned long inId)
248 Accessory *pCurr = Accessory::pFirstAccessory;
250 while (pCurr != NULL)
262 Accessory *pCurr = Accessory::pFirstAccessory;
264 while (pCurr != NULL)
274 bool Accessory::CanMove(
unsigned long inId)
286 #ifdef ACCESSORIES_DEBUG_MODE 288 Serial.println(F(
"Same position : Cant move !"));
295 #ifdef ACCESSORIES_DEBUG_MODE 296 Serial.println(F(
"Debounce : Cant move !"));
309 #ifdef ACCESSORIES_DEBUG_MODE 310 Serial.print(F(
" ---- Stack id "));
311 Serial.println(inId);
338 #ifdef ACCESSORIES_DEBUG_MODE 339 Serial.print(F(
"Toggle : Accessory id "));
340 Serial.println(inId);
348 bool Accessory::MovePosition(
unsigned long inId)
366 #ifdef ACCESSORIES_DEBUG_MODE 367 Serial.print(F(
" ---- Stack id "));
368 Serial.println(inId);
376 #ifdef ACCESSORIES_DEBUG_MODE 377 Serial.print(F(
"MovePosition : Accessory id "));
379 Serial.print(F(
" to position "));
400 if (inEvent == ACCESSORIES_EVENT_MOVEPOSITIONINDEX && (inData < 0 || inData >= acc->
GetMovingPositionSize()))
402 #ifdef ACCESSORIES_DEBUG_MODE 403 Serial.print(F(
"Accessory id "));
405 Serial.print(F(
" bad MovePositionIndex event "));
406 Serial.println(inData);
411 acc->
Event(inId, inEvent, inData);
virtual void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
static ActionsStack Actions
virtual ACC_STATE Toggle() = 0
unsigned int GetDebounceDelay() const
void SetNextAccessory(Accessory *inAccessory)
virtual int SetSpeed(int inSpeed)
unsigned long GetLastMoveTime() const
virtual int EEPROMLoad(int inPos)
Accessory * GetNextAccessory() const
const uint8_t GetLastMovingPosition() const
virtual int EEPROMSave(int inPos, bool inSimulate = false)
virtual void Move(unsigned long inMovingPositionId) = 0
static bool IsActionPending()
void SetStateRaw(ACC_STATE inNewState)
virtual bool ActionEnded()
static uint8_t GetCount()
virtual void ResetAction()
const uint8_t GetMovingPositionSize() const
virtual void SetState(ACC_STATE inNewState)
void SetLastMovingPosition(uint8_t inLastPositionIndex)
virtual void StartAction()
uint8_t IndexOfMovingPosition(unsigned long inId) const
bool IsActionDelayPending() const
static void ExecuteEvent(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
int GetMovingPosition(unsigned long inId) const
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
unsigned char Add(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent, int inData = 0)
void AdjustMovingPositionsSize(uint8_t inNewSize)