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

Committer:
ansond
Date:
Thu Mar 20 02:24:57 2014 +0000
Revision:
151:75b96c3419ae
Parent:
149:6da931b7944d
Child:
167:41a25569800c
updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ansond 0:ae2a45502448 1 /* Copyright C2013 Doug Anson, MIT License
ansond 0:ae2a45502448 2 *
ansond 0:ae2a45502448 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
ansond 0:ae2a45502448 4 * and associated documentation files the "Software", to deal in the Software without restriction,
ansond 0:ae2a45502448 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
ansond 0:ae2a45502448 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
ansond 0:ae2a45502448 7 * furnished to do so, subject to the following conditions:
ansond 0:ae2a45502448 8 *
ansond 0:ae2a45502448 9 * The above copyright notice and this permission notice shall be included in all copies or
ansond 0:ae2a45502448 10 * substantial portions of the Software.
ansond 0:ae2a45502448 11 *
ansond 0:ae2a45502448 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
ansond 0:ae2a45502448 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
ansond 0:ae2a45502448 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
ansond 0:ae2a45502448 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ansond 0:ae2a45502448 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
ansond 0:ae2a45502448 17 */
ansond 0:ae2a45502448 18
ansond 0:ae2a45502448 19 // class definition
ansond 0:ae2a45502448 20 #include "EmulatedResourceFactory.h"
ansond 0:ae2a45502448 21
ansond 39:bd5b2bcd2dcc 22 // MBEDEndpoint support
ansond 39:bd5b2bcd2dcc 23 #include "MBEDEndpoint.h"
ansond 39:bd5b2bcd2dcc 24
ansond 39:bd5b2bcd2dcc 25 // MBED supports Battery Emulation
ansond 39:bd5b2bcd2dcc 26 #include "MBEDBattery.h"
ansond 39:bd5b2bcd2dcc 27
ansond 39:bd5b2bcd2dcc 28 // MBED supports Current Emulation
ansond 39:bd5b2bcd2dcc 29 #include "MBEDCurrent.h"
ansond 39:bd5b2bcd2dcc 30
ansond 39:bd5b2bcd2dcc 31 // MBED supports Temperature Sensing
ansond 39:bd5b2bcd2dcc 32 #include "MBEDTemperature.h"
ansond 39:bd5b2bcd2dcc 33
ansond 39:bd5b2bcd2dcc 34 // MBED supports GPS Emulation
ansond 39:bd5b2bcd2dcc 35 #include "MBEDgps.h"
ansond 39:bd5b2bcd2dcc 36
ansond 39:bd5b2bcd2dcc 37 // MBED supports Voltage Emulation
ansond 39:bd5b2bcd2dcc 38 #include "MBEDVoltage.h"
ansond 39:bd5b2bcd2dcc 39
ansond 39:bd5b2bcd2dcc 40 // Initializers
ansond 47:081874a5d049 41 void init_battery(Resource *resource) { if (resource != NULL) new MBEDBattery(resource->logger(),resource); }
ansond 47:081874a5d049 42 void init_current(Resource *resource) { if (resource != NULL) new MBEDCurrent(resource->logger(),resource); }
ansond 47:081874a5d049 43 void init_gps(Resource *resource) { if (resource != NULL) new MBEDgps(resource->logger(),resource); }
ansond 47:081874a5d049 44 void init_temperature(Resource *resource) { if (resource != NULL) new MBEDTemperature(resource->logger(),resource); }
ansond 47:081874a5d049 45 void init_voltage(Resource *resource) { if (resource != NULL) new MBEDVoltage(resource->logger(),resource); }
ansond 39:bd5b2bcd2dcc 46
ansond 0:ae2a45502448 47 // Ethernet
ansond 0:ae2a45502448 48 #include "EthernetInterface.h"
ansond 0:ae2a45502448 49 extern EthernetInterface ethernet;
ansond 0:ae2a45502448 50
ansond 0:ae2a45502448 51 // NSP supports Light Dimming
ansond 0:ae2a45502448 52 extern void emulated_light_dimming_cb();
ansond 0:ae2a45502448 53
ansond 0:ae2a45502448 54 // NSP supports Light Switch
ansond 0:ae2a45502448 55 extern void emulated_light_switch_cb();
ansond 0:ae2a45502448 56
ansond 0:ae2a45502448 57 // default constructor
ansond 39:bd5b2bcd2dcc 58 EmulatedResourceFactory::EmulatedResourceFactory(ErrorHandler *error_handler,void *endpoint) : ResourceFactory(error_handler,endpoint) {
ansond 148:b09187a0fa77 59 this->initGPSCoords();
ansond 0:ae2a45502448 60 }
ansond 0:ae2a45502448 61
ansond 0:ae2a45502448 62 // default destructor
ansond 0:ae2a45502448 63 EmulatedResourceFactory::~EmulatedResourceFactory() {
ansond 0:ae2a45502448 64 }
ansond 0:ae2a45502448 65
ansond 148:b09187a0fa77 66 // initialize our GPS coords
ansond 148:b09187a0fa77 67 void EmulatedResourceFactory::initGPSCoords() {
ansond 148:b09187a0fa77 68 memset(this->m_gps_coords,0,PREFERENCE_VALUE_LEN+1);
ansond 149:6da931b7944d 69 MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint;
ansond 148:b09187a0fa77 70 endpoint->preferences()->getPreference("coords",this->m_gps_coords,PREFERENCE_VALUE_LEN,ENDPOINT_GPS_COORDS);
ansond 148:b09187a0fa77 71 }
ansond 148:b09187a0fa77 72
ansond 148:b09187a0fa77 73 // get our GPS coords from preferences
ansond 148:b09187a0fa77 74 char *EmulatedResourceFactory::getGPSCoords() { return this->m_gps_coords; }
ansond 148:b09187a0fa77 75
ansond 0:ae2a45502448 76 // create resources
ansond 0:ae2a45502448 77 void EmulatedResourceFactory::createResources(char *endpoint_name) {
ansond 0:ae2a45502448 78 // create all of the resources we expect for this endpoint
ansond 88:b3a5038fc367 79 this->createResource("/dev/addldata","id:0");
ansond 9:ff877db53cfd 80 this->createResource("/dev/location",ENDPOINT_LOCATION);
ansond 74:4c8bf308383e 81 this->createResource("/fw/devtype","Light");
ansond 91:345a3a224e0f 82 this->createResource("/dev/bat","5.0V",(void *)&init_battery,NULL);
ansond 91:345a3a224e0f 83 this->createResource("/sen/I","0.1A",(void *)&init_current,NULL);
ansond 91:345a3a224e0f 84 this->createResource("/dev/I","0.1A",(void *)&init_current,NULL);
ansond 2:90a84a216c58 85 this->createResource("/nw/ipaddr",ethernet.getIPAddress());
ansond 2:90a84a216c58 86 this->createResource(endpoint_name,"/lt/0/dim","25",(void *)&emulated_light_dimming_cb); // Action: dim/brighten light
ansond 9:ff877db53cfd 87 this->createResource("/nw/eripaddr","N/A");
ansond 2:90a84a216c58 88 this->createResource(endpoint_name,"/lt/0/on","1",(void *)&emulated_light_switch_cb); // Action: light on/off
ansond 122:91a0d3114287 89 //this->createResource(endpoint_name,"/lt/0/ctr","1",(void *)&emulated_light_switch_cb); // Action: light on/off
ansond 9:ff877db53cfd 90 this->createResource("/dev/mdl","MQTT MBED Light");
ansond 120:adeab6eb7848 91 this->createResource("/dev/mfg","NXP MBED");
ansond 87:0f8e3fb8cbb6 92 this->createResource("/gps/int","60");
ansond 2:90a84a216c58 93 this->createResource("/gps/fix","1");
ansond 9:ff877db53cfd 94 this->createResource("/nw/pipaddr","N/A");
ansond 91:345a3a224e0f 95 this->createResource("/dev/W","0.1W");
ansond 76:888c43aceb1c 96 this->createResource("/nw/prssi","-63");
ansond 91:345a3a224e0f 97 this->createResource("/sen/temp","10.0C",(void *)&init_temperature,NULL);
ansond 91:345a3a224e0f 98 this->createResource("/dev/t","10.0C",(void *)&init_temperature,NULL);
ansond 91:345a3a224e0f 99 this->createResource("/sen/V","5.0V",(void *)&init_voltage,NULL);
ansond 91:345a3a224e0f 100 this->createResource("/dev/V","5.0V",(void *)&init_voltage,NULL);
ansond 148:b09187a0fa77 101 this->createResource("/gps/loc",this->getGPSCoords(),(void *)&init_gps,NULL);
ansond 76:888c43aceb1c 102
ansond 81:84b580179eb5 103 //this->createResource("/res/int","1");
ansond 81:84b580179eb5 104 //this->createResource("/res/systime","1010101");
ansond 81:84b580179eb5 105 //this->createResource("/fw/curr/NanoLightingApplication/ver","1.0");
ansond 81:84b580179eb5 106 //this->createResource("/fw/new/NanoLightingApplication/ver","1.0");
ansond 81:84b580179eb5 107 //this->createResource("/fw/upload","false");
ansond 81:84b580179eb5 108 //this->createResource("/fw/download","none");
ansond 78:b154b806b559 109 this->createResource("/ns/nspaddr","(NA)");
ansond 81:84b580179eb5 110 //this->createResource("/lt/0/ontime","0");
ansond 81:84b580179eb5 111 //this->createResource("/lt/0/pfact","1.0");
ansond 81:84b580179eb5 112 //this->createResource("/lt/0/sched","none");
ansond 81:84b580179eb5 113 //this->createResource("/lt/0/sched_elem","0");
ansond 102:36b8e2f5f416 114 //this->createResource("/lt/0/totKwh","6.23");
ansond 81:84b580179eb5 115 //this->createResource("/nw/utlz","0.01%");
ansond 102:36b8e2f5f416 116 this->createResource("/dev/panic","0");
ansond 81:84b580179eb5 117
ansond 79:67accc95965a 118 #ifdef MAC_ADDRESS
ansond 79:67accc95965a 119 extern char fmt_mac[RESOURCE_VALUE_LEN+1];
ansond 79:67accc95965a 120 this->createResource("/nw/macaddr",fmt_mac);
ansond 79:67accc95965a 121 #else
ansond 76:888c43aceb1c 122 this->createResource("/nw/macaddr","00:00:00:00:00");
ansond 79:67accc95965a 123 #endif
ansond 8:45f9a920e82c 124 }
ansond 8:45f9a920e82c 125
ansond 39:bd5b2bcd2dcc 126 void EmulatedResourceFactory::createResource(char *name,char *value) { ResourceFactory::createResource(name,value); }
ansond 42:46cc1641800b 127 void EmulatedResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb) { ResourceFactory::createResource(ep_name,name,value,cb); }
ansond 41:36c59c3cd6f2 128 void EmulatedResourceFactory::createResource(char *name,char *value,void *io,void *notused) {
ansond 39:bd5b2bcd2dcc 129 MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint;
ansond 41:36c59c3cd6f2 130 char *ep_name = NULL; if (endpoint != NULL) ep_name = endpoint->getEndpointName();
ansond 41:36c59c3cd6f2 131 this->m_list[this->m_count] = new Resource(this->logger(),ep_name,name,value,NULL);
ansond 52:d1aaf4c7fd6a 132 if (io != NULL && this->m_list[this->m_count] != NULL) {
ansond 41:36c59c3cd6f2 133 resourceInitializer initializer = (resourceInitializer)io;
ansond 41:36c59c3cd6f2 134 (initializer)(this->m_list[this->m_count]);
ansond 41:36c59c3cd6f2 135 }
ansond 52:d1aaf4c7fd6a 136 if (this->m_list[this->m_count] != NULL) ++this->m_count;
ansond 39:bd5b2bcd2dcc 137 }
ansond 39:bd5b2bcd2dcc 138
ansond 8:45f9a920e82c 139 // set a resource value (AND trigger the Emulated actions if registered)
ansond 42:46cc1641800b 140 bool EmulatedResourceFactory::setResourceValue(char *name, char *value) {
ansond 8:45f9a920e82c 141 // set the resource value
ansond 31:a95cf856ce4e 142 bool success = ResourceFactory::setResourceValue(name,value);
ansond 8:45f9a920e82c 143 if (success) {
ansond 8:45f9a920e82c 144 // invoke an action if registered
ansond 8:45f9a920e82c 145 EmulatedCallbackPointer cb = (EmulatedCallbackPointer)this->getCallbackPointer(name);
ansond 8:45f9a920e82c 146 if (cb != NULL) {
ansond 8:45f9a920e82c 147 // invoke the callback
ansond 8:45f9a920e82c 148 this->logger()->log("Invoking Action...");
ansond 8:45f9a920e82c 149 cb();
ansond 8:45f9a920e82c 150 }
ansond 8:45f9a920e82c 151 }
ansond 8:45f9a920e82c 152 return success;
ansond 8:45f9a920e82c 153 }