Skip to content

Commit

Permalink
get tests, simulators compiling and run format
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanthecoder committed Jul 23, 2024
1 parent 4d9ec21 commit eef654c
Show file tree
Hide file tree
Showing 17 changed files with 103 additions and 81 deletions.
3 changes: 2 additions & 1 deletion gripper/firmware/main_proto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,8 @@ auto sensor_pins = sensors::hardware::SensorHardwareConfiguration{
.active_setting = GPIO_PIN_RESET}};

auto version_wrapper = sensors::hardware::SensorHardwareVersionSingleton();
auto sensor_hardware = sensors::hardware::SensorHardware(sensor_pins, version_wrapper);
auto sensor_hardware =
sensors::hardware::SensorHardware(sensor_pins, version_wrapper);

auto main() -> int {
HardwareInit();
Expand Down
3 changes: 2 additions & 1 deletion gripper/firmware/main_rev1.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ auto sensor_pins = sensors::hardware::SensorHardwareConfiguration{
.active_setting = GPIO_PIN_RESET}};

auto version_wrapper = sensors::hardware::SensorHardwareVersionSingleton();
auto sensor_hardware = sensors::hardware::SensorHardware(sensor_pins, version_wrapper);
auto sensor_hardware =
sensors::hardware::SensorHardware(sensor_pins, version_wrapper);

auto main() -> int {
HardwareInit();
Expand Down
3 changes: 2 additions & 1 deletion gripper/simulator/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ static auto sensor_map =
i2c::hardware::SimI2C::DeviceMap{{capsensor.get_address(), capsensor}};
static auto i2c2 = i2c::hardware::SimI2C{sensor_map};

static sim_mocks::MockSensorHardware fake_sensor_hw{};
static sensors::hardware::SensorHardwareVersionSingleton version_wrapper{};
static sim_mocks::MockSensorHardware fake_sensor_hw{version_wrapper};

static std::shared_ptr<state_manager::StateManagerConnection<
freertos_synchronization::FreeRTOSCriticalSection>>
Expand Down
20 changes: 10 additions & 10 deletions include/pipettes/core/sensor_tasks.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,14 @@ using I2CClient =
using I2CPollerClient =
i2c::poller::Poller<freertos_message_queue::FreeRTOSMessageQueue>;

void start_tasks(CanWriterTask& can_writer, I2CClient& i2c3_task_client,
I2CPollerClient& i2c3_poller_client,
I2CClient& i2c1_task_client,
I2CPollerClient& i2c1_poller_client,
sensors::hardware::SensorHardwareBase& sensor_hardware_primary,
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper,
can::ids::NodeId id,
eeprom::hardware_iface::EEPromHardwareIface& eeprom_hardware);
void start_tasks(
CanWriterTask& can_writer, I2CClient& i2c3_task_client,
I2CPollerClient& i2c3_poller_client, I2CClient& i2c1_task_client,
I2CPollerClient& i2c1_poller_client,
sensors::hardware::SensorHardwareBase& sensor_hardware_primary,
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper,
can::ids::NodeId id,
eeprom::hardware_iface::EEPromHardwareIface& eeprom_hardware);

void start_tasks(
CanWriterTask& can_writer, I2CClient& i2c3_task_client,
Expand Down Expand Up @@ -82,8 +82,8 @@ struct Tasks {
freertos_message_queue::FreeRTOSMessageQueue>*
tip_notification_task_front{nullptr};
sensors::tasks::ReadSenorBoardTask<
freertos_message_queue::FreeRTOSMessageQueue>*
read_sensor_board_task{nullptr};
freertos_message_queue::FreeRTOSMessageQueue>* read_sensor_board_task{
nullptr};
};

/**
Expand Down
4 changes: 3 additions & 1 deletion include/pipettes/firmware/utility_configurations.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ struct SensorHardwareContainer {

auto led_gpio(PipetteType pipette_type) -> gpio::PinConfig;

auto get_sensor_hardware_container(SensorHardwareGPIO pins, sensors::hardware::SensorHardwareVersionSingleton& version_wrapper)
auto get_sensor_hardware_container(
SensorHardwareGPIO pins,
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper)
-> SensorHardwareContainer;

template <PipetteType P>
Expand Down
19 changes: 12 additions & 7 deletions include/sensors/core/sensor_hardware_interface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,24 +47,27 @@ class SensorHardwareVersionSingleton {
public:
SensorHardwareVersionSingleton() = default;
virtual ~SensorHardwareVersionSingleton() = default;
SensorHardwareVersionSingleton(const SensorHardwareVersionSingleton&) = default;
auto operator=(const SensorHardwareVersionSingleton&) -> SensorHardwareVersionSingleton& = default;
SensorHardwareVersionSingleton(const SensorHardwareVersionSingleton&) =
default;
auto operator=(const SensorHardwareVersionSingleton&)
-> SensorHardwareVersionSingleton& = default;
SensorHardwareVersionSingleton(SensorHardwareVersionSingleton&&) = default;
auto operator=(SensorHardwareVersionSingleton&&) -> SensorHardwareVersionSingleton& = default;
auto operator=(SensorHardwareVersionSingleton&&)
-> SensorHardwareVersionSingleton& = default;

void set_board_rev(utils::SensorBoardRev rev) { b_revision = rev; }

utils::SensorBoardRev get_board_rev() { return b_revision; }

private:
utils::SensorBoardRev b_revision = utils::SensorBoardRev::VERSION_0;
};


/** abstract sensor hardware device for a sync line */
class SensorHardwareBase {
public:
SensorHardwareBase(SensorHardwareVersionSingleton& version_wrapper) :
version_wrapper{version_wrapper} {}
SensorHardwareBase(SensorHardwareVersionSingleton& version_wrapper)
: version_wrapper{version_wrapper} {}
virtual ~SensorHardwareBase() = default;
SensorHardwareBase(const SensorHardwareBase&) = default;
auto operator=(const SensorHardwareBase&) -> SensorHardwareBase& = default;
Expand Down Expand Up @@ -134,7 +137,9 @@ class SensorHardwareBase {
reset_sync();
}
}
utils::SensorBoardRev get_board_rev() { return version_wrapper.get_board_rev(); }
utils::SensorBoardRev get_board_rev() {
return version_wrapper.get_board_rev();
}

private:
uint8_t set_sync_required_mask = 0x00;
Expand Down
21 changes: 12 additions & 9 deletions include/sensors/core/tasks/read_sensor_board_rev_task.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,14 @@ using TaskMessage =
template <class I2CQueueWriter, class OwnQueue>
class ReadSenorBoardHandler {
public:
explicit ReadSenorBoardHandler(I2CQueueWriter &i2c_writer, OwnQueue &own_queue)
explicit ReadSenorBoardHandler(I2CQueueWriter &i2c_writer,
OwnQueue &own_queue)
: i2c_writer{i2c_writer}, task_queue{own_queue} {
// request gpio expander status register
i2c_writer->read(pie4ioe4::ADDRESS, static_cast<uint8_t>(pie4ioe4::registers::input_status), 1,
task_queue);
i2c_writer->read(
pie4ioe4::ADDRESS,
static_cast<uint8_t>(pie4ioe4::registers::input_status), 1,
task_queue);
}
ReadSenorBoardHandler(const ReadSenorBoardHandler &) = delete;
ReadSenorBoardHandler(const ReadSenorBoardHandler &&) = delete;
Expand All @@ -37,14 +40,15 @@ class ReadSenorBoardHandler {

void visit(i2c::messages::TransactionResponse &m) {
if (m.bytes_read == 1 &&
m.read_buffer[0] == static_cast<uint8_t>(pie4ioe4::version_responses::VERSION_1)) {
m.read_buffer[0] ==
static_cast<uint8_t>(pie4ioe4::version_responses::VERSION_1)) {
rev = utils::SensorBoardRev::VERSION_1;
}
}

utils::SensorBoardRev rev = utils::SensorBoardRev::VERSION_0;
I2CQueueWriter &i2c_writer;
OwnQueue& task_queue;
OwnQueue &task_queue;
};

/**
Expand All @@ -56,8 +60,7 @@ class ReadSenorBoardTask {
public:
using Messages = TaskMessage;
using QueueType = QueueImpl<TaskMessage>;
ReadSenorBoardTask(QueueType &queue)
: queue{queue} {}
ReadSenorBoardTask(QueueType &queue) : queue{queue} {}
ReadSenorBoardTask(const ReadSenorBoardTask &c) = delete;
ReadSenorBoardTask(const ReadSenorBoardTask &&c) = delete;
auto operator=(const ReadSenorBoardTask &c) = delete;
Expand All @@ -69,7 +72,7 @@ class ReadSenorBoardTask {
*/
void operator()(
i2c::writer::Writer<QueueImpl> *writer,
sensors::hardware::SensorHardwareVersionSingleton* version_wrapper) {
sensors::hardware::SensorHardwareVersionSingleton *version_wrapper) {
auto handler = ReadSenorBoardHandler(writer, get_queue());

TaskMessage message{};
Expand All @@ -86,5 +89,5 @@ class ReadSenorBoardTask {
QueueType &queue;
};

} // namespace task
} // namespace tasks
} // namespace sensors
5 changes: 3 additions & 2 deletions include/sensors/firmware/sensor_hardware.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ namespace hardware {

class SensorHardware : public SensorHardwareBase {
public:
SensorHardware(sensors::hardware::SensorHardwareConfiguration hardware, SensorHardwareVersionSingleton& version_wrapper)
: SensorHardwareBase(version_wrapper), hardware(hardware){}
SensorHardware(sensors::hardware::SensorHardwareConfiguration hardware,
SensorHardwareVersionSingleton& version_wrapper)
: SensorHardwareBase(version_wrapper), hardware(hardware) {}
auto set_sync() -> void override { gpio::set(hardware.sync_out); }
auto reset_sync() -> void override { gpio::reset(hardware.sync_out); }
auto check_tip_presence() -> bool override {
Expand Down
3 changes: 3 additions & 0 deletions include/sensors/simulation/mock_hardware.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ using StateManagerHandle = std::shared_ptr<StateManager>;
namespace sim_mocks {
class MockSensorHardware : public sensors::hardware::SensorHardwareBase {
public:
MockSensorHardware(
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper)
: sensors::hardware::SensorHardwareBase{version_wrapper} {}
auto set_sync() -> void override {
if (_state_manager) {
_state_manager->send_sync_msg(SyncPinState::HIGH);
Expand Down
3 changes: 3 additions & 0 deletions include/sensors/tests/mock_hardware.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
namespace test_mocks {
class MockSensorHardware : public sensors::hardware::SensorHardwareBase {
public:
MockSensorHardware(
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper)
: sensors::hardware::SensorHardwareBase{version_wrapper} {}
auto set_sync() -> void override {
sync_state = true;
sync_set_calls++;
Expand Down
16 changes: 7 additions & 9 deletions pipettes/firmware/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -128,12 +128,13 @@ void encoder_callback(int32_t direction) {
direction);
}

static auto version_wrapper = sensors::hardware::SensorHardwareVersionSingleton();
static auto version_wrapper =
sensors::hardware::SensorHardwareVersionSingleton();
static auto pins_for_sensor =
utility_configs::sensor_configurations<PIPETTE_TYPE>();
static auto sensor_hardware_container =
utility_configs::get_sensor_hardware_container(pins_for_sensor, version_wrapper);

utility_configs::get_sensor_hardware_container(pins_for_sensor,
version_wrapper);

static auto tip_sense_gpio_primary = pins_for_sensor.primary.tip_sense.value();

Expand Down Expand Up @@ -186,8 +187,7 @@ auto initialize_motor_tasks(
peripheral_tasks::get_i2c1_poller_client(),
sensor_hardware_container.primary,
sensor_hardware_container.secondary.value(),
version_wrapper, id,
eeprom_hardware_iface);
version_wrapper, id, eeprom_hardware_iface);

initialize_linear_timer(plunger_callback);
initialize_gear_timer(gear_callback_wrapper);
Expand All @@ -214,17 +214,15 @@ auto initialize_motor_tasks(
peripheral_tasks::get_i2c1_poller_client(),
sensor_hardware_container.primary,
sensor_hardware_container.secondary.value(),
version_wrapper,
id, eeprom_hardware_iface);
version_wrapper, id, eeprom_hardware_iface);
} else {
sensor_tasks::start_tasks(*central_tasks::get_tasks().can_writer,
peripheral_tasks::get_i2c3_client(),
peripheral_tasks::get_i2c3_poller_client(),
peripheral_tasks::get_i2c1_client(),
peripheral_tasks::get_i2c1_poller_client(),
sensor_hardware_container.primary,
version_wrapper, id,
eeprom_hardware_iface);
version_wrapper, id, eeprom_hardware_iface);
}

initialize_linear_timer(plunger_callback);
Expand Down
10 changes: 6 additions & 4 deletions pipettes/firmware/utility_configurations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,14 @@ auto utility_configs::get_sensor_hardware_container(
-> utility_configs::SensorHardwareContainer {
if (pins.secondary.has_value()) {
return utility_configs::SensorHardwareContainer{
.primary = sensors::hardware::SensorHardware(pins.primary, version_wrapper),
.secondary =
sensors::hardware::SensorHardware(pins.secondary.value(), version_wrapper)};
.primary = sensors::hardware::SensorHardware(pins.primary,
version_wrapper),
.secondary = sensors::hardware::SensorHardware(
pins.secondary.value(), version_wrapper)};
}
return utility_configs::SensorHardwareContainer{
.primary = sensors::hardware::SensorHardware(pins.primary, version_wrapper)};
.primary =
sensors::hardware::SensorHardware(pins.primary, version_wrapper)};
}

template <>
Expand Down
33 changes: 17 additions & 16 deletions pipettes/simulator/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ auto initialize_motor_tasks(
interfaces::gear_motor::GearMotionControl& gear_motion,
sim_mocks::MockSensorHardware& fake_sensor_hw_primary,
sim_mocks::MockSensorHardware& fake_sensor_hw_secondary,
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper,
eeprom::simulator::EEProm& sim_eeprom,
motor_hardware_task::MotorHardwareTask& lmh_tsk,
interfaces::gear_motor::GearMotorHardwareTasks& gmh_tsks) {
Expand All @@ -130,8 +131,7 @@ auto initialize_motor_tasks(
peripheral_tasks::get_i2c1_client(),
peripheral_tasks::get_i2c1_poller_client(),
fake_sensor_hw_primary, fake_sensor_hw_secondary,
id, sim_eeprom,
sensors::mmr920::SensorVersion::mmr920c10);
version_wrapper, id, sim_eeprom);

linear_motor_tasks::start_tasks(
*central_tasks::get_tasks().can_writer, linear_motion_control,
Expand All @@ -150,27 +150,27 @@ auto initialize_motor_tasks(
interfaces::gear_motor::UnavailableGearMotionControl&,
sim_mocks::MockSensorHardware& fake_sensor_hw_primary,
sim_mocks::MockSensorHardware& fake_sensor_hw_secondary,
sensors::hardware::SensorHardwareVersionSingleton& version_wrapper,
eeprom::simulator::EEProm& sim_eeprom,
motor_hardware_task::MotorHardwareTask& lmh_tsk,
interfaces::gear_motor::UnavailableGearHardwareTasks&) {
if (get_pipette_type() == EIGHT_CHANNEL) {
sensor_tasks::start_tasks(*central_tasks::get_tasks().can_writer,
peripheral_tasks::get_i2c3_client(),
peripheral_tasks::get_i2c3_poller_client(),
peripheral_tasks::get_i2c1_client(),
peripheral_tasks::get_i2c1_poller_client(),
fake_sensor_hw_primary,
fake_sensor_hw_secondary, id, sim_eeprom,
sensors::mmr920::SensorVersion::mmr920c10);
sensor_tasks::start_tasks(
*central_tasks::get_tasks().can_writer,
peripheral_tasks::get_i2c3_client(),
peripheral_tasks::get_i2c3_poller_client(),
peripheral_tasks::get_i2c1_client(),
peripheral_tasks::get_i2c1_poller_client(), fake_sensor_hw_primary,
fake_sensor_hw_secondary, version_wrapper, id, sim_eeprom);

} else /* single channel */ {
sensor_tasks::start_tasks(*central_tasks::get_tasks().can_writer,
peripheral_tasks::get_i2c3_client(),
peripheral_tasks::get_i2c3_poller_client(),
peripheral_tasks::get_i2c1_client(),
peripheral_tasks::get_i2c1_poller_client(),
fake_sensor_hw_primary, id, sim_eeprom,
sensors::mmr920::SensorVersion::mmr920c10);
fake_sensor_hw_primary, version_wrapper, id,
sim_eeprom);
}
linear_motor_tasks::start_tasks(
*central_tasks::get_tasks().can_writer, linear_motion_control,
Expand Down Expand Up @@ -303,11 +303,12 @@ int main(int argc, char** argv) {
auto capsensor_rear = std::make_shared<fdc1004_simulator::FDC1004>();
auto sim_eeprom = std::make_shared<eeprom::simulator::EEProm>(
eeprom_model, options, TEMPORARY_PIPETTE_SERIAL);
auto version_wrapper = sensors::hardware::SensorHardwareVersionSingleton();
auto fake_sensor_hw_primary =
std::make_shared<sim_mocks::MockSensorHardware>();
std::make_shared<sim_mocks::MockSensorHardware>(version_wrapper);
fake_sensor_hw_primary->provide_state_manager(state_manager_connection);
auto fake_sensor_hw_secondary =
std::make_shared<sim_mocks::MockSensorHardware>();
std::make_shared<sim_mocks::MockSensorHardware>(version_wrapper);
fake_sensor_hw_secondary->provide_state_manager(state_manager_connection);
auto pressuresensor_i2c1 = std::make_shared<mmr920_simulator::MMR920>();
auto pressuresensor_i2c3 = std::make_shared<mmr920_simulator::MMR920>();
Expand Down Expand Up @@ -336,8 +337,8 @@ int main(int argc, char** argv) {
peripheral_tasks::start_tasks(*i2c3_comms, *i2c1_comms, spi_comms);
initialize_motor_tasks(node, motor_config.driver_configs,
gear_motion_control, *fake_sensor_hw_primary,
*fake_sensor_hw_secondary, *sim_eeprom, lmh_tsk,
gmh_tsks);
*fake_sensor_hw_secondary, version_wrapper,
*sim_eeprom, lmh_tsk, gmh_tsks);

vTaskStartScheduler();
}
Loading

0 comments on commit eef654c

Please sign in to comment.