Skip to content

Commit c66c97e

Browse files
committed
🚧 Remove the onewire bus from the pin and vec erase
1 parent fa0828d commit c66c97e

File tree

6 files changed

+41
-4
lines changed

6 files changed

+41
-4
lines changed

src/components/ds18x20/controller.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,29 @@ bool DS18X20Controller::Handle_Ds18x20Add(pb_istream_t *stream) {
8181
return true;
8282
}
8383

84+
bool DS18X20Controller::Handle_Ds18x20Remove(pb_istream_t *stream) {
85+
// Attempt to decode the stream
86+
if (!_DS18X20_model->DecodeDS18x20Remove(stream)) {
87+
WS_DEBUG_PRINTLN("ERROR: Unable to decode Ds18x20Remove message");
88+
return false;
89+
}
90+
// Create a temp. instance of the Ds18x20Remove message
91+
wippersnapper_ds18x20_Ds18x20Remove *msg_remove =
92+
_DS18X20_model->GetDS18x20RemoveMsg();
93+
uint8_t pin_name = atoi(msg_remove->onewire_pin + 1);
94+
// Destroy the DS18X20Hardware object, remove it from the vector, and release
95+
// it for other uses
96+
for (uint8_t i = 0; i < _DS18X20_pins.size(); i++) {
97+
if (_DS18X20_pins[i].GetOneWirePin() == pin_name) {
98+
_DS18X20_pins.erase(_DS18X20_pins.begin() + i);
99+
break;
100+
}
101+
}
102+
WS_DEBUG_PRINT("Removed OneWire Pin: ");
103+
WS_DEBUG_PRINTLN(pin_name);
104+
return true;
105+
}
106+
84107
void DS18X20Controller::update() {
85108
// Bail out if there are no OneWire pins to poll
86109
if (_DS18X20_pins.empty())

src/components/ds18x20/controller.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class DS18X20Controller {
3333
~DS18X20Controller();
3434
// Routing
3535
bool Handle_Ds18x20Add(pb_istream_t *stream);
36-
// TODO: Implement Handle DS18x20 Remove message!
36+
bool Handle_Ds18x20Remove(pb_istream_t *stream);
3737
// Polling
3838
void update();
3939

src/components/ds18x20/hardware.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ bool DS18X20Hardware::GetSensor() {
3333
return ec == OneWireNg::EC_SUCCESS;
3434
}
3535

36+
uint8_t DS18X20Hardware::GetOneWirePin() { return _onewire_pin; }
37+
3638
void DS18X20Hardware::SetResolution(int resolution) {
3739
// Set the resolution of the DS18X20 sensor driver
3840
switch (resolution) {

src/components/ds18x20/hardware.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class DS18X20Hardware {
3434
void SetPeriod(float period);
3535
bool IsTimerExpired();
3636
bool GetSensor();
37+
uint8_t GetOneWirePin();
3738
bool ReadTemperatureC();
3839
bool ReadTemperatureF();
3940
float GetTemperatureC();

src/components/ds18x20/model.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ bool DS18X20Model::EncodeDS18x20Added(char *onewire_pin, bool is_init) {
5454
&_msg_DS18x20Added);
5555
}
5656

57+
bool DS18X20Model::DecodeDS18x20Remove(pb_istream_t *stream) {
58+
_msg_DS18x20Remove = wippersnapper_ds18x20_Ds18x20Remove_init_zero;
59+
return pb_decode(stream, wippersnapper_ds18x20_Ds18x20Remove_fields,
60+
&_msg_DS18x20Remove);
61+
}
62+
63+
wippersnapper_ds18x20_Ds18x20Remove *DS18X20Model::GetDS18x20RemoveMsg() {
64+
return &_msg_DS18x20Remove;
65+
}
66+
5767
wippersnapper_ds18x20_Ds18x20Event *DS18X20Model::GetDS18x20EventMsg() {
5868
return &_msg_DS18x20Event;
5969
}

src/components/ds18x20/model.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ class DS18X20Model {
2929
// Ds18x20Add Message
3030
bool DecodeDS18x20Add(pb_istream_t *stream);
3131
wippersnapper_ds18x20_Ds18x20Add *GetDS18x20AddMsg();
32-
// Ds18x20Remove Message
32+
// DS18x20Added Message
3333
bool EncodeDS18x20Added(char *onewire_pin, bool is_init);
3434
wippersnapper_ds18x20_Ds18x20Added *GetDS18x20AddedMsg();
35+
// Ds18x20Remove Message
36+
bool DecodeDS18x20Remove(pb_istream_t *stream);
37+
wippersnapper_ds18x20_Ds18x20Remove *GetDS18x20RemoveMsg();
3538
// Ds18x20Event Message
3639
bool
3740
EncodeDs18x20Event(char *onewire_pin, pb_size_t sensor_events_count,
@@ -49,8 +52,6 @@ class DS18X20Model {
4952
_msg_DS18x20Add; ///< wippersnapper_ds18x20_Ds18x20Add message
5053
wippersnapper_ds18x20_Ds18x20Added
5154
_msg_DS18x20Added; ///< wippersnapper_ds18x20_Ds18x20Added message
52-
wippersnapper_ds18x20_Ds18x20Event
53-
_msg_DS18x20Event; ///< wippersnapper_ds18x20_Ds18x20Event message
5455
wippersnapper_ds18x20_Ds18x20Remove
5556
_msg_DS18x20Remove; ///< wippersnapper_ds18x20_Ds18x20Remove message
5657
};

0 commit comments

Comments
 (0)