2 #ifndef __accessory_H__ 3 #define __accessory_H__ 12 #define UNDEFINED_ID ((unsigned long)-1) 17 #define UNDEFINED_POS (-32767) 24 enum ACCESSORIES_MOVE_TYPE
26 ACCESSORIES_MOVE_MORE = +1,
27 ACCESSORIES_MOVE_LESS = -1,
28 ACCESSORIES_MOVE_STOP = 0,
29 ACCESSORIES_MOVE_LEFT = -2,
30 ACCESSORIES_MOVE_RIGHT = -3,
31 ACCESSORIES_MOVE_CENTER = -4,
32 ACCESSORIES_MOVE_TOP = -5,
33 ACCESSORIES_MOVE_BOTTOM = -6,
34 ACCESSORIES_MOVE_STRAIGHT = -7,
35 ACCESSORIES_MOVE_DIVERGE = -8,
36 ACCESSORIES_MOVE_ON = -9,
37 ACCESSORIES_MOVE_OFF = -10
44 enum ACCESSORIES_EVENT_TYPE
46 ACCESSORIES_EVENT_NONE = 0,
47 ACCESSORIES_EVENT_TOGGLE = 1,
48 ACCESSORIES_EVENT_MOVE = 2,
49 ACCESSORIES_EVENT_MOVEPOSITION = 3,
50 ACCESSORIES_EVENT_MOVEPOSITIONINDEX = 4,
51 ACCESSORIES_EVENT_MOVEPOSITIONID = 5,
52 ACCESSORIES_EVENT_CONFIG = 6,
54 ACCESSORIES_EVENT_DIRECTION = 20,
55 ACCESSORIES_EVENT_SETSTARTPOSITION = 21,
56 ACCESSORIES_EVENT_SETSPEED = 22,
57 ACCESSORIES_EVENT_EXTERNALMOVE = 23,
58 ACCESSORIES_EVENT_SETDURATION = 24,
61 #define ACCESSORIESSCONFIG(address, value) ( ((int)address<<8) | value ) 62 #define ACCESSORIESCONFIGADDRESS(data) highByte((int)data) 63 #define ACCESSORIESCONFIGVALUE(data) lowByte((int)data) 147 uint8_t movingPositionsSize;
148 uint8_t movingPositionsAddCounter;
156 unsigned long duration;
157 unsigned long startingMillis;
158 uint8_t lastMovingPosition;
159 unsigned int debounceDelay;
160 unsigned long lastMoveTime;
164 static void Add(
Accessory *inpAccessory);
165 static Accessory *GetById(
unsigned long inId);
166 static bool CanMove(
unsigned long inId);
167 bool IsMovementPending();
168 static bool Toggle(
unsigned long inId);
169 static bool MovePosition(
unsigned long inId);
182 bool IsPPointer()
const {
return this->pMovingPositions_P != NULL; }
200 inline void begin(ACC_STATE inStartingState = STATE_NONE) { this->state = inStartingState; }
208 static void ExecuteEvent(
unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID,
int inData = 0);
219 #ifdef ACCESSORIES_DEBUG_MODE 223 virtual void CheckPort()
const;
229 inline ACC_STATE
GetState()
const {
return this->state; }
240 inline bool IsNone()
const {
return this->state == STATE_NONE; }
245 inline bool IsFirst()
const {
return this->state == STATE_FIRST; }
250 inline bool IsSecond()
const {
return this->state == STATE_SECOND; }
266 inline unsigned long GetDuration()
const {
return this->duration; }
278 inline virtual void Event(
unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID,
int inData = 0) {}
285 virtual int EEPROMSave(
int inPos,
bool inSimulate =
false);
315 inline bool IsEmpty()
const {
return this->pMovingPositions == NULL && this->pMovingPositions_P == NULL; }
360 inline void SetDebounceDelay(
unsigned int inDebounceDelay) { this->debounceDelay = inDebounceDelay; }
370 inline void SetDuration(
unsigned long inDuration) { this->duration = inDuration; }
405 #ifdef ACCESSORIES_DEBUG_VERBOSE_MODE 435 virtual void Move(
unsigned long inMovingPositionId) = 0;
440 virtual ACC_STATE
Toggle() = 0;
474 #ifdef ACCESSORIES_PRINT_ACCESSORIES 478 virtual void printAccessory() {
482 this->printMovingPositions();
488 void printMovingPositions();
virtual void SetState(ACC_STATE inNewState)
virtual void MovePosition(int inPosition)
virtual bool CanBePositional() const
virtual void Move(unsigned long inMovingPositionId) = 0
virtual bool IsGroupActionPending() const
virtual void ResetAction()
const uint8_t GetLastMovingPosition() const
virtual void Event(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
uint8_t IndexOfMovingPositionById(unsigned long inId) const
virtual ACC_STATE Toggle() = 0
unsigned long GetMovingPositionIdByIndex(uint8_t inIndex) const
bool IsActionDelayPending() const
ACC_STATE GetState() const
static void ExecuteEvent(unsigned long inId, ACCESSORIES_EVENT_TYPE inEvent = ACCESSORIES_EVENT_MOVEPOSITIONID, int inData = 0)
void SetDebounceDelay(unsigned int inDebounceDelay)
static uint8_t GetCount()
static bool IsActionPending()
void SetStateRaw(ACC_STATE inNewState)
ACC_STATE GetPreviousState() const
unsigned long GetLastMoveTime() const
void begin(ACC_STATE inStartingState = STATE_NONE)
virtual int EEPROMLoad(int inPos)
unsigned int GetDebounceDelay() const
unsigned long GetDuration() const
uint8_t AddMovingPosition(unsigned long inId, int inPosition)
virtual int EEPROMSave(int inPos, bool inSimulate = false)
int GetMovingPositionValueById(unsigned long inId) const
uint8_t AddMovingPositions(const MovingPosition *inMovingPositions_P)
void AdjustMovingPositionsSize(uint8_t inNewSize)
int GetMovingPositionValueByIndex(uint8_t inIndex) const
const uint8_t GetMovingPositionSize() const
void SetLastMovingPosition(uint8_t inLastPositionIndex)
virtual void StartAction()
virtual bool ActionEnded()
void SetDuration(unsigned long inDuration)
void ResetStartingMillis()
void SetNextAccessory(Accessory *inAccessory)
static Accessory * GetFirstAccessory()
Accessory * GetNextAccessory() const
unsigned long GetActionStartingMillis() const