Demo for the problem with nsdl_lib and rtos on FRDM- K64F
Dependencies: C12832_lcd WiflyInterface mbed-rtos mbed nsdl_lib
resources/light.cpp@0:e41e45a41f0f, 2015-01-16 (annotated)
- Committer:
- lvwei1990
- Date:
- Fri Jan 16 06:37:29 2015 +0000
- Revision:
- 0:e41e45a41f0f
Demo for the problem with nsdl_lib and rtos on FRDM- K64F
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lvwei1990 | 0:e41e45a41f0f | 1 | // Light resource implementation |
lvwei1990 | 0:e41e45a41f0f | 2 | |
lvwei1990 | 0:e41e45a41f0f | 3 | #include "mbed.h" |
lvwei1990 | 0:e41e45a41f0f | 4 | #include "nsdl_support.h" |
lvwei1990 | 0:e41e45a41f0f | 5 | #include "light.h" |
lvwei1990 | 0:e41e45a41f0f | 6 | |
lvwei1990 | 0:e41e45a41f0f | 7 | //#define LIGHT_RES_ID "lt/0/dim" |
lvwei1990 | 0:e41e45a41f0f | 8 | #define LIGHT_RES_ID "11100/0/5900" |
lvwei1990 | 0:e41e45a41f0f | 9 | |
lvwei1990 | 0:e41e45a41f0f | 10 | extern Serial pc; |
lvwei1990 | 0:e41e45a41f0f | 11 | char leds[] = {"1111"}; //YGBR |
lvwei1990 | 0:e41e45a41f0f | 12 | |
lvwei1990 | 0:e41e45a41f0f | 13 | DigitalOut grn(LED1); |
lvwei1990 | 0:e41e45a41f0f | 14 | DigitalOut red(LED2); |
lvwei1990 | 0:e41e45a41f0f | 15 | DigitalOut blu(LED3); |
lvwei1990 | 0:e41e45a41f0f | 16 | DigitalOut yel(LED4); |
lvwei1990 | 0:e41e45a41f0f | 17 | |
lvwei1990 | 0:e41e45a41f0f | 18 | void set_leds(char *leds) |
lvwei1990 | 0:e41e45a41f0f | 19 | { |
lvwei1990 | 0:e41e45a41f0f | 20 | int leds_int ; |
lvwei1990 | 0:e41e45a41f0f | 21 | |
lvwei1990 | 0:e41e45a41f0f | 22 | sscanf(leds, "%x", &leds_int); |
lvwei1990 | 0:e41e45a41f0f | 23 | |
lvwei1990 | 0:e41e45a41f0f | 24 | grn = ~leds_int & 1; |
lvwei1990 | 0:e41e45a41f0f | 25 | red = ~leds_int >> 4 & 1; |
lvwei1990 | 0:e41e45a41f0f | 26 | blu = ~leds_int >> 8 & 1; |
lvwei1990 | 0:e41e45a41f0f | 27 | yel = ~leds_int >> 12 & 1; |
lvwei1990 | 0:e41e45a41f0f | 28 | } |
lvwei1990 | 0:e41e45a41f0f | 29 | |
lvwei1990 | 0:e41e45a41f0f | 30 | |
lvwei1990 | 0:e41e45a41f0f | 31 | /* Only GET and PUT method allowed */ |
lvwei1990 | 0:e41e45a41f0f | 32 | static uint8_t light_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto) |
lvwei1990 | 0:e41e45a41f0f | 33 | { |
lvwei1990 | 0:e41e45a41f0f | 34 | sn_coap_hdr_s *coap_res_ptr = 0; |
lvwei1990 | 0:e41e45a41f0f | 35 | |
lvwei1990 | 0:e41e45a41f0f | 36 | //pc.printf("LED Strip callback\r\n"); |
lvwei1990 | 0:e41e45a41f0f | 37 | |
lvwei1990 | 0:e41e45a41f0f | 38 | if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) |
lvwei1990 | 0:e41e45a41f0f | 39 | { |
lvwei1990 | 0:e41e45a41f0f | 40 | coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT); |
lvwei1990 | 0:e41e45a41f0f | 41 | |
lvwei1990 | 0:e41e45a41f0f | 42 | coap_res_ptr->payload_len = strlen(leds); |
lvwei1990 | 0:e41e45a41f0f | 43 | coap_res_ptr->payload_ptr = (uint8_t*)leds; |
lvwei1990 | 0:e41e45a41f0f | 44 | sn_nsdl_send_coap_message(address, coap_res_ptr); |
lvwei1990 | 0:e41e45a41f0f | 45 | } |
lvwei1990 | 0:e41e45a41f0f | 46 | else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) |
lvwei1990 | 0:e41e45a41f0f | 47 | { |
lvwei1990 | 0:e41e45a41f0f | 48 | //pc.printf("PUT: %d bytes\r\n", received_coap_ptr->payload_len); |
lvwei1990 | 0:e41e45a41f0f | 49 | if(received_coap_ptr->payload_len == 4) |
lvwei1990 | 0:e41e45a41f0f | 50 | { |
lvwei1990 | 0:e41e45a41f0f | 51 | memcpy(leds, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len); |
lvwei1990 | 0:e41e45a41f0f | 52 | |
lvwei1990 | 0:e41e45a41f0f | 53 | leds[received_coap_ptr->payload_len] = '\0'; |
lvwei1990 | 0:e41e45a41f0f | 54 | pc.printf("PUT: %s\r\n",leds); |
lvwei1990 | 0:e41e45a41f0f | 55 | |
lvwei1990 | 0:e41e45a41f0f | 56 | //call LED strup update function here |
lvwei1990 | 0:e41e45a41f0f | 57 | set_leds(leds); |
lvwei1990 | 0:e41e45a41f0f | 58 | |
lvwei1990 | 0:e41e45a41f0f | 59 | coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED); |
lvwei1990 | 0:e41e45a41f0f | 60 | sn_nsdl_send_coap_message(address, coap_res_ptr); |
lvwei1990 | 0:e41e45a41f0f | 61 | } |
lvwei1990 | 0:e41e45a41f0f | 62 | } |
lvwei1990 | 0:e41e45a41f0f | 63 | |
lvwei1990 | 0:e41e45a41f0f | 64 | sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr); |
lvwei1990 | 0:e41e45a41f0f | 65 | return 0; |
lvwei1990 | 0:e41e45a41f0f | 66 | } |
lvwei1990 | 0:e41e45a41f0f | 67 | |
lvwei1990 | 0:e41e45a41f0f | 68 | int create_light_resource(sn_nsdl_resource_info_s *resource_ptr) |
lvwei1990 | 0:e41e45a41f0f | 69 | { |
lvwei1990 | 0:e41e45a41f0f | 70 | nsdl_create_dynamic_resource(resource_ptr, sizeof(LIGHT_RES_ID)-1, (uint8_t*)LIGHT_RES_ID, 0, 0, 0, &light_resource_cb, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED)); |
lvwei1990 | 0:e41e45a41f0f | 71 | return 0; |
lvwei1990 | 0:e41e45a41f0f | 72 | } |