Skip to content

Commit e5d3199

Browse files
committed
🚧 WIP, analogio - refactor encode/publish in controller, refactor model
1 parent fac050e commit e5d3199

File tree

4 files changed

+37
-52
lines changed

4 files changed

+37
-52
lines changed

src/components/analogIO/controller.cpp

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,23 @@ bool AnalogIOController::IsPinTimerExpired(analogioPin *pin, ulong cur_time) {
8888
return cur_time - pin->prv_period > pin->period;
8989
}
9090

91-
bool AnalogIOController::EncodePublishPinValue(uint8_t pin, uint16_t value) {
91+
bool AnalogIOController::EncodePublishPinEvent(
92+
uint8_t pin, float value, wippersnapper_sensor_SensorType read_type) {
9293
char c_pin_name[12];
9394
sprintf(c_pin_name, "D%d", pin);
9495

95-
// Encode the DigitalIOEvent message
96-
if (!_analogio_model->EncodeAnalogIOEventRaw(c_pin_name, value)) {
97-
WS_DEBUG_PRINTLN("ERROR: Unable to encode DigitalIOEvent message!");
96+
if (read_type == wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW) {
97+
if (!_analogio_model->EncodeAnalogIOEventRaw(c_pin_name, value)) {
98+
WS_DEBUG_PRINTLN("ERROR: Unable to encode AnalogIO raw adc message!");
99+
return false;
100+
}
101+
} else if (read_type == wippersnapper_sensor_SensorType_SENSOR_TYPE_VOLTAGE) {
102+
if (!_analogio_model->EncodeAnalogIOEventVoltage(c_pin_name, value)) {
103+
WS_DEBUG_PRINTLN("ERROR: Unable to encode AnalogIO voltage message!");
104+
return false;
105+
}
106+
} else {
107+
WS_DEBUG_PRINTLN("ERROR: Invalid read type for AnalogIOEvent message!");
98108
return false;
99109
}
100110

@@ -111,27 +121,14 @@ bool AnalogIOController::EncodePublishPinValue(uint8_t pin, uint16_t value) {
111121
return true;
112122
}
113123

114-
bool AnalogIOController::EncodePublishPinVoltage(uint8_t pin, float value) {
115-
char c_pin_name[12];
116-
sprintf(c_pin_name, "D%d", pin);
117-
118-
// Encode the DigitalIOEvent message
119-
if (!_analogio_model->EncodeAnalogIOEventVoltage(c_pin_name, value)) {
120-
WS_DEBUG_PRINTLN("ERROR: Unable to encode DigitalIOEvent message!");
121-
return false;
122-
}
123-
124-
// Publish the DigitalIOEvent message to the broker
125-
if (!WsV2.PublishSignal(
126-
wippersnapper_signal_DeviceToBroker_digitalio_event_tag,
127-
_analogio_model->GetAnalogIOEvent())) {
128-
WS_DEBUG_PRINTLN("ERROR: Unable to publish analogio voltage event message, "
129-
"moving onto the next pin!");
130-
return false;
131-
}
132-
WS_DEBUG_PRINTLN("Published AnalogIOEvent message to broker!")
124+
bool AnalogIOController::EncodePublishPinValue(uint8_t pin, uint16_t value) {
125+
return EncodePublishPinEvent(pin, (float)value,
126+
wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW);
127+
}
133128

134-
return true;
129+
bool AnalogIOController::EncodePublishPinVoltage(uint8_t pin, float value) {
130+
return EncodePublishPinEvent(
131+
pin, value, wippersnapper_sensor_SensorType_SENSOR_TYPE_VOLTAGE);
135132
}
136133

137134
void AnalogIOController::update() {

src/components/analogIO/controller.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ class AnalogIOController {
5050
// Polling loop
5151
void update();
5252
// Encoder
53+
bool EncodePublishPinEvent(uint8_t pin, float value,
54+
wippersnapper_sensor_SensorType read_type);
5355
bool EncodePublishPinValue(uint8_t pin, uint16_t value);
5456
bool EncodePublishPinVoltage(uint8_t pin, float value);
5557
// Helpers

src/components/analogIO/model.cpp

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -54,18 +54,19 @@ wippersnapper_analogio_AnalogIOEvent *AnalogIOModel::GetAnalogIOEvent() {
5454
return &_msg_AnalogioEvent;
5555
}
5656

57-
bool AnalogIOModel::EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value) {
57+
bool AnalogIOModel::EncodeAnalogIOEvent(
58+
char *pin_name, float pin_value,
59+
wippersnapper_sensor_SensorType read_type) {
5860
// Initialize the AnalogIOEvent message to default values
5961
_msg_AnalogioEvent = wippersnapper_analogio_AnalogIOEvent_init_zero;
6062
// Fill the AnalogIOEvent message's fields
6163
strncpy(_msg_AnalogioEvent.pin_name, pin_name,
6264
sizeof(_msg_AnalogioEvent.pin_name));
6365
_msg_AnalogioEvent.has_sensor_event = true;
64-
_msg_AnalogioEvent.sensor_event.type =
65-
wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW;
66+
_msg_AnalogioEvent.sensor_event.type = read_type;
6667
_msg_AnalogioEvent.sensor_event.which_value =
6768
wippersnapper_sensor_SensorEvent_float_value_tag;
68-
_msg_AnalogioEvent.sensor_event.value.float_value = (float)pin_value;
69+
_msg_AnalogioEvent.sensor_event.value.float_value = pin_value;
6970

7071
// Obtain size of an encoded AnalogIOEvent message
7172
size_t sz_aio_event_msg;
@@ -81,30 +82,13 @@ bool AnalogIOModel::EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value) {
8182
&_msg_AnalogioEvent);
8283
}
8384

85+
bool AnalogIOModel::EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value) {
86+
return EncodeAnalogIOEvent(pin_name, (float)pin_value,
87+
wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW);
88+
}
89+
8490
bool AnalogIOModel::EncodeAnalogIOEventVoltage(char *pin_name,
8591
float pin_value) {
86-
// Initialize the AnalogIOEvent message to default values
87-
_msg_AnalogioEvent = wippersnapper_analogio_AnalogIOEvent_init_zero;
88-
// Fill the AnalogIOEvent message's fields
89-
strncpy(_msg_AnalogioEvent.pin_name, pin_name,
90-
sizeof(_msg_AnalogioEvent.pin_name));
91-
_msg_AnalogioEvent.has_sensor_event = true;
92-
_msg_AnalogioEvent.sensor_event.type =
93-
wippersnapper_sensor_SensorType_SENSOR_TYPE_VOLTAGE;
94-
_msg_AnalogioEvent.sensor_event.which_value =
95-
wippersnapper_sensor_SensorEvent_float_value_tag;
96-
_msg_AnalogioEvent.sensor_event.value.float_value = pin_value;
97-
98-
// Obtain size of an encoded AnalogIOEvent message
99-
size_t sz_aio_event_msg;
100-
if (!pb_get_encoded_size(&sz_aio_event_msg,
101-
wippersnapper_analogio_AnalogIOEvent_fields,
102-
&_msg_AnalogioEvent))
103-
return false;
104-
105-
// Encode the AnalogIOEvent message
106-
uint8_t buf[sz_aio_event_msg];
107-
pb_ostream_t msg_stream = pb_ostream_from_buffer(buf, sizeof(buf));
108-
return pb_encode(&msg_stream, wippersnapper_analogio_AnalogIOEvent_fields,
109-
&_msg_AnalogioEvent);
92+
return EncodeAnalogIOEvent(
93+
pin_name, pin_value, wippersnapper_sensor_SensorType_SENSOR_TYPE_VOLTAGE);
11094
}

src/components/analogIO/model.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class AnalogIOModel {
3333
bool DecodeAnalogIORemove(pb_istream_t *stream);
3434
wippersnapper_analogio_AnalogIORemove *GetAnalogIORemoveMsg();
3535
// AnalogIOEvent
36+
bool EncodeAnalogIOEvent(char *pin_name, float pin_value,
37+
wippersnapper_sensor_SensorType read_type);
3638
bool EncodeAnalogIOEventVoltage(char *pin_name, float pin_value);
3739
bool EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value);
3840
wippersnapper_analogio_AnalogIOEvent *GetAnalogIOEvent();

0 commit comments

Comments
 (0)