MBED_DEMOS / Mbed 2 deprecated mbed_mqtt_endpoint_ublox_ethernet

Dependencies:   C027 C12832 EthernetInterface StatusReporter LM75B MQTT-ansond endpoint_core endpoint_mqtt mbed-rtos mbed

EmulatedResourceFactory.cpp

Committer:
ansond
Date:
2014-03-01
Revision:
41:36c59c3cd6f2
Parent:
39:bd5b2bcd2dcc
Child:
42:46cc1641800b

File content as of revision 41:36c59c3cd6f2:

/* Copyright C2013 Doug Anson, MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
 * and associated documentation files the "Software", to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all copies or
 * substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 // class definition
 #include "EmulatedResourceFactory.h"
 
 // MBEDEndpoint support
 #include "MBEDEndpoint.h"
 
 // MBED supports Battery Emulation
 #include "MBEDBattery.h"
 
 // MBED supports Current Emulation
 #include "MBEDCurrent.h"
 
 // MBED supports Temperature Sensing
 #include "MBEDTemperature.h"
 
 // MBED supports GPS Emulation
 #include "MBEDgps.h"
 
 // MBED supports Voltage Emulation
 #include "MBEDVoltage.h"
 
 // Initializers
 void init_battery(Resource *resource) { new MBEDBattery(resource->logger(),resource); }
 void init_current(Resource *resource) { new MBEDCurrent(resource->logger(),resource); }
 void init_gps(Resource *resource) { new MBEDgps(resource->logger(),resource); }
 void init_temperature(Resource *resource) { new MBEDTemperature(resource->logger(),resource); }
 void init_voltage(Resource *resource) { new MBEDVoltage(resource->logger(),resource); }
  
 // Ethernet
 #include "EthernetInterface.h"
 extern EthernetInterface ethernet;
 
 // NSP supports Light Dimming
 extern void emulated_light_dimming_cb();
 
 // NSP supports Light Switch 
 extern void emulated_light_switch_cb();
 
 // default constructor
 EmulatedResourceFactory::EmulatedResourceFactory(ErrorHandler *error_handler,void *endpoint) : ResourceFactory(error_handler,endpoint) {  
 }
 
 // default destructor
 EmulatedResourceFactory::~EmulatedResourceFactory() {
 }
 
 // create resources
 void EmulatedResourceFactory::createResources(char *endpoint_name) {
    // create all of the resources we expect for this endpoint
    this->createResource("/dev/addldata","AdditionalData");
    this->createResource("/dev/location",ENDPOINT_LOCATION);
    this->createResource("/dev/bat","0.0",(void *)&init_battery,NULL);
    this->createResource("/sen/I","0.0",(void *)&init_current,NULL);
    this->createResource("/nw/ipaddr",ethernet.getIPAddress());
    this->createResource(endpoint_name,"/lt/0/dim","25",(void *)&emulated_light_dimming_cb);          // Action: dim/brighten light
    this->createResource("/nw/eripaddr","N/A");
    this->createResource(endpoint_name,"/lt/0/on","1",(void *)&emulated_light_switch_cb);             // Action: light on/off
    this->createResource("/dev/mdl","MQTT MBED Light");
    this->createResource("/gps/int","0");
    this->createResource("/gps/fix","1");
    this->createResource("/nw/pipaddr","N/A");
    this->createResource("/nw/prssi","N/A");
    this->createResource("/sen/temp","0.0",(void *)&init_temperature,NULL);
    this->createResource("/sen/V","5.0",(void *)&init_voltage,NULL);
    this->createResource("/gps/loc",ENDPOINT_GPS_COORDS,(void *)&init_gps,NULL);
 } 
 
 void EmulatedResourceFactory::createResource(char *name,char *value) { ResourceFactory::createResource(name,value); }
 void EmulatedResourceFactory::createResource(char *endpoint_name,char *name,char *value,void *cb) { ResourceFactory::createResource(endpoint_name,name,value,cb); }
 void EmulatedResourceFactory::createResource(char *name,char *value,void *io,void *notused) {
     MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint;
     char *ep_name = NULL; if (endpoint != NULL) ep_name = endpoint->getEndpointName();
     this->m_list[this->m_count] = new Resource(this->logger(),ep_name,name,value,NULL);
     if (io != NULL) {
        resourceInitializer initializer = (resourceInitializer)io;
        (initializer)(this->m_list[this->m_count]);
     }
     ++this->m_count;
 }
  
 // set a resource value (AND trigger the Emulated actions if registered)
 bool EmulatedResourceFactory::setResourceValue3(char *name, char *value) {
     // set the resource value
     bool success = ResourceFactory::setResourceValue(name,value);
     if (success) {
         // invoke an action if registered
         EmulatedCallbackPointer cb = (EmulatedCallbackPointer)this->getCallbackPointer(name);
         if (cb != NULL) {
             // invoke the callback
             this->logger()->log("Invoking Action...");
             cb();
         }
     }
     return success;
 }