#ifndef BlinkerTimingTimer_H #define BlinkerTimingTimer_H #if defined(ESP8266) || defined(ESP32) #include "../Blinker/BlinkerConfig.h" #include "../Blinker/BlinkerUtility.h" class BlinkerTimingTimer { public : BlinkerTimingTimer() : timerState(false) , isLoopTask(false) {} // BlinkerTimingTimer(uint32_t _timerData, String _action, String _text) BlinkerTimingTimer(uint32_t _timerData, String _action) : timerState(false) , isLoopTask(false) { timerData = _timerData; // actionData = _action; actionData = (char*)malloc((_action.length()+1)*sizeof(char)); strcpy(actionData, _action.c_str()); // timerText = _text; isLoopTask = timerData >> 31; timerState = timerData >> 23 & 0x0001; timingDay = timerData >> 11 & 0x007F; timingTime = timerData & 0x07FF; } // BlinkerTimingTimer(bool _state, uint8_t _timingDay, uint16_t _timingTime, String _action, String _text, bool _isLoop) BlinkerTimingTimer(bool _state, uint8_t _timingDay, uint16_t _timingTime, String _action, bool _isLoop) : timerState(false) , isLoopTask(false) { timerState = _state; timingDay = _timingDay; timingTime = _timingTime; actionData = (char*)malloc((_action.length()+1)*sizeof(char)); strcpy(actionData, _action.c_str()); // actionData = _action; // timerText = _text; isLoopTask = _isLoop; timerData = isLoopTask << 31 | timerState << 23 | timingDay << 11 | timingTime; } // void freshTimer(uint32_t _timerData, String _action, String _text) { void freshTimer(uint32_t _timerData, String _action) { timerData = _timerData; actionData = (char*)malloc((_action.length()+1)*sizeof(char)); strcpy(actionData, _action.c_str()); // actionData = _action; // timerText = _text; isLoopTask = timerData >> 31; timerState = timerData >> 23 & 0x0001; timingDay = timerData >> 11 & 0x007F; timingTime = timerData & 0x07FF; } bool isTimingDay(uint8_t _day) { if (timingDay & (0x01 << _day)) return true; else return false; } uint8_t getTimingday() { return timingDay; } char * getAction() { return actionData; } // String getText() { return timerText; } uint32_t getTimerData() { return timerData; } uint16_t getTime() { return timingTime; } bool state() { return timerState; } bool isLoop() { return isLoopTask; } void disableTask() { timerState = false; timerData = isLoopTask << 31 | timerState << 23 | timingDay << 11 | timingTime; } private : // - - - - - - - - | - - - - - - - - | - - - - - - - - | - - - - - - - - // | | | | 11 0-0x7FF timingTime // | | | 18 timingDay // | | 24 timerState // | 32 isLoopTask uint32_t timerData; uint8_t timingDay; char* actionData; // String timerText; uint16_t timingTime; bool timerState; bool isLoopTask; }; #endif #endif