Skip to content

Commit

Permalink
Unlimited count of parameters for virtualWrite and setProperty.
Browse files Browse the repository at this point in the history
Fix #225
  • Loading branch information
vshymanskyy committed Nov 1, 2016
1 parent 310f3e0 commit cdec83c
Showing 1 changed file with 17 additions and 78 deletions.
95 changes: 17 additions & 78 deletions src/Blynk/BlynkApi.h
Expand Up @@ -68,49 +68,13 @@ class BlynkApi
* @param pin Virtual Pin number
* @param data Value to be sent
*/
template <typename T>
void virtualWrite(int pin, const T& data) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add("vw");
cmd.add(pin);
cmd.add(data);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T1, typename T2>
void virtualWrite(int pin, const T1& data1, const T2& data2) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add("vw");
cmd.add(pin);
cmd.add(data1);
cmd.add(data2);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T1, typename T2, typename T3>
void virtualWrite(int pin, const T1& data1, const T2& data2, const T3& data3) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add("vw");
cmd.add(pin);
cmd.add(data1);
cmd.add(data2);
cmd.add(data3);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T1, typename T2, typename T3, typename T4>
void virtualWrite(int pin, const T1& data1, const T2& data2, const T3& data3, const T4& data4) {
template <typename... Args>
void virtualWrite(int pin, Args... values) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add("vw");
cmd.add(pin);
cmd.add(data1);
cmd.add(data2);
cmd.add(data3);
cmd.add(data4);
append_params(cmd, values...);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_HARDWARE, 0, cmd.getBuffer(), cmd.getLength()-1);
}

Expand Down Expand Up @@ -240,49 +204,13 @@ class BlynkApi
* @param property Property name ("label", "labels", "color", ...)
* @param value Property value
*/
template <typename T, typename T1>
void setProperty(int pin, const T& property, const T1& value) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add(pin);
cmd.add(property);
cmd.add(value);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T, typename T1, typename T2>
void setProperty(int pin, const T& property, const T1& value1, const T2& value2) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add(pin);
cmd.add(property);
cmd.add(value1);
cmd.add(value2);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T, typename T1, typename T2, typename T3>
void setProperty(int pin, const T& property, const T1& value1, const T2& value2, const T3& value3) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add(pin);
cmd.add(property);
cmd.add(value1);
cmd.add(value2);
cmd.add(value3);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength()-1);
}

template <typename T, typename T1, typename T2, typename T3, typename T4>
void setProperty(int pin, const T& property, const T1& value1, const T2& value2, const T3& value3, const T4& value4) {
template <typename T, typename... Args>
void setProperty(int pin, const T& property, Args... values) {
char mem[BLYNK_MAX_SENDBYTES];
BlynkParam cmd(mem, 0, sizeof(mem));
cmd.add(pin);
cmd.add(property);
cmd.add(value1);
cmd.add(value2);
cmd.add(value3);
cmd.add(value4);
append_params(cmd, values...);
static_cast<Proto*>(this)->sendCmd(BLYNK_CMD_PROPERTY, 0, cmd.getBuffer(), cmd.getLength()-1);
}

Expand Down Expand Up @@ -353,6 +281,17 @@ class BlynkApi
void processCmd(const void* buff, size_t len);
void sendInfo();

template<typename T, typename... Args>
void append_params(BlynkParam& param, T last) {
param.add(last);
}

template<typename T, typename... Args>
void append_params(BlynkParam& param, T head, Args... tail) {
param.add(head);
append_params(param, tail...);
}

};


Expand Down

0 comments on commit cdec83c

Please sign in to comment.