From fa21bedc238b77a3c6bfe4a4a6a5b3a13f0a4b9a Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Sat, 29 Jun 2013 00:26:39 +0000 Subject: cethcan: light_{get,set} RPC --- cethcan/rpc.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'cethcan/rpc.c') diff --git a/cethcan/rpc.c b/cethcan/rpc.c index 57cb117..f9a47fc 100644 --- a/cethcan/rpc.c +++ b/cethcan/rpc.c @@ -9,8 +9,46 @@ static int rpc_ping(void *apparg, json_t *json_params, json_t **result) return 0; } +static int rpc_light_set(void *apparg, json_t *json_params, json_t **result) +{ + struct light *l; + const char *name = json_string_value(json_array_get(json_params, 0)); + unsigned val = json_integer_value(json_array_get(json_params, 1)); + + l = light_find(name); + if (!l) { + *result = jsonrpc_error_object(JSONRPC_INVALID_PARAMS, + json_string("cann't find specified light")); + return JSONRPC_INVALID_PARAMS; + } + *result = json_boolean(!light_set(l, val)); + return 0; +} + +static int rpc_light_get(void *apparg, json_t *json_params, json_t **result) +{ + struct light *l; + const char *name = json_string_value(json_array_get(json_params, 0)); + unsigned set, actual; + + l = light_find(name); + if (!l) { + *result = jsonrpc_error_object(JSONRPC_INVALID_PARAMS, + json_string("cannot find specified light")); + return JSONRPC_INVALID_PARAMS; + } + + set = light_getset(l); + actual = light_getact(l); + + *result = json_pack("{s:i,s:i}", "set", set, "actual", actual); + return 0; +} + struct jsonrpc_method_entry_t method_table[] = { { "ping", rpc_ping, "" }, + { "light_set", rpc_light_set, "[si]" }, + { "light_get", rpc_light_get, "[s]" }, { NULL, NULL, NULL }, }; -- cgit v1.2.1