Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc. http://www.blynk.cc/

Dependents:   Blynk_RBL_BLE_Nano Blynk_MicroBit Blynk_Serial Blynk_RBL_BLE_Nano

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?

UserRevisionLine numberNew 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