add support for the system.event node
authorJohn Crispin <blogic@openwrt.org>
Sat, 29 Jun 2013 20:19:04 +0000 (22:19 +0200)
committerJohn Crispin <blogic@openwrt.org>
Sat, 29 Jun 2013 20:26:50 +0000 (22:26 +0200)
Signed-off-by: John Crispin <blogic@openwrt.org>
system.c

index c96cb632fec3bd6f5902608f9d28a59a9505d309..e1f4a647f45b528c62f7bcf896b08d97e64174bd 100644 (file)
--- a/system.c
+++ b/system.c
@@ -259,11 +259,41 @@ static int watchdog_set(struct ubus_context *ctx, struct ubus_object *obj,
        return 0;
 }
 
+enum {
+       EVENT_TYPE,
+       EVENT_DATA,
+       __EVENT_MAX
+};
+
+static const struct blobmsg_policy event_policy[__WDT_MAX] = {
+       [EVENT_TYPE] = { .name = "frequency", .type = BLOBMSG_TYPE_INT32 },
+       [EVENT_DATA] = { .name = "timeout", .type = BLOBMSG_TYPE_INT32 },
+};
+
+static int system_event(struct ubus_context *ctx, struct ubus_object *obj,
+                       struct ubus_request_data *req, const char *method,
+                       struct blob_attr *msg)
+{
+       struct blob_attr *tb[__EVENT_MAX];
+
+       if (!msg)
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       blobmsg_parse(event_policy, __EVENT_MAX, tb, blob_data(msg), blob_len(msg));
+       if (!tb[EVENT_TYPE])
+               return UBUS_STATUS_INVALID_ARGUMENT;
+
+       fprintf(stderr, "%s\n", blobmsg_get_string(tb[EVENT_TYPE]));
+
+       return 0;
+}
+
 static const struct ubus_method system_methods[] = {
        UBUS_METHOD_NOARG("board", system_board),
        UBUS_METHOD_NOARG("info",  system_info),
        UBUS_METHOD_NOARG("upgrade", system_upgrade),
        UBUS_METHOD("watchdog", watchdog_set, watchdog_policy),
+       UBUS_METHOD("event", system_event, event_policy),
 };
 
 static struct ubus_object_type system_object_type =