From 1e43c4640c09390acc0d512979cc690d5675ed9a Mon Sep 17 00:00:00 2001 From: AsiiaPine Date: Thu, 5 Sep 2024 14:40:07 +0300 Subject: [PATCH] fix gpio --- Src/applications/cyphal/README.md | 7 ++++--- Src/common/application.cpp | 7 +++---- Src/periphery/gpio/gpio.hpp | 6 ++---- Src/platform/stm32g0b1/gpio.cpp | 30 ++++++++++++------------------ Src/platform/ubuntu/gpio.cpp | 12 ++++++------ 5 files changed, 27 insertions(+), 35 deletions(-) diff --git a/Src/applications/cyphal/README.md b/Src/applications/cyphal/README.md index 226813f..7fc2481 100644 --- a/Src/applications/cyphal/README.md +++ b/Src/applications/cyphal/README.md @@ -18,9 +18,10 @@ The node has the following registers: | № | Register name | Description | | -- | ----------------------- | ----------- | | 1 | uavcan.node.id | Defines a node-ID. Allowed values [0,127]. | -| 2 | system.name | Defines custom node name. If empty, the node will use the default name. | -| 3 | system.protocol | Auto, Cyphal/CAN or DroneCAN | -| 4 | uavcan.node.description | User/integrator-defined, human-readable description of this specific node. | +| 2 | system.can_terminator | Bitmask which switch can terminators (0 - both off, 1 - enables second, 2 - enables first, 3 - enables both). Works only for v3. | +| 3 | system.name | Defines custom node name. If empty, the node will use the default name. | +| 4 | system.protocol | Auto, Cyphal/CAN or DroneCAN | +| 5 | uavcan.node.description | User/integrator-defined, human-readable description of this specific node. | > This docs was automatically generated. Do not edit it manually. diff --git a/Src/common/application.cpp b/Src/common/application.cpp index 80066fd..b91c69c 100644 --- a/Src/common/application.cpp +++ b/Src/common/application.cpp @@ -25,10 +25,9 @@ static int8_t init_board_periphery() { auto libparams_strings_amount = NUM_OF_STR_PARAMS; paramsInit(libparams_integers_amount, libparams_strings_amount, -1, 1); paramsLoad(); - #if defined(CAN1_TERMINATOR) && defined(CAN2_TERMINATOR) + +#if defined(CAN1_TERMINATOR_Pin) && defined(CAN2_TERMINATOR_Pin) auto teminator_parm = paramsGetIntegerValue(IntParamsIndexes::PARAM_SYSTEM_CAN_TEMINATOR); - GPIOPeriphery::set(GPIOPin::TERMINATOR1); - GPIOPeriphery::set(GPIOPin::TERMINATOR2); std::bitset<2> terminator_mask(teminator_parm); for (uint8_t i = 0; i < 2; i++) { @@ -38,7 +37,7 @@ static int8_t init_board_periphery() { GPIOPeriphery::reset(GPIOPin(i)); } } - #endif +#endif return 0; } diff --git a/Src/periphery/gpio/gpio.hpp b/Src/periphery/gpio/gpio.hpp index bc81915..d11ec70 100644 --- a/Src/periphery/gpio/gpio.hpp +++ b/Src/periphery/gpio/gpio.hpp @@ -7,20 +7,18 @@ #define SRC_PERIPHERY_GPIO_HPP_ #include -#include "logger.hpp" #ifdef __cplusplus extern "C" { #endif enum class GPIOPin { - TERMINATOR1, - TERMINATOR2, + CAN_TERMINATOR1, + CAN_TERMINATOR2, GPIO_AMOUNT, }; class GPIOPeriphery { - static Logger _logger; public: static void set(const GPIOPin gpio_pin); static bool get(const GPIOPin gpio_pin); diff --git a/Src/platform/stm32g0b1/gpio.cpp b/Src/platform/stm32g0b1/gpio.cpp index 9accebf..a8fa7fd 100644 --- a/Src/platform/stm32g0b1/gpio.cpp +++ b/Src/platform/stm32g0b1/gpio.cpp @@ -10,14 +10,12 @@ void GPIOPeriphery::set(GPIOPin gpio_pin) { switch (gpio_pin) { - case GPIOPin::TERMINATOR1: - HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, - GPIO_PIN_SET); + case GPIOPin::CAN_TERMINATOR1: + HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_SET); break; - case GPIOPin::TERMINATOR2: - HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, - CAN2_TERMINATOR_Pin, GPIO_PIN_SET); + case GPIOPin::CAN_TERMINATOR2: + HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_SET); break; default: break; @@ -26,10 +24,10 @@ void GPIOPeriphery::set(GPIOPin gpio_pin) { bool GPIOPeriphery::get(GPIOPin gpio_pin) { switch (gpio_pin) { - case GPIOPin::TERMINATOR1: + case GPIOPin::CAN_TERMINATOR1: return HAL_GPIO_ReadPin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin); - case GPIOPin::TERMINATOR2: + case GPIOPin::CAN_TERMINATOR2: return HAL_GPIO_ReadPin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin); default: @@ -38,21 +36,17 @@ bool GPIOPeriphery::get(GPIOPin gpio_pin) { } void GPIOPeriphery::reset() { - HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, - GPIO_PIN_RESET); - HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, - GPIO_PIN_RESET); + HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_RESET); } void GPIOPeriphery::reset(GPIOPin gpio_pin) { switch (gpio_pin) { - case GPIOPin::TERMINATOR1: - HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, - GPIO_PIN_RESET); + case GPIOPin::CAN_TERMINATOR1: + HAL_GPIO_WritePin(CAN1_TERMINATOR_GPIO_Port, CAN1_TERMINATOR_Pin, GPIO_PIN_RESET); break; - case GPIOPin::TERMINATOR2: - HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, - GPIO_PIN_RESET); + case GPIOPin::CAN_TERMINATOR2: + HAL_GPIO_WritePin(CAN2_TERMINATOR_GPIO_Port, CAN2_TERMINATOR_Pin, GPIO_PIN_RESET); break; default: break; diff --git a/Src/platform/ubuntu/gpio.cpp b/Src/platform/ubuntu/gpio.cpp index 027c87e..d07bbf5 100644 --- a/Src/platform/ubuntu/gpio.cpp +++ b/Src/platform/ubuntu/gpio.cpp @@ -6,22 +6,22 @@ #include "periphery/gpio/gpio.hpp" +#include #include "main.h" -Logger GPIOPeriphery::_logger = Logger("GPIO"); -bool gpio[(int)GPIOPin::GPIO_AMOUNT]; +static std::vector gpio((int)GPIOPin::GPIO_AMOUNT, false); void GPIOPeriphery::set(GPIOPin gpio_pin) { - gpio[(int)gpio_pin] = 1; + gpio[(int)gpio_pin] = true; } bool GPIOPeriphery::get(GPIOPin gpio_pin) { return gpio[(int)gpio_pin]; } void GPIOPeriphery::reset() { - for (uint8_t i = 0; i < (int)GPIOPin::GPIO_AMOUNT; i++ ) { - gpio[i] = 0; + for (auto gpio_val : gpio) { + gpio_val = false; } } void GPIOPeriphery::reset(GPIOPin gpio_pin) { - gpio[(int)gpio_pin] = 0; + gpio[(int)gpio_pin] = false; }