Skip to content

Commit fac050e

Browse files
committed
🚧 WIP, analogio - Add encoder for a raw analogio event
1 parent e5e2724 commit fac050e

File tree

3 files changed

+51
-6
lines changed

3 files changed

+51
-6
lines changed

src/components/analogIO/controller.cpp

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,25 @@ bool AnalogIOController::IsPinTimerExpired(analogioPin *pin, ulong cur_time) {
8989
}
9090

9191
bool AnalogIOController::EncodePublishPinValue(uint8_t pin, uint16_t value) {
92-
// TODO!
92+
char c_pin_name[12];
93+
sprintf(c_pin_name, "D%d", pin);
94+
95+
// Encode the DigitalIOEvent message
96+
if (!_analogio_model->EncodeAnalogIOEventRaw(c_pin_name, value)) {
97+
WS_DEBUG_PRINTLN("ERROR: Unable to encode DigitalIOEvent message!");
98+
return false;
99+
}
100+
101+
// Publish the DigitalIOEvent message to the broker
102+
if (!WsV2.PublishSignal(
103+
wippersnapper_signal_DeviceToBroker_digitalio_event_tag,
104+
_analogio_model->GetAnalogIOEvent())) {
105+
WS_DEBUG_PRINTLN("ERROR: Unable to publish analogio voltage event message, "
106+
"moving onto the next pin!");
107+
return false;
108+
}
109+
WS_DEBUG_PRINTLN("Published AnalogIOEvent message to broker!")
110+
93111
return true;
94112
}
95113

@@ -98,7 +116,7 @@ bool AnalogIOController::EncodePublishPinVoltage(uint8_t pin, float value) {
98116
sprintf(c_pin_name, "D%d", pin);
99117

100118
// Encode the DigitalIOEvent message
101-
if (!_analogio_model->EncodeAnalogIOVoltageEvent(c_pin_name, value)) {
119+
if (!_analogio_model->EncodeAnalogIOEventVoltage(c_pin_name, value)) {
102120
WS_DEBUG_PRINTLN("ERROR: Unable to encode DigitalIOEvent message!");
103121
return false;
104122
}

src/components/analogIO/model.cpp

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ wippersnapper_analogio_AnalogIOEvent *AnalogIOModel::GetAnalogIOEvent() {
5454
return &_msg_AnalogioEvent;
5555
}
5656

57-
bool AnalogIOModel::EncodeAnalogIOVoltageEvent(char *pin_name,
58-
float pin_value) {
57+
bool AnalogIOModel::EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value) {
5958
// Initialize the AnalogIOEvent message to default values
6059
_msg_AnalogioEvent = wippersnapper_analogio_AnalogIOEvent_init_zero;
6160
// Fill the AnalogIOEvent message's fields
@@ -66,6 +65,34 @@ bool AnalogIOModel::EncodeAnalogIOVoltageEvent(char *pin_name,
6665
wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW;
6766
_msg_AnalogioEvent.sensor_event.which_value =
6867
wippersnapper_sensor_SensorEvent_float_value_tag;
68+
_msg_AnalogioEvent.sensor_event.value.float_value = (float)pin_value;
69+
70+
// Obtain size of an encoded AnalogIOEvent message
71+
size_t sz_aio_event_msg;
72+
if (!pb_get_encoded_size(&sz_aio_event_msg,
73+
wippersnapper_analogio_AnalogIOEvent_fields,
74+
&_msg_AnalogioEvent))
75+
return false;
76+
77+
// Encode the AnalogIOEvent message
78+
uint8_t buf[sz_aio_event_msg];
79+
pb_ostream_t msg_stream = pb_ostream_from_buffer(buf, sizeof(buf));
80+
return pb_encode(&msg_stream, wippersnapper_analogio_AnalogIOEvent_fields,
81+
&_msg_AnalogioEvent);
82+
}
83+
84+
bool AnalogIOModel::EncodeAnalogIOEventVoltage(char *pin_name,
85+
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;
6996
_msg_AnalogioEvent.sensor_event.value.float_value = pin_value;
7097

7198
// Obtain size of an encoded AnalogIOEvent message

src/components/analogIO/model.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class AnalogIOModel {
3333
bool DecodeAnalogIORemove(pb_istream_t *stream);
3434
wippersnapper_analogio_AnalogIORemove *GetAnalogIORemoveMsg();
3535
// AnalogIOEvent
36-
bool EncodeAnalogIOVoltageEvent(char *pin_name, float pin_value);
37-
// bool EncodeAnalogIORawEvent(char *pin_name, int16_t pin_value);
36+
bool EncodeAnalogIOEventVoltage(char *pin_name, float pin_value);
37+
bool EncodeAnalogIOEventRaw(char *pin_name, int16_t pin_value);
3838
wippersnapper_analogio_AnalogIOEvent *GetAnalogIOEvent();
3939

4040
private:

0 commit comments

Comments
 (0)