Skip to content

Commit 73b011b

Browse files
Merge pull request #65 from Apehaenger/feature/Stock-CoverUI
Stock-CoverUI integration proposal
2 parents 4779828 + 0e2e684 commit 73b011b

2 files changed

Lines changed: 53 additions & 6 deletions

File tree

Firmware/LowLevel/src/main.cpp

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ unsigned long last_UILED_millis = 0;
8888
unsigned long lift_emergency_started = 0;
8989
unsigned long button_emergency_started = 0;
9090

91+
// Stock UI
92+
uint8_t stock_ui_emergency_state = 0; // Get set by received Get_Emergency packet
93+
bool stock_ui_rain = false; // Get set by received Get_Rain packet
94+
9195
// Predefined message buffers, so that we don't need to allocate new ones later.
9296
struct ll_imu imu_message = {0};
9397
struct ll_status status_message = {0};
@@ -130,10 +134,10 @@ void updateEmergency() {
130134
uint8_t last_emergency = status_message.emergency_bitmask & 1;
131135

132136
// Mask the emergency bits. 2x Lift sensor, 2x Emergency Button
133-
bool emergency1 = !gpio_get(PIN_EMERGENCY_1);
134-
bool emergency2 = !gpio_get(PIN_EMERGENCY_2);
135-
bool emergency3 = !gpio_get(PIN_EMERGENCY_3);
136-
bool emergency4 = !gpio_get(PIN_EMERGENCY_4);
137+
bool emergency1 = !gpio_get(PIN_EMERGENCY_1) | (stock_ui_emergency_state & Emergency_state::Emergency_lift1);
138+
bool emergency2 = !gpio_get(PIN_EMERGENCY_2) | (stock_ui_emergency_state & Emergency_state::Emergency_lift2);
139+
bool emergency3 = !gpio_get(PIN_EMERGENCY_3) | (stock_ui_emergency_state & Emergency_state::Emergency_stop1);
140+
bool emergency4 = !gpio_get(PIN_EMERGENCY_4) | (stock_ui_emergency_state & Emergency_state::Emergency_stop2);
137141

138142
uint8_t emergency_state = 0;
139143

@@ -299,7 +303,7 @@ void loop1() {
299303
case 5:
300304
mutex_enter_blocking(&mtx_status_message);
301305

302-
if (state) {
306+
if (state || stock_ui_rain) {
303307
status_message.status_bitmask |= 0b00010000;
304308
} else {
305309
status_message.status_bitmask &= 0b11101111;
@@ -460,6 +464,16 @@ void onUIPacketReceived(const uint8_t *buffer, size_t size) {
460464
ui_event.press_duration = msg->press_duration;
461465
sendMessage(&ui_event, sizeof(ui_event));
462466
}
467+
else if (buffer[0] == Get_Emergency && size == sizeof(struct msg_event_emergency))
468+
{
469+
struct msg_event_emergency *msg = (struct msg_event_emergency *)buffer;
470+
stock_ui_emergency_state = msg->state;
471+
}
472+
else if (buffer[0] == Get_Rain && size == sizeof(struct msg_event_rain))
473+
{
474+
struct msg_event_rain *msg = (struct msg_event_rain *)buffer;
475+
stock_ui_rain = (msg->value < msg->threshold);
476+
}
463477
}
464478

465479
void onPacketReceived(const uint8_t *buffer, size_t size) {

Firmware/LowLevel/src/ui_board.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ enum TYPE
2525
Get_Version = 0xB0,
2626
Set_Buzzer = 0xB1,
2727
Set_LEDs = 0xB2,
28-
Get_Button = 0xB3
28+
Get_Button = 0xB3,
29+
Get_Emergency = 0xB4, // Stock-CoverUI
30+
Get_Rain = 0xB5 // Stock-CoverUI
2931
};
3032

3133

@@ -59,6 +61,16 @@ enum LED_state {
5961
LED_on = 0b111
6062
};
6163

64+
// Stock-CoverUI (same bitmask as in ll_status.emergency_bitmask of datatypes.h)
65+
enum Emergency_state
66+
{
67+
Emergency_latch = 0b00001,
68+
Emergency_stop1 = 0b00010,
69+
Emergency_stop2 = 0b00100,
70+
Emergency_lift1 = 0b01000,
71+
Emergency_lift2 = 0b10000
72+
};
73+
6274
#pragma pack(push, 1)
6375
struct msg_get_version
6476
{
@@ -114,6 +126,27 @@ struct msg_event_button
114126
} __attribute__((packed));
115127
#pragma pack(pop)
116128

129+
// Stock-CoverUI
130+
#pragma pack(push, 1)
131+
struct msg_event_rain
132+
{
133+
uint8_t type; // Command type
134+
uint8_t reserved; // Padding
135+
uint32_t value;
136+
uint32_t threshold; // If value < threshold then it rains. Why a threshold? Cause there might be a future option to make it configurable on Stock-CoverUI
137+
uint16_t crc; // CRC 16
138+
} __attribute__((packed));
139+
#pragma pack(pop)
140+
141+
// Stock-CoverUI
142+
#pragma pack(push, 1)
143+
struct msg_event_emergency
144+
{
145+
uint8_t type; // Command type
146+
uint8_t state; // Same as in ll_status.emergency_bitmask of datatypes.h
147+
uint16_t crc; // CRC 16
148+
} __attribute__((packed));
149+
#pragma pack(pop)
117150

118151
void setLed(struct msg_set_leds &msg, int led, uint8_t state);
119152

0 commit comments

Comments
 (0)