/** * @file test_gpio.c * @brief Hardware tests for GPIO */ #include "unity.h" #include "kernel.h" #include "gpio_driver.h" #include "board.h" /* Test pins */ #define TEST_OUTPUT_PIN 0 #define TEST_INPUT_PIN 1 /* Setup */ void setUp(void) { kernel_init(); board_init(); } /* Teardown */ void tearDown(void) { kernel_stop(); } /* ============================================================================ * Test Cases * ============================================================================ */ /** * @brief Test GPIO initialization */ void test_gpio_init(void) { GpioPinConfig_t config = { .port = 0, .pin = TEST_OUTPUT_PIN, .mode = GPIO_MODE_OUTPUT, .output_type = GPIO_OUTPUT_PUSH_PULL, .pull = GPIO_PULL_NONE, .speed = GPIO_SPEED_HIGH }; TEST_ASSERT_EQUAL(KERNEL_OK, gpio_init(&config)); } /** * @brief Test GPIO write and read */ void test_gpio_write_read(void) { /* Configure output pin */ GpioPinConfig_t output_config = { .port = 0, .pin = TEST_OUTPUT_PIN, .mode = GPIO_MODE_OUTPUT, .output_type = GPIO_OUTPUT_PUSH_PULL, .pull = GPIO_PULL_NONE, .speed = GPIO_SPEED_HIGH }; gpio_init(&output_config); /* Write high */ TEST_ASSERT_EQUAL(KERNEL_OK, gpio_write(0, TEST_OUTPUT_PIN, true)); TEST_ASSERT_TRUE(gpio_read(0, TEST_OUTPUT_PIN)); /* Write low */ TEST_ASSERT_EQUAL(KERNEL_OK, gpio_write(0, TEST_OUTPUT_PIN, false)); TEST_ASSERT_FALSE(gpio_read(0, TEST_OUTPUT_PIN)); } /** * @brief Test GPIO toggle */ void test_gpio_toggle(void) { GpioPinConfig_t config = { .port = 0, .pin = TEST_OUTPUT_PIN, .mode = GPIO_MODE_OUTPUT, .output_type = GPIO_OUTPUT_PUSH_PULL, .pull = GPIO_PULL_NONE, .speed = GPIO_SPEED_HIGH }; gpio_init(&config); bool initial_state = gpio_read(0, TEST_OUTPUT_PIN); TEST_ASSERT_EQUAL(KERNEL_OK, gpio_toggle(0, TEST_OUTPUT_PIN)); TEST_ASSERT_NOT_EQUAL(initial_state, gpio_read(0, TEST_OUTPUT_PIN)); } /* ============================================================================ * Test Runner * ============================================================================ */ int main(void) { UNITY_BEGIN(); RUN_TEST(test_gpio_init); RUN_TEST(test_gpio_write_read); RUN_TEST(test_gpio_toggle); return UNITY_END(); }