|
3 | 3 | #include <sys/unistd.h> |
4 | 4 | #include <ulog.h> |
5 | 5 |
|
| 6 | +#include <json_stream.hpp> |
6 | 7 | #include <services.hpp> |
7 | 8 |
|
8 | 9 | #include "COBS.h" |
9 | 10 | #include "ui_board.h" |
10 | 11 |
|
| 12 | +#define IS_BIT_SET(x, bit) ((x & (1 << bit)) != 0) |
| 13 | + |
11 | 14 | static constexpr uint8_t EVT_PACKET_RECEIVED = 1; |
12 | 15 |
|
13 | 16 | void YardForceCoverUIDriver::Start(UARTDriver *uart) { |
@@ -203,12 +206,22 @@ void YardForceCoverUIDriver::ProcessPacket() { |
203 | 206 | if (encode_decode_buf_[0] == Get_Version && size == sizeof(struct msg_get_version)) { |
204 | 207 | board_found_ = true; |
205 | 208 | } else if (encode_decode_buf_[0] == Get_Button && size == sizeof(struct msg_event_button)) { |
206 | | - // TODO: Send an event to the InputService. |
207 | | - // msg_event_button *msg = (struct msg_event_button *)encode_decode_buf_; |
208 | | - } /* else if (encode_decode_buf_[0] == Get_Emergency && size == sizeof(struct msg_event_emergency)) { |
209 | | - struct msg_event_emergency *msg = (struct msg_event_emergency *)encode_decode_buf_; |
210 | | - stock_ui_emergency_state = msg->state; |
211 | | - } else if (encode_decode_buf_[0] == Get_Rain && size == sizeof(struct msg_event_rain)) { |
| 209 | + msg_event_button *msg = (struct msg_event_button *)encode_decode_buf_; |
| 210 | + for (auto &input : input_driver_.Inputs()) { |
| 211 | + if (input.yardforce.type == Input::Type::BUTTON && input.yardforce.button.id == msg->button_id) { |
| 212 | + const bool long_press = msg->press_duration >= 1; |
| 213 | + input.InjectPress(long_press); |
| 214 | + break; |
| 215 | + } |
| 216 | + } |
| 217 | + } else if (encode_decode_buf_[0] == Get_Emergency && size == sizeof(struct msg_event_emergency)) { |
| 218 | + msg_event_emergency *msg = (struct msg_event_emergency *)encode_decode_buf_; |
| 219 | + for (auto &input : input_driver_.Inputs()) { |
| 220 | + if (input.yardforce.type == Input::Type::HALL) { |
| 221 | + input.Update(IS_BIT_SET(msg->state, input.yardforce.hall.bit)); |
| 222 | + } |
| 223 | + } |
| 224 | + } /* else if (encode_decode_buf_[0] == Get_Rain && size == sizeof(struct msg_event_rain)) { |
212 | 225 | struct msg_event_rain *msg = (struct msg_event_rain *)encode_decode_buf_; |
213 | 226 | stock_ui_rain = (msg->value < llhl_config.rain_threshold); |
214 | 227 | } else if (encode_decode_buf_[0] == Get_Subscribe && size == sizeof(struct msg_event_subscribe)) { |
|
0 commit comments