Skip to content

Commit c76f956

Browse files
committed
update task deps
1 parent f9f7864 commit c76f956

File tree

12 files changed

+81
-50
lines changed

12 files changed

+81
-50
lines changed

stm32-modules/include/vacuum-module/firmware/freertos_tasks.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ auto run(tasks::FirmwareTasks::QueueAggregator* aggregator) -> void;
2626
namespace pressure_control_task {
2727
// Actual function that runs in the task
2828
auto run(tasks::FirmwareTasks::QueueAggregator* aggregator,
29-
i2c::hardware::I2C* i2c_comms) -> void;
29+
i2c::hardware::I2C* i2c_comms1, i2c::hardware::I2C* i2c_comms2,
30+
i2c::hardware::I2C* i2c_comms3) -> void;
3031
} // namespace pressure_control_task
3132

3233
namespace pump_control_task {

stm32-modules/include/vacuum-module/firmware/pressure_policy.hpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,27 @@ using namespace i2c::hardware;
1010

1111
class PressurePolicy {
1212
public:
13-
PressurePolicy(I2C *i2c) : i2c_comms{i2c} {}
13+
PressurePolicy(I2C *i2c1, I2C *i2c2, I2C *i2c3)
14+
: i2c_comms1{i2c1}, i2c_comms2{i2c2}, i2c_comms3{i2c3} {}
1415

15-
template <size_t Len>
16-
auto i2c_write(uint8_t device_address, uint8_t register_address,
17-
std::array<uint8_t, Len> &data) -> bool {
18-
auto ret = i2c_comms->i2c_write(device_address, register_address,
19-
data.data(), Len);
20-
return ret == 0;
21-
}
2216
auto static sleep_ms(uint32_t ms) -> void;
2317

18+
auto get_i2c_comms(PressureSensorID sensor_id) -> I2C * {
19+
switch (sensor_id) {
20+
case PressureSensorID::ABS_PRESSURE_A:
21+
return i2c_comms1;
22+
case PressureSensorID::ABS_PRESSURE_B:
23+
return i2c_comms2;
24+
case PressureSensorID::ATM_PRESSURE:
25+
return i2c_comms3;
26+
default:
27+
return nullptr;
28+
}
29+
}
30+
2431
private:
25-
I2C *i2c_comms;
32+
I2C *i2c_comms1;
33+
I2C *i2c_comms2;
34+
I2C *i2c_comms3;
2635
};
2736
} // namespace pressure_policy

stm32-modules/include/vacuum-module/systemwide.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
// included in c++ and c files
22
#pragma once
33

4+
typedef enum PressureSensorID {
5+
ABS_PRESSURE_A = 0,
6+
ABS_PRESSURE_B,
7+
ATM_PRESSURE,
8+
} PressureSensorID;
9+
410
typedef enum StatusBarID {
511
Internal = 0,
612
External,

stm32-modules/include/vacuum-module/vacuum-module/lps22df.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
namespace lps22df {
88

9-
109
template <typename P>
1110
concept LPS22DFPolicy = requires(P p, uint16_t dev_addr, uint16_t reg,
1211
uint16_t size, uint8_t* data) {
@@ -21,7 +20,6 @@ class LPS222DF {
2120
_policy = policy;
2221
}
2322
}
24-
2523
};
2624

2725
} // namespace lps22df

stm32-modules/include/vacuum-module/vacuum-module/messages.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,13 @@ struct SetStatusBarStateMessage {
111111
};
112112

113113
struct SetTargetPressureMessage {
114-
uint32_t id = 0;
114+
uint32_t id = 0;
115115
bool from_host = false;
116116
uint32_t pressure_setpoint = 0;
117117
};
118118

119119
struct SetTargetRPMMessage {
120-
uint32_t id = 0;
120+
uint32_t id = 0;
121121
bool from_host = false;
122122
uint32_t rpm_setpoint = 0;
123123
};
@@ -134,7 +134,8 @@ using SystemMessage =
134134

135135
using UIMessage = ::std::variant<std::monostate, SetStatusBarStateMessage>;
136136

137-
using PressureMessage = ::std::variant<std::monostate, SetTargetPressureMessage>;
137+
using PressureMessage =
138+
::std::variant<std::monostate, SetTargetPressureMessage>;
138139

139140
using PumpMessage = ::std::variant<std::monostate, SetTargetRPMMessage>;
140141

stm32-modules/include/vacuum-module/vacuum-module/pressure_task.hpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
#include "core/queue_aggregator.hpp"
77
#include "core/version.hpp"
88
#include "firmware/pressure_policy.hpp"
9+
#include "hal/message_queue.hpp"
10+
#include "messages.hpp"
911
#include "vacuum-module/errors.hpp"
1012
#include "vacuum-module/messages.hpp"
1113
#include "vacuum-module/tasks.hpp"
12-
#include "hal/message_queue.hpp"
13-
#include "messages.hpp"
1414

