Move where the checksums are defined for public access
authorJim Morris <morris@wolfman.com>
Fri, 7 Jun 2013 05:28:09 +0000 (22:28 -0700)
committerJim Morris <morris@wolfman.com>
Fri, 7 Jun 2013 05:28:09 +0000 (22:28 -0700)
Check if the public access was accepeted and return true/false in get_value

src/libs/PublicData.cpp
src/libs/PublicData.h
src/libs/PublicDataRequest.h
src/modules/robot/Robot.h
src/modules/tools/temperaturecontrol/TemperatureControl.cpp
src/modules/tools/temperaturecontrol/TemperatureControl.h
src/modules/tools/temperaturecontrol/TemperatureControlPublicAccess.h [new file with mode: 0644]
src/modules/utils/simpleshell/SimpleShell.cpp
src/version.cpp

index 8b88063..e0dbf32 100644 (file)
@@ -2,15 +2,17 @@
 #include "PublicData.h"
 #include "PublicDataRequest.h"
 
-void PublicData::get_value(uint16_t csa, uint16_t csb, uint16_t csc, void **data) {
+bool PublicData::get_value(uint16_t csa, uint16_t csb, uint16_t csc, void **data) {
        PublicDataRequest pdr(csa, csb, csc);
        this->kernel->call_event(ON_GET_PUBLIC_DATA, &pdr );
        *data= pdr.get_data_ptr();
+       return pdr.is_taken();
 }
 
-void PublicData::set_value(uint16_t csa, uint16_t csb, uint16_t csc, void *data) {
+bool PublicData::set_value(uint16_t csa, uint16_t csb, uint16_t csc, void *data) {
 
        PublicDataRequest pdr(csa, csb, csc);
        pdr.set_data_ptr(data);
        this->kernel->call_event(ON_SET_PUBLIC_DATA, &pdr );
+       return pdr.is_taken();
 }
index ec28632..052336e 100644 (file)
 
 class PublicData : public Module {
        public:
-               void get_value(uint16_t csa, void **data) { get_value(csa, 0, 0, data); }
-               void get_value(uint16_t csa, uint16_t csb, void **data) { get_value(csa, csb, 0, data); }
-               void get_value(uint16_t cs[3], void **data) { get_value(cs[0], cs[1], cs[2], data); };
-               void get_value(uint16_t csa, uint16_t csb, uint16_t csc, void **data);
-
-               void set_value(uint16_t csa, void *data) { set_value(csa, 0, 0, data); }
-               void set_value(uint16_t csa, uint16_t csb, void *data) { set_value(csa, csb, 0, data); }
-               void set_value(uint16_t cs[3], void *data) { set_value(cs[0], cs[1], cs[2], data); }
-               void set_value(uint16_t csa, uint16_t csb, uint16_t csc, void *data);
+               bool get_value(uint16_t csa, void **data) { return get_value(csa, 0, 0, data); }
+               bool get_value(uint16_t csa, uint16_t csb, void **data) { return get_value(csa, csb, 0, data); }
+               bool get_value(uint16_t cs[3], void **data) { return get_value(cs[0], cs[1], cs[2], data); };
+               bool get_value(uint16_t csa, uint16_t csb, uint16_t csc, void **data);
+               
+               bool set_value(uint16_t csa, void *data) { return set_value(csa, 0, 0, data); }
+               bool set_value(uint16_t csa, uint16_t csb, void *data) { return set_value(csa, csb, 0, data); }
+               bool set_value(uint16_t cs[3], void *data) { return set_value(cs[0], cs[1], cs[2], data); }
+               bool set_value(uint16_t csa, uint16_t csb, uint16_t csc, void *data);
 };
 
 #endif
\ No newline at end of file
index d45503c..dcff367 100644 (file)
 #include "libs/Kernel.h"
 
 class PublicDataRequest {
-       public:
-               // targets.. the module(s) that needs to respond
-               static const uint16_t pdr_temperature_control_checksum=    CHECKSUM("temperature_control");
-               static const uint16_t pdr_robot_checksum=                  CHECKSUM("robot");
-               // sub targets.. the sub target in a module
-               static const uint16_t pdr_hotend_checksum=                 CHECKSUM("hotend");
-               static const uint16_t pdr_bed_checksum=                    CHECKSUM("bed");
-               // values.. The values to retrieve from the target
-               static const uint16_t pdr_current_temperature_checksum=    CHECKSUM("current_temperature");
-               static const uint16_t pdr_target_temperature_checksum=     CHECKSUM("target_temperature");
-               static const uint16_t pdr_temperature_pwm_checksum=        CHECKSUM("temperature_pwm");
-               static const uint16_t pdr_speed_override_percent_checksum= CHECKSUM("speed_override_percent");
-
-
        public:
                PublicDataRequest(uint16_t addrcs1){ target[0]= addrcs1; target[1]= 0; target[2]= 0; data_taken= false; data= NULL; }
                PublicDataRequest(uint16_t addrcs1, uint16_t addrcs2){ target[0]= addrcs1; target[1]= addrcs2; target[2]= 0; data_taken= false; data= NULL; }
@@ -35,15 +18,15 @@ class PublicDataRequest {
 
                virtual ~PublicDataRequest() { data= NULL; }
                
-               bool starts_with(uint16_t addr) const { return addr == target[0]; }
-               bool second_element_is(uint16_t addr) const { return addr == target[1]; }
-               bool third_element_is(uint16_t addr) const { return addr == target[2]; }
+               bool starts_with(uint16_t addr) const { return addr == this->target[0]; }
+               bool second_element_is(uint16_t addr) const { return addr == this->target[1]; }
+               bool third_element_is(uint16_t addr) const { return addr == this->target[2]; }
 
-               bool is_taken() const { return data_taken; }
+               bool is_taken() const { return this->data_taken; }
                void set_taken() { this->data_taken= true; }
                
-               void set_data_ptr(void *d) { data= d; }
-               void* get_data_ptr(void) { return data; }
+               void set_data_ptr(void *d) { this->data= d; }
+               void* get_data_ptr(void) const { return this->data; }
 
        private:
                uint16_t target[3];
index 09c144e..b8f1c5f 100644 (file)
@@ -35,6 +35,10 @@ using std::string;
 #define delta_checksum                         CHECKSUM("delta")
 #define hbot_checksum                          CHECKSUM("hbot")
 
+// addresses used for public data access
+#define robot_checksum                         CHECKSUM("robot");
+#define speed_override_percent_checksum        CHECKSUM("speed_override_percent");
+
 #define NEXT_ACTION_DEFAULT 0
 #define NEXT_ACTION_DWELL 1
 #define NEXT_ACTION_GO_HOME 2
index d6eb160..7aed75b 100644 (file)
@@ -204,18 +204,18 @@ void TemperatureControl::on_gcode_execute(void* argument){
 void TemperatureControl::on_get_public_data(void* argument){
        PublicDataRequest* pdr = static_cast<PublicDataRequest*>(argument);
        
-       if(!pdr->starts_with(PublicDataRequest::pdr_temperature_control_checksum)) return;
+       if(!pdr->starts_with(temperature_control_checksum)) return;
 
        if(!pdr->second_element_is(this->name_checksum)) return; // will be bed or hotend
 
        // ok this is us send back the requested value
-       if(pdr->third_element_is(PublicDataRequest::pdr_current_temperature_checksum)) {
+       if(pdr->third_element_is(current_temperature_checksum)) {
                pdr->set_data_ptr(&this->last_reading);
                pdr->set_taken();
-       }else if(pdr->third_element_is(PublicDataRequest::pdr_target_temperature_checksum)) {
+       }else if(pdr->third_element_is(target_temperature_checksum)) {
                pdr->set_data_ptr((target_temperature == UNDEFINED) ? NULL : &this->target_temperature);
                pdr->set_taken();
-       }else if(pdr->third_element_is(PublicDataRequest::pdr_temperature_pwm_checksum)) {
+       }else if(pdr->third_element_is(temperature_pwm_checksum)) {
                pdr->set_data_ptr(&this->o);
                pdr->set_taken();
        }
index 944d91b..4e0d6c8 100644 (file)
@@ -16,6 +16,7 @@
 
 #define UNDEFINED -1
 
+#include "TemperatureControlPublicAccess.h"
 #define thermistor_checksum                CHECKSUM("thermistor")
 #define r0_checksum                        CHECKSUM("r0")
 #define readings_per_second_checksum       CHECKSUM("readings_per_second")
@@ -26,7 +27,6 @@
 #define vcc_checksum                       CHECKSUM("vcc")
 #define r1_checksum                        CHECKSUM("r1")
 #define r2_checksum                        CHECKSUM("r2")
-#define temperature_control_checksum       CHECKSUM("temperature_control")
 #define thermistor_pin_checksum            CHECKSUM("thermistor_pin")
 #define heater_pin_checksum                CHECKSUM("heater_pin")
 
 #define preset1_checksum                   CHECKSUM("preset1")
 #define preset2_checksum                   CHECKSUM("preset2")
 
+
 #define QUEUE_LEN 8
 
 class TemperatureControlPool;
 
 class TemperatureControl : public Module {
-    public:
+
+       public:
         TemperatureControl(uint16_t name);
 
         void on_module_loaded();
diff --git a/src/modules/tools/temperaturecontrol/TemperatureControlPublicAccess.h b/src/modules/tools/temperaturecontrol/TemperatureControlPublicAccess.h
new file mode 100644 (file)
index 0000000..696d7d0
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef __TEMPERATURECONTROLPUBLICACCESS_H
+#define __TEMPERATURECONTROLPUBLICACCESS_H
+
+// addresses used for public data access
+#define temperature_control_checksum      CHECKSUM("temperature_control")
+#define hotend_checksum                   CHECKSUM("hotend")
+#define bed_checksum                      CHECKSUM("bed")
+#define current_temperature_checksum      CHECKSUM("current_temperature")
+#define target_temperature_checksum       CHECKSUM("target_temperature")
+#define temperature_pwm_checksum          CHECKSUM("temperature_pwm")
+
+#endif
\ No newline at end of file
index 1c520ff..6a6aea5 100644 (file)
@@ -18,6 +18,8 @@
 #include "version.h"
 #include "PublicDataRequest.h"
 
+#include "modules/tools/temperaturecontrol/TemperatureControlPublicAccess.h"
+
 void SimpleShell::on_module_loaded(){
     this->current_path = "/";
     this->register_for_event(ON_CONSOLE_LINE_RECEIVED);
@@ -174,10 +176,15 @@ void SimpleShell::break_command( string parameters, StreamOutput* stream){
 
 // used to test out the get public data events
 void SimpleShell::get_temp_command( string parameters, StreamOutput* stream){
+       string type= shift_parameter( parameters );
        double* temp;
-       this->kernel->public_data->get_value( PublicDataRequest::pdr_temperature_control_checksum, PublicDataRequest::pdr_hotend_checksum, PublicDataRequest::pdr_current_temperature_checksum, (void**)&temp );
-       stream->printf("hotend temp: %f\r\n", *temp);
-       
+       bool ok= this->kernel->public_data->get_value( temperature_control_checksum, get_checksum(type), current_temperature_checksum, (void**)&temp );
+
+       if(ok) {
+               stream->printf("%s temp: %f\r\n", type.c_str(), *temp);
+       }else{
+               stream->printf("%s is not a known temperature device\r\n", type.c_str());
+       }
 }
 
 void SimpleShell::help_command( string parameters, StreamOutput* stream ){
index 40bf590..a11ff58 100644 (file)
@@ -1,6 +1,6 @@
 #include "version.h"
 const char *Version::get_build(void) const {
-    return "feature/get_public_value_event-8028708";
+    return "feature/get_public_value_event-688c613";
 }
 const char *Version::get_build_date(void) const {
     return __DATE__ " " __TIME__;