🐛 WIP, analogio - Bug fixes during testing

This commit is contained in:
brentru 2024-10-03 15:34:57 -04:00
parent 549874a2f0
commit e30d4e4126
2 changed files with 22 additions and 5 deletions

View file

@ -367,6 +367,13 @@ bool cbDecodeBrokerToDevice(pb_istream_t *stream, const pb_field_t *field,
return false;
}
break;
case wippersnapper_signal_BrokerToDevice_analogio_remove_tag:
WS_DEBUG_PRINTLN("-> AnalogIO Remove Message Type");
if (!WsV2.analogio_controller->Handle_AnalogIORemove(stream)) {
WS_DEBUG_PRINTLN("ERROR: Unable to remove analogio pin!");
return false;
}
break;
default:
WS_DEBUG_PRINTLN("ERROR: BrokerToDevice message type not found!");
return false;
@ -870,6 +877,13 @@ bool Wippersnapper_V2::PublishSignal(pb_size_t which_payload, void *payload) {
MsgSignal.payload.digitalio_event =
*(wippersnapper_digitalio_DigitalIOEvent *)payload;
break;
case wippersnapper_signal_DeviceToBroker_analogio_event_tag:
WS_DEBUG_PRINTLN("AnalogIO Event");
MsgSignal.which_payload =
wippersnapper_signal_DeviceToBroker_analogio_event_tag;
MsgSignal.payload.analogio_event =
*(wippersnapper_analogio_AnalogIOEvent *)payload;
break;
default:
WS_DEBUG_PRINTLN("ERROR: Invalid signal payload type, bailing out!");
return false;
@ -1150,7 +1164,8 @@ ws_status_t Wippersnapper_V2::runV2() {
// Process all digital events
WsV2.digital_io_controller->Update();
// TODO: Process analog inputs
// Process all analog inputs
WsV2.analogio_controller->update();
// TODO: Process I2C sensor events

View file

@ -119,7 +119,7 @@ bool AnalogIOController::Handle_AnalogIORemove(pb_istream_t *stream) {
_analogio_hardware->DeinitPin(pin_name);
// Remove the pin from the vector
// TODO: Refactor this out?
// TODO: Refactor this out? TODO: Make this better??
for (int i = 0; i < _analogio_pins.size(); i++) {
if (_analogio_pins[i].name == pin_name) {
_analogio_pins.erase(_analogio_pins.begin() + i);
@ -158,7 +158,7 @@ bool AnalogIOController::IsPinTimerExpired(analogioPin *pin, ulong cur_time) {
bool AnalogIOController::EncodePublishPinEvent(
uint8_t pin, float value, wippersnapper_sensor_SensorType read_type) {
char c_pin_name[12];
sprintf(c_pin_name, "D%d", pin);
sprintf(c_pin_name, "A%d", pin);
if (read_type == wippersnapper_sensor_SensorType_SENSOR_TYPE_RAW) {
if (!_analogio_model->EncodeAnalogIOEventRaw(c_pin_name, value)) {
@ -175,9 +175,9 @@ bool AnalogIOController::EncodePublishPinEvent(
return false;
}
// Publish the DigitalIOEvent message to the broker
// Publish the AnalogIO message to the broker
if (!WsV2.PublishSignal(
wippersnapper_signal_DeviceToBroker_digitalio_event_tag,
wippersnapper_signal_DeviceToBroker_analogio_event_tag,
_analogio_model->GetAnalogIOEvent())) {
WS_DEBUG_PRINTLN("ERROR: Unable to publish analogio voltage event message, "
"moving onto the next pin!");
@ -245,12 +245,14 @@ void AnalogIOController::update() {
uint16_t value = _analogio_hardware->GetPinValue(pin.name);
// Encode and publish it to the broker
EncodePublishPinValue(pin.name, value);
pin.prv_period = cur_time; // Reset the pin's period
} else if (pin.read_mode ==
wippersnapper_sensor_SensorType_SENSOR_TYPE_VOLTAGE) {
// Convert the raw value into voltage
float pin_value = _analogio_hardware->GetPinVoltage(pin.name);
// Encode and publish the voltage value to the broker
EncodePublishPinVoltage(pin.name, pin_value);
pin.prv_period = cur_time; // Reset the pin's period
} else {
WS_DEBUG_PRINTLN("ERROR: Invalid read mode for analog pin!");
}