diff --git a/core/MyMessage.cpp b/core/MyMessage.cpp index 090fac5c..73ba2251 100644 --- a/core/MyMessage.cpp +++ b/core/MyMessage.cpp @@ -249,6 +249,23 @@ MyMessage& MyMessage::set(const char* value) return *this; } +#if !defined(__linux__) +MyMessage& MyMessage::set(const __FlashStringHelper* value) +{ + uint8_t length = value == NULL ? 0 + : min(strlen_P(reinterpret_cast(value)), (size_t)MAX_PAYLOAD); + miSetLength(length); + miSetPayloadType(P_STRING); + if (length) { + strncpy_P(data, reinterpret_cast(value), length); + } + // null terminate string + data[length] = 0; + return *this; +} +#endif + + MyMessage& MyMessage::set(bool value) { miSetLength(1); diff --git a/core/MyMessage.h b/core/MyMessage.h index c98f08f0..7545773f 100644 --- a/core/MyMessage.h +++ b/core/MyMessage.h @@ -325,6 +325,9 @@ public: // Setters for payload MyMessage& set(void* payload, uint8_t length); MyMessage& set(const char* value); +#if !defined(__linux__) + MyMessage& set(const __FlashStringHelper* value); +#endif MyMessage& set(float value, uint8_t decimals); MyMessage& set(bool value); MyMessage& set(uint8_t value); diff --git a/core/MySensorsCore.cpp b/core/MySensorsCore.cpp index d2e9a0f7..045ea021 100644 --- a/core/MySensorsCore.cpp +++ b/core/MySensorsCore.cpp @@ -358,6 +358,22 @@ bool sendSketchInfo(const char *name, const char *version, const bool ack) return result; } +#if !defined(__linux__) +bool sendSketchInfo(const __FlashStringHelper *name, const __FlashStringHelper *version, const bool ack) +{ + bool result = true; + if (name) { + result &= _sendRoute(build(_msgTmp, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_SKETCH_NAME, + ack).set(name)); + } + if (version) { + result &= _sendRoute(build(_msgTmp, GATEWAY_ADDRESS, NODE_SENSOR_ID, C_INTERNAL, I_SKETCH_VERSION, + ack).set(version)); + } + return result; +} +#endif + bool request(const uint8_t childSensorId, const uint8_t variableType, const uint8_t destination) { return _sendRoute(build(_msgTmp, destination, childSensorId, C_REQ, variableType).set("")); @@ -700,4 +716,4 @@ void _checkNodeLock(void) } #if DOXYGEN -#endif \ No newline at end of file +#endif diff --git a/core/MySensorsCore.h b/core/MySensorsCore.h index d6cb790b..4a9be537 100644 --- a/core/MySensorsCore.h +++ b/core/MySensorsCore.h @@ -145,6 +145,9 @@ bool present(const uint8_t sensorId, const uint8_t sensorType, const char *descr * @return true Returns true if message reached the first stop on its way to destination. */ bool sendSketchInfo(const char *name, const char *version, const bool ack = false); +#if !defined(__linux__) +bool sendSketchInfo(const __FlashStringHelper *name, const __FlashStringHelper *version, const bool ack = false); +#endif /** * Sends a message to gateway or one of the other nodes in the radio network