Demo for the problem with nsdl_lib and rtos on FRDM- K64F

Dependencies:   C12832_lcd WiflyInterface mbed-rtos mbed nsdl_lib

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?

UserRevisionLine numberNew 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 }