1515
namespace pressure_task {
1616
template <typename P>
1717
concept PressureControlPolicy = requires(P p) {
18-
{ p.sleep_ms(1) };
18+
{p.sleep_ms(1)};
1919
};
2020

2121
using PressurePolicy = pressure_policy::PressurePolicy;
@@ -31,9 +31,9 @@ class PressureTask {
3131
using Queues = typename tasks::Tasks<QueueImpl>;
3232

3333
public:
34-
explicit PressureTask(Queue& q, Aggregator* aggregator, PressurePolicy* policy)
35-
: _message_queue(q),
36-
_task_registry(aggregator) {}
34+
explicit PressureTask(Queue& q, Aggregator* aggregator,
35+
PressurePolicy* policy)
36+
: _message_queue(q), _task_registry(aggregator) {}
3737
PressureTask(const PressureTask& other) = delete;
3838
auto operator=(const PressureTask& other) -> PressureTask& = delete;
3939
PressureTask(PressureTask&& other) noexcept = delete;
@@ -89,7 +89,8 @@ class PressureTask {
8989
}
9090

9191
template <PressureControlPolicy Policy>
92-
auto visit_message(const messages::SetTargetPressureMessage& m, Policy& policy) -> void {
92+
auto visit_message(const messages::SetTargetPressureMessage& m,
93+
Policy& policy) -> void {
9394
static_cast<void>(m);
9495
static_cast<void>(policy);
9596
}

stm32-modules/include/vacuum-module/vacuum-module/pump_task.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
#include "core/queue_aggregator.hpp"
77
#include "core/version.hpp"
88
#include "firmware/pump_policy.hpp"
9+
#include "hal/message_queue.hpp"
10+
#include "messages.hpp"
911
#include "vacuum-module/errors.hpp"
1012
#include "vacuum-module/messages.hpp"
1113
#include "vacuum-module/tasks.hpp"
12-
#include "hal/message_queue.hpp"
13-
#include "messages.hpp"
1414

1515
namespace pump_task {
1616
template <typename P>
1717
concept PumpControlPolicy = requires(P p) {
18-
{ p.sleep_ms(1) };
18+
{p.sleep_ms(1)};
1919
};
2020

2121
using PumpPolicy = pump_policy::PumpPolicy;
@@ -32,8 +32,7 @@ class PumpTask {
3232

3333
public:
3434
explicit PumpTask(Queue& q, Aggregator* aggregator, PumpPolicy* policy)
35-
: _message_queue(q),
36-
_task_registry(aggregator) {}
35+
: _message_queue(q), _task_registry(aggregator) {}
3736
PumpTask(const PumpTask& other) = delete;
3837
auto operator=(const PumpTask& other) -> PumpTask& = delete;
3938
PumpTask(PumpTask&& other) noexcept = delete;
@@ -89,7 +88,8 @@ class PumpTask {
8988
}
9089

9190
template <PumpControlPolicy Policy>
92-
auto visit_message(const messages::SetTargetRPMMessage& m, Policy& policy) -> void {
91+
auto visit_message(const messages::SetTargetRPMMessage& m, Policy& policy)
92+
-> void {
9393
static_cast<void>(m);
9494
static_cast<void>(policy);
9595
}

stm32-modules/include/vacuum-module/vacuum-module/tasks.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ struct Tasks {
2424

2525
// Central aggregator
2626
using QueueAggregator =
27-
queue_aggregator::QueueAggregator<HostCommsQueue, SystemQueue, UIQueue, PressureQueue, PumpQueue>;
27+
queue_aggregator::QueueAggregator<HostCommsQueue, SystemQueue, UIQueue,
28+
PressureQueue, PumpQueue>;
2829

2930
// Addresses
3031
static constexpr size_t HostCommsAddress =

stm32-modules/vacuum-module/firmware/main.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@
2121
using EntryPoint = std::function<void(tasks::FirmwareTasks::QueueAggregator *)>;
2222
using EntryPointUI = std::function<void(tasks::FirmwareTasks::QueueAggregator *,
2323
i2c::hardware::I2C *)>;
24-
using EntryPointPressure = std::function<void(tasks::FirmwareTasks::QueueAggregator *,
25-
i2c::hardware::I2C *)>;
26-
using EntryPointPump = std::function<void(tasks::FirmwareTasks::QueueAggregator *,
27-
i2c::hardware::I2C *)>;
24+
using EntryPointPressure = std::function<void(
25+
tasks::FirmwareTasks::QueueAggregator *, i2c::hardware::I2C *,
26+
i2c::hardware::I2C *, i2c::hardware::I2C *)>;
27+
using EntryPointPump = std::function<void(
28+
tasks::FirmwareTasks::QueueAggregator *, i2c::hardware::I2C *)>;
2829

2930
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
3031
static auto ui_task_entry = EntryPointUI(ui_control_task::run);
@@ -33,7 +34,8 @@ static auto host_comms_entry = EntryPoint(host_comms_control_task::run);
3334
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
3435
static auto system_task_entry = EntryPoint(system_control_task::run);
3536
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
36-
static auto pressure_task_entry = EntryPointPressure(pressure_control_task::run);
37+
static auto pressure_task_entry =
38+
EntryPointPressure(pressure_control_task::run);
3739
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
3840
static auto pump_task_entry = EntryPointPump(pump_control_task::run);
3941

@@ -50,13 +52,12 @@ static auto system_task =
5052
ot_utils::freertos_task::FreeRTOSTask<tasks::SYSTEM_STACK_SIZE, EntryPoint>(
5153
system_task_entry);
5254
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
53-
static auto pressure_task =
54-
ot_utils::freertos_task::FreeRTOSTask<tasks::PRESSURE_STACK_SIZE, EntryPointPressure>(
55-
pressure_task_entry);
55+
static auto pressure_task = ot_utils::freertos_task::FreeRTOSTask<
56+
tasks::PRESSURE_STACK_SIZE, EntryPointPressure>(pressure_task_entry);
5657
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
5758
static auto pump_task =
58-
ot_utils::freertos_task::FreeRTOSTask<tasks::PUMP_STACK_SIZE, EntryPointPump>(
59-
pump_task_entry);
59+
ot_utils::freertos_task::FreeRTOSTask<tasks::PUMP_STACK_SIZE,
60+
EntryPointPump>(pump_task_entry);
6061

6162
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
6263
static auto aggregator = tasks::FirmwareTasks::QueueAggregator();
@@ -81,8 +82,11 @@ auto main() -> int {
8182
system_task.start(tasks::SYSTEM_TASK_PRIORITY, "System", &aggregator);
8283
host_comms_task.start(tasks::COMMS_TASK_PRIORITY, "Comms", &aggregator);
8384
ui_task.start(tasks::UI_TASK_PRIORITY, "UI", &aggregator, &i2c2_comms);
84-
pressure_task.start(tasks::PRESSURE_TASK_PRIORITY, "Pressure", &aggregator, &i2c2_comms);
85-
pump_task.start(tasks::PUMP_TASK_PRIORITY, "Pump", &aggregator, &i2c2_comms);
85+
pressure_task.start(tasks::PRESSURE_TASK_PRIORITY, "Pressure", &aggregator,
86+
// TODO: switch to i2c1
87+
&i2c2_comms, &i2c2_comms, &i2c3_comms);
88+
pump_task.start(tasks::PUMP_TASK_PRIORITY, "Pump", &aggregator,
89+
&i2c2_comms);
8690

8791
vTaskStartScheduler();
8892
return 0;

stm32-modules/vacuum-module/firmware/pressure_task/freertos_pressure_task.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
#include "firmware/freertos_tasks.hpp"
66
#include "firmware/i2c_comms.hpp"
77
#include "firmware/pressure_policy.hpp"
8-
#include "vacuum-module/pressure_task.hpp"
98
#include "task.h"
9+
#include "vacuum-module/pressure_task.hpp"
1010

1111
namespace pressure_control_task {
1212
using namespace pressure_policy;
@@ -18,19 +18,21 @@ enum class Notifications : uint8_t {
1818
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
1919
static tasks::FirmwareTasks::PressureQueue
2020
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
21-
_queue(static_cast<uint8_t>(Notifications::INCOMING_MESSAGE), "Pressure Queue");
21+
_queue(static_cast<uint8_t>(Notifications::INCOMING_MESSAGE),
22+
"Pressure Queue");
2223

2324
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
2425
static auto _top_task = pressure_task::PressureTask(_queue, nullptr, nullptr);
2526

2627
auto run(tasks::FirmwareTasks::QueueAggregator* aggregator,
27-
i2c::hardware::I2C* i2c1_comms) -> void {
28+
i2c::hardware::I2C* i2c1_comms, i2c::hardware::I2C* i2c2_comms,
29+
i2c::hardware::I2C* i2c3_comms) -> void {
2830
auto* handle = xTaskGetCurrentTaskHandle();
2931
_queue.provide_handle(handle);
3032
aggregator->register_queue(_queue);
3133
_top_task.provide_aggregator(aggregator);
3234

33-
auto policy = PressurePolicy(i2c1_comms);
35+
auto policy = PressurePolicy(i2c1_comms, i2c2_comms, i2c3_comms);
3436
while (true) {
3537
_top_task.run_once(policy);
3638
}

0 commit comments

Comments
 (0)