The WiFi version of the mbed Device Server client using cc3000

Dependencies:   cc3000_hostdriver_mbedsocket mbed-rtos mbed nsdl_lib

Committer:
michaeljkoster
Date:
Tue Oct 14 15:27:10 2014 +0000
Revision:
1:4476b20857ea
Parent:
0:5b29a04e8c27
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaeljkoster 0:5b29a04e8c27 1 // Light resource implementation
michaeljkoster 0:5b29a04e8c27 2
michaeljkoster 0:5b29a04e8c27 3 #include "mbed.h"
michaeljkoster 0:5b29a04e8c27 4 #include "nsdl_support.h"
michaeljkoster 0:5b29a04e8c27 5 #include "light.h"
michaeljkoster 0:5b29a04e8c27 6
michaeljkoster 0:5b29a04e8c27 7 #define LIGHT_RES_ID "11100/0/5900"
michaeljkoster 0:5b29a04e8c27 8
michaeljkoster 0:5b29a04e8c27 9 extern Serial pc;
michaeljkoster 0:5b29a04e8c27 10 char leds[] = {"1111"}; //YGBR
michaeljkoster 0:5b29a04e8c27 11
michaeljkoster 0:5b29a04e8c27 12 DigitalOut grn(LED1);
michaeljkoster 0:5b29a04e8c27 13 DigitalOut red(LED2);
michaeljkoster 0:5b29a04e8c27 14 DigitalOut blu(LED3);
michaeljkoster 0:5b29a04e8c27 15 DigitalOut yel(LED4);
michaeljkoster 0:5b29a04e8c27 16
michaeljkoster 0:5b29a04e8c27 17 void set_leds(char *leds)
michaeljkoster 0:5b29a04e8c27 18 {
michaeljkoster 0:5b29a04e8c27 19 int leds_int ;
michaeljkoster 0:5b29a04e8c27 20
michaeljkoster 0:5b29a04e8c27 21 sscanf(leds, "%x", &leds_int);
michaeljkoster 0:5b29a04e8c27 22
michaeljkoster 0:5b29a04e8c27 23 grn = ~leds_int & 1;
michaeljkoster 0:5b29a04e8c27 24 red = ~leds_int >> 4 & 1;
michaeljkoster 0:5b29a04e8c27 25 blu = ~leds_int >> 8 & 1;
michaeljkoster 0:5b29a04e8c27 26 yel = ~leds_int >> 12 & 1;
michaeljkoster 0:5b29a04e8c27 27 }
michaeljkoster 0:5b29a04e8c27 28
michaeljkoster 0:5b29a04e8c27 29
michaeljkoster 0:5b29a04e8c27 30 /* Only GET and PUT method allowed */
michaeljkoster 0:5b29a04e8c27 31 static uint8_t light_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
michaeljkoster 0:5b29a04e8c27 32 {
michaeljkoster 0:5b29a04e8c27 33 sn_coap_hdr_s *coap_res_ptr = 0;
michaeljkoster 0:5b29a04e8c27 34
michaeljkoster 0:5b29a04e8c27 35 //pc.printf("LED Strip callback\r\n");
michaeljkoster 0:5b29a04e8c27 36
michaeljkoster 0:5b29a04e8c27 37 if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
michaeljkoster 0:5b29a04e8c27 38 {
michaeljkoster 0:5b29a04e8c27 39 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
michaeljkoster 0:5b29a04e8c27 40
michaeljkoster 0:5b29a04e8c27 41 coap_res_ptr->payload_len = strlen(leds);
michaeljkoster 0:5b29a04e8c27 42 coap_res_ptr->payload_ptr = (uint8_t*)leds;
michaeljkoster 0:5b29a04e8c27 43 sn_nsdl_send_coap_message(address, coap_res_ptr);
michaeljkoster 0:5b29a04e8c27 44 }
michaeljkoster 0:5b29a04e8c27 45 else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
michaeljkoster 0:5b29a04e8c27 46 {
michaeljkoster 0:5b29a04e8c27 47 //pc.printf("PUT: %d bytes\r\n", received_coap_ptr->payload_len);
michaeljkoster 0:5b29a04e8c27 48 if(received_coap_ptr->payload_len == 4)
michaeljkoster 0:5b29a04e8c27 49 {
michaeljkoster 0:5b29a04e8c27 50 memcpy(leds, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len);
michaeljkoster 0:5b29a04e8c27 51
michaeljkoster 0:5b29a04e8c27 52 leds[received_coap_ptr->payload_len] = '\0';
michaeljkoster 0:5b29a04e8c27 53 pc.printf("PUT: %s\r\n",leds);
michaeljkoster 0:5b29a04e8c27 54
michaeljkoster 0:5b29a04e8c27 55 //call LED strup update function here
michaeljkoster 0:5b29a04e8c27 56 set_leds(leds);
michaeljkoster 0:5b29a04e8c27 57
michaeljkoster 0:5b29a04e8c27 58 coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
michaeljkoster 0:5b29a04e8c27 59 sn_nsdl_send_coap_message(address, coap_res_ptr);
michaeljkoster 0:5b29a04e8c27 60 }
michaeljkoster 0:5b29a04e8c27 61 }
michaeljkoster 0:5b29a04e8c27 62
michaeljkoster 0:5b29a04e8c27 63 sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
michaeljkoster 0:5b29a04e8c27 64 return 0;
michaeljkoster 0:5b29a04e8c27 65 }
michaeljkoster 0:5b29a04e8c27 66
michaeljkoster 0:5b29a04e8c27 67 int create_light_resource(sn_nsdl_resource_info_s *resource_ptr)
michaeljkoster 0:5b29a04e8c27 68 {
michaeljkoster 0:5b29a04e8c27 69 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));
michaeljkoster 0:5b29a04e8c27 70 return 0;
michaeljkoster 0:5b29a04e8c27 71 }