mirror of
https://github.com/rstrouse/ESPSomfy-RTS.git
synced 2025-12-12 18:42:10 +01:00
Fix byte alignments #273
This commit is contained in:
parent
25c8a66869
commit
f8b3bc4133
14 changed files with 109 additions and 56 deletions
|
|
@ -483,7 +483,7 @@ bool ShadeConfigFile::validate() {
|
||||||
if(this->header.version >= 21) {
|
if(this->header.version >= 21) {
|
||||||
recs = 0;
|
recs = 0;
|
||||||
while(recs < this->header.repeaterRecords) {
|
while(recs < this->header.repeaterRecords) {
|
||||||
uint32_t pos = this->file.position();
|
//uint32_t pos = this->file.position();
|
||||||
if(!this->seekChar(CFG_REC_END)) {
|
if(!this->seekChar(CFG_REC_END)) {
|
||||||
Serial.printf("Failed to find the repeater record end %d\n", recs);
|
Serial.printf("Failed to find the repeater record end %d\n", recs);
|
||||||
}
|
}
|
||||||
|
|
@ -757,7 +757,7 @@ bool ShadeConfigFile::readGroupRecord(SomfyGroup *group) {
|
||||||
bool ShadeConfigFile::readRepeaterRecord(SomfyShadeController *s) {
|
bool ShadeConfigFile::readRepeaterRecord(SomfyShadeController *s) {
|
||||||
uint32_t startPos = this->file.position();
|
uint32_t startPos = this->file.position();
|
||||||
|
|
||||||
for(uint8_t i; i < SOMFY_MAX_REPEATERS; i++) {
|
for(uint8_t i = 0; i < SOMFY_MAX_REPEATERS; i++) {
|
||||||
s->linkRepeater(this->readUInt32(0));
|
s->linkRepeater(this->readUInt32(0));
|
||||||
}
|
}
|
||||||
if(this->file.position() != startPos + this->header.repeaterRecordSize) {
|
if(this->file.position() != startPos + this->header.repeaterRecordSize) {
|
||||||
|
|
|
||||||
17
Network.cpp
17
Network.cpp
|
|
@ -17,6 +17,7 @@ extern rebootDelay_t rebootDelay;
|
||||||
extern Network net;
|
extern Network net;
|
||||||
|
|
||||||
static bool _apScanning = false;
|
static bool _apScanning = false;
|
||||||
|
static uint32_t _lastHeap = 0;
|
||||||
int connectRetries = 0;
|
int connectRetries = 0;
|
||||||
void Network::end() {
|
void Network::end() {
|
||||||
sockEmit.end();
|
sockEmit.end();
|
||||||
|
|
@ -147,6 +148,7 @@ bool Network::changeAP(const uint8_t *bssid, const int32_t channel) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
void Network::emitSockets() {
|
void Network::emitSockets() {
|
||||||
|
this->emitHeap();
|
||||||
if(this->needsBroadcast ||
|
if(this->needsBroadcast ||
|
||||||
(this->connType == conn_types::wifi && (abs(abs(WiFi.RSSI()) - abs(this->lastRSSI)) > 1 || WiFi.channel() != this->lastChannel))) {
|
(this->connType == conn_types::wifi && (abs(abs(WiFi.RSSI()) - abs(this->lastRSSI)) > 1 || WiFi.channel() != this->lastChannel))) {
|
||||||
this->emitSockets(255);
|
this->emitSockets(255);
|
||||||
|
|
@ -222,6 +224,7 @@ void Network::emitSockets(uint8_t num) {
|
||||||
this->lastChannel = -1;
|
this->lastChannel = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
this->emitHeap(num);
|
||||||
}
|
}
|
||||||
void Network::setConnected(conn_types connType) {
|
void Network::setConnected(conn_types connType) {
|
||||||
this->connType = connType;
|
this->connType = connType;
|
||||||
|
|
@ -331,7 +334,7 @@ void Network::setConnected(conn_types connType) {
|
||||||
if(strlen(settings.chipModel) == 0) SSDP.setModelNumber(0, "ESP32");
|
if(strlen(settings.chipModel) == 0) SSDP.setModelNumber(0, "ESP32");
|
||||||
else {
|
else {
|
||||||
char sModel[20] = "";
|
char sModel[20] = "";
|
||||||
snprintf(sModel, sizeof(sModel), "ESP32-%S", settings.chipModel);
|
snprintf(sModel, sizeof(sModel), "ESP32-%s", settings.chipModel);
|
||||||
SSDP.setModelNumber(0, sModel);
|
SSDP.setModelNumber(0, sModel);
|
||||||
}
|
}
|
||||||
SSDP.setModelURL(0, "https://github.com/rstrouse/ESPSomfy-RTS");
|
SSDP.setModelURL(0, "https://github.com/rstrouse/ESPSomfy-RTS");
|
||||||
|
|
@ -744,3 +747,15 @@ void Network::networkEvent(WiFiEvent_t event) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void Network::emitHeap(uint8_t num) {
|
||||||
|
if(num != 255 || this->needsBroadcast || ESP.getMaxAllocHeap() != _lastHeap) {
|
||||||
|
_lastHeap = ESP.getMaxAllocHeap();
|
||||||
|
JsonSockEvent *json = sockEmit.beginEmit("memStatus");
|
||||||
|
json->beginObject();
|
||||||
|
json->addElem("max", _lastHeap);
|
||||||
|
json->addElem("free", ESP.getFreeHeap());
|
||||||
|
json->addElem("min", ESP.getMinFreeHeap());
|
||||||
|
json->endObject();
|
||||||
|
sockEmit.endEmit(num);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ class Network {
|
||||||
void end();
|
void end();
|
||||||
void emitSockets();
|
void emitSockets();
|
||||||
void emitSockets(uint8_t num);
|
void emitSockets(uint8_t num);
|
||||||
|
void emitHeap(uint8_t num = 255);
|
||||||
uint32_t getChipId();
|
uint32_t getChipId();
|
||||||
static void networkEvent(WiFiEvent_t event);
|
static void networkEvent(WiFiEvent_t event);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
8
SSDP.cpp
8
SSDP.cpp
|
|
@ -32,7 +32,7 @@ static const char _ssdp_bye_template[] PROGMEM =
|
||||||
"NTS: ssdp:byebye\r\n"
|
"NTS: ssdp:byebye\r\n"
|
||||||
"NT: %s\r\n"
|
"NT: %s\r\n"
|
||||||
"USN: %s\r\n"
|
"USN: %s\r\n"
|
||||||
"BOOTID.UPNP.ORG: %ul\r\n"
|
"BOOTID.UPNP.ORG: %lu\r\n"
|
||||||
"CONFIGID.UPNP.ORG: %d\r\n"
|
"CONFIGID.UPNP.ORG: %d\r\n"
|
||||||
"\r\n";
|
"\r\n";
|
||||||
static const char _ssdp_packet_template[] PROGMEM =
|
static const char _ssdp_packet_template[] PROGMEM =
|
||||||
|
|
@ -42,7 +42,7 @@ static const char _ssdp_packet_template[] PROGMEM =
|
||||||
"USN: %s\r\n" // _uuid
|
"USN: %s\r\n" // _uuid
|
||||||
"%s: %s\r\n" // "NT" or "ST", _deviceType
|
"%s: %s\r\n" // "NT" or "ST", _deviceType
|
||||||
"LOCATION: http://%u.%u.%u.%u:%u/%s\r\n" // WiFi.localIP(), _port, _schemaURL
|
"LOCATION: http://%u.%u.%u.%u:%u/%s\r\n" // WiFi.localIP(), _port, _schemaURL
|
||||||
"BOOTID.UPNP.ORG: %ul\r\n"
|
"BOOTID.UPNP.ORG: %lu\r\n"
|
||||||
"CONFIGID.UPNP.ORG: %d\r\n"
|
"CONFIGID.UPNP.ORG: %d\r\n"
|
||||||
"\r\n";
|
"\r\n";
|
||||||
static const char _ssdp_device_schema_template[] PROGMEM =
|
static const char _ssdp_device_schema_template[] PROGMEM =
|
||||||
|
|
@ -160,7 +160,7 @@ void UPNPDeviceType::setChipId(uint32_t chipId) {
|
||||||
(uint16_t)((chipId >> 8) & 0xff),
|
(uint16_t)((chipId >> 8) & 0xff),
|
||||||
(uint16_t)chipId & 0xff);
|
(uint16_t)chipId & 0xff);
|
||||||
}
|
}
|
||||||
SSDPClass::SSDPClass():sendQueue{false, INADDR_NONE, 0, nullptr, false, 0, ""} {}
|
SSDPClass::SSDPClass():sendQueue{false, INADDR_NONE, 0, nullptr, false, 0, "", response_types_t::root} {}
|
||||||
SSDPClass::~SSDPClass() { end(); }
|
SSDPClass::~SSDPClass() { end(); }
|
||||||
bool SSDPClass::begin() {
|
bool SSDPClass::begin() {
|
||||||
for(int i = 0; i < SSDP_QUEUE_SIZE; i++) {
|
for(int i = 0; i < SSDP_QUEUE_SIZE; i++) {
|
||||||
|
|
@ -407,7 +407,7 @@ void SSDPClass::_sendResponse(IPAddress addr, uint16_t port, UPNPDeviceType *d,
|
||||||
strcpy_P(pbuff, _ssdp_response_template);
|
strcpy_P(pbuff, _ssdp_response_template);
|
||||||
|
|
||||||
// Don't use ip.toString as this fragments the heap like no tomorrow.
|
// Don't use ip.toString as this fragments the heap like no tomorrow.
|
||||||
int len = snprintf_P(buffer, sizeof(buffer)-1,
|
snprintf_P(buffer, sizeof(buffer)-1,
|
||||||
_ssdp_packet_template,
|
_ssdp_packet_template,
|
||||||
pbuff,
|
pbuff,
|
||||||
this->_interval,
|
this->_interval,
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ JsonSockEvent *SocketEmitter::beginEmit(const char *evt) {
|
||||||
this->json.beginEvent(&sockServer, evt, g_response, sizeof(g_response));
|
this->json.beginEvent(&sockServer, evt, g_response, sizeof(g_response));
|
||||||
return &this->json;
|
return &this->json;
|
||||||
}
|
}
|
||||||
void SocketEmitter::endEmit(uint8_t num) { this->json.endEvent(num); }
|
void SocketEmitter::endEmit(uint8_t num) { sockServer.loop(); this->json.endEvent(num); }
|
||||||
void SocketEmitter::endEmitRoom(uint8_t room) {
|
void SocketEmitter::endEmitRoom(uint8_t room) {
|
||||||
if(room < SOCK_MAX_ROOMS) {
|
if(room < SOCK_MAX_ROOMS) {
|
||||||
room_t *r = &this->rooms[room];
|
room_t *r = &this->rooms[room];
|
||||||
|
|
|
||||||
60
Somfy.cpp
60
Somfy.cpp
|
|
@ -3258,6 +3258,7 @@ void SomfyShade::toJSON(JsonResponse &json) {
|
||||||
json.endArray();
|
json.endArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
bool SomfyShade::toJSON(JsonObject &obj) {
|
bool SomfyShade::toJSON(JsonObject &obj) {
|
||||||
//Serial.print("Serializing Shade:");
|
//Serial.print("Serializing Shade:");
|
||||||
//Serial.print(this->getShadeId());
|
//Serial.print(this->getShadeId());
|
||||||
|
|
@ -3310,17 +3311,20 @@ bool SomfyShade::toJSON(JsonObject &obj) {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
bool SomfyRoom::fromJSON(JsonObject &obj) {
|
bool SomfyRoom::fromJSON(JsonObject &obj) {
|
||||||
if(obj.containsKey("name")) strlcpy(this->name, obj["name"], sizeof(this->name));
|
if(obj.containsKey("name")) strlcpy(this->name, obj["name"], sizeof(this->name));
|
||||||
if(obj.containsKey("sortOrder")) this->sortOrder = obj["sortOrder"];
|
if(obj.containsKey("sortOrder")) this->sortOrder = obj["sortOrder"];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
bool SomfyRoom::toJSON(JsonObject &obj) {
|
bool SomfyRoom::toJSON(JsonObject &obj) {
|
||||||
obj["roomId"] = this->roomId;
|
obj["roomId"] = this->roomId;
|
||||||
obj["name"] = this->name;
|
obj["name"] = this->name;
|
||||||
obj["sortOrder"] = this->sortOrder;
|
obj["sortOrder"] = this->sortOrder;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
void SomfyRoom::toJSON(JsonResponse &json) {
|
void SomfyRoom::toJSON(JsonResponse &json) {
|
||||||
json.addElem("roomId", this->roomId);
|
json.addElem("roomId", this->roomId);
|
||||||
json.addElem("name", this->name);
|
json.addElem("name", this->name);
|
||||||
|
|
@ -3422,16 +3426,19 @@ bool SomfyGroup::toJSON(JsonObject &obj) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void SomfyRemote::toJSON(JsonResponse &json) {
|
void SomfyRemote::toJSON(JsonResponse &json) {
|
||||||
json.addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
json.addElem("remoteAddress", (uint32_t)this->getRemoteAddress());
|
||||||
json.addElem("lastRollingCode", (uint32_t)this->lastRollingCode);
|
json.addElem("lastRollingCode", (uint32_t)this->lastRollingCode);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
bool SomfyRemote::toJSON(JsonObject &obj) {
|
bool SomfyRemote::toJSON(JsonObject &obj) {
|
||||||
//obj["remotePrefId"] = this->getRemotePrefId();
|
//obj["remotePrefId"] = this->getRemotePrefId();
|
||||||
obj["remoteAddress"] = this->getRemoteAddress();
|
obj["remoteAddress"] = this->getRemoteAddress();
|
||||||
obj["lastRollingCode"] = this->lastRollingCode;
|
obj["lastRollingCode"] = this->lastRollingCode;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
void SomfyRemote::setRemoteAddress(uint32_t address) { this->m_remoteAddress = address; snprintf(this->m_remotePrefId, sizeof(this->m_remotePrefId), "_%lu", (unsigned long)this->m_remoteAddress); }
|
void SomfyRemote::setRemoteAddress(uint32_t address) { this->m_remoteAddress = address; snprintf(this->m_remotePrefId, sizeof(this->m_remotePrefId), "_%lu", (unsigned long)this->m_remoteAddress); }
|
||||||
uint32_t SomfyRemote::getRemoteAddress() { return this->m_remoteAddress; }
|
uint32_t SomfyRemote::getRemoteAddress() { return this->m_remoteAddress; }
|
||||||
void SomfyShadeController::processFrame(somfy_frame_t &frame, bool internal) {
|
void SomfyShadeController::processFrame(somfy_frame_t &frame, bool internal) {
|
||||||
|
|
@ -4571,13 +4578,14 @@ void Transceiver::toJSON(JsonResponse& json) {
|
||||||
this->config.toJSON(json);
|
this->config.toJSON(json);
|
||||||
json.endObject();
|
json.endObject();
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
bool Transceiver::toJSON(JsonObject& obj) {
|
bool Transceiver::toJSON(JsonObject& obj) {
|
||||||
//Serial.println("Setting Transceiver Json");
|
//Serial.println("Setting Transceiver Json");
|
||||||
JsonObject objConfig = obj.createNestedObject("config");
|
JsonObject objConfig = obj.createNestedObject("config");
|
||||||
this->config.toJSON(objConfig);
|
this->config.toJSON(objConfig);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
bool Transceiver::fromJSON(JsonObject& obj) {
|
bool Transceiver::fromJSON(JsonObject& obj) {
|
||||||
if (obj.containsKey("config")) {
|
if (obj.containsKey("config")) {
|
||||||
JsonObject objConfig = obj["config"];
|
JsonObject objConfig = obj["config"];
|
||||||
|
|
@ -4664,6 +4672,7 @@ void transceiver_config_t::toJSON(JsonResponse &json) {
|
||||||
json.addElem("enabled", this->enabled);
|
json.addElem("enabled", this->enabled);
|
||||||
json.addElem("radioInit", this->radioInit);
|
json.addElem("radioInit", this->radioInit);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
void transceiver_config_t::toJSON(JsonObject& obj) {
|
void transceiver_config_t::toJSON(JsonObject& obj) {
|
||||||
obj["type"] = this->type;
|
obj["type"] = this->type;
|
||||||
obj["TXPin"] = this->TXPin;
|
obj["TXPin"] = this->TXPin;
|
||||||
|
|
@ -4677,36 +4686,35 @@ void transceiver_config_t::toJSON(JsonObject& obj) {
|
||||||
obj["deviation"] = this->deviation; // float
|
obj["deviation"] = this->deviation; // float
|
||||||
obj["txPower"] = this->txPower;
|
obj["txPower"] = this->txPower;
|
||||||
obj["proto"] = static_cast<uint8_t>(this->proto);
|
obj["proto"] = static_cast<uint8_t>(this->proto);
|
||||||
/*
|
//obj["internalCCMode"] = this->internalCCMode;
|
||||||
obj["internalCCMode"] = this->internalCCMode;
|
//obj["modulationMode"] = this->modulationMode;
|
||||||
obj["modulationMode"] = this->modulationMode;
|
//obj["channel"] = this->channel;
|
||||||
obj["channel"] = this->channel;
|
//obj["channelSpacing"] = this->channelSpacing; // float
|
||||||
obj["channelSpacing"] = this->channelSpacing; // float
|
//obj["dataRate"] = this->dataRate; // float
|
||||||
obj["dataRate"] = this->dataRate; // float
|
//obj["syncMode"] = this->syncMode;
|
||||||
obj["syncMode"] = this->syncMode;
|
//obj["syncWordHigh"] = this->syncWordHigh;
|
||||||
obj["syncWordHigh"] = this->syncWordHigh;
|
//obj["syncWordLow"] = this->syncWordLow;
|
||||||
obj["syncWordLow"] = this->syncWordLow;
|
//obj["addrCheckMode"] = this->addrCheckMode;
|
||||||
obj["addrCheckMode"] = this->addrCheckMode;
|
//obj["checkAddr"] = this->checkAddr;
|
||||||
obj["checkAddr"] = this->checkAddr;
|
//obj["dataWhitening"] = this->dataWhitening;
|
||||||
obj["dataWhitening"] = this->dataWhitening;
|
//obj["pktFormat"] = this->pktFormat;
|
||||||
obj["pktFormat"] = this->pktFormat;
|
//obj["pktLengthMode"] = this->pktLengthMode;
|
||||||
obj["pktLengthMode"] = this->pktLengthMode;
|
//obj["pktLength"] = this->pktLength;
|
||||||
obj["pktLength"] = this->pktLength;
|
//obj["useCRC"] = this->useCRC;
|
||||||
obj["useCRC"] = this->useCRC;
|
//obj["autoFlushCRC"] = this->autoFlushCRC;
|
||||||
obj["autoFlushCRC"] = this->autoFlushCRC;
|
//obj["disableDCFilter"] = this->disableDCFilter;
|
||||||
obj["disableDCFilter"] = this->disableDCFilter;
|
//obj["enableManchester"] = this->enableManchester;
|
||||||
obj["enableManchester"] = this->enableManchester;
|
//obj["enableFEC"] = this->enableFEC;
|
||||||
obj["enableFEC"] = this->enableFEC;
|
//obj["minPreambleBytes"] = this->minPreambleBytes;
|
||||||
obj["minPreambleBytes"] = this->minPreambleBytes;
|
//obj["pqtThreshold"] = this->pqtThreshold;
|
||||||
obj["pqtThreshold"] = this->pqtThreshold;
|
//obj["appendStatus"] = this->appendStatus;
|
||||||
obj["appendStatus"] = this->appendStatus;
|
//obj["printBuffer"] = somfy.transceiver.printBuffer;
|
||||||
obj["printBuffer"] = somfy.transceiver.printBuffer;
|
|
||||||
*/
|
|
||||||
obj["enabled"] = this->enabled;
|
obj["enabled"] = this->enabled;
|
||||||
obj["radioInit"] = this->radioInit;
|
obj["radioInit"] = this->radioInit;
|
||||||
//Serial.print("Serialize Radio JSON ");
|
//Serial.print("Serialize Radio JSON ");
|
||||||
//Serial.printf("SCK:%u MISO:%u MOSI:%u CSN:%u RX:%u TX:%u\n", this->SCKPin, this->MISOPin, this->MOSIPin, this->CSNPin, this->RXPin, this->TXPin);
|
//Serial.printf("SCK:%u MISO:%u MOSI:%u CSN:%u RX:%u TX:%u\n", this->SCKPin, this->MISOPin, this->MOSIPin, this->CSNPin, this->RXPin, this->TXPin);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
void transceiver_config_t::save() {
|
void transceiver_config_t::save() {
|
||||||
pref.begin("CC1101");
|
pref.begin("CC1101");
|
||||||
pref.clear();
|
pref.clear();
|
||||||
|
|
|
||||||
10
Somfy.h
10
Somfy.h
|
|
@ -197,7 +197,7 @@ class SomfyRoom {
|
||||||
void clear();
|
void clear();
|
||||||
bool save();
|
bool save();
|
||||||
bool fromJSON(JsonObject &obj);
|
bool fromJSON(JsonObject &obj);
|
||||||
bool toJSON(JsonObject &obj);
|
//bool toJSON(JsonObject &obj);
|
||||||
void toJSON(JsonResponse &json);
|
void toJSON(JsonResponse &json);
|
||||||
void emitState(const char *evt = "roomState");
|
void emitState(const char *evt = "roomState");
|
||||||
void emitState(uint8_t num, const char *evt = "roomState");
|
void emitState(uint8_t num, const char *evt = "roomState");
|
||||||
|
|
@ -228,7 +228,7 @@ class SomfyRemote {
|
||||||
uint8_t repeats = 1;
|
uint8_t repeats = 1;
|
||||||
virtual bool isLastCommand(somfy_commands cmd);
|
virtual bool isLastCommand(somfy_commands cmd);
|
||||||
char *getRemotePrefId() {return m_remotePrefId;}
|
char *getRemotePrefId() {return m_remotePrefId;}
|
||||||
virtual bool toJSON(JsonObject &obj);
|
//virtual bool toJSON(JsonObject &obj);
|
||||||
virtual void toJSON(JsonResponse &json);
|
virtual void toJSON(JsonResponse &json);
|
||||||
virtual void setRemoteAddress(uint32_t address);
|
virtual void setRemoteAddress(uint32_t address);
|
||||||
virtual uint32_t getRemoteAddress();
|
virtual uint32_t getRemoteAddress();
|
||||||
|
|
@ -297,7 +297,7 @@ class SomfyShade : public SomfyRemote {
|
||||||
//bool toJSONRef(JsonObject &obj);
|
//bool toJSONRef(JsonObject &obj);
|
||||||
void toJSONRef(JsonResponse &json);
|
void toJSONRef(JsonResponse &json);
|
||||||
int8_t fromJSON(JsonObject &obj);
|
int8_t fromJSON(JsonObject &obj);
|
||||||
bool toJSON(JsonObject &obj) override;
|
//bool toJSON(JsonObject &obj) override;
|
||||||
void toJSON(JsonResponse &json) override;
|
void toJSON(JsonResponse &json) override;
|
||||||
|
|
||||||
char name[21] = "";
|
char name[21] = "";
|
||||||
|
|
@ -475,7 +475,7 @@ struct transceiver_config_t {
|
||||||
bool appendStatus = false; // Appends the RSSI and LQI values to the TX packed as well as the CRC.
|
bool appendStatus = false; // Appends the RSSI and LQI values to the TX packed as well as the CRC.
|
||||||
*/
|
*/
|
||||||
void fromJSON(JsonObject& obj);
|
void fromJSON(JsonObject& obj);
|
||||||
void toJSON(JsonObject& obj);
|
//void toJSON(JsonObject& obj);
|
||||||
void toJSON(JsonResponse& json);
|
void toJSON(JsonResponse& json);
|
||||||
void save();
|
void save();
|
||||||
void load();
|
void load();
|
||||||
|
|
@ -490,7 +490,7 @@ class Transceiver {
|
||||||
public:
|
public:
|
||||||
transceiver_config_t config;
|
transceiver_config_t config;
|
||||||
bool printBuffer = false;
|
bool printBuffer = false;
|
||||||
bool toJSON(JsonObject& obj);
|
//bool toJSON(JsonObject& obj);
|
||||||
void toJSON(JsonResponse& json);
|
void toJSON(JsonResponse& json);
|
||||||
bool fromJSON(JsonObject& obj);
|
bool fromJSON(JsonObject& obj);
|
||||||
bool save();
|
bool save();
|
||||||
|
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -36,7 +36,14 @@ time_t Timestamp::mkUTCTime(struct tm *dt) {
|
||||||
return tsBadLocal + tsLocalOffset;
|
return tsBadLocal + tsLocalOffset;
|
||||||
}
|
}
|
||||||
time_t Timestamp::parseUTCTime(const char *buff) {
|
time_t Timestamp::parseUTCTime(const char *buff) {
|
||||||
struct tm dt = {0};
|
struct tm dt;
|
||||||
|
dt.tm_hour = 0;
|
||||||
|
dt.tm_mday = 0;
|
||||||
|
dt.tm_mon = 0;
|
||||||
|
dt.tm_year = 0;
|
||||||
|
dt.tm_wday = 0;
|
||||||
|
dt.tm_yday = 0;
|
||||||
|
dt.tm_isdst = false;
|
||||||
char num[5];
|
char num[5];
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
memset(num, 0x00, sizeof(num));
|
memset(num, 0x00, sizeof(num));
|
||||||
|
|
|
||||||
6
Web.cpp
6
Web.cpp
|
|
@ -830,6 +830,11 @@ void Web::handleDiscovery(WebServer &server) {
|
||||||
resp.addElem("chipModel", settings.chipModel);
|
resp.addElem("chipModel", settings.chipModel);
|
||||||
resp.addElem("connType", connType);
|
resp.addElem("connType", connType);
|
||||||
resp.addElem("checkForUpdate", settings.checkForUpdate);
|
resp.addElem("checkForUpdate", settings.checkForUpdate);
|
||||||
|
resp.beginObject("memory");
|
||||||
|
resp.addElem("max", ESP.getMaxAllocHeap());
|
||||||
|
resp.addElem("free", ESP.getFreeHeap());
|
||||||
|
resp.addElem("min", ESP.getMinFreeHeap());
|
||||||
|
resp.endObject();
|
||||||
resp.beginArray("rooms");
|
resp.beginArray("rooms");
|
||||||
somfy.toJSONRooms(resp);
|
somfy.toJSONRooms(resp);
|
||||||
resp.endArray();
|
resp.endArray();
|
||||||
|
|
@ -2179,7 +2184,6 @@ void Web::begin() {
|
||||||
server.on("/scanaps", []() {
|
server.on("/scanaps", []() {
|
||||||
webServer.sendCORSHeaders(server);
|
webServer.sendCORSHeaders(server);
|
||||||
if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; }
|
if(server.method() == HTTP_OPTIONS) { server.send(200, "OK"); return; }
|
||||||
int statusCode = 200;
|
|
||||||
int n = WiFi.scanNetworks();
|
int n = WiFi.scanNetworks();
|
||||||
Serial.print("Scanned ");
|
Serial.print("Scanned ");
|
||||||
Serial.print(n);
|
Serial.print(n);
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
<meta name="apple-mobile-web-app-title" content="ESPSomfy RTS App">
|
<meta name="apple-mobile-web-app-title" content="ESPSomfy RTS App">
|
||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
|
||||||
<link rel="stylesheet" href="main.css?v=2.4.2b" type="text/css" />
|
<link rel="stylesheet" href="main.css?v=2.4.2c" type="text/css" />
|
||||||
<link rel="stylesheet" href="widgets.css?v=2.4.2b" type="text/css" />
|
<link rel="stylesheet" href="widgets.css?v=2.4.2c" type="text/css" />
|
||||||
<link rel="stylesheet" href="icons.css?v=2.4.2b" type="text/css" />
|
<link rel="stylesheet" href="icons.css?v=2.4.2c" type="text/css" />
|
||||||
<link rel="icon" type="image/png" href="favicon.png" />
|
<link rel="icon" type="image/png" href="favicon.png" />
|
||||||
|
|
||||||
<!-- iPad retina icon -->
|
<!-- iPad retina icon -->
|
||||||
|
|
@ -114,7 +114,7 @@
|
||||||
rel="apple-touch-startup-image">
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="index.js?v=2.4.2b"></script>
|
<script type="text/javascript" src="index.js?v=2.4.2c"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="divContainer" class="container main" data-auth="false">
|
<div id="divContainer" class="container main" data-auth="false">
|
||||||
|
|
@ -221,18 +221,27 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="divFirmware" class="subtab-content" style="display:none;">
|
<div id="divFirmware" class="subtab-content" style="display:none;">
|
||||||
<div style="font-size:17px;">
|
<div>
|
||||||
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;margin-top:-27px;">Hardware: </span>
|
<div style="font-size:17px;">
|
||||||
<span style="padding-left: 4px; display: inline-block;">ESP32<span id="spanHwVersion" style="text-transform:uppercase; text-align:left;width:120px;"></span></span>
|
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;margin-top:-27px;">Hardware: </span>
|
||||||
|
<span style="padding-left: 4px; display: inline-block;">ESP32<span id="spanHwVersion" style="text-transform:uppercase; text-align:left;width:120px;"></span></span>
|
||||||
|
</div>
|
||||||
|
<div style="font-size:17px;">
|
||||||
|
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;margin-top:-27px;">Firmware:</span>
|
||||||
|
<span id="spanFwVersion" style="padding-left:4px;display:inline-block;text-align:left;width:120px;">v-.--</span>
|
||||||
|
</div>
|
||||||
|
<div style="font-size:17px;">
|
||||||
|
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;">Application:</span>
|
||||||
|
<span id="spanAppVersion" style="padding-left:4px;display:inline-block;text-align:left;width:120px;">v-.--</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size:17px;">
|
<div>
|
||||||
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;margin-top:-27px;">Firmware:</span>
|
<div style="font-size:17px;">
|
||||||
<span id="spanFwVersion" style="padding-left:4px;display:inline-block;text-align:left;width:120px;">v-.--</span>
|
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;margin-top:-27px;">Memory: </span>
|
||||||
</div>
|
<span style="padding-left: 4px; display: inline-block;"><span id="spanMemory" style="text-align:right;width:120px;"></span></span>
|
||||||
<div style="font-size:17px;">
|
</div>
|
||||||
<span style="text-align:right;display:inline-block;color:#00bcd4;width:127px;">Application:</span>
|
|
||||||
<span id="spanAppVersion" style="padding-left:4px;display:inline-block;text-align:left;width:120px;">v-.--</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="button-container">
|
<div class="button-container">
|
||||||
<button id="btnUpdateGithub" type="button" onclick="firmware.updateGithub();">
|
<button id="btnUpdateGithub" type="button" onclick="firmware.updateGithub();">
|
||||||
|
|
|
||||||
|
|
@ -491,6 +491,9 @@ async function initSockets() {
|
||||||
return value;
|
return value;
|
||||||
});
|
});
|
||||||
switch (eventName) {
|
switch (eventName) {
|
||||||
|
case 'memStatus':
|
||||||
|
firmware.procMemoryStatus(msg);
|
||||||
|
break;
|
||||||
case 'updateProgress':
|
case 'updateProgress':
|
||||||
firmware.procUpdateProgress(msg);
|
firmware.procUpdateProgress(msg);
|
||||||
break;
|
break;
|
||||||
|
|
@ -2772,7 +2775,7 @@ class Somfy {
|
||||||
}
|
}
|
||||||
pinMaps = [
|
pinMaps = [
|
||||||
{ name: '', maxPins: 39, inputs: [0, 1, 6, 7, 8, 9, 10, 11, 37, 38], outputs: [3, 6, 7, 8, 9, 10, 11, 34, 35, 36, 37, 38, 39] },
|
{ name: '', maxPins: 39, inputs: [0, 1, 6, 7, 8, 9, 10, 11, 37, 38], outputs: [3, 6, 7, 8, 9, 10, 11, 34, 35, 36, 37, 38, 39] },
|
||||||
{ name: 's2', maxPins: 46, inputs: [0, 15, 16, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 45], outputs: [0, 15, 16, 19, 20, 26, 27, 28, 29, 30, 31, 32, 45, 46]},
|
{ name: 's2', maxPins: 46, inputs: [0, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 45], outputs: [0, 19, 20, 26, 27, 28, 29, 30, 31, 32, 45, 46]},
|
||||||
{ name: 's3', maxPins: 48, inputs: [0, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 39, 40, 41, 42, 43], outputs: [0, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 39, 40, 41, 42, 43] },
|
{ name: 's3', maxPins: 48, inputs: [0, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 39, 40, 41, 42, 43], outputs: [0, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 39, 40, 41, 42, 43] },
|
||||||
{ name: 'c3', maxPins: 21, inputs: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], outputs: [11, 12, 13, 14, 15, 16, 17, 21] }
|
{ name: 'c3', maxPins: 21, inputs: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20], outputs: [11, 12, 13, 14, 15, 16, 17, 21] }
|
||||||
];
|
];
|
||||||
|
|
@ -4299,6 +4302,12 @@ class Firmware {
|
||||||
div.innerHTML = html;
|
div.innerHTML = html;
|
||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
procMemoryStatus(mem) {
|
||||||
|
console.log(mem);
|
||||||
|
let sp = document.getElementById('spanMemory');
|
||||||
|
sp.innerHTML = mem.max.fmt("#,##0 bytes");
|
||||||
|
}
|
||||||
|
|
||||||
procFwStatus(rel) {
|
procFwStatus(rel) {
|
||||||
console.log(rel);
|
console.log(rel);
|
||||||
let div = document.getElementById('divFirmwareUpdate');
|
let div = document.getElementById('divFirmwareUpdate');
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue