Bluetooth app updated for 14 timers, including conflict testing.
This commit is contained in:
parent
f00a179f34
commit
459f15054d
Binary file not shown.
|
@ -295,3 +295,19 @@ CTimerManager::setTimer(sTimer& timerInfo)
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
CTimerManager::conflictTest(int ID)
|
||||||
|
{
|
||||||
|
if(!(ID >= 0 && ID < 14))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
sTimer timerInfo;
|
||||||
|
CTimerManager::getTimer(ID, timerInfo); // get info for selected timer
|
||||||
|
int conflictID = CTimerManager::conflictTest(timerInfo); // test against all others
|
||||||
|
if(conflictID) {
|
||||||
|
timerInfo.enabled = 0; // cancel enabled status if it conflicts with others
|
||||||
|
CTimerManager::setTimer(timerInfo); // stage the timer settings, without being enabled
|
||||||
|
}
|
||||||
|
return conflictID;
|
||||||
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ public:
|
||||||
static void condenseMap(uint16_t timerMap[_dayMinutes], int factor);
|
static void condenseMap(uint16_t timerMap[_dayMinutes], int factor);
|
||||||
static void condenseMap(uint8_t timerMap[7][120]);
|
static void condenseMap(uint8_t timerMap[7][120]);
|
||||||
static int conflictTest(sTimer& timer);
|
static int conflictTest(sTimer& timer);
|
||||||
|
static int conflictTest(int ID);
|
||||||
static int manageTime(int hour, int minute, int dow);
|
static int manageTime(int hour, int minute, int dow);
|
||||||
static int findNextTimer(int hour, int minute, int dow);
|
static int findNextTimer(int hour, int minute, int dow);
|
||||||
static int getNextTimer();
|
static int getNextTimer();
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include "NVstorage.h"
|
#include "NVstorage.h"
|
||||||
#include "../RTC/BTCDateTime.h"
|
#include "../RTC/BTCDateTime.h"
|
||||||
#include "../RTC/Timers.h"
|
#include "../RTC/Timers.h"
|
||||||
|
#include "../RTC/TimerManager.h"
|
||||||
#include "../Bluetooth/BluetoothAbstract.h"
|
#include "../Bluetooth/BluetoothAbstract.h"
|
||||||
#include "../WiFi/BTCWebServer.h"
|
#include "../WiFi/BTCWebServer.h"
|
||||||
#include "../cfg/BTCConfig.h"
|
#include "../cfg/BTCConfig.h"
|
||||||
|
@ -33,7 +34,9 @@
|
||||||
char defaultJSONstr[64];
|
char defaultJSONstr[64];
|
||||||
CModerator JSONmoderator;
|
CModerator JSONmoderator;
|
||||||
CTimerModerator TimerModerator;
|
CTimerModerator TimerModerator;
|
||||||
|
int timerConflict = 0;
|
||||||
|
|
||||||
|
void validateTimer(int ID);
|
||||||
|
|
||||||
void interpretJsonCommand(char* pLine)
|
void interpretJsonCommand(char* pLine)
|
||||||
{
|
{
|
||||||
|
@ -128,6 +131,12 @@ void interpretJsonCommand(char* pLine)
|
||||||
}
|
}
|
||||||
else if(strcmp("TimerTemp", it->key) == 0) {
|
else if(strcmp("TimerTemp", it->key) == 0) {
|
||||||
decodeTimerNumeric(1, it->value.as<const char*>());
|
decodeTimerNumeric(1, it->value.as<const char*>());
|
||||||
|
}
|
||||||
|
else if(strcmp("TimerConflict", it->key) == 0) {
|
||||||
|
validateTimer(it->value.as<int>());
|
||||||
|
}
|
||||||
|
else if(strcmp("TimerRefresh", it->key) == 0) {
|
||||||
|
TimerModerator.reset();
|
||||||
}
|
}
|
||||||
else if(strcmp("FanSensor", it->key) == 0) {
|
else if(strcmp("FanSensor", it->key) == 0) {
|
||||||
setFanSensor(it->value.as<unsigned char>());
|
setFanSensor(it->value.as<unsigned char>());
|
||||||
|
@ -135,7 +144,16 @@ void interpretJsonCommand(char* pLine)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void validateTimer(int ID)
|
||||||
|
{
|
||||||
|
ID--; // supplied as +1
|
||||||
|
if(!(ID >= 0 && ID < 14))
|
||||||
|
return;
|
||||||
|
|
||||||
|
timerConflict = CTimerManager::conflictTest(ID); // check targeted timer against other timers
|
||||||
|
|
||||||
|
TimerModerator.reset(ID); // ensure we fully update client with our understanding of selected timer
|
||||||
|
}
|
||||||
|
|
||||||
bool makeJsonString(CModerator& moderator, char* opStr, int len)
|
bool makeJsonString(CModerator& moderator, char* opStr, int len)
|
||||||
{
|
{
|
||||||
|
@ -209,9 +227,8 @@ bool makeJsonTimerString(int channel, char* opStr, int len)
|
||||||
void updateJSONclients(bool report)
|
void updateJSONclients(bool report)
|
||||||
{
|
{
|
||||||
// update general parameters
|
// update general parameters
|
||||||
|
char jsonStr[800];
|
||||||
{
|
{
|
||||||
|
|
||||||
char jsonStr[800];
|
|
||||||
if(makeJsonString(JSONmoderator, jsonStr, sizeof(jsonStr))) {
|
if(makeJsonString(JSONmoderator, jsonStr, sizeof(jsonStr))) {
|
||||||
if (report) {
|
if (report) {
|
||||||
DebugPort.print("JSON send: "); DebugPort.println(jsonStr);
|
DebugPort.print("JSON send: "); DebugPort.println(jsonStr);
|
||||||
|
@ -221,23 +238,41 @@ void updateJSONclients(bool report)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// update timer parameters
|
// update timer parameters
|
||||||
|
bool bNewTimerInfo = false;
|
||||||
for(int tmr=0; tmr<14; tmr++)
|
for(int tmr=0; tmr<14; tmr++)
|
||||||
{
|
{
|
||||||
char jsonStr[800];
|
|
||||||
if(makeJsonTimerString(tmr, jsonStr, sizeof(jsonStr))) {
|
if(makeJsonTimerString(tmr, jsonStr, sizeof(jsonStr))) {
|
||||||
if (report) {
|
if (report) {
|
||||||
DebugPort.print("JSON send: "); DebugPort.println(jsonStr);
|
DebugPort.print("JSON send: "); DebugPort.println(jsonStr);
|
||||||
}
|
}
|
||||||
getBluetoothClient().send( jsonStr );
|
getBluetoothClient().send( jsonStr );
|
||||||
sendWebServerString( jsonStr );
|
sendWebServerString( jsonStr );
|
||||||
|
bNewTimerInfo = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// request timer refesh upon clients
|
||||||
|
if(bNewTimerInfo) {
|
||||||
|
StaticJsonBuffer<800> jsonBuffer; // create a JSON buffer on the stack
|
||||||
|
JsonObject& root = jsonBuffer.createObject(); // create object to add JSON commands to
|
||||||
|
|
||||||
|
if(timerConflict) {
|
||||||
|
root.set("TimerConflict", timerConflict);
|
||||||
|
timerConflict = 0;
|
||||||
|
}
|
||||||
|
root.set("TimerRefresh", 1);
|
||||||
|
root.printTo(jsonStr, 800);
|
||||||
|
|
||||||
|
DebugPort.print("JSON send: "); DebugPort.println(jsonStr);
|
||||||
|
getBluetoothClient().send( jsonStr );
|
||||||
|
sendWebServerString( jsonStr );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void resetJSONmoderator()
|
void resetJSONmoderator()
|
||||||
{
|
{
|
||||||
JSONmoderator.reset();
|
JSONmoderator.reset();
|
||||||
|
TimerModerator.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -86,3 +86,15 @@ CTimerModerator::reset()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
CTimerModerator::reset(int timer)
|
||||||
|
{
|
||||||
|
if(timer >= 0 && timer < 14) {
|
||||||
|
Memory[timer].start.hour = -1; // force full update
|
||||||
|
Memory[timer].stop.hour = -1; // force full update
|
||||||
|
Memory[timer].enabled = 0xff; // invalid combination - force full update
|
||||||
|
Memory[timer].repeat = 0xff;
|
||||||
|
Memory[timer].temperature = 0xff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ public:
|
||||||
CTimerModerator();
|
CTimerModerator();
|
||||||
bool addJson(int channel, const sTimer& toSend, JsonObject& root);
|
bool addJson(int channel, const sTimer& toSend, JsonObject& root);
|
||||||
void reset();
|
void reset();
|
||||||
|
void reset(int channel);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue