mqtt specific components for the impact mbed endpoint library
Dependents: mbed_mqtt_endpoint_ublox_ethernet mbed_mqtt_endpoint_ublox_cellular mbed_mqtt_endpoint_nxp
Revision 5:1ba6e68bf50e, committed 2014-03-27
- Comitter:
- ansond
- Date:
- Thu Mar 27 17:48:38 2014 +0000
- Parent:
- 4:380d79b22468
- Child:
- 6:2db2c7e75ad9
- Commit message:
- updates
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EmulatedLightResourceFactory.cpp Thu Mar 27 17:48:38 2014 +0000 @@ -0,0 +1,121 @@ + /* 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 "EmulatedLightResourceFactory.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 RSSI Emulation + #include "MBEDrssi.h" + + // MBED supports Voltage Emulation + #include "MBEDVoltage.h" + + // MBED supports Wattage Emulation + #include "MBEDWattage.h" + + // Initializers + void init_battery(Resource *resource) { if (resource != NULL) new MBEDBattery(resource->logger(),resource); } + void init_current(Resource *resource) { if (resource != NULL) new MBEDCurrent(resource->logger(),resource); } + void init_gps(Resource *resource) { if (resource != NULL) new MBEDgps(resource->logger(),resource); } + void init_rssi(Resource *resource) { if (resource != NULL) new MBEDrssi(resource->logger(),resource); } + void init_temperature(Resource *resource) { if (resource != NULL) new MBEDTemperature(resource->logger(),resource); } + void init_voltage(Resource *resource) { if (resource != NULL) new MBEDVoltage(resource->logger(),resource); } + void init_wattage(Resource *resource) { if (resource != NULL) new MBEDWattage(resource->logger(),resource); } + + // NSP supports Light Dimming + extern void emulated_light_dimming_cb(); + + // NSP supports Light Switch + extern void emulated_light_switch_cb(); + + // Ethernet + #include "EthernetInterface.h" + extern EthernetInterface ethernet; + + // default constructor + EmulatedLightResourceFactory::EmulatedLightResourceFactory(ErrorHandler *error_handler,void *endpoint) : EmulatedResourceFactory(error_handler,endpoint) { + this->initGPSCoords(); + } + + // default destructor + EmulatedLightResourceFactory::~EmulatedLightResourceFactory() { + } + + // initialize our GPS coords + void EmulatedLightResourceFactory::initGPSCoords() { + memset(this->m_gps_coords,0,PREFERENCE_VALUE_LEN+1); + MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint; + endpoint->preferences()->getPreference("coords",this->m_gps_coords,PREFERENCE_VALUE_LEN,ENDPOINT_GPS_COORDS); + } + + // get our GPS coords from preferences + char *EmulatedLightResourceFactory::getGPSCoords() { return this->m_gps_coords; } + + // create resources for an Emulated Light Resource + void EmulatedLightResourceFactory::createResources(char *endpoint_name) { + // create all of the resources we expect for this endpoint + this->createResource("/dev/addldata","id:0"); + this->createResource("/dev/location",ENDPOINT_LOCATION); + this->createResource("/fw/devtype","Light"); + this->createResource("/dev/bat","5.0V",(void *)&init_battery,NULL); + this->createResource("/sen/I","0.1A",(void *)&init_current,NULL); + this->createResource("/dev/I","0.1A",(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(endpoint_name,"/lt/0/ctr","1",(void *)&emulated_light_switch_cb); // Action: light on/off + this->createResource("/dev/mdl","MQTT MBED Light"); + this->createResource("/dev/mfg",PLATFORM_STRING); + this->createResource("/gps/int","60"); + this->createResource("/gps/fix","1"); + this->createResource("/nw/pipaddr","N/A"); + this->createResource("/dev/W","0.1W",(void *)&init_wattage,NULL); + this->createResource("/nw/prssi","-75",(void *)&init_rssi,NULL); + this->createResource("/sen/temp","10.0C",(void *)&init_temperature,NULL); + this->createResource("/dev/t","10.0C",(void *)&init_temperature,NULL); + this->createResource("/sen/V","5.0V",(void *)&init_voltage,NULL); + this->createResource("/dev/V","5.0V",(void *)&init_voltage,NULL); + this->createResource("/gps/loc",this->getGPSCoords(),(void *)&init_gps,NULL); + this->createResource("/ns/nspaddr","(NA)"); + this->createResource(endpoint_name,"/dev/panic","0",(void *)&emulated_light_switch_cb); // Action: light on/off + +#ifdef MAC_ADDRESS + extern char fmt_mac[RESOURCE_VALUE_LEN+1]; + this->createResource("/nw/macaddr",fmt_mac); +#else + this->createResource("/nw/macaddr","00:00:00:00:00"); +#endif + } + + \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EmulatedLightResourceFactory.h Thu Mar 27 17:48:38 2014 +0000 @@ -0,0 +1,40 @@ +/* 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. + */ + +#ifndef _EMULATED_LIGHT_RESOURCE_FACTORY_H_ +#define _EMULATED_LIGHT_RESOURCE_FACTORY_H_ + +// Base Class +#include "EmulatedResourceFactory.h" + +class EmulatedLightResourceFactory : public EmulatedResourceFactory { + private: + char m_gps_coords[PREFERENCE_VALUE_LEN+1]; + + public: + EmulatedLightResourceFactory(ErrorHandler *error_handler,void *endpoint); + virtual ~EmulatedLightResourceFactory(); + + virtual void createResources(char *endpoint_name); + + private: + void initGPSCoords(); + char *getGPSCoords(); +}; + +#endif // _EMULATED_LIGHT_RESOURCE_FACTORY_H_ \ No newline at end of file
--- a/EmulatedResourceFactory.cpp Thu Mar 27 03:52:29 2014 +0000 +++ b/EmulatedResourceFactory.cpp Thu Mar 27 17:48:38 2014 +0000 @@ -19,105 +19,18 @@ // class definition #include "EmulatedResourceFactory.h" - // MBEDEndpoint support + // MBEDEndpoint instance 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 RSSI Emulation - #include "MBEDrssi.h" - - // MBED supports Voltage Emulation - #include "MBEDVoltage.h" - - // MBED supports Wattage Emulation - #include "MBEDWattage.h" - - // Initializers - void init_battery(Resource *resource) { if (resource != NULL) new MBEDBattery(resource->logger(),resource); } - void init_current(Resource *resource) { if (resource != NULL) new MBEDCurrent(resource->logger(),resource); } - void init_gps(Resource *resource) { if (resource != NULL) new MBEDgps(resource->logger(),resource); } - void init_rssi(Resource *resource) { if (resource != NULL) new MBEDrssi(resource->logger(),resource); } - void init_temperature(Resource *resource) { if (resource != NULL) new MBEDTemperature(resource->logger(),resource); } - void init_voltage(Resource *resource) { if (resource != NULL) new MBEDVoltage(resource->logger(),resource); } - void init_wattage(Resource *resource) { if (resource != NULL) new MBEDWattage(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) { - this->initGPSCoords(); } // default destructor EmulatedResourceFactory::~EmulatedResourceFactory() { } - // initialize our GPS coords - void EmulatedResourceFactory::initGPSCoords() { - memset(this->m_gps_coords,0,PREFERENCE_VALUE_LEN+1); - MBEDEndpoint *endpoint = (MBEDEndpoint *)this->m_endpoint; - endpoint->preferences()->getPreference("coords",this->m_gps_coords,PREFERENCE_VALUE_LEN,ENDPOINT_GPS_COORDS); - } - - // get our GPS coords from preferences - char *EmulatedResourceFactory::getGPSCoords() { return this->m_gps_coords; } - - // create resources - void EmulatedResourceFactory::createResources(char *endpoint_name) { - // create all of the resources we expect for this endpoint - this->createResource("/dev/addldata","id:0"); - this->createResource("/dev/location",ENDPOINT_LOCATION); - this->createResource("/fw/devtype","Light"); - this->createResource("/dev/bat","5.0V",(void *)&init_battery,NULL); - this->createResource("/sen/I","0.1A",(void *)&init_current,NULL); - this->createResource("/dev/I","0.1A",(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(endpoint_name,"/lt/0/ctr","1",(void *)&emulated_light_switch_cb); // Action: light on/off - this->createResource("/dev/mdl","MQTT MBED Light"); - this->createResource("/dev/mfg",PLATFORM_STRING); - this->createResource("/gps/int","60"); - this->createResource("/gps/fix","1"); - this->createResource("/nw/pipaddr","N/A"); - this->createResource("/dev/W","0.1W",(void *)&init_wattage,NULL); - this->createResource("/nw/prssi","-75",(void *)&init_rssi,NULL); - this->createResource("/sen/temp","10.0C",(void *)&init_temperature,NULL); - this->createResource("/dev/t","10.0C",(void *)&init_temperature,NULL); - this->createResource("/sen/V","5.0V",(void *)&init_voltage,NULL); - this->createResource("/dev/V","5.0V",(void *)&init_voltage,NULL); - this->createResource("/gps/loc",this->getGPSCoords(),(void *)&init_gps,NULL); - this->createResource("/ns/nspaddr","(NA)"); - this->createResource(endpoint_name,"/dev/panic","0",(void *)&emulated_light_switch_cb); // Action: light on/off - -#ifdef MAC_ADDRESS - extern char fmt_mac[RESOURCE_VALUE_LEN+1]; - this->createResource("/nw/macaddr",fmt_mac); -#else - this->createResource("/nw/macaddr","00:00:00:00:00"); -#endif - } - + // resource creators for the EmulatedResourceFactory... void EmulatedResourceFactory::createResource(char *name,char *value) { ResourceFactory::createResource(name,value); } void EmulatedResourceFactory::createResource(char *ep_name,char *name,char *value,void *cb) { ResourceFactory::createResource(ep_name,name,value,cb); } void EmulatedResourceFactory::createResource(char *name,char *value,void *io,void *notused) {
--- a/EmulatedResourceFactory.h Thu Mar 27 03:52:29 2014 +0000 +++ b/EmulatedResourceFactory.h Thu Mar 27 17:48:38 2014 +0000 @@ -31,15 +31,12 @@ // Resource Initializer callback structure typedef void (*resourceInitializer)(Resource *); -class EmulatedResourceFactory : public ResourceFactory { - private: - char m_gps_coords[PREFERENCE_VALUE_LEN+1]; - +class EmulatedResourceFactory : public ResourceFactory { public: EmulatedResourceFactory(ErrorHandler *error_handler,void *endpoint); virtual ~EmulatedResourceFactory(); - virtual void createResources(char *endpoint_name); + virtual void createResources(char *endpoint_name) = 0; bool setResourceValue(char *name, char *value); @@ -47,10 +44,6 @@ virtual void createResource(char *endpoint_name,char *name,char *value,void *cb); virtual void createResource(char *name,char *value); void createResource(char *name,char *value,void *io,void *notused); - - private: - void initGPSCoords(); - char *getGPSCoords(); };
--- a/MBEDEndpoint.cpp Thu Mar 27 03:52:29 2014 +0000 +++ b/MBEDEndpoint.cpp Thu Mar 27 17:48:38 2014 +0000 @@ -22,10 +22,10 @@ // MBED Light support #include "MBEDLight.h" - // Emulated Resource Factory - #include "EmulatedResourceFactory.h" + // Light Personality: Emulated Light Resource Factory + #include "EmulatedLightResourceFactory.h" - // Emulated Actions we can act on + // Light Personality: Emulated Actions we can act on with the Light personalikty #include "EmulatedLightDimmerAction.h" #include "EmulatedLightSwitchAction.h" @@ -62,7 +62,7 @@ if (success) this->logger()->turnLEDYellow(); if (success)this->m_map = new MBEDToIOCResourceMap(error_handler); if (success) success = this->initializeTransports(); - if (success) success = this->initializeLights(); + if (success) success = this->initializePersonality(); if (success) this->logger()->turnLEDOrange(); this->logger()->lcdStatusOnly(true); if (!success) closedown(2); @@ -72,7 +72,7 @@ MBEDEndpoint::~MBEDEndpoint() { bool success = true; if (success) this->logger()->turnLEDYellow(); - if (success) success = this->closeLights(); + if (success) success = this->closePersonality(); if (success) success = this->closeTransports(); if (success) success = this->closeEthernet(); if (success) this->logger()->turnLEDBlue(); @@ -113,6 +113,15 @@ return this->m_lcd_status; } + // initialize our personality + bool MBEDEndpoint::initializeEndpointPersonality() { + #ifdef LIGHT_PERSONALITY + return this->initializeLights(); + #else + return NULL; + #endif + } + // initialize the Lights bool MBEDEndpoint::initializeLights() { int index = this->preferences()->getIntPreference("endpoint_id",LIGHT_NAME_INDEX); @@ -146,8 +155,17 @@ return NULL; } - // initialize our ResourceFactory - ResourceFactory *MBEDEndpoint::initResourceFactory() { return new EmulatedResourceFactory(this->logger(),(void *)this); } + // initialize the ResourceFactory to fit our personality + ResourceFactory *MBEDEndpoint::initResourceFactory() { + #ifdef LIGHT_PERSONALITY + return this->initLightResourceFactory(); + #else + return NULL; + #endif + } + + // initialize a Light Resource Factory + ResourceFactory *MBEDEndpoint::initLightResourceFactory() { return new EmulatedLightResourceFactory(this->logger(),(void *)this); } // Initialize the Endpoint Name - will be the first Light resource name (and there must be one...) void MBEDEndpoint::initEndpointName() { @@ -425,6 +443,15 @@ } } + // close down our endpoint personality + bool MBEDEndpoint::closeEndpointPersonality() { + #ifdef LIGHT_PERSONALITY + return this->closeLights(); + #else + return NULL; + #endif + } + // close down the Lights bool MBEDEndpoint::closeLights() { bool success = true;
--- a/MBEDEndpoint.h Thu Mar 27 03:52:29 2014 +0000 +++ b/MBEDEndpoint.h Thu Mar 27 17:48:38 2014 +0000 @@ -80,6 +80,10 @@ protected: private: + bool initializeEndpointPersonality(); + bool closeEndpointPersonality(); + + ResourceFactory *initLightResourceFactory(); void initPreferences(); void initGWAddress(); void initEndpointName();