From 3edcce357840f1c413d765ddd4782363c139f80f Mon Sep 17 00:00:00 2001 From: Carlos Augusto Porto Freitas Date: Fri, 8 Mar 2024 14:54:30 -0300 Subject: [PATCH 1/5] firmware: drivers: Adding sl_antenna driver. --- firmware/drivers/sl_antenna/sl_antenna.c | 97 ++++++++++++++++ firmware/drivers/sl_antenna/sl_antenna.h | 106 ++++++++++++++++++ .../drivers/sl_antenna/sl_antenna_delay.c | 49 ++++++++ 3 files changed, 252 insertions(+) create mode 100644 firmware/drivers/sl_antenna/sl_antenna.c create mode 100644 firmware/drivers/sl_antenna/sl_antenna.h create mode 100644 firmware/drivers/sl_antenna/sl_antenna_delay.c diff --git a/firmware/drivers/sl_antenna/sl_antenna.c b/firmware/drivers/sl_antenna/sl_antenna.c new file mode 100644 index 00000000..856b1486 --- /dev/null +++ b/firmware/drivers/sl_antenna/sl_antenna.c @@ -0,0 +1,97 @@ +/* + * sl_antenna.c + * + * Copyright The OBDH 2.0 Contributors. + * + * This file is part of OBDH 2.0. + * + * OBDH 2.0 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OBDH 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OBDH 2.0. If not, see . + * + */ + +/** + * \brief SpaceLab Antenna Driver implementation. + * + * \author Carlos Augusto Porto Freitas + * + * \version 0.10.9 + * + * \date 2024/03/06 + * + * \addtogroup sl_antenna + * \{ + */ + +#include + +#include "sl_antenna.h" + +/* Antenna gpio pin */ +#define SL_ANTENNA_DEPLOY_PIN GPIO_PIN_61 + +static sl_antenna_config_t ant_config = {0}; + +int sl_antenna_init(void) +{ + int err = -1; + + ant_config.mode = GPIO_MODE_OUTPUT; + + if (gpio_init(SL_ANTENNA_DEPLOY_PIN, ant_config) == 0) + { + if (gpio_set_state(SL_ANTENNA_DEPLOY_PIN, GPIO_STATE_LOW) == 0) + { + err = 0; + } + } + + return err; +} + +int sl_antenna_start_sequential_deploy(void) +{ + int err = -1; + int tmp = 0; + + if (gpio_set_state(SL_ANTENNA_DEPLOY_PIN, SL_ANTENNA_FIRST_STAGE_STATE) == 0) + { + sl_antenna_delay_s(SL_ANTENNA_STAGE_DURATION_SEC); + + sl_antenna_delay_s(SL_ANTENNA_HALF_TRANSITION_DURATION_SEC); + + if (gpio_set_state(SL_ANTENNA_DEPLOY_PIN, SL_ANTENNA_SECOND_STAGE_STATE) == 0) + { + sl_antenna_delay_s(SL_ANTENNA_HALF_TRANSITION_DURATION_SEC); + + sl_antenna_delay_s(SL_ANTENNA_STAGE_DURATION_SEC); + + sl_antenna_delay_s(SL_ANTENNA_HALF_TRANSITION_DURATION_SEC); + + if (gpio_set_state(SL_ANTENNA_DEPLOY_PIN, SL_ANTENNA_THIRD_STAGE_STATE) == 0) + { + sl_antenna_delay_s(SL_ANTENNA_HALF_TRANSITION_DURATION_SEC); + + sl_antenna_delay_s(SL_ANTENNA_STAGE_DURATION_SEC); + + err = 0; + } + } + } + + tmp = gpio_set_state(SL_ANTENNA_DEPLOY_PIN, GPIO_STATE_LOW); + + return err; +} + +/** \} End of sl_antenna group */ diff --git a/firmware/drivers/sl_antenna/sl_antenna.h b/firmware/drivers/sl_antenna/sl_antenna.h new file mode 100644 index 00000000..2d09a044 --- /dev/null +++ b/firmware/drivers/sl_antenna/sl_antenna.h @@ -0,0 +1,106 @@ +/* + * sl_antenna.h + * + * Copyright The OBDH 2.0 Contributors. + * + * This file is part of OBDH 2.0. + * + * OBDH 2.0 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OBDH 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OBDH 2.0. If not, see . + * + */ + +/** + * \brief SpaceLab Antenna Driver definition. + * + * \author Carlos Augusto Porto Freitas + * + * \version 0.10.9 + * + * \date 2024/03/06 + * + * \defgroup sl_antenna SpaceLab Antenna + * \ingroup drivers + * \{ + */ + +#ifndef SL_ANTENNA_H_ +#define SL_ANTENNA_H_ + +#include + +#include + +/** + * \brief Deployment stage duration time in seconds. + * + * The deployment has three stages in which the gpio state must match + * the expected state required by the antenna during the entire stage + * duration. + */ +#define SL_ANTENNA_STAGE_DURATION_SEC 20U + +/** + * \brief Deployment transition duration time in seconds. + * + * Between each stage there is a transition time for switching the + * gpio state for the required one. + */ +#define SL_ANTENNA_TRANSITION_DURATION_SEC 10U +#define SL_ANTENNA_HALF_TRANSITION_DURATION_SEC (SL_ANTENNA_TRANSITION_DURATION_SEC >> 1U) + +/* Expected gpio states for each stage */ +#define SL_ANTENNA_FIRST_STAGE_STATE GPIO_STATE_HIGH +#define SL_ANTENNA_SECOND_STAGE_STATE GPIO_STATE_LOW +#define SL_ANTENNA_THIRD_STAGE_STATE GPIO_STATE_HIGH + +/** + * \brief Antenna config. + */ +typedef gpio_config_t sl_antenna_config_t; + +/** + * \brief Driver initialization. + * + * \return The status/error code. + */ +int sl_antenna_init(void); + +/** + * \brief Executes sequential deployment. + * + * \return The status/error code. + */ +int sl_antenna_start_sequential_deploy(void); + +/** + * \brief Seconds delay. + * + * \param[in] s is the delay in seconds. + * + * \return None. + */ +void sl_antenna_delay_s(uint8_t s); + +/** + * \brief Milliseconds delay. + * + * \param[in] ms is the delay in milliseconds. + * + * \return None. + */ +void sl_antenna_delay_ms(uint16_t ms); + +#endif /* DRIVERS_SL_ANTENNA_SL_ANTENNA_H_ */ + +/** \} End of sl_antenna group */ diff --git a/firmware/drivers/sl_antenna/sl_antenna_delay.c b/firmware/drivers/sl_antenna/sl_antenna_delay.c new file mode 100644 index 00000000..7e1b6b50 --- /dev/null +++ b/firmware/drivers/sl_antenna/sl_antenna_delay.c @@ -0,0 +1,49 @@ +/* + * sl_antenna_delay.c + * + * Copyright The OBDH 2.0 Contributors. + * + * This file is part of OBDH 2.0. + * + * OBDH 2.0 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * OBDH 2.0 is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with OBDH 2.0. If not, see . + * + */ + +/** + * \brief SpaceLab Antenna Driver delay implementation. + * + * \author Carlos Augusto Porto Freitas + * + * \version 0.10.9 + * + * \date 2024/03/06 + * + * \addtogroup sl_antenna + * \{ + */ + +#include "FreeRTOS.h" +#include "task.h" + +void sl_antenna_delay_s(uint8_t s) +{ + vTaskDelay(pdMS_TO_TICKS(1000U*s)); +} + +void sl_antenna_delay_ms(uint16_t ms) +{ + vTaskDelay(pdMS_TO_TICKS(ms)); +} + +/** \} End of sl_antenna group */ From b660a1b46da65350863bb608a976bdaa3b3db12f Mon Sep 17 00:00:00 2001 From: Carlos Augusto Porto Freitas Date: Fri, 8 Mar 2024 14:55:11 -0300 Subject: [PATCH 2/5] firmware: devices: antenna: Updating the antenna device to enable sl_antenna driver. --- firmware/config/config.h | 1 + firmware/devices/antenna/antenna.c | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/firmware/config/config.h b/firmware/config/config.h index 3dbe1018..ca8d117b 100644 --- a/firmware/config/config.h +++ b/firmware/config/config.h @@ -69,6 +69,7 @@ /* Drivers */ #define CONFIG_DRV_ISIS_ANTENNA_ENABLED 1 +#define CONFIG_DRV_SL_ANTENNA_ENABLED 0 /* Debug and log messages */ #define CONFIG_DRIVERS_DEBUG_ENABLED 0 diff --git a/firmware/devices/antenna/antenna.c b/firmware/devices/antenna/antenna.c index 618da4d5..97d8f942 100644 --- a/firmware/devices/antenna/antenna.c +++ b/firmware/devices/antenna/antenna.c @@ -39,6 +39,7 @@ #include #include +#include #include "antenna.h" @@ -108,6 +109,19 @@ int antenna_init(void) sys_log_print_event_from_module(SYS_LOG_ERROR, ANTENNA_MODULE_NAME, "Error during the initialization!"); sys_log_new_line(); } + #elif defined (CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) && (CONFIG_DRV_ISIS_ANTENNA_ENABLED == 0) + sys_log_print_event_from_module(SYS_LOG_INFO, ANTENNA_MODULE_NAME, "Initializing the antenna..."); + sys_log_new_line(); + + if (sl_antenna_init() == 0) + { + err = 0; + } + else + { + sys_log_print_event_from_module(SYS_LOG_ERROR, ANTENNA_MODULE_NAME, "Error during the initialization!"); + sys_log_new_line(); + } #else antenna_is_open = true; @@ -239,7 +253,17 @@ int antenna_deploy(uint32_t timeout_ms) err++; } +#elif defined (CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) && (CONFIG_DRV_ISIS_ANTENNA_ENABLED == 0) + sys_log_print_event_from_module(SYS_LOG_INFO, ANTENNA_MODULE_NAME, "Trying a sequential deploy..."); + sys_log_new_line(); + + if (sl_antenna_start_sequential_deploy() != 0) + { + sys_log_print_event_from_module(SYS_LOG_ERROR, ANTENNA_MODULE_NAME, "Error during the sequential deployment!"); + sys_log_new_line(); + err = -1; + } #else sys_log_print_event_from_module(SYS_LOG_ERROR, ANTENNA_MODULE_NAME, "No driver to read the status!"); sys_log_new_line(); From 1bbf7adb93f32c752d93ab599e81ac18abfe3359 Mon Sep 17 00:00:00 2001 From: Carlos Augusto Porto Freitas Date: Fri, 15 Mar 2024 20:30:42 -0300 Subject: [PATCH 3/5] firmware: drivers: sl_antenna: Fixing MISRA-C 2012 violations and updating firmware version --- firmware/drivers/sl_antenna/sl_antenna.c | 10 ++++------ firmware/drivers/sl_antenna/sl_antenna.h | 6 +++--- firmware/drivers/sl_antenna/sl_antenna_delay.c | 6 ++++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/firmware/drivers/sl_antenna/sl_antenna.c b/firmware/drivers/sl_antenna/sl_antenna.c index 856b1486..e11cb103 100644 --- a/firmware/drivers/sl_antenna/sl_antenna.c +++ b/firmware/drivers/sl_antenna/sl_antenna.c @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with OBDH 2.0. If not, see . + * along with OBDH 2.0. If not, see . * */ @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.9 + * \version 0.10.13 * * \date 2024/03/06 * @@ -40,10 +40,9 @@ /* Antenna gpio pin */ #define SL_ANTENNA_DEPLOY_PIN GPIO_PIN_61 -static sl_antenna_config_t ant_config = {0}; - int sl_antenna_init(void) { + sl_antenna_config_t ant_config = {0}; int err = -1; ant_config.mode = GPIO_MODE_OUTPUT; @@ -62,7 +61,6 @@ int sl_antenna_init(void) int sl_antenna_start_sequential_deploy(void) { int err = -1; - int tmp = 0; if (gpio_set_state(SL_ANTENNA_DEPLOY_PIN, SL_ANTENNA_FIRST_STAGE_STATE) == 0) { @@ -89,7 +87,7 @@ int sl_antenna_start_sequential_deploy(void) } } - tmp = gpio_set_state(SL_ANTENNA_DEPLOY_PIN, GPIO_STATE_LOW); + (void)gpio_set_state(SL_ANTENNA_DEPLOY_PIN, GPIO_STATE_LOW); return err; } diff --git a/firmware/drivers/sl_antenna/sl_antenna.h b/firmware/drivers/sl_antenna/sl_antenna.h index 2d09a044..978dc485 100644 --- a/firmware/drivers/sl_antenna/sl_antenna.h +++ b/firmware/drivers/sl_antenna/sl_antenna.h @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with OBDH 2.0. If not, see . + * along with OBDH 2.0. If not, see . * */ @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.9 + * \version 0.10.13 * * \date 2024/03/06 * @@ -54,7 +54,7 @@ * \brief Deployment transition duration time in seconds. * * Between each stage there is a transition time for switching the - * gpio state for the required one. + * gpio state to the required one. */ #define SL_ANTENNA_TRANSITION_DURATION_SEC 10U #define SL_ANTENNA_HALF_TRANSITION_DURATION_SEC (SL_ANTENNA_TRANSITION_DURATION_SEC >> 1U) diff --git a/firmware/drivers/sl_antenna/sl_antenna_delay.c b/firmware/drivers/sl_antenna/sl_antenna_delay.c index 7e1b6b50..65118d73 100644 --- a/firmware/drivers/sl_antenna/sl_antenna_delay.c +++ b/firmware/drivers/sl_antenna/sl_antenna_delay.c @@ -16,7 +16,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with OBDH 2.0. If not, see . + * along with OBDH 2.0. If not, see . * */ @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.9 + * \version 0.10.13 * * \date 2024/03/06 * @@ -36,6 +36,8 @@ #include "FreeRTOS.h" #include "task.h" +#include "sl_antenna.h" + void sl_antenna_delay_s(uint8_t s) { vTaskDelay(pdMS_TO_TICKS(1000U*s)); From b5257817979618090b33a1e30e3c27761f596836 Mon Sep 17 00:00:00 2001 From: Carlos Augusto Porto Freitas Date: Fri, 15 Mar 2024 20:39:17 -0300 Subject: [PATCH 4/5] firmware: devices: antenna: Fixing MISRA-C violations. --- firmware/devices/antenna/antenna.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/firmware/devices/antenna/antenna.c b/firmware/devices/antenna/antenna.c index 97d8f942..f43a8fac 100644 --- a/firmware/devices/antenna/antenna.c +++ b/firmware/devices/antenna/antenna.c @@ -25,7 +25,7 @@ * * \author Gabriel Mariano Marcelino * - * \version 0.10.7 + * \version 0.10.13 * * \date 2019/11/01 * @@ -109,7 +109,7 @@ int antenna_init(void) sys_log_print_event_from_module(SYS_LOG_ERROR, ANTENNA_MODULE_NAME, "Error during the initialization!"); sys_log_new_line(); } - #elif defined (CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) && (CONFIG_DRV_ISIS_ANTENNA_ENABLED == 0) + #elif defined(CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) sys_log_print_event_from_module(SYS_LOG_INFO, ANTENNA_MODULE_NAME, "Initializing the antenna..."); sys_log_new_line(); @@ -253,7 +253,7 @@ int antenna_deploy(uint32_t timeout_ms) err++; } -#elif defined (CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) && (CONFIG_DRV_ISIS_ANTENNA_ENABLED == 0) +#elif defined(CONFIG_DRV_SL_ANTENNA_ENABLED) && (CONFIG_DRV_SL_ANTENNA_ENABLED == 1) sys_log_print_event_from_module(SYS_LOG_INFO, ANTENNA_MODULE_NAME, "Trying a sequential deploy..."); sys_log_new_line(); From cd2e2eba524e5c374418ec2d0f75ae13ca5076b7 Mon Sep 17 00:00:00 2001 From: Gabriel Mariano Marcelino Date: Tue, 14 May 2024 01:26:25 -0300 Subject: [PATCH 5/5] firmware: Updating the version of the modified files # --- firmware/config/config.h | 2 +- firmware/devices/antenna/antenna.c | 3 ++- firmware/drivers/sl_antenna/sl_antenna.c | 2 +- firmware/drivers/sl_antenna/sl_antenna.h | 2 +- firmware/drivers/sl_antenna/sl_antenna_delay.c | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/firmware/config/config.h b/firmware/config/config.h index ca8d117b..66fe388d 100644 --- a/firmware/config/config.h +++ b/firmware/config/config.h @@ -25,7 +25,7 @@ * * \author Gabriel Mariano Marcelino * - * \version 0.10.12 + * \version 0.10.15 * * \date 2019/10/26 * diff --git a/firmware/devices/antenna/antenna.c b/firmware/devices/antenna/antenna.c index f43a8fac..e35397f1 100644 --- a/firmware/devices/antenna/antenna.c +++ b/firmware/devices/antenna/antenna.c @@ -24,8 +24,9 @@ * \brief Antenna device implementation. * * \author Gabriel Mariano Marcelino + * \author Carlos Augusto Porto Freitas * - * \version 0.10.13 + * \version 0.10.14 * * \date 2019/11/01 * diff --git a/firmware/drivers/sl_antenna/sl_antenna.c b/firmware/drivers/sl_antenna/sl_antenna.c index e11cb103..c1aa5255 100644 --- a/firmware/drivers/sl_antenna/sl_antenna.c +++ b/firmware/drivers/sl_antenna/sl_antenna.c @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.13 + * \version 0.10.15 * * \date 2024/03/06 * diff --git a/firmware/drivers/sl_antenna/sl_antenna.h b/firmware/drivers/sl_antenna/sl_antenna.h index 978dc485..e08d154e 100644 --- a/firmware/drivers/sl_antenna/sl_antenna.h +++ b/firmware/drivers/sl_antenna/sl_antenna.h @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.13 + * \version 0.10.15 * * \date 2024/03/06 * diff --git a/firmware/drivers/sl_antenna/sl_antenna_delay.c b/firmware/drivers/sl_antenna/sl_antenna_delay.c index 65118d73..5b3a0693 100644 --- a/firmware/drivers/sl_antenna/sl_antenna_delay.c +++ b/firmware/drivers/sl_antenna/sl_antenna_delay.c @@ -25,7 +25,7 @@ * * \author Carlos Augusto Porto Freitas * - * \version 0.10.13 + * \version 0.10.15 * * \date 2024/03/06 *