NanoService device game controller for NSPong.

Dependencies:   Beep C12832_lcd EthernetInterface MMA7660 mbed-rtos mbed nsdl_lib

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers led.cpp Source File

led.cpp

00001 // Led resource implementation
00002 
00003 #include "mbed.h"
00004 #include "nsdl_support.h"
00005 #include "led.h"
00006 
00007 #define LED_RES_ID    "led"
00008 
00009 extern Serial pc;
00010 DigitalOut led1(LED1);
00011 DigitalOut led2(LED2);
00012 DigitalOut led3(LED3);
00013 DigitalOut led4(LED4);
00014 
00015 PwmOut rled(p23);
00016 PwmOut gled(p24);
00017 PwmOut bled(p25);
00018 
00019 // Data from PUT request
00020 static char received_cmd[20];
00021 static char cmd[10];
00022 
00023 /* Only PUT method allowed */
00024 static uint8_t led_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
00025 {
00026     sn_coap_hdr_s *coap_res_ptr = 0;
00027 
00028     memcpy(received_cmd, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len);
00029     received_cmd[received_coap_ptr->payload_len] = '\0';
00030     sprintf(cmd, "%s", received_cmd);
00031     
00032     if (!strcmp(cmd, "reset")) {
00033         led1 = 0;
00034         led2 = 0;
00035         led3 = 0;
00036         led4 = 0;
00037     }
00038     
00039     else if (!strcmp(cmd, "score")) {
00040         
00041         if(led4){
00042             led1 = 0;
00043             led2 = 0;
00044             led3 = 0;
00045             led4 = 0;
00046         }
00047         else if(led3){
00048             led4 = 1;
00049         }
00050         else if(led2){
00051             led3 = 1;
00052         }
00053         else if(led1){
00054             led2 = 1;
00055         }
00056         else{
00057             led1 = 1;
00058         }
00059         
00060         rled.period(0.001);
00061         for(float i = 0.0; i < 1.0 ; i += 0.01) {
00062             float p = 3 * i;
00063             rled = 1.0 - ((p < 1.0) ? 1.0 - p : (p > 2.0) ? p - 2.0 : 0.0);
00064             gled = 1.0 - ((p < 1.0) ? p : (p > 2.0) ? 0.0 : 2.0 - p);
00065             bled = 1.0 - ((p < 1.0) ? 0.0 : (p > 2.0) ? 3.0 - p : p - 1.0);  ;  
00066             wait(0.005);
00067         }
00068     }
00069     
00070     else if (!strcmp(cmd, "paddle")) {
00071         rled = 0;
00072         gled = 0;
00073         bled = 0;
00074         wait(0.1);
00075     }
00076     
00077     else if (!strcmp(cmd, "win")) {
00078         led1 = 0;
00079         led2 = 0;
00080         led3 = 0;
00081         led4 = 0;
00082         wait(0.25);
00083         led1 = 1;
00084         led2 = 1;
00085         led3 = 1;
00086         led4 = 1;
00087         wait(0.25);
00088         led1 = 0;
00089         led2 = 0;
00090         led3 = 0;
00091         led4 = 0;
00092         wait(0.25);
00093         led1 = 1;
00094         led2 = 1;
00095         led3 = 1;
00096         led4 = 1;
00097         wait(0.25);
00098         led1 = 0;
00099         led2 = 0;
00100         led3 = 0;
00101         led4 = 0;
00102     }
00103     
00104     rled = 1;
00105     gled = 1;
00106     bled = 1;
00107     
00108     coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
00109     sn_nsdl_send_coap_message(address, coap_res_ptr);
00110     sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
00111     memset(cmd, 0, 10);
00112     return 0;
00113 }
00114 
00115 int create_led_resource(sn_nsdl_resource_info_s *resource_ptr)
00116 {
00117     rled = 1;
00118     gled = 1;
00119     bled = 1;
00120     nsdl_create_dynamic_resource(resource_ptr, sizeof(LED_RES_ID)-1, (uint8_t*)LED_RES_ID, 0, 0, 0, &led_resource_cb, SN_GRS_PUT_ALLOWED);
00121     return 0;
00122 }