#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();
}
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
#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; }
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];
#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
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();
}
#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")
#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();
--- /dev/null
+#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
#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);
// 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 ){
#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__;