mqtt specific components for the impact mbed endpoint library

Dependents:   mbed_mqtt_endpoint_ublox_ethernet mbed_mqtt_endpoint_ublox_cellular mbed_mqtt_endpoint_nxp

Files at this revision

API Documentation at this revision

Comitter:
ansond
Date:
Thu Mar 27 17:48:38 2014 +0000
Parent:
4:380d79b22468
Child:
6:2db2c7e75ad9
Commit message:
updates

Changed in this revision

EmulatedLightResourceFactory.cpp Show annotated file Show diff for this revision Revisions of this file
EmulatedLightResourceFactory.h Show annotated file Show diff for this revision Revisions of this file
EmulatedResourceFactory.cpp Show annotated file Show diff for this revision Revisions of this file
EmulatedResourceFactory.h Show annotated file Show diff for this revision Revisions of this file
MBEDEndpoint.cpp Show annotated file Show diff for this revision Revisions of this file
MBEDEndpoint.h Show annotated file Show diff for this revision Revisions of this file
--- /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();