return UBUS_STATUS_INVALID_ARGUMENT; procd_spawn_upgraded(blobmsg_get_string(tb[NAND_PATH])); fprintf(stderr, "Yikees, something went wrong. no /sbin/upgraded ?\n"); return 0; } static void procd_subscribe_cb(struct ubus_context *ctx, struct ubus_object *obj) { notify = obj->has_subscribers; } 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("signal", proc_signal, signal_policy), /* must remain at the end as it ia not always loaded */ UBUS_METHOD("nandupgrade", nand_set, nand_policy), }; static struct ubus_object_type system_object_type = UBUS_OBJECT_TYPE("system", system_methods); static struct ubus_object system_object = { .name = "system", .type = &system_object_type,
#ifdef HAVE_UBUS #include <libubus.h> static struct blob_buf b; static int notify; static int error_logged = 0; static int ubus_handle_metrics(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, const char *method, struct blob_attr *msg); static void ubus_subscribe_cb(struct ubus_context *ctx, struct ubus_object *obj); static const struct ubus_method ubus_object_methods[] = { UBUS_METHOD_NOARG("metrics", ubus_handle_metrics), }; static struct ubus_object_type ubus_object_type = UBUS_OBJECT_TYPE("dnsmasq", ubus_object_methods); static struct ubus_object ubus_object = { .name = "dnsmasq", .type = &ubus_object_type, .methods = ubus_object_methods, .n_methods = ARRAY_SIZE(ubus_object_methods), .subscribe_cb = ubus_subscribe_cb, }; static void ubus_subscribe_cb(struct ubus_context *ctx, struct ubus_object *obj) {
blobmsg_add_u8(&b, "signal", 0); } else { blobmsg_add_u32(&b, "age", now.tv_sec - stamp.tv_sec); blobmsg_add_string(&b, "latitude", latitude); blobmsg_add_string(&b, "longitude", longitude); blobmsg_add_string(&b, "elevation", elevation); blobmsg_add_string(&b, "course", course); blobmsg_add_string(&b, "speed", speed); } ubus_send_reply(ctx, req, b.head); return UBUS_STATUS_OK; } static const struct ubus_method gps_methods[] = { UBUS_METHOD_NOARG("info", gps_info), }; static struct ubus_object_type gps_object_type = UBUS_OBJECT_TYPE("gps", gps_methods); static struct ubus_object gps_object = { .name = "gps", .type = &gps_object_type, .methods = gps_methods, .n_methods = ARRAY_SIZE(gps_methods), }; static void ubus_connect_handler(struct ubus_context *ctx) {