Commit 47883197 authored by Dimitris Lampridis's avatar Dimitris Lampridis

sw: Added functions for disabling and removing all rules and alarms

parent df19eb9f
...@@ -1069,7 +1069,11 @@ enum wrtd_status wrtd_remove_all_rules(struct wrtd_dev *wrtd) ...@@ -1069,7 +1069,11 @@ enum wrtd_status wrtd_remove_all_rules(struct wrtd_dev *wrtd)
rule = &wrtd->rules[idx].rule; rule = &wrtd->rules[idx].rule;
if (rule->conf.enabled) if (rule->conf.enabled)
return wrtd_return_error(wrtd, WRTD_ERROR_RULE_ENABLED, return wrtd_return_error(wrtd, WRTD_ERROR_RULE_ENABLED,
"rule is enabled"); "not all rules are disabled");
}
for (idx = 0; idx < wrtd->nbr_rules; idx++) {
rule = &wrtd->rules[idx].rule;
/* Clear it. */ /* Clear it. */
memset(rule, 0, sizeof(struct wrtd_rule)); memset(rule, 0, sizeof(struct wrtd_rule));
...@@ -1078,7 +1082,6 @@ enum wrtd_status wrtd_remove_all_rules(struct wrtd_dev *wrtd) ...@@ -1078,7 +1082,6 @@ enum wrtd_status wrtd_remove_all_rules(struct wrtd_dev *wrtd)
status = wrtd_write_rule(wrtd, idx); status = wrtd_write_rule(wrtd, idx);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
} }
return WRTD_SUCCESS; return WRTD_SUCCESS;
...@@ -1094,6 +1097,13 @@ extern enum wrtd_status wrtd_remove_all_alarms(struct wrtd_dev *wrtd) ...@@ -1094,6 +1097,13 @@ extern enum wrtd_status wrtd_remove_all_alarms(struct wrtd_dev *wrtd)
status = wrtd_fill_alarms(wrtd); status = wrtd_fill_alarms(wrtd);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
for (idx = 0; idx < wrtd->nbr_alarms; idx++) {
alarm = &wrtd->alarms[idx].alarm;
if (alarm-> enabled)
return wrtd_return_error(wrtd, WRTD_ERROR_ALARM_EXISTS,
"not all alarms are disabled");
}
for (idx = 0; idx < wrtd->nbr_alarms; idx++) { for (idx = 0; idx < wrtd->nbr_alarms; idx++) {
/* Clear it. */ /* Clear it. */
alarm = &wrtd->alarms[idx].alarm; alarm = &wrtd->alarms[idx].alarm;
...@@ -1102,7 +1112,6 @@ extern enum wrtd_status wrtd_remove_all_alarms(struct wrtd_dev *wrtd) ...@@ -1102,7 +1112,6 @@ extern enum wrtd_status wrtd_remove_all_alarms(struct wrtd_dev *wrtd)
/* Write-back. */ /* Write-back. */
status = wrtd_write_alarm(wrtd, idx); status = wrtd_write_alarm(wrtd, idx);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
} }
return WRTD_SUCCESS; return WRTD_SUCCESS;
...@@ -1112,22 +1121,24 @@ enum wrtd_status wrtd_disable_all_rules(struct wrtd_dev *wrtd) ...@@ -1112,22 +1121,24 @@ enum wrtd_status wrtd_disable_all_rules(struct wrtd_dev *wrtd)
{ {
unsigned idx; unsigned idx;
enum wrtd_status status; enum wrtd_status status;
// struct wrtd_rule *rule;
struct wrtd_lib_rule *r; struct wrtd_lib_rule *r;
int changed = 0;
status = wrtd_fill_rules(wrtd); status = wrtd_fill_rules(wrtd);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
for (idx = 0; idx < wrtd->nbr_rules; idx++) { for (idx = 0; idx < wrtd->nbr_rules; idx++) {
r = &wrtd->rules[idx]; r = &wrtd->rules[idx];
if(!wrtd_id_null(r->rule.conf.id)) if (r->rule.conf.enabled != 0) {
{ r->rule.conf.enabled = 0;
status = wrtd_set_attr_bool(wrtd, r->rule.conf.id , WRTD_ATTR_RULE_ENABLED, 0); changed = 1;
WRTD_RETURN_IF_ERROR(status);
} }
} }
if (changed) {
status = wrtd_reconfigure(wrtd);
WRTD_RETURN_IF_ERROR(status);
}
return WRTD_SUCCESS; return WRTD_SUCCESS;
} }
...@@ -1136,18 +1147,22 @@ enum wrtd_status wrtd_disable_all_alarms(struct wrtd_dev *wrtd) ...@@ -1136,18 +1147,22 @@ enum wrtd_status wrtd_disable_all_alarms(struct wrtd_dev *wrtd)
unsigned idx; unsigned idx;
enum wrtd_status status; enum wrtd_status status;
struct wrtd_alarm *alarm; struct wrtd_alarm *alarm;
int changed = 0;
status = wrtd_fill_alarms(wrtd); status = wrtd_fill_alarms(wrtd);
WRTD_RETURN_IF_ERROR(status); WRTD_RETURN_IF_ERROR(status);
for (idx = 0; idx < wrtd->nbr_alarms; idx++) { for (idx = 0; idx < wrtd->nbr_alarms; idx++) {
alarm = &wrtd->alarms[idx].alarm; alarm = &wrtd->alarms[idx].alarm;
if(!wrtd_id_null(alarm->event.id)) if(alarm->enabled != 0) {
{ alarm->enabled = 0;
status = wrtd_set_attr_bool(wrtd, alarm->event.id, WRTD_ATTR_ALARM_ENABLED, 0); changed = 1;
WRTD_RETURN_IF_ERROR(status);
} }
} }
return WRTD_SUCCESS;
if (changed) {
status = wrtd_reconfigure(wrtd);
WRTD_RETURN_IF_ERROR(status);
}
return WRTD_SUCCESS;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment