Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions Core/Inc/das/irts-api.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include "irts.h"

#include "eagletrt.h"
#include <stdlib.h>
#include <stdint.h>

/*!
* \brief Initializes the module
*
* \retval IRTS_RC_OK if successful
* \retval IRTS_RC_ERROR if fail
*/
enum IrtsReturnCode irts_api_init(void);

/*!
* \brief Get the current state of a irts line
*
* \param irts The irts to query
*
* \retval int16_t temperature of \p irts
Comment thread
samuelbravi11 marked this conversation as resolved.
Outdated
*/
float irts_api_get_temperature(enum IrtsName irts);

/*!
* \brief Set the current state of a irts line
*
* \param irts The irts to be set
* \param temperature The temperature to set \p irts to
*
* \retval IRTS_RC_OK if successful
* \retval IRTS_RC_ERROR if \p irts or \p temperature are out of bounds
*/
enum IrtsReturnCode irts_api_set_temperature(enum IrtsName irts, float temperature);
32 changes: 32 additions & 0 deletions Core/Inc/das/irts.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#ifndef IRTS_H
#define IRTS_H

#include "eagletrt.h"
#include <stdint.h>

/*!
* \brief Names for checked irts
*/
enum IrtsName : uint8_t {
IRTS_NAME_LEFT, /*!< Irts LEFT */
IRTS_NAME_RIGHT, /*!< Irts RIGHT */
IRTS_NAME_COUNT /*!< Total number of irts */
};

/*!
* \brief Possible return codes for irts initialization function
*/
enum IrtsReturnCode : uint8_t {
IRTS_RC_OK, /*!< Initialization successful */
IRTS_RC_ERROR /*!< Error during initialization */
};

/*!
* \brief Struct that handles all temperature from irts
*/
struct IrtsHandler {
float left_temperature;
float right_temperature;
Comment thread
samuelbravi11 marked this conversation as resolved.
Outdated
};

#endif // IRTS_H
36 changes: 36 additions & 0 deletions Core/Src/das/irts-api.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#include "irts-api.h"
#include <string.h>

EAGLETRT_STATIC struct IrtsHandler irts_api_handler;

enum IrtsReturnCode irts_api_init(void) {
// Initialize irts temperature to 0 to indicate no data
memset(&irts_api_handler, 0, sizeof(irts_api_handler));

return IRTS_RC_OK;
}

float irts_api_get_temperature(enum IrtsName irts) {
switch (irts) {
case IRTS_NAME_LEFT:
return (float)irts_api_handler.left_temperature;
case IRTS_NAME_RIGHT:
return (float)irts_api_handler.right_temperature;
default:
return -1;
}
Comment thread
samuelbravi11 marked this conversation as resolved.
Outdated
}

enum IrtsReturnCode irts_api_set_temperature(enum IrtsName irts, float temperature) {
if (irts >= IRTS_NAME_COUNT) {
return IRTS_RC_ERROR;
}

if (irts == IRTS_NAME_LEFT) {
irts_api_handler.left_temperature = temperature;
} else if (irts == IRTS_NAME_RIGHT) {
irts_api_handler.right_temperature = temperature;
}

return IRTS_RC_OK;
}
2 changes: 2 additions & 0 deletions platformio.ini
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ build_src_filter =
-<*>
+<Core/Src/das/feedback-api.c>
+<Core/Src/das/potentiometer-api.c>
+<Core/Src/das/irts-api.c>

[env:tests_rear]
platform = native
Expand All @@ -91,6 +92,7 @@ build_src_filter =
-<*>
+<Core/Src/das/feedback-api.c>
+<Core/Src/das/potentiometer-api.c>
+<Core/Src/das/irts-api.c>

[env:bootloader]
platform = ststm32
Expand Down
123 changes: 123 additions & 0 deletions test/test_irts_api/test_irts_api.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
#include "unity.h"

#include "irts.h"
#include "irts-api.h"

#include <stdint.h>

extern struct IrtsHandler irts_api_handler;

void setUp(void) {
(void)irts_api_init();
}

void tearDown(void) {
}

void test_irts_api_init_should_return_ok_and_set_all_irts_to_zero(void) {
float expected_temperature_left;
float expected_temperature_right;

irts_api_handler.left_temperature = 1;
irts_api_handler.right_temperature = 1;

expected_temperature_left = 0U;
expected_temperature_right = 0U;

enum IrtsReturnCode rc = irts_api_init();

TEST_ASSERT_EQUAL_UINT8_MESSAGE(
IRTS_RC_OK,
rc,
"irts_api_init() should return IRTS_RC_OK");

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
expected_temperature_left,
irts_api_handler.left_temperature,
"irts_api_init() should return IRTS_RC_OK");

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
expected_temperature_right,
irts_api_handler.right_temperature,
"irts_api_init() should return IRTS_RC_OK");
}

void test_irts_api_get_temperature_should_return_saved_temperature(void) {
enum IrtsName irts = IRTS_NAME_LEFT;

irts_api_handler.left_temperature = 1;

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
1,
irts_api_get_temperature(irts),
"irts_api_get_temperature() should return the saved temperature for each valid irts");
}

void test_irts_api_get_temperature_should_return_minus_one_for_invalid_irts_count(void) {
float temperature = irts_api_get_temperature(IRTS_NAME_COUNT);

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
-1,
temperature,
"irts_api_get_temperature(IRTS_NAME_COUNT) should return -1");
}

void test_irts_api_set_temperature_should_update_temperature_for_valid_input(void) {
enum IrtsName irts = IRTS_NAME_LEFT;

enum IrtsReturnCode rc = irts_api_set_temperature(
irts,
1000U);

TEST_ASSERT_EQUAL_UINT8_MESSAGE(
IRTS_RC_OK,
rc,
"feedback_api_set_state() should return FEEDBACK_RC_OK for valid input");

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
1000U,
irts_api_handler.left_temperature,
"irts_api_set_temperature() should update the requested irts temperature");
}

void test_irts_api_set_temperature_should_return_error_and_reject_invalid_irts_count(void) {
float expected_temperatures[IRTS_NAME_COUNT];
float temperature = 1;

for (enum IrtsName irts = 0; irts < IRTS_NAME_COUNT; ++irts) {
expected_temperatures[irts] = temperature;
}
irts_api_handler.left_temperature = temperature;
irts_api_handler.right_temperature = temperature;

enum IrtsReturnCode rc = irts_api_set_temperature(
IRTS_NAME_COUNT,
1000U);

TEST_ASSERT_EQUAL_UINT8_MESSAGE(
IRTS_RC_ERROR,
rc,
"irts_api_set_temperature(IRTS_NAME_COUNT, ...) should return IRTS_RC_ERROR");

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
temperature,
irts_api_handler.left_temperature,
"Invalid irts should not modify any valid irts temperature");

TEST_ASSERT_EQUAL_FLOAT_MESSAGE(
temperature,
irts_api_handler.right_temperature,
"Invalid irts should not modify any valid irts temperature");
}

int main(void) {
UNITY_BEGIN();

RUN_TEST(test_irts_api_init_should_return_ok_and_set_all_irts_to_zero);
RUN_TEST(test_irts_api_get_temperature_should_return_saved_temperature);
RUN_TEST(test_irts_api_get_temperature_should_return_minus_one_for_invalid_irts_count);
RUN_TEST(test_irts_api_set_temperature_should_update_temperature_for_valid_input);
RUN_TEST(test_irts_api_set_temperature_should_return_error_and_reject_invalid_irts_count);

return UNITY_END();
}
2 changes: 1 addition & 1 deletion test/test_potentiometer_api/test_potentiometer_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ void test_potentiometer_api_init_should_return_ok_and_set_all_potentiometers_to_

void test_potentiometer_api_get_value_should_return_saved_value(void) {
enum PotentiometerName potentiometer = POTENTIOMETER_NAME_LEFT;

potentiometer_api_handler.potentiometer_value[potentiometer] = 1;

TEST_ASSERT_EQUAL_INT16_MESSAGE(
Expand Down
Loading