MBED_DEMOS / Mbed 2 deprecated IoT_World_Hackathon_WiGo_NSP_Demo

Dependencies:   NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed nsdl_lib TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers rgbled.cpp Source File

rgbled.cpp

00001 // RGB LED resource implementation
00002 
00003 #include "mbed.h"
00004 #include "nsdl_support.h"
00005 #include "defLED.h"
00006 #include "rgbled.h"
00007 
00008 #define RED_LED_RES_ID    "3311/0/5850/0"
00009 #define GRN_LED_RES_ID    "3311/0/5850/1"
00010 #define BLU_LED_RES_ID    "3311/0/5850/2"
00011 
00012 extern Serial pc;
00013 extern DigitalOut ledr;
00014 extern DigitalOut ledg;
00015 extern DigitalOut ledb;
00016 
00017 static uint8_t red_led_state = '0';
00018 static uint8_t grn_led_state = '0';
00019 static uint8_t blu_led_state = '0';
00020 
00021 /* Only GET and PUT method allowed */
00022 static uint8_t red_led_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
00023 {
00024     sn_coap_hdr_s *coap_res_ptr = 0;
00025 
00026     pc.printf("red_led callback\r\n");
00027 
00028     if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
00029     {
00030         coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
00031 
00032         coap_res_ptr->payload_len = 1;
00033         coap_res_ptr->payload_ptr = &red_led_state;
00034         sn_nsdl_send_coap_message(address, coap_res_ptr);
00035     }
00036     else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
00037     {
00038         if(received_coap_ptr->payload_len)
00039         {
00040             if(*(received_coap_ptr->payload_ptr) == '1')
00041             {
00042                 RED_ON;
00043                 red_led_state = '1';
00044                 
00045             }
00046             else if(*(received_coap_ptr->payload_ptr) == '0')
00047             {
00048                 RED_OFF;
00049                 red_led_state = '0';
00050             }
00051             coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
00052             sn_nsdl_send_coap_message(address, coap_res_ptr);
00053         }
00054     }
00055 
00056     sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
00057 
00058     return 0;
00059 }
00060 
00061 
00062 static uint8_t grn_led_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
00063 {
00064     sn_coap_hdr_s *coap_res_ptr = 0;
00065 
00066     pc.printf("green_led callback\r\n");
00067 
00068     if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
00069     {
00070         coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
00071 
00072         coap_res_ptr->payload_len = 1;
00073         coap_res_ptr->payload_ptr = &grn_led_state;
00074         sn_nsdl_send_coap_message(address, coap_res_ptr);
00075     }
00076     else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
00077     {
00078         if(received_coap_ptr->payload_len)
00079         {
00080             if(*(received_coap_ptr->payload_ptr) == '1')
00081             {
00082                 GREEN_ON;
00083                 grn_led_state = '1';
00084                 
00085             }
00086             else if(*(received_coap_ptr->payload_ptr) == '0')
00087             {
00088                 GREEN_OFF;
00089                 grn_led_state = '0';
00090             }
00091             coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
00092             sn_nsdl_send_coap_message(address, coap_res_ptr);
00093         }
00094     }
00095 
00096     sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
00097 
00098     return 0;
00099 }
00100 
00101 static uint8_t blu_led_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
00102 {
00103     sn_coap_hdr_s *coap_res_ptr = 0;
00104 
00105     pc.printf("blue_led callback\r\n");
00106 
00107     if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
00108     {
00109         coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
00110 
00111         coap_res_ptr->payload_len = 1;
00112         coap_res_ptr->payload_ptr = &blu_led_state;
00113         sn_nsdl_send_coap_message(address, coap_res_ptr);
00114     }
00115     else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
00116     {
00117         if(received_coap_ptr->payload_len)
00118         {
00119             if(*(received_coap_ptr->payload_ptr) == '1')
00120             {
00121                 BLUE_ON;
00122                 blu_led_state = '1';
00123                 
00124             }
00125             else if(*(received_coap_ptr->payload_ptr) == '0')
00126             {
00127                 BLUE_OFF;
00128                 blu_led_state = '0';
00129             }
00130             coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
00131             sn_nsdl_send_coap_message(address, coap_res_ptr);
00132         }
00133     }
00134 
00135     sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
00136 
00137     return 0;
00138 }
00139 
00140 int create_rgbled_resource(sn_nsdl_resource_info_s *resource_ptr)
00141 {
00142     nsdl_create_dynamic_resource(resource_ptr, sizeof(RED_LED_RES_ID)-1, (uint8_t*)RED_LED_RES_ID, 0, 0, 0, &red_led_resource_cb, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED));
00143     nsdl_create_dynamic_resource(resource_ptr, sizeof(GRN_LED_RES_ID)-1, (uint8_t*)GRN_LED_RES_ID, 0, 0, 0, &grn_led_resource_cb, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED));
00144     nsdl_create_dynamic_resource(resource_ptr, sizeof(BLU_LED_RES_ID)-1, (uint8_t*)BLU_LED_RES_ID, 0, 0, 0, &blu_led_resource_cb, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED));
00145     //initialize state here
00146     red_led_state = '0';
00147     grn_led_state = '0';
00148     blu_led_state = '0';
00149     RED_OFF;
00150     GREEN_OFF;
00151     BLUE_OFF;
00152     
00153     return 0;
00154 }