ocf_sample; use cbor_read_flat_attrs() to read in payload from put light request.
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/commit/0a07efd4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/tree/0a07efd4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/diff/0a07efd4 Branch: refs/heads/sensors_branch Commit: 0a07efd4882bd50dd1cd892d1324286cc7c9451c Parents: 9cafdcd Author: Marko Kiiskila <ma...@runtime.io> Authored: Tue Dec 13 10:08:45 2016 -0800 Committer: Sterling Hughes <sterl...@apache.org> Committed: Sun Dec 18 13:56:16 2016 -0800 ---------------------------------------------------------------------- apps/ocf_sample/pkg.yml | 1 + apps/ocf_sample/src/main.c | 54 +++++++++++++++++++++++------------------ 2 files changed, 31 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0a07efd4/apps/ocf_sample/pkg.yml ---------------------------------------------------------------------- diff --git a/apps/ocf_sample/pkg.yml b/apps/ocf_sample/pkg.yml index c18f2eb..7cf3510 100644 --- a/apps/ocf_sample/pkg.yml +++ b/apps/ocf_sample/pkg.yml @@ -28,6 +28,7 @@ pkg.deps: - kernel/os - sys/log - net/oic + - encoding/cborattr - sys/console/full pkg.deps.OC_TRANSPORT_SERIAL: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/0a07efd4/apps/ocf_sample/src/main.c ---------------------------------------------------------------------- diff --git a/apps/ocf_sample/src/main.c b/apps/ocf_sample/src/main.c index bd6d7e1..a68c5ff 100644 --- a/apps/ocf_sample/src/main.c +++ b/apps/ocf_sample/src/main.c @@ -23,6 +23,7 @@ #include <bsp/bsp.h> #include <log/log.h> #include <oic/oc_api.h> +#include <cborattr/cborattr.h> #if (MYNEWT_VAL(OC_TRANSPORT_SERIAL) == 1) #include <console/console.h> #include <console/prompt.h> @@ -54,13 +55,13 @@ get_light(oc_request_t *request, oc_interface_mask_t interface) printf("GET_light:\n"); oc_rep_start_root_object(); switch (interface) { - case OC_IF_BASELINE: - oc_process_baseline_interface(request->resource); - case OC_IF_RW: - oc_rep_set_boolean(root, state, light_state); - break; - default: - break; + case OC_IF_BASELINE: + oc_process_baseline_interface(request->resource); + case OC_IF_RW: + oc_rep_set_boolean(root, state, light_state); + break; + default: + break; } oc_rep_end_root_object(); oc_send_response(request, OC_STATUS_OK); @@ -70,25 +71,30 @@ get_light(oc_request_t *request, oc_interface_mask_t interface) static void put_light(oc_request_t *request, oc_interface_mask_t interface) { - printf("PUT_light:\n"); - bool state = false; - oc_rep_t *rep = request->request_payload; - while (rep != NULL) { - printf("key: %s ", oc_string(rep->name)); - switch (rep->type) { - case BOOL: - state = rep->value_boolean; - printf("value: %d\n", state); - break; - default: - oc_send_response(request, OC_STATUS_BAD_REQUEST); - return; - break; + bool state; + int len; + const uint8_t *data; + struct cbor_attr_t attrs[] = { + [0] = { + .attribute = "state", + .type = CborAttrBooleanType, + .addr.boolean = &state, + .dflt.boolean = false + }, + [1] = { } - rep = rep->next; + }; + + printf("PUT_light:\n"); + + len = coap_get_payload(request->packet, &data); + if (cbor_read_flat_attrs(data, len, attrs)) { + oc_send_response(request, OC_STATUS_BAD_REQUEST); + } else { + printf("value: %d\n", state); + light_state = state; + oc_send_response(request, OC_STATUS_CHANGED); } - oc_send_response(request, OC_STATUS_CHANGED); - light_state = state; } static void