Red Hat Summit NanoService Demo for LPC1768 App Board using OMA Lightweight Objects

Dependencies:   Beep C12832_lcd EthernetInterface LM75B MMA7660 mbed-rtos mbed nsdl_lib

Fork of LWM2M_NanoService_Ethernet by MBED_DEMOS

resources/light.cpp

Committer:
sam_grove
Date:
2014-04-29
Revision:
32:7f3f1ef700e3
Parent:
31:7ce5bef2d369

File content as of revision 32:7f3f1ef700e3:

// Light resource implementation

#include "mbed.h"
#include "nsdl_support.h"
#include "light.h"

//#define LIGHT_RES_ID    "311/0/5851"
#define LIGHT_FLASH_ID  "311/0/5850"

extern Serial pc;
static PwmOut led2(LED2);
static PwmOut led3(LED3);

static DigitalOut out1(p22);
static Ticker flash;
static Timeout reset;

#include "Beep.h"
static Beep buzzer(p26);
Ticker beep_tick;
static void beepHanlder(void);

static void beepHandler(void)
{
    buzzer.beep(1000, 0.3f);
}


static void flashHandler(void)
{
    out1 = 0;
    wait(0.1f);
    out1 = 1;
}

///* Only GET and PUT method allowed */
//static uint8_t light_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
//{
//    sn_coap_hdr_s *coap_res_ptr = 0;
//    static float led_dimm = 0;
//    int led_state = 0;
//    char led_dimm_temp[4];
//
//    pc.printf("light dimmer callback\r\n");
//
//    if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET) {
//        coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);
//
//        led_state = led_dimm * 100;
//        sprintf(led_dimm_temp, "%d", led_state);
//
//        coap_res_ptr->payload_len = strlen(led_dimm_temp);
//        coap_res_ptr->payload_ptr = (uint8_t*)led_dimm_temp;
//        sn_nsdl_send_coap_message(address, coap_res_ptr);
//    } else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT) {
//        memcpy(led_dimm_temp, (char *)received_coap_ptr->payload_ptr, received_coap_ptr->payload_len);
//
//        led_dimm_temp[received_coap_ptr->payload_len] = '\0';
//
//        led_dimm = atof(led_dimm_temp);
//        led_dimm = led_dimm/100;
//
//        led2.write(led_dimm);
//        led3.write(led_dimm);
//
//        coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
//        sn_nsdl_send_coap_message(address, coap_res_ptr);
//    }
//
//    sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);
//    return 0;
//}


/* Only GET and PUT method allowed */
static uint8_t light_flash_resource_cb(sn_coap_hdr_s *received_coap_ptr, sn_nsdl_addr_s *address, sn_proto_info_s * proto)
{
    sn_coap_hdr_s *coap_res_ptr = 0;
    static uint8_t flash_state = '0';

    pc.printf("flash callback\r\n");

    if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_GET)
    {
        coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CONTENT);

        coap_res_ptr->payload_len = 1;
        coap_res_ptr->payload_ptr = &flash_state;
        sn_nsdl_send_coap_message(address, coap_res_ptr);
    }
    else if(received_coap_ptr->msg_code == COAP_MSG_CODE_REQUEST_PUT)
    {
        if(received_coap_ptr->payload_len)
        {
            if(*(received_coap_ptr->payload_ptr) == '1')
            {
                flash.attach(&flashHandler, 10.0f);
                beep_tick.attach(&beepHandler, 0.6f);
                flash_state = '1';
                out1 = 1;
            }
            else if(*(received_coap_ptr->payload_ptr) == '0')
            {
                out1 = 0;
                buzzer.nobeep();
                flash.detach();
                reset.detach();
                beep_tick.detach();
                flash_state = '0';
            }
            coap_res_ptr = sn_coap_build_response(received_coap_ptr, COAP_MSG_CODE_RESPONSE_CHANGED);
            sn_nsdl_send_coap_message(address, coap_res_ptr);
        }
    }

    sn_coap_parser_release_allocated_coap_msg_mem(coap_res_ptr);

    return 0;
}

int create_light_resource(sn_nsdl_resource_info_s *resource_ptr)
{
    //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));
    nsdl_create_dynamic_resource(resource_ptr, sizeof(LIGHT_FLASH_ID)-1, (uint8_t*)LIGHT_FLASH_ID, 0, 0, 0, &light_flash_resource_cb, (SN_GRS_GET_ALLOWED | SN_GRS_PUT_ALLOWED));
    return 0;
}