aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hvac-hybrid-qml-binding.c79
1 files changed, 43 insertions, 36 deletions
diff --git a/hvac-hybrid-qml-binding.c b/hvac-hybrid-qml-binding.c
index 369fb1e..b813d8a 100644
--- a/hvac-hybrid-qml-binding.c
+++ b/hvac-hybrid-qml-binding.c
@@ -262,60 +262,67 @@ static void get_temp_left_zone(struct afb_req request)
}
/*
- * @brief Set a component value using a json object retrieved from request
+ * @brief Read all values
*
* @param struct afb_req : an afb request structure
*
*/
-static void set(struct afb_req request)
+static void get_all(struct afb_req request)
{
- struct can_handler ch;
- const char *comp, *val;
+ json_object *ret_json;
- comp = afb_req_value(request, "component");
- val = afb_req_value(request, "value");
+ ret_json = json_object_new_object();
+ json_object_object_add(ret_json, "LeftTemperature", json_object_new_int(read_temp_left_zone()));
+ json_object_object_add(ret_json, "RightTemperature", json_object_new_int(read_temp_right_zone()));
+ json_object_object_add(ret_json, "FanSpeed", json_object_new_int(read_fanspeed()));
- if (comp == NULL || val == NULL)
- {
- afb_req_fail_f(request, "failure", "ERROR: You have to send a json object with attribute 'component' and 'value'.\nSend again please choosing between following components: LeftTemperature, RightTemperature, FanSpeed\ncomponent : %s\n val: %s", comp, val);
- return;
- }
+ afb_req_success(request, ret_json, NULL);
+}
+/*
+ * @brief Set a component value using a json object retrieved from request
+ *
+ * @param struct afb_req : an afb request structure
+ *
+ */
+static void set(struct afb_req request)
+{
+ struct can_handler ch;
+ const char *val;
+ struct json_object *query;
+ struct json_object_iterator iter;
+ struct json_object_iterator iter_end;
+
+ query = afb_req_json(request);
+ iter = json_object_iter_begin(query);
+ iter_end = json_object_iter_end(query);
+
+ /*
+ * Loop over the json object that will set every component
+ * which it will find in it.
+ */
int i;
- for (i=0;i<8;i++)
+ while(!json_object_iter_equal(&iter, &iter_end))
{
- if(strcmp(can_hvac_components[i], comp) == 0)
+ const char *key = json_object_iter_peek_name(&iter);
+ for (i=0;i<8;i++)
{
- uint8_t comp_val = make_atoi(val);
- can_hvac_values[i] = comp_val;
- break;
+ if(strcmp(can_hvac_components[i], key) == 0)
+ {
+ val = afb_req_value(request, key);
+ uint8_t comp_val = make_atoi(val);
+ can_hvac_values[i] = comp_val;
+ break;
+ }
}
+ json_object_iter_next(&iter);
}
ch = open_can_dev();
write_can(ch);
close_can_dev(ch);
- json_object *query = afb_req_json(request);
- afb_req_success_f(request, NULL, "Set the %s=%d query=%s", can_hvac_components[i], can_hvac_values[i], json_object_to_json_string(query));
-}
-
-/*
- * @brief Read all values
- *
- * @param struct afb_req : an afb request structure
- *
- */
-static void get_all(struct afb_req request)
-{
- json_object *ret_json;
-
- ret_json = json_object_new_object();
- json_object_object_add(ret_json, "LeftTemperature", json_object_new_int(read_temp_left_zone()));
- json_object_object_add(ret_json, "RightTemperature", json_object_new_int(read_temp_right_zone()));
- json_object_object_add(ret_json, "FanSpeed", json_object_new_int(read_fanspeed()));
-
- afb_req_success_f(request, ret_json, NULL);
+ afb_req_success(request, query, "HVAC settings updated");
}
// TODO: Have to change session management flag to AFB_SESSION_CHECK to use token auth