Blynk example
Dependents: Blynk_Example_WIZwiki-W7500
Fork of Blynk by
WidgetTimeInput.h@7:8879692d4e6c, 2016-10-12 (annotated)
- Committer:
- Volodymyr Shymanskyy
- Date:
- Wed Oct 12 09:18:39 2016 +0300
- Revision:
- 7:8879692d4e6c
- Child:
- 13:ed6276c0afb7
Update library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Volodymyr Shymanskyy |
7:8879692d4e6c | 1 | /** |
Volodymyr Shymanskyy |
7:8879692d4e6c | 2 | * @file WidgetTimeInput.h |
Volodymyr Shymanskyy |
7:8879692d4e6c | 3 | * @author Volodymyr Shymanskyy |
Volodymyr Shymanskyy |
7:8879692d4e6c | 4 | * @license This project is released under the MIT License (MIT) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 5 | * @copyright Copyright (c) 2015 Volodymyr Shymanskyy |
Volodymyr Shymanskyy |
7:8879692d4e6c | 6 | * @date Aug 2016 |
Volodymyr Shymanskyy |
7:8879692d4e6c | 7 | * @brief |
Volodymyr Shymanskyy |
7:8879692d4e6c | 8 | * |
Volodymyr Shymanskyy |
7:8879692d4e6c | 9 | */ |
Volodymyr Shymanskyy |
7:8879692d4e6c | 10 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 11 | #ifndef WidgetTimeInput_h |
Volodymyr Shymanskyy |
7:8879692d4e6c | 12 | #define WidgetTimeInput_h |
Volodymyr Shymanskyy |
7:8879692d4e6c | 13 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 14 | #include <Blynk/BlynkApi.h> |
Volodymyr Shymanskyy |
7:8879692d4e6c | 15 | #include <utility/BlynkDateTime.h> |
Volodymyr Shymanskyy |
7:8879692d4e6c | 16 | #include <utility/BlynkUtility.h> |
Volodymyr Shymanskyy |
7:8879692d4e6c | 17 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 18 | class TimeInputParam |
Volodymyr Shymanskyy |
7:8879692d4e6c | 19 | { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 20 | public: |
Volodymyr Shymanskyy |
7:8879692d4e6c | 21 | enum TimeMode { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 22 | TIME_UNDEFINED, |
Volodymyr Shymanskyy |
7:8879692d4e6c | 23 | TIME_SUNSET, |
Volodymyr Shymanskyy |
7:8879692d4e6c | 24 | TIME_SUNRISE, |
Volodymyr Shymanskyy |
7:8879692d4e6c | 25 | TIME_SPECIFIED |
Volodymyr Shymanskyy |
7:8879692d4e6c | 26 | }; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 27 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 28 | TimeInputParam(const BlynkParam& param) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 29 | { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 30 | mStartMode = TIME_UNDEFINED; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 31 | mStopMode = TIME_UNDEFINED; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 32 | mTZ[0] = '\0'; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 33 | mWeekdays = -1; // All set |
Volodymyr Shymanskyy |
7:8879692d4e6c | 34 | mTZ_Offset = 0; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 35 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 36 | BlynkParam::iterator it = param.begin(); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 37 | if (it >= param.end()) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 38 | return; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 39 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 40 | if (0 == strcmp(it.asStr(), "sr")) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 41 | mStartMode = TIME_SUNRISE; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 42 | } else if (0 == strcmp(it.asStr(), "ss")) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 43 | mStartMode = TIME_SUNSET; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 44 | } else if (!it.isEmpty()) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 45 | mStart = BlynkTime(it.asLong()); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 46 | if (mStart.isValid()) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 47 | mStartMode = TIME_SPECIFIED; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 48 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 49 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 50 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 51 | if (++it >= param.end()) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 52 | return; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 53 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 54 | if (0 == strcmp(it.asStr(), "sr")) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 55 | mStopMode = TIME_SUNRISE; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 56 | } else if (0 == strcmp(it.asStr(), "ss")) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 57 | mStopMode = TIME_SUNSET; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 58 | } else if (!it.isEmpty()) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 59 | mStop = BlynkTime(it.asLong()); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 60 | if (mStop.isValid()) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 61 | mStopMode = TIME_SPECIFIED; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 62 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 63 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 64 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 65 | if (++it >= param.end()) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 66 | return; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 67 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 68 | strncpy(mTZ, it.asStr(), sizeof(mTZ)); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 69 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 70 | if (++it >= param.end()) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 71 | return; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 72 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 73 | if (!it.isEmpty()) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 74 | mWeekdays = 0; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 75 | const char* p = it.asStr(); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 76 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 77 | while (int c = *p++) { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 78 | if (c >= '1' && c <= '7') { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 79 | BlynkBitSet(mWeekdays, c - '1'); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 80 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 81 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 82 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 83 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 84 | if (++it >= param.end()) |
Volodymyr Shymanskyy |
7:8879692d4e6c | 85 | return; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 86 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 87 | mTZ_Offset = it.asLong(); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 88 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 89 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 90 | BlynkTime& getStart() { return mStart; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 91 | BlynkTime& getStop() { return mStop; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 92 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 93 | TimeMode getStartMode() const { return mStartMode; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 94 | TimeMode getStopMode() const { return mStopMode; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 95 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 96 | bool hasStartTime() const { return mStartMode == TIME_SPECIFIED; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 97 | bool isStartSunrise() const { return mStartMode == TIME_SUNRISE; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 98 | bool isStartSunset() const { return mStartMode == TIME_SUNSET; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 99 | int getStartHour() const { return mStart.hour(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 100 | int getStartMinute() const { return mStart.minute(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 101 | int getStartSecond() const { return mStart.second(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 102 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 103 | bool hasStopTime() const { return mStopMode == TIME_SPECIFIED; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 104 | bool isStopSunrise() const { return mStopMode == TIME_SUNRISE; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 105 | bool isStopSunset() const { return mStopMode == TIME_SUNSET; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 106 | int getStopHour() const { return mStop.hour(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 107 | int getStopMinute() const { return mStop.minute(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 108 | int getStopSecond() const { return mStop.second(); } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 109 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 110 | const char* getTZ() const { return mTZ; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 111 | uint32_t getTZ_Offset() const { return mTZ_Offset; } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 112 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 113 | bool isWeekdaySelected(int day) const { |
Volodymyr Shymanskyy |
7:8879692d4e6c | 114 | return BlynkBitRead(mWeekdays, (day - 1) % 7); |
Volodymyr Shymanskyy |
7:8879692d4e6c | 115 | } |
Volodymyr Shymanskyy |
7:8879692d4e6c | 116 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 117 | private: |
Volodymyr Shymanskyy |
7:8879692d4e6c | 118 | BlynkTime mStart; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 119 | BlynkTime mStop; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 120 | char mTZ[32]; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 121 | uint32_t mTZ_Offset; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 122 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 123 | TimeMode mStopMode; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 124 | TimeMode mStartMode; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 125 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 126 | uint8_t mWeekdays; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 127 | }; |
Volodymyr Shymanskyy |
7:8879692d4e6c | 128 | |
Volodymyr Shymanskyy |
7:8879692d4e6c | 129 | #endif |