Skip to content

Commit

Permalink
🎨 (drivers): Update CoreTouchSensor
Browse files Browse the repository at this point in the history
  • Loading branch information
MMyster committed Jul 27, 2022
1 parent e98e385 commit 02c6812
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 19 deletions.
4 changes: 3 additions & 1 deletion drivers/CoreTouchSensor/include/CoreTouchSensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ namespace leka {
class CoreTouchSensor : public interface::TouchSensor
{
public:
static constexpr auto default_max_sensitivity_value = uint16_t {0x0FFF};
static constexpr auto default_min_sensitivity_value = uint16_t {0x0000};

explicit CoreTouchSensor(mbed::interface::DigitalIn &detect_pin, mbed::interface::DigitalOut &power_mode_pin,
interface::QDAC &dac, Channel channel)
: _detect_pin(detect_pin), _power_mode_pin(power_mode_pin), _sensitivity_pin({dac, channel}) {};
void init() final;
auto read() -> bool final;
void reset() final;
void setSensitivity(uint16_t value, bool saved = false) final;
auto getState() -> bool final;

private:
enum class PowerMode : uint8_t
Expand Down
16 changes: 8 additions & 8 deletions drivers/CoreTouchSensor/source/CoreTouchSensor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

#include "rtos/ThisThread.h"

#include "MathUtils.h"

using namespace leka;
using namespace std::chrono_literals;

Expand All @@ -25,23 +27,21 @@ auto CoreTouchSensor::read() -> bool
void CoreTouchSensor::reset()
{
setPowerMode(PowerMode::low);
rtos::ThisThread::sleep_for(10ms);
rtos::ThisThread::sleep_for(1ms);
setPowerMode(PowerMode::normal);
rtos::ThisThread::sleep_for(10ms);
rtos::ThisThread::sleep_for(1ms);
}

void CoreTouchSensor::setSensitivity(uint16_t value, bool saved)
{
_sensitivity_pin.dac.write(_sensitivity_pin.channel, value, saved);
auto inverted_value =
utils::math::map<uint16_t, uint16_t>(value, default_min_sensitivity_value, default_max_sensitivity_value,
default_max_sensitivity_value, default_min_sensitivity_value);
_sensitivity_pin.dac.write(_sensitivity_pin.channel, inverted_value, saved);
}

void CoreTouchSensor::setPowerMode(PowerMode power_mode)
{
auto pm = static_cast<uint8_t>(power_mode);
_power_mode_pin.write(pm);
}

auto CoreTouchSensor::getState() -> bool
{
return _state;
}
15 changes: 6 additions & 9 deletions drivers/CoreTouchSensor/tests/CoreTouchSensor_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "IOKit/DigitalIn.h"
#include "IOKit/DigitalOut.h"
#include "MathUtils.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "mocks/leka/CoreI2C.h"
Expand Down Expand Up @@ -74,14 +75,10 @@ TEST_F(CoreTouchSensorTest, reset)

TEST_F(CoreTouchSensorTest, setSensitivity)
{
EXPECT_CALL(dac, write(channel, 0x0ABC, false)).Times(1);
auto value = 0x0ABC;
auto value = 0x0ABC;
auto expected_value = utils::math::map<uint16_t, uint16_t>(
value, CoreTouchSensor::default_min_sensitivity_value, CoreTouchSensor::default_max_sensitivity_value,
CoreTouchSensor::default_max_sensitivity_value, CoreTouchSensor::default_min_sensitivity_value);
EXPECT_CALL(dac, write(channel, expected_value, false)).Times(1);
sensor.setSensitivity(value);
}

TEST_F(CoreTouchSensorTest, getState)
{
auto expected_state = false;
auto state = sensor.getState();
EXPECT_EQ(expected_state, state);
}
1 change: 0 additions & 1 deletion include/interface/drivers/TouchSensor.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ class TouchSensor
virtual auto read() -> bool = 0;
virtual void reset() = 0;
virtual void setSensitivity(uint16_t value, bool saved = false) = 0;
virtual auto getState() -> bool = 0;
};

} // namespace leka::interface

0 comments on commit 02c6812

Please sign in to comment.