Skip to content

Commit

Permalink
🩹 (serialnumber): Set date_of_test in Serial Number
Browse files Browse the repository at this point in the history
  • Loading branch information
YannLocatelli committed Sep 16, 2022
1 parent 24dc8c3 commit e1562ff
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 22 deletions.
2 changes: 1 addition & 1 deletion app/os/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,7 @@ namespace robot {
auto sleep_timeout = CoreTimeout {};

auto mcu = CoreMCU {};
auto serialnumberkit = SerialNumberKit {mcu};
auto serialnumberkit = SerialNumberKit {mcu, SerialNumberKit::DEFAULT_CONFIG};

} // namespace internal

Expand Down
2 changes: 1 addition & 1 deletion libs/RobotKit/tests/RobotController_test.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class RobotControllerTest : public testing::Test
mock::Battery battery {};

mock::MCU mock_mcu {};
SerialNumberKit serialnumberkit {mock_mcu};
SerialNumberKit serialnumberkit {mock_mcu, SerialNumberKit::DEFAULT_CONFIG};

mock::FirmwareUpdate firmware_update {};

Expand Down
4 changes: 3 additions & 1 deletion libs/SerialNumberKit/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ target_sources(SerialNumberKit
source/SerialNumberFormater.cpp
)

target_link_libraries(SerialNumberKit)
target_link_libraries(SerialNumberKit
FileManagerKit
)

if(${CMAKE_PROJECT_NAME} STREQUAL "LekaOSUnitTests")
leka_unit_tests_sources(
Expand Down
7 changes: 6 additions & 1 deletion libs/SerialNumberKit/include/SerialNumberFormater.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,19 @@ namespace leka {
class SerialNumberFormater
{
public:
explicit SerialNumberFormater(interface::MCU &mcu) : _mcu(mcu) {}
struct Config {
const char *date_of_test_path;
};

explicit SerialNumberFormater(interface::MCU &mcu, Config config) : _mcu(mcu), _config(config) {}

[[nodiscard]] auto setPrefix(std::span<uint8_t> serial_number) const -> std::size_t;
[[nodiscard]] auto setDateOfTest(std::span<uint8_t> serial_number, uint32_t offset) const -> std::size_t;
void setMCUID(std::span<uint8_t> serial_number, uint32_t offset, uint8_t number_of_digits);

private:
interface::MCU &_mcu;
const Config _config;
};

} // namespace leka
8 changes: 7 additions & 1 deletion libs/SerialNumberKit/include/SerialNumberKit.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,13 @@ namespace leka {
class SerialNumberKit
{
public:
explicit SerialNumberKit(interface::MCU &mcu) : _formater(mcu)
struct Config {
const char *date_of_test_path;
};
static constexpr auto DEFAULT_CONFIG = Config {.date_of_test_path = "fs/sys/date_of_test"};

explicit SerialNumberKit(interface::MCU &mcu, Config config)
: _formater(mcu, SerialNumberFormater::Config {.date_of_test_path = config.date_of_test_path})
{
// do nothing
}
Expand Down
6 changes: 6 additions & 0 deletions libs/SerialNumberKit/source/SerialNumberFormater.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <cstdio>
#include <cstring>

#include "FileManagerKit.h"
#include "SerialNumberFormater.h"

using namespace leka;
Expand All @@ -22,6 +23,11 @@ auto SerialNumberFormater::setDateOfTest(std::span<uint8_t> partial_serial_numbe
auto date_of_test = std::array<uint8_t, 4> {};
date_of_test.fill('X');

if (auto file = FileManagerKit::File {_config.date_of_test_path}; file.is_open()) {
file.read(date_of_test);
file.close();
}

std::copy(date_of_test.begin(), date_of_test.end(), partial_serial_number.begin() + offset);

return std::size(date_of_test);
Expand Down
50 changes: 37 additions & 13 deletions libs/SerialNumberKit/tests/SerialNumberFormater_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
// SPDX-License-Identifier: Apache-2.0

#include <cstring>
#include <filesystem>
#include <fstream>

#include "SerialNumberFormater.h"
Expand All @@ -18,11 +19,20 @@ class SerialNumberFormaterTest : public ::testing::Test
protected:
SerialNumberFormaterTest() = default;

// void SetUp() override {}
// void TearDown() override {}
void SetUp() override
{
std::ofstream dot_stream {config.date_of_test_path, std::ios::binary};
dot_stream << current_date_of_test_str;
dot_stream.close();
}

void TearDown() override { std::filesystem::remove(config.date_of_test_path); }

std::string current_date_of_test_str = "220619\n";

mock::MCU mock_mcu;
SerialNumberFormater serial_number_formater {mock_mcu};
SerialNumberFormater::Config config {.date_of_test_path = "/tmp/date_of_test"};
SerialNumberFormater serial_number_formater {mock_mcu, config};

MCUID mcu_id_returned {0x2A2B2C2D, 0x3A3B3C3D, 0x4A4B4C4D};
};
Expand All @@ -44,6 +54,20 @@ TEST_F(SerialNumberFormaterTest, setPrefix)

TEST_F(SerialNumberFormaterTest, setDateOfTest)
{
auto expected_serial_number = std::array<uint8_t, 32> {"LK-2206"};
auto actual_serial_number = std::array<uint8_t, 32> {"LK-"};

auto prefix_size = std::size("LK-") - sizeof('\0');

auto actual_prefix_number_size = serial_number_formater.setDateOfTest(actual_serial_number, prefix_size);
EXPECT_EQ(actual_serial_number, expected_serial_number);
EXPECT_EQ(actual_prefix_number_size, std::size("2206") - sizeof('\0'));
}

TEST_F(SerialNumberFormaterTest, setDateOfTestFileNotFound)
{
std::filesystem::remove(config.date_of_test_path);

auto expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX"};
auto actual_serial_number = std::array<uint8_t, 32> {"LK-"};

Expand All @@ -59,36 +83,36 @@ TEST_F(SerialNumberFormaterTest, setMCUID)
auto expected_serial_number = std::array<uint8_t, 32> {};
auto actual_serial_number = std::array<uint8_t, 32> {};

auto prefix_plus_date_of_test_size = std::size("LK-XXXX") - sizeof('\0');
auto prefix_plus_date_of_test_size = std::size("LK-2206") - sizeof('\0');
auto number_of_digits = 0;

EXPECT_CALL(mock_mcu, getID).WillRepeatedly(Return(mcu_id_returned));

actual_serial_number = std::array<uint8_t, 32> {"LK-XXXX"};
actual_serial_number = std::array<uint8_t, 32> {"LK-2206"};
number_of_digits = 10;
expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX2A2B2C2D3A"};
expected_serial_number = std::array<uint8_t, 32> {"LK-22062A2B2C2D3A"};
serial_number_formater.setMCUID(actual_serial_number, prefix_plus_date_of_test_size, number_of_digits);
EXPECT_EQ(actual_serial_number, expected_serial_number);

actual_serial_number = std::array<uint8_t, 32> {"LK-XXXX"};
actual_serial_number = std::array<uint8_t, 32> {"LK-2206"};
number_of_digits = 19;
expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX2A2B2C2D3A3B3C3D4A4"};
expected_serial_number = std::array<uint8_t, 32> {"LK-22062A2B2C2D3A3B3C3D4A4"};
serial_number_formater.setMCUID(actual_serial_number, prefix_plus_date_of_test_size, number_of_digits);
EXPECT_EQ(actual_serial_number, expected_serial_number);

actual_serial_number = std::array<uint8_t, 32> {"LK-XXXX"};
actual_serial_number = std::array<uint8_t, 32> {"LK-2206"};
number_of_digits = 24;
expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX2A2B2C2D3A3B3C3D4A4B4C4D"};
expected_serial_number = std::array<uint8_t, 32> {"LK-22062A2B2C2D3A3B3C3D4A4B4C4D"};
serial_number_formater.setMCUID(actual_serial_number, prefix_plus_date_of_test_size, number_of_digits);
EXPECT_EQ(actual_serial_number, expected_serial_number);
}

TEST_F(SerialNumberFormaterTest, setMCUIDExceedingNumberOfDigits)
{
auto expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX2A2B2C2D3A3B3C3D4A4B4C4D"};
auto actual_serial_number = std::array<uint8_t, 32> {"LK-XXXX"};
auto expected_serial_number = std::array<uint8_t, 32> {"LK-22062A2B2C2D3A3B3C3D4A4B4C4D"};
auto actual_serial_number = std::array<uint8_t, 32> {"LK-2206"};

auto prefix_plus_date_of_test_size = std::size("LK-XXXX") - sizeof('\0');
auto prefix_plus_date_of_test_size = std::size("LK-2206") - sizeof('\0');

EXPECT_CALL(mock_mcu, getID).WillRepeatedly(Return(mcu_id_returned));

Expand Down
6 changes: 3 additions & 3 deletions libs/SerialNumberKit/tests/SerialNumberKit_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class SerialNumberKitTest : public ::testing::Test
// void TearDown() override {}

mock::MCU mock_mcu;
SerialNumberKit serial_number_kit {mock_mcu};
SerialNumberKit serial_number_kit {mock_mcu, SerialNumberKit::DEFAULT_CONFIG};

MCUID mcu_id_returned {0x2A2B2C2D, 0x3A3B3C3D, 0x4A4B4C4D};
};
Expand All @@ -35,7 +35,7 @@ TEST_F(SerialNumberKitTest, initialization)

TEST_F(SerialNumberKitTest, getSerialNumber)
{
auto expected_serial_number = std::array<uint8_t, 32> {"LK-XXXX2A2B2C2D3A3B3C3D4A4B4C4D"};
auto expected_serial_number = std::array<uint8_t, 32> {"LK-22062A2B2C2D3A3B3C3D4A4B4C4D"};

EXPECT_CALL(mock_mcu, getID).WillOnce(Return(mcu_id_returned));

Expand All @@ -46,7 +46,7 @@ TEST_F(SerialNumberKitTest, getSerialNumber)

TEST_F(SerialNumberKitTest, getShortSerialNumber)
{
auto expected_serial_number = std::array<uint8_t, 16> {"LK-XXXX2A2B2C2D"};
auto expected_serial_number = std::array<uint8_t, 16> {"LK-22062A2B2C2D"};

EXPECT_CALL(mock_mcu, getID).WillOnce(Return(mcu_id_returned));

Expand Down
19 changes: 18 additions & 1 deletion spikes/lk_serial_number/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,30 @@
#include "rtos/ThisThread.h"

#include "CoreMCU.h"
#include "FATFileSystem.h"
#include "HelloWorld.h"
#include "LogKit.h"
#include "SDBlockDevice.h"
#include "SerialNumberKit.h"

using namespace leka;
using namespace std::chrono_literals;

SDBlockDevice sd_blockdevice(SD_SPI_MOSI, SD_SPI_MISO, SD_SPI_SCK);
FATFileSystem fatfs("fs");

auto mcu = CoreMCU {};
auto serialnumberkit = SerialNumberKit {mcu};
auto serialnumberkit = SerialNumberKit {mcu, SerialNumberKit::DEFAULT_CONFIG};

void initializeSD()
{
constexpr auto default_sd_blockdevice_frequency = uint64_t {25'000'000};

sd_blockdevice.init();
sd_blockdevice.frequency(default_sd_blockdevice_frequency);

fatfs.mount(&sd_blockdevice);
}

auto main() -> int
{
Expand All @@ -23,6 +38,8 @@ auto main() -> int

auto start = rtos::Kernel::Clock::now();

initializeSD();

auto hello = HelloWorld();

rtos::ThisThread::sleep_for(1s);
Expand Down

0 comments on commit e1562ff

Please sign in to comment